@wordpress/block-editor 10.3.0 → 10.5.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 (460) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +0 -1
  3. package/build/components/alignment-control/ui.js +1 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/constants.js +1 -1
  6. package/build/components/block-alignment-control/constants.js.map +1 -1
  7. package/build/components/block-alignment-matrix-control/index.js +1 -1
  8. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  9. package/build/components/block-compare/index.js +1 -3
  10. package/build/components/block-compare/index.js.map +1 -1
  11. package/build/components/block-edit/index.js +4 -2
  12. package/build/components/block-edit/index.js.map +1 -1
  13. package/build/components/block-list/block.js +3 -1
  14. package/build/components/block-list/block.js.map +1 -1
  15. package/build/components/block-lock/menu-item.js +1 -1
  16. package/build/components/block-lock/menu-item.js.map +1 -1
  17. package/build/components/block-lock/modal.js +16 -9
  18. package/build/components/block-lock/modal.js.map +1 -1
  19. package/build/components/block-popover/inbetween.js +2 -1
  20. package/build/components/block-popover/inbetween.js.map +1 -1
  21. package/build/components/block-popover/index.js +2 -1
  22. package/build/components/block-popover/index.js.map +1 -1
  23. package/build/components/block-preview/index.js +2 -4
  24. package/build/components/block-preview/index.js.map +1 -1
  25. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -8
  26. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  27. package/build/components/block-styles/utils.js +3 -3
  28. package/build/components/block-styles/utils.js.map +1 -1
  29. package/build/components/block-switcher/index.js +21 -12
  30. package/build/components/block-switcher/index.js.map +1 -1
  31. package/build/components/block-switcher/preview-block-popover.js +1 -1
  32. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  33. package/build/components/block-tools/insertion-point.js +12 -2
  34. package/build/components/block-tools/insertion-point.js.map +1 -1
  35. package/build/components/block-tools/selected-block-popover.js +27 -4
  36. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  37. package/build/components/block-vertical-alignment-control/ui.js +1 -1
  38. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  39. package/build/components/border-radius-control/all-input-control.js +2 -1
  40. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  41. package/build/components/border-radius-control/index.js +2 -1
  42. package/build/components/border-radius-control/index.js.map +1 -1
  43. package/build/components/border-radius-control/input-controls.js +2 -1
  44. package/build/components/border-radius-control/input-controls.js.map +1 -1
  45. package/build/components/colors/with-colors.js +4 -3
  46. package/build/components/colors/with-colors.js.map +1 -1
  47. package/build/components/duotone-control/index.js +1 -1
  48. package/build/components/duotone-control/index.js.map +1 -1
  49. package/build/components/font-sizes/fluid-utils.js +24 -40
  50. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  51. package/build/components/font-sizes/with-font-sizes.js +8 -6
  52. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  53. package/build/components/iframe/index.js +1 -1
  54. package/build/components/iframe/index.js.map +1 -1
  55. package/build/components/image-editor/constants.js +1 -1
  56. package/build/components/image-editor/constants.js.map +1 -1
  57. package/build/components/index.js +9 -0
  58. package/build/components/index.js.map +1 -1
  59. package/build/components/inner-blocks/index.js +10 -4
  60. package/build/components/inner-blocks/index.js.map +1 -1
  61. package/build/components/inserter/hooks/use-insertion-point.js +2 -7
  62. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  63. package/build/components/inserter/reusable-blocks-tab.js +4 -1
  64. package/build/components/inserter/reusable-blocks-tab.js.map +1 -1
  65. package/build/components/inserter/search-items.js +23 -2
  66. package/build/components/inserter/search-items.js.map +1 -1
  67. package/build/components/line-height-control/index.js +2 -1
  68. package/build/components/line-height-control/index.js.map +1 -1
  69. package/build/components/link-control/index.js +18 -34
  70. package/build/components/link-control/index.js.map +1 -1
  71. package/build/components/link-control/search-input.js +1 -1
  72. package/build/components/link-control/search-input.js.map +1 -1
  73. package/build/components/link-control/use-internal-input-value.js +26 -0
  74. package/build/components/link-control/use-internal-input-value.js.map +1 -0
  75. package/build/components/list-view/block.js +5 -3
  76. package/build/components/list-view/block.js.map +1 -1
  77. package/build/components/list-view/branch.js +9 -3
  78. package/build/components/list-view/branch.js.map +1 -1
  79. package/build/components/list-view/drop-indicator.js +2 -1
  80. package/build/components/list-view/drop-indicator.js.map +1 -1
  81. package/build/components/media-replace-flow/index.js +1 -1
  82. package/build/components/media-replace-flow/index.js.map +1 -1
  83. package/build/components/off-canvas-editor/block-contents.js +100 -0
  84. package/build/components/off-canvas-editor/block-contents.js.map +1 -0
  85. package/build/components/off-canvas-editor/block-select-button.js +119 -0
  86. package/build/components/off-canvas-editor/block-select-button.js.map +1 -0
  87. package/build/components/off-canvas-editor/block.js +292 -0
  88. package/build/components/off-canvas-editor/block.js.map +1 -0
  89. package/build/components/off-canvas-editor/branch.js +181 -0
  90. package/build/components/off-canvas-editor/branch.js.map +1 -0
  91. package/build/components/off-canvas-editor/context.js +19 -0
  92. package/build/components/off-canvas-editor/context.js.map +1 -0
  93. package/build/components/off-canvas-editor/drop-indicator.js +118 -0
  94. package/build/components/off-canvas-editor/drop-indicator.js.map +1 -0
  95. package/build/components/off-canvas-editor/expander.js +41 -0
  96. package/build/components/off-canvas-editor/expander.js.map +1 -0
  97. package/build/components/off-canvas-editor/index.js +204 -0
  98. package/build/components/off-canvas-editor/index.js.map +1 -0
  99. package/build/components/off-canvas-editor/leaf.js +60 -0
  100. package/build/components/off-canvas-editor/leaf.js.map +1 -0
  101. package/build/components/off-canvas-editor/use-block-selection.js +139 -0
  102. package/build/components/off-canvas-editor/use-block-selection.js.map +1 -0
  103. package/build/components/off-canvas-editor/use-list-view-client-ids.js +33 -0
  104. package/build/components/off-canvas-editor/use-list-view-client-ids.js.map +1 -0
  105. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +235 -0
  106. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -0
  107. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js +60 -0
  108. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +1 -0
  109. package/build/components/off-canvas-editor/utils.js +60 -0
  110. package/build/components/off-canvas-editor/utils.js.map +1 -0
  111. package/build/components/rich-text/format-toolbar/index.js +1 -1
  112. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  113. package/build/components/rich-text/format-toolbar-container.js +1 -1
  114. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  115. package/build/components/rich-text/use-paste-handler.js +1 -1
  116. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  117. package/build/components/spacing-sizes-control/all-input-control.js +6 -2
  118. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -1
  119. package/build/components/spacing-sizes-control/axial-input-controls.js +6 -2
  120. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -1
  121. package/build/components/spacing-sizes-control/index.js +6 -2
  122. package/build/components/spacing-sizes-control/index.js.map +1 -1
  123. package/build/components/spacing-sizes-control/input-controls.js +6 -2
  124. package/build/components/spacing-sizes-control/input-controls.js.map +1 -1
  125. package/build/components/spacing-sizes-control/spacing-input-control.js +12 -5
  126. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  127. package/build/components/url-input/index.js +1 -1
  128. package/build/components/url-input/index.js.map +1 -1
  129. package/build/components/url-popover/index.js +31 -2
  130. package/build/components/url-popover/index.js.map +1 -1
  131. package/build/components/use-setting/index.js +1 -1
  132. package/build/components/use-setting/index.js.map +1 -1
  133. package/build/hooks/border.js +1 -0
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color-panel.js +17 -1
  136. package/build/hooks/color-panel.js.map +1 -1
  137. package/build/hooks/color.js +1 -1
  138. package/build/hooks/color.js.map +1 -1
  139. package/build/hooks/content-lock-ui.js +13 -6
  140. package/build/hooks/content-lock-ui.js.map +1 -1
  141. package/build/hooks/dimensions.js +72 -13
  142. package/build/hooks/dimensions.js.map +1 -1
  143. package/build/hooks/font-size.js +1 -0
  144. package/build/hooks/font-size.js.map +1 -1
  145. package/build/hooks/layout.js +5 -4
  146. package/build/hooks/layout.js.map +1 -1
  147. package/build/hooks/margin.js +26 -18
  148. package/build/hooks/margin.js.map +1 -1
  149. package/build/hooks/min-height.js +145 -0
  150. package/build/hooks/min-height.js.map +1 -0
  151. package/build/hooks/padding.js +22 -13
  152. package/build/hooks/padding.js.map +1 -1
  153. package/build/hooks/style.js +3 -2
  154. package/build/hooks/style.js.map +1 -1
  155. package/build/hooks/utils.js +7 -6
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/layouts/constrained.js +0 -1
  158. package/build/layouts/constrained.js.map +1 -1
  159. package/build/layouts/flex.js +23 -22
  160. package/build/layouts/flex.js.map +1 -1
  161. package/build/store/actions.js +30 -0
  162. package/build/store/actions.js.map +1 -1
  163. package/build/store/array.js +1 -7
  164. package/build/store/array.js.map +1 -1
  165. package/build/store/reducer.js +46 -14
  166. package/build/store/reducer.js.map +1 -1
  167. package/build/store/selectors.js +62 -31
  168. package/build/store/selectors.js.map +1 -1
  169. package/build-module/components/alignment-control/ui.js +1 -1
  170. package/build-module/components/alignment-control/ui.js.map +1 -1
  171. package/build-module/components/block-alignment-control/constants.js +1 -1
  172. package/build-module/components/block-alignment-control/constants.js.map +1 -1
  173. package/build-module/components/block-alignment-matrix-control/index.js +1 -1
  174. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  175. package/build-module/components/block-compare/index.js +2 -3
  176. package/build-module/components/block-compare/index.js.map +1 -1
  177. package/build-module/components/block-edit/index.js +4 -2
  178. package/build-module/components/block-edit/index.js.map +1 -1
  179. package/build-module/components/block-list/block.js +3 -1
  180. package/build-module/components/block-list/block.js.map +1 -1
  181. package/build-module/components/block-lock/menu-item.js +2 -2
  182. package/build-module/components/block-lock/menu-item.js.map +1 -1
  183. package/build-module/components/block-lock/modal.js +17 -10
  184. package/build-module/components/block-lock/modal.js.map +1 -1
  185. package/build-module/components/block-popover/inbetween.js +2 -1
  186. package/build-module/components/block-popover/inbetween.js.map +1 -1
  187. package/build-module/components/block-popover/index.js +2 -1
  188. package/build-module/components/block-popover/index.js.map +1 -1
  189. package/build-module/components/block-preview/index.js +2 -3
  190. package/build-module/components/block-preview/index.js.map +1 -1
  191. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -7
  192. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  193. package/build-module/components/block-styles/utils.js +3 -3
  194. package/build-module/components/block-styles/utils.js.map +1 -1
  195. package/build-module/components/block-switcher/index.js +21 -11
  196. package/build-module/components/block-switcher/index.js.map +1 -1
  197. package/build-module/components/block-switcher/preview-block-popover.js +1 -1
  198. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  199. package/build-module/components/block-tools/insertion-point.js +12 -2
  200. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  201. package/build-module/components/block-tools/selected-block-popover.js +27 -5
  202. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  203. package/build-module/components/block-vertical-alignment-control/ui.js +1 -1
  204. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  205. package/build-module/components/border-radius-control/all-input-control.js +2 -1
  206. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  207. package/build-module/components/border-radius-control/index.js +2 -1
  208. package/build-module/components/border-radius-control/index.js.map +1 -1
  209. package/build-module/components/border-radius-control/input-controls.js +2 -1
  210. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  211. package/build-module/components/colors/with-colors.js +5 -4
  212. package/build-module/components/colors/with-colors.js.map +1 -1
  213. package/build-module/components/duotone-control/index.js +1 -1
  214. package/build-module/components/duotone-control/index.js.map +1 -1
  215. package/build-module/components/font-sizes/fluid-utils.js +24 -40
  216. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  217. package/build-module/components/font-sizes/with-font-sizes.js +9 -7
  218. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  219. package/build-module/components/iframe/index.js +1 -1
  220. package/build-module/components/iframe/index.js.map +1 -1
  221. package/build-module/components/image-editor/constants.js +1 -1
  222. package/build-module/components/image-editor/constants.js.map +1 -1
  223. package/build-module/components/index.js +1 -0
  224. package/build-module/components/index.js.map +1 -1
  225. package/build-module/components/inner-blocks/index.js +10 -4
  226. package/build-module/components/inner-blocks/index.js.map +1 -1
  227. package/build-module/components/inserter/hooks/use-insertion-point.js +2 -6
  228. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  229. package/build-module/components/inserter/reusable-blocks-tab.js +3 -1
  230. package/build-module/components/inserter/reusable-blocks-tab.js.map +1 -1
  231. package/build-module/components/inserter/search-items.js +23 -3
  232. package/build-module/components/inserter/search-items.js.map +1 -1
  233. package/build-module/components/line-height-control/index.js +2 -1
  234. package/build-module/components/line-height-control/index.js.map +1 -1
  235. package/build-module/components/link-control/index.js +17 -34
  236. package/build-module/components/link-control/index.js.map +1 -1
  237. package/build-module/components/link-control/search-input.js +1 -1
  238. package/build-module/components/link-control/search-input.js.map +1 -1
  239. package/build-module/components/link-control/use-internal-input-value.js +18 -0
  240. package/build-module/components/link-control/use-internal-input-value.js.map +1 -0
  241. package/build-module/components/list-view/block.js +5 -3
  242. package/build-module/components/list-view/block.js.map +1 -1
  243. package/build-module/components/list-view/branch.js +9 -3
  244. package/build-module/components/list-view/branch.js.map +1 -1
  245. package/build-module/components/list-view/drop-indicator.js +2 -1
  246. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  247. package/build-module/components/media-replace-flow/index.js +1 -1
  248. package/build-module/components/media-replace-flow/index.js.map +1 -1
  249. package/build-module/components/off-canvas-editor/block-contents.js +85 -0
  250. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -0
  251. package/build-module/components/off-canvas-editor/block-select-button.js +101 -0
  252. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -0
  253. package/build-module/components/off-canvas-editor/block.js +268 -0
  254. package/build-module/components/off-canvas-editor/block.js.map +1 -0
  255. package/build-module/components/off-canvas-editor/branch.js +165 -0
  256. package/build-module/components/off-canvas-editor/branch.js.map +1 -0
  257. package/build-module/components/off-canvas-editor/context.js +7 -0
  258. package/build-module/components/off-canvas-editor/context.js.map +1 -0
  259. package/build-module/components/off-canvas-editor/drop-indicator.js +111 -0
  260. package/build-module/components/off-canvas-editor/drop-indicator.js.map +1 -0
  261. package/build-module/components/off-canvas-editor/expander.js +32 -0
  262. package/build-module/components/off-canvas-editor/expander.js.map +1 -0
  263. package/build-module/components/off-canvas-editor/index.js +181 -0
  264. package/build-module/components/off-canvas-editor/index.js.map +1 -0
  265. package/build-module/components/off-canvas-editor/leaf.js +45 -0
  266. package/build-module/components/off-canvas-editor/leaf.js.map +1 -0
  267. package/build-module/components/off-canvas-editor/use-block-selection.js +124 -0
  268. package/build-module/components/off-canvas-editor/use-block-selection.js.map +1 -0
  269. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js +24 -0
  270. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js.map +1 -0
  271. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +220 -0
  272. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -0
  273. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js +50 -0
  274. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +1 -0
  275. package/build-module/components/off-canvas-editor/utils.js +44 -0
  276. package/build-module/components/off-canvas-editor/utils.js.map +1 -0
  277. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  278. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  279. package/build-module/components/rich-text/format-toolbar-container.js +1 -1
  280. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  281. package/build-module/components/rich-text/use-paste-handler.js +1 -1
  282. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  283. package/build-module/components/spacing-sizes-control/all-input-control.js +6 -2
  284. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -1
  285. package/build-module/components/spacing-sizes-control/axial-input-controls.js +6 -2
  286. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -1
  287. package/build-module/components/spacing-sizes-control/index.js +6 -2
  288. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  289. package/build-module/components/spacing-sizes-control/input-controls.js +6 -2
  290. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/spacing-input-control.js +12 -5
  292. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  293. package/build-module/components/url-input/index.js +1 -1
  294. package/build-module/components/url-input/index.js.map +1 -1
  295. package/build-module/components/url-popover/index.js +30 -3
  296. package/build-module/components/url-popover/index.js.map +1 -1
  297. package/build-module/components/use-setting/index.js +1 -1
  298. package/build-module/components/use-setting/index.js.map +1 -1
  299. package/build-module/hooks/border.js +1 -0
  300. package/build-module/hooks/border.js.map +1 -1
  301. package/build-module/hooks/color-panel.js +17 -1
  302. package/build-module/hooks/color-panel.js.map +1 -1
  303. package/build-module/hooks/color.js +1 -1
  304. package/build-module/hooks/color.js.map +1 -1
  305. package/build-module/hooks/content-lock-ui.js +15 -8
  306. package/build-module/hooks/content-lock-ui.js.map +1 -1
  307. package/build-module/hooks/dimensions.js +67 -12
  308. package/build-module/hooks/dimensions.js.map +1 -1
  309. package/build-module/hooks/font-size.js +1 -0
  310. package/build-module/hooks/font-size.js.map +1 -1
  311. package/build-module/hooks/layout.js +6 -5
  312. package/build-module/hooks/layout.js.map +1 -1
  313. package/build-module/hooks/margin.js +27 -19
  314. package/build-module/hooks/margin.js.map +1 -1
  315. package/build-module/hooks/min-height.js +122 -0
  316. package/build-module/hooks/min-height.js.map +1 -0
  317. package/build-module/hooks/padding.js +23 -14
  318. package/build-module/hooks/padding.js.map +1 -1
  319. package/build-module/hooks/style.js +4 -3
  320. package/build-module/hooks/style.js.map +1 -1
  321. package/build-module/hooks/utils.js +7 -7
  322. package/build-module/hooks/utils.js.map +1 -1
  323. package/build-module/layouts/constrained.js +0 -1
  324. package/build-module/layouts/constrained.js.map +1 -1
  325. package/build-module/layouts/flex.js +24 -23
  326. package/build-module/layouts/flex.js.map +1 -1
  327. package/build-module/store/actions.js +26 -0
  328. package/build-module/store/actions.js.map +1 -1
  329. package/build-module/store/array.js +1 -6
  330. package/build-module/store/array.js.map +1 -1
  331. package/build-module/store/reducer.js +44 -14
  332. package/build-module/store/reducer.js.map +1 -1
  333. package/build-module/store/selectors.js +59 -31
  334. package/build-module/store/selectors.js.map +1 -1
  335. package/build-style/style-rtl.css +88 -88
  336. package/build-style/style.css +84 -84
  337. package/package.json +29 -28
  338. package/src/components/alignment-control/README.md +1 -1
  339. package/src/components/alignment-control/ui.js +1 -1
  340. package/src/components/block-alignment-control/constants.js +1 -1
  341. package/src/components/block-alignment-control/test/index.native.js +4 -4
  342. package/src/components/block-alignment-matrix-control/index.js +1 -1
  343. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +13 -11
  344. package/src/components/block-breadcrumb/test/index.js +1 -1
  345. package/src/components/block-compare/index.js +3 -2
  346. package/src/components/block-draggable/test/helpers.native.js +3 -3
  347. package/src/components/block-draggable/test/index.native.js +27 -27
  348. package/src/components/block-edit/index.js +2 -1
  349. package/src/components/block-list/block.js +2 -0
  350. package/src/components/block-list/style.scss +11 -6
  351. package/src/components/block-lock/menu-item.js +5 -2
  352. package/src/components/block-lock/modal.js +19 -36
  353. package/src/components/block-lock/style.scss +8 -17
  354. package/src/components/block-mover/stories/index.js +1 -1
  355. package/src/components/block-mover/style.scss +35 -1
  356. package/src/components/block-popover/inbetween.js +1 -0
  357. package/src/components/block-popover/index.js +1 -0
  358. package/src/components/block-popover/style.scss +1 -5
  359. package/src/components/block-preview/index.js +8 -3
  360. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -7
  361. package/src/components/block-styles/utils.js +3 -3
  362. package/src/components/block-switcher/index.js +21 -11
  363. package/src/components/block-switcher/preview-block-popover.js +1 -1
  364. package/src/components/block-tools/insertion-point.js +10 -1
  365. package/src/components/block-tools/selected-block-popover.js +80 -34
  366. package/src/components/block-tools/style.scss +15 -0
  367. package/src/components/block-variation-picker/README.md +1 -1
  368. package/src/components/block-vertical-alignment-control/ui.js +1 -1
  369. package/src/components/border-radius-control/all-input-control.js +1 -0
  370. package/src/components/border-radius-control/index.js +1 -0
  371. package/src/components/border-radius-control/input-controls.js +1 -0
  372. package/src/components/border-radius-control/style.scss +15 -24
  373. package/src/components/color-palette/test/__snapshots__/control.js.snap +85 -83
  374. package/src/components/color-palette/test/control.js +1 -1
  375. package/src/components/colors/with-colors.js +13 -23
  376. package/src/components/default-block-appender/style.scss +1 -0
  377. package/src/components/duotone-control/index.js +1 -1
  378. package/src/components/font-sizes/fluid-utils.js +37 -64
  379. package/src/components/font-sizes/test/fluid-utils.js +5 -5
  380. package/src/components/font-sizes/with-font-sizes.js +15 -13
  381. package/src/components/iframe/index.js +1 -1
  382. package/src/components/image-editor/constants.js +1 -1
  383. package/src/components/index.js +1 -0
  384. package/src/components/inner-blocks/index.js +11 -4
  385. package/src/components/inner-blocks/test/index.js +4 -0
  386. package/src/components/inserter/hooks/use-insertion-point.js +3 -11
  387. package/src/components/inserter/reusable-blocks-tab.js +4 -2
  388. package/src/components/inserter/search-items.js +23 -3
  389. package/src/components/inserter/style.scss +8 -7
  390. package/src/components/inserter/test/reusable-blocks-tab.js +14 -57
  391. package/src/components/inserter/test/search-items.js +6 -0
  392. package/src/components/inserter-list-item/style.scss +2 -0
  393. package/src/components/letter-spacing-control/README.md +55 -0
  394. package/src/components/line-height-control/index.js +1 -0
  395. package/src/components/link-control/README.md +3 -3
  396. package/src/components/link-control/index.js +23 -39
  397. package/src/components/link-control/search-input.js +1 -1
  398. package/src/components/link-control/test/index.js +272 -241
  399. package/src/components/link-control/use-internal-input-value.js +22 -0
  400. package/src/components/list-view/block.js +4 -3
  401. package/src/components/list-view/branch.js +11 -6
  402. package/src/components/list-view/drop-indicator.js +1 -0
  403. package/src/components/list-view/style.scss +1 -36
  404. package/src/components/media-replace-flow/index.js +1 -1
  405. package/src/components/media-replace-flow/test/index.js +69 -51
  406. package/src/components/off-canvas-editor/README.md +5 -0
  407. package/src/components/off-canvas-editor/block-contents.js +89 -0
  408. package/src/components/off-canvas-editor/block-select-button.js +113 -0
  409. package/src/components/off-canvas-editor/block.js +335 -0
  410. package/src/components/off-canvas-editor/branch.js +210 -0
  411. package/src/components/off-canvas-editor/context.js +8 -0
  412. package/src/components/off-canvas-editor/drop-indicator.js +126 -0
  413. package/src/components/off-canvas-editor/expander.js +26 -0
  414. package/src/components/off-canvas-editor/index.js +216 -0
  415. package/src/components/off-canvas-editor/leaf.js +48 -0
  416. package/src/components/off-canvas-editor/style.scss +397 -0
  417. package/src/components/off-canvas-editor/test/utils.js +50 -0
  418. package/src/components/off-canvas-editor/use-block-selection.js +169 -0
  419. package/src/components/off-canvas-editor/use-list-view-client-ids.js +29 -0
  420. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +260 -0
  421. package/src/components/off-canvas-editor/use-list-view-expand-selected-item.js +58 -0
  422. package/src/components/off-canvas-editor/utils.js +58 -0
  423. package/src/components/responsive-block-control/test/index.js +69 -92
  424. package/src/components/rich-text/format-toolbar/index.js +1 -1
  425. package/src/components/rich-text/format-toolbar-container.js +1 -1
  426. package/src/components/rich-text/use-paste-handler.js +1 -1
  427. package/src/components/spacing-sizes-control/all-input-control.js +4 -0
  428. package/src/components/spacing-sizes-control/axial-input-controls.js +4 -0
  429. package/src/components/spacing-sizes-control/index.js +4 -0
  430. package/src/components/spacing-sizes-control/input-controls.js +4 -0
  431. package/src/components/spacing-sizes-control/spacing-input-control.js +10 -1
  432. package/src/components/spacing-sizes-control/style.scss +1 -0
  433. package/src/components/url-input/index.js +1 -1
  434. package/src/components/url-popover/README.md +12 -3
  435. package/src/components/url-popover/index.js +33 -3
  436. package/src/components/use-setting/index.js +7 -1
  437. package/src/hooks/border.js +1 -0
  438. package/src/hooks/color-panel.js +13 -1
  439. package/src/hooks/color.js +2 -0
  440. package/src/hooks/content-lock-ui.js +46 -34
  441. package/src/hooks/dimensions.js +106 -19
  442. package/src/hooks/font-size.js +1 -0
  443. package/src/hooks/layout.js +8 -11
  444. package/src/hooks/margin.js +23 -17
  445. package/src/hooks/min-height.js +121 -0
  446. package/src/hooks/padding.js +23 -19
  447. package/src/hooks/style.js +10 -2
  448. package/src/hooks/test/align.js +96 -72
  449. package/src/hooks/test/style.js +4 -0
  450. package/src/hooks/test/use-typography-props.js +1 -1
  451. package/src/hooks/utils.js +5 -6
  452. package/src/layouts/constrained.js +0 -1
  453. package/src/layouts/flex.js +44 -39
  454. package/src/store/actions.js +26 -0
  455. package/src/store/array.js +1 -6
  456. package/src/store/reducer.js +50 -40
  457. package/src/store/selectors.js +43 -29
  458. package/src/store/test/actions.js +18 -0
  459. package/src/store/test/reducer.js +40 -0
  460. package/src/store/test/selectors.js +20 -1
@@ -0,0 +1,216 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ useMergeRefs,
6
+ __experimentalUseFixedWindowList as useFixedWindowList,
7
+ } from '@wordpress/compose';
8
+ import { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';
9
+ import { AsyncModeProvider, useSelect } from '@wordpress/data';
10
+ import {
11
+ useCallback,
12
+ useEffect,
13
+ useMemo,
14
+ useRef,
15
+ useReducer,
16
+ forwardRef,
17
+ } from '@wordpress/element';
18
+ import { __ } from '@wordpress/i18n';
19
+
20
+ /**
21
+ * Internal dependencies
22
+ */
23
+ import ListViewBranch from './branch';
24
+ import { ListViewContext } from './context';
25
+ import ListViewDropIndicator from './drop-indicator';
26
+ import useBlockSelection from './use-block-selection';
27
+ import useListViewClientIds from './use-list-view-client-ids';
28
+ import useListViewDropZone from './use-list-view-drop-zone';
29
+ import useListViewExpandSelectedItem from './use-list-view-expand-selected-item';
30
+ import { store as blockEditorStore } from '../../store';
31
+
32
+ const expanded = ( state, action ) => {
33
+ if ( Array.isArray( action.clientIds ) ) {
34
+ return {
35
+ ...state,
36
+ ...action.clientIds.reduce(
37
+ ( newState, id ) => ( {
38
+ ...newState,
39
+ [ id ]: action.type === 'expand',
40
+ } ),
41
+ {}
42
+ ),
43
+ };
44
+ }
45
+ return state;
46
+ };
47
+
48
+ export const BLOCK_LIST_ITEM_HEIGHT = 36;
49
+
50
+ /**
51
+ * Show a hierarchical list of blocks.
52
+ *
53
+ * @param {Object} props Components props.
54
+ * @param {string} props.id An HTML element id for the root element of ListView.
55
+ * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
56
+ * @param {boolean} props.showBlockMovers Flag to enable block movers
57
+ * @param {boolean} props.isExpanded Flag to determine whether nested levels are expanded by default.
58
+ * @param {boolean} props.selectBlockInCanvas Flag to determine whether the list view should be a block selection mechanism,.
59
+ * @param {Object} ref Forwarded ref
60
+ */
61
+ function __ExperimentalOffCanvasEditor(
62
+ {
63
+ id,
64
+ blocks,
65
+ showBlockMovers = false,
66
+ isExpanded = false,
67
+ selectBlockInCanvas = true,
68
+ },
69
+ ref
70
+ ) {
71
+ const { clientIdsTree, draggedClientIds, selectedClientIds } =
72
+ useListViewClientIds( blocks );
73
+
74
+ const { visibleBlockCount, shouldShowInnerBlocks } = useSelect(
75
+ ( select ) => {
76
+ const {
77
+ getGlobalBlockCount,
78
+ getClientIdsOfDescendants,
79
+ __unstableGetEditorMode,
80
+ } = select( blockEditorStore );
81
+ const draggedBlockCount =
82
+ draggedClientIds?.length > 0
83
+ ? getClientIdsOfDescendants( draggedClientIds ).length + 1
84
+ : 0;
85
+ return {
86
+ visibleBlockCount: getGlobalBlockCount() - draggedBlockCount,
87
+ shouldShowInnerBlocks: __unstableGetEditorMode() !== 'zoom-out',
88
+ };
89
+ },
90
+ [ draggedClientIds ]
91
+ );
92
+
93
+ const { updateBlockSelection } = useBlockSelection();
94
+
95
+ const [ expandedState, setExpandedState ] = useReducer( expanded, {} );
96
+
97
+ const { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone();
98
+ const elementRef = useRef();
99
+ const treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );
100
+
101
+ const isMounted = useRef( false );
102
+ const { setSelectedTreeId } = useListViewExpandSelectedItem( {
103
+ firstSelectedBlockClientId: selectedClientIds[ 0 ],
104
+ setExpandedState,
105
+ } );
106
+ const selectEditorBlock = useCallback(
107
+ ( event, clientId ) => {
108
+ updateBlockSelection( event, clientId );
109
+ setSelectedTreeId( clientId );
110
+ },
111
+ [ setSelectedTreeId, updateBlockSelection ]
112
+ );
113
+ useEffect( () => {
114
+ isMounted.current = true;
115
+ }, [] );
116
+
117
+ // List View renders a fixed number of items and relies on each having a fixed item height of 36px.
118
+ // If this value changes, we should also change the itemHeight value set in useFixedWindowList.
119
+ // See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.
120
+ const [ fixedListWindow ] = useFixedWindowList(
121
+ elementRef,
122
+ BLOCK_LIST_ITEM_HEIGHT,
123
+ visibleBlockCount,
124
+ {
125
+ useWindowing: true,
126
+ windowOverscan: 40,
127
+ }
128
+ );
129
+
130
+ const expand = useCallback(
131
+ ( clientId ) => {
132
+ if ( ! clientId ) {
133
+ return;
134
+ }
135
+ setExpandedState( { type: 'expand', clientIds: [ clientId ] } );
136
+ },
137
+ [ setExpandedState ]
138
+ );
139
+ const collapse = useCallback(
140
+ ( clientId ) => {
141
+ if ( ! clientId ) {
142
+ return;
143
+ }
144
+ setExpandedState( { type: 'collapse', clientIds: [ clientId ] } );
145
+ },
146
+ [ setExpandedState ]
147
+ );
148
+ const expandRow = useCallback(
149
+ ( row ) => {
150
+ expand( row?.dataset?.block );
151
+ },
152
+ [ expand ]
153
+ );
154
+ const collapseRow = useCallback(
155
+ ( row ) => {
156
+ collapse( row?.dataset?.block );
157
+ },
158
+ [ collapse ]
159
+ );
160
+ const focusRow = useCallback(
161
+ ( event, startRow, endRow ) => {
162
+ if ( event.shiftKey ) {
163
+ updateBlockSelection(
164
+ event,
165
+ startRow?.dataset?.block,
166
+ endRow?.dataset?.block
167
+ );
168
+ }
169
+ },
170
+ [ updateBlockSelection ]
171
+ );
172
+
173
+ const contextValue = useMemo(
174
+ () => ( {
175
+ isTreeGridMounted: isMounted.current,
176
+ draggedClientIds,
177
+ expandedState,
178
+ expand,
179
+ collapse,
180
+ } ),
181
+ [ isMounted.current, draggedClientIds, expandedState, expand, collapse ]
182
+ );
183
+
184
+ return (
185
+ <AsyncModeProvider value={ true }>
186
+ <ListViewDropIndicator
187
+ listViewRef={ elementRef }
188
+ blockDropTarget={ blockDropTarget }
189
+ />
190
+ <TreeGrid
191
+ id={ id }
192
+ className="block-editor-list-view-tree"
193
+ aria-label={ __( 'Block navigation structure' ) }
194
+ ref={ treeGridRef }
195
+ onCollapseRow={ collapseRow }
196
+ onExpandRow={ expandRow }
197
+ onFocusRow={ focusRow }
198
+ applicationAriaLabel={ __( 'Block navigation structure' ) }
199
+ >
200
+ <ListViewContext.Provider value={ contextValue }>
201
+ <ListViewBranch
202
+ blocks={ clientIdsTree }
203
+ selectBlock={ selectEditorBlock }
204
+ showBlockMovers={ showBlockMovers }
205
+ fixedListWindow={ fixedListWindow }
206
+ selectedClientIds={ selectedClientIds }
207
+ isExpanded={ isExpanded }
208
+ shouldShowInnerBlocks={ shouldShowInnerBlocks }
209
+ selectBlockInCanvas={ selectBlockInCanvas }
210
+ />
211
+ </ListViewContext.Provider>
212
+ </TreeGrid>
213
+ </AsyncModeProvider>
214
+ );
215
+ }
216
+ export default forwardRef( __ExperimentalOffCanvasEditor );
@@ -0,0 +1,48 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { animated } from '@react-spring/web';
5
+ import classnames from 'classnames';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { __experimentalTreeGridRow as TreeGridRow } from '@wordpress/components';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import useMovingAnimation from '../use-moving-animation';
16
+
17
+ const AnimatedTreeGridRow = animated( TreeGridRow );
18
+
19
+ export default function ListViewLeaf( {
20
+ isSelected,
21
+ position,
22
+ level,
23
+ rowCount,
24
+ children,
25
+ className,
26
+ path,
27
+ ...props
28
+ } ) {
29
+ const ref = useMovingAnimation( {
30
+ isSelected,
31
+ adjustScrolling: false,
32
+ enableAnimation: true,
33
+ triggerAnimationOnChange: path,
34
+ } );
35
+
36
+ return (
37
+ <AnimatedTreeGridRow
38
+ ref={ ref }
39
+ className={ classnames( 'block-editor-list-view-leaf', className ) }
40
+ level={ level }
41
+ positionInSet={ position }
42
+ setSize={ rowCount }
43
+ { ...props }
44
+ >
45
+ { children }
46
+ </AnimatedTreeGridRow>
47
+ );
48
+ }
@@ -0,0 +1,397 @@
1
+ .block-editor-list-view-tree {
2
+ width: 100%;
3
+ border-collapse: collapse;
4
+ padding: 0;
5
+ margin: 0;
6
+
7
+ // Move upwards when in modal.
8
+ .components-modal__content & {
9
+ margin: (-$grid-unit-15) (-$grid-unit-15 * 0.5) 0;
10
+ width: calc(100% + #{ $grid-unit-15 });
11
+ }
12
+ }
13
+
14
+ .block-editor-list-view-leaf {
15
+ // Use position relative for row animation.
16
+ position: relative;
17
+
18
+ // The background has to be applied to the td, not tr, or border-radius won't work.
19
+ &.is-selected td {
20
+ background: var(--wp-admin-theme-color);
21
+ }
22
+ &.is-selected .block-editor-list-view-block-contents,
23
+ &.is-selected .components-button.has-icon {
24
+ color: $white;
25
+ }
26
+ &.is-selected .block-editor-list-view-block-contents {
27
+ // Hide selection styles while a user is dragging blocks/files etc.
28
+ .is-dragging-components-draggable & {
29
+ background: none;
30
+ color: $gray-900;
31
+ }
32
+ }
33
+ &.is-selected .block-editor-list-view-block-contents:focus {
34
+ &::after {
35
+ box-shadow:
36
+ inset 0 0 0 1px $white,
37
+ 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
38
+ }
39
+ }
40
+ &.is-selected .block-editor-list-view-block__menu:focus {
41
+ box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) $white;
42
+ }
43
+
44
+ &.is-dragging {
45
+ display: none;
46
+ }
47
+
48
+ // Border radius for corners of the selected item.
49
+ &.is-first-selected td:first-child {
50
+ border-top-left-radius: $radius-block-ui;
51
+ }
52
+ &.is-first-selected td:last-child {
53
+ border-top-right-radius: $radius-block-ui;
54
+ }
55
+ &.is-last-selected td:first-child {
56
+ border-bottom-left-radius: $radius-block-ui;
57
+ }
58
+ &.is-last-selected td:last-child {
59
+ border-bottom-right-radius: $radius-block-ui;
60
+ }
61
+ &.is-branch-selected:not(.is-selected) {
62
+ // Lighten a CSS variable without introducing a new SASS variable
63
+ background:
64
+ linear-gradient(transparentize($white, 0.1), transparentize($white, 0.1)),
65
+ linear-gradient(var(--wp-admin-theme-color), var(--wp-admin-theme-color));
66
+ }
67
+ &.is-branch-selected.is-first-selected td:first-child {
68
+ border-top-left-radius: $radius-block-ui;
69
+ }
70
+ &.is-branch-selected.is-first-selected td:last-child {
71
+ border-top-right-radius: $radius-block-ui;
72
+ }
73
+ &[aria-expanded="false"] {
74
+ &.is-branch-selected.is-first-selected td:first-child {
75
+ border-top-left-radius: $radius-block-ui;
76
+ }
77
+ &.is-branch-selected.is-first-selected td:last-child {
78
+ border-top-right-radius: $radius-block-ui;
79
+ }
80
+ &.is-branch-selected.is-last-selected td:first-child {
81
+ border-bottom-left-radius: $radius-block-ui;
82
+ }
83
+ &.is-branch-selected.is-last-selected td:last-child {
84
+ border-bottom-right-radius: $radius-block-ui;
85
+ }
86
+ }
87
+ &.is-branch-selected:not(.is-selected) td {
88
+ border-radius: 0;
89
+ }
90
+
91
+
92
+ // List View renders a fixed number of items and relies on each item having a fixed height of 36px.
93
+ // If this value changes, we should also change the itemHeight value set in useFixedWindowList.
94
+ // See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.
95
+ .block-editor-list-view-block-contents {
96
+ display: flex;
97
+ align-items: center;
98
+ width: 100%;
99
+ height: auto;
100
+ padding: ($grid-unit-15 * 0.5) $grid-unit-05 ($grid-unit-15 * 0.5) 0;
101
+ text-align: left;
102
+ color: $gray-900;
103
+ border-radius: $radius-block-ui;
104
+ position: relative;
105
+ white-space: nowrap;
106
+
107
+ &.is-dropping-before::before {
108
+ content: "";
109
+ position: absolute;
110
+ pointer-events: none;
111
+ transition: border-color 0.1s linear, border-style 0.1s linear, box-shadow 0.1s linear;
112
+ top: -2px;
113
+ right: 0;
114
+ left: 0;
115
+ border-top: 4px solid var(--wp-admin-theme-color);
116
+ }
117
+
118
+ .components-modal__content & {
119
+ padding-left: 0;
120
+ padding-right: 0;
121
+ }
122
+ }
123
+
124
+ .block-editor-list-view-block-contents:focus {
125
+ box-shadow: none;
126
+
127
+ &::after {
128
+ content: "";
129
+ position: absolute;
130
+ top: 0;
131
+ right: -(24px + 5px); // Icon size + padding.
132
+ bottom: 0;
133
+ left: 0;
134
+ border-radius: inherit;
135
+ box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
136
+ z-index: 2;
137
+ pointer-events: none;
138
+
139
+ // Hide focus styles while a user is dragging blocks/files etc.
140
+ .is-dragging-components-draggable & {
141
+ box-shadow: none;
142
+ }
143
+ }
144
+ }
145
+ // Fix focus styling width when one row has fewer cells.
146
+ &.has-single-cell .block-editor-list-view-block-contents:focus::after {
147
+ right: 0;
148
+ }
149
+
150
+ .block-editor-list-view-block__menu:focus {
151
+ box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
152
+ z-index: 1;
153
+
154
+ // Hide focus styles while a user is dragging blocks/files etc.
155
+ .is-dragging-components-draggable & {
156
+ box-shadow: none;
157
+ }
158
+ }
159
+
160
+ &.is-visible .block-editor-list-view-block-contents {
161
+ opacity: 1;
162
+ @include edit-post__fade-in-animation;
163
+ }
164
+
165
+ .block-editor-block-icon {
166
+ align-self: flex-start;
167
+ margin-right: $grid-unit-10;
168
+ width: $icon-size;
169
+ }
170
+
171
+ .block-editor-list-view-block__menu-cell,
172
+ .block-editor-list-view-block__mover-cell,
173
+ .block-editor-list-view-block__contents-cell {
174
+ padding-top: 0;
175
+ padding-bottom: 0;
176
+ }
177
+
178
+ .block-editor-list-view-block__menu-cell,
179
+ .block-editor-list-view-block__mover-cell {
180
+ line-height: 0;
181
+ width: $button-size;
182
+ vertical-align: middle;
183
+ @include reduce-motion("transition");
184
+
185
+ > * {
186
+ opacity: 0;
187
+ }
188
+
189
+ // Show on hover, visible, and show above to keep the hit area size.
190
+ &:hover,
191
+ &.is-visible {
192
+ position: relative;
193
+ z-index: 1;
194
+
195
+ > * {
196
+ opacity: 1;
197
+ @include edit-post__fade-in-animation;
198
+ }
199
+ }
200
+
201
+ &,
202
+ .components-button.has-icon {
203
+ width: 24px;
204
+ min-width: 24px;
205
+ padding: 0;
206
+ }
207
+ }
208
+
209
+ .block-editor-list-view-block__menu-cell {
210
+ padding-right: $grid-unit-05;
211
+
212
+ .components-button.has-icon {
213
+ height: 24px;
214
+ }
215
+ }
216
+
217
+ .block-editor-list-view-block__mover-cell-alignment-wrapper {
218
+ display: flex;
219
+ height: 100%;
220
+ flex-direction: column;
221
+ align-items: center;
222
+ }
223
+
224
+ // Keep the tap target large but the focus target small.
225
+ .block-editor-block-mover-button {
226
+ position: relative;
227
+ width: $button-size;
228
+ height: $button-size-small;
229
+
230
+ // Position the icon.
231
+ svg {
232
+ position: relative;
233
+ height: $button-size-small;
234
+ }
235
+
236
+ &.is-up-button {
237
+ margin-top: -$grid-unit-15 * 0.5;
238
+ align-items: flex-end;
239
+ svg {
240
+ bottom: -$grid-unit-05;
241
+ }
242
+ }
243
+
244
+ &.is-down-button {
245
+ margin-bottom: -$grid-unit-15 * 0.5;
246
+ align-items: flex-start;
247
+ svg {
248
+ top: -$grid-unit-05;
249
+ }
250
+ }
251
+
252
+ // Tweak size and position of focus ring.
253
+ &::before {
254
+ height: 16px;
255
+ min-width: 100%;
256
+ left: 0;
257
+ right: 0;
258
+ }
259
+ }
260
+
261
+ .block-editor-inserter__toggle {
262
+ background: $gray-900;
263
+ color: $white;
264
+ height: $grid-unit-30;
265
+ margin: 6px 6px 6px 1px;
266
+ min-width: $grid-unit-30;
267
+
268
+ &:active {
269
+ color: $white;
270
+ }
271
+ }
272
+
273
+ .block-editor-list-view-block-select-button__label-wrapper {
274
+ min-width: 120px;
275
+ }
276
+
277
+ .block-editor-list-view-block-select-button__title {
278
+ flex: 1;
279
+ position: relative;
280
+
281
+ .components-truncate {
282
+ position: absolute;
283
+ width: 100%;
284
+ transform: translateY(-50%);
285
+ }
286
+ }
287
+
288
+ .block-editor-list-view-block-select-button__anchor-wrapper {
289
+ position: relative;
290
+ max-width: min(110px, 40%);
291
+ width: 100%;
292
+ }
293
+
294
+ .block-editor-list-view-block-select-button__anchor {
295
+ position: absolute;
296
+ right: 0;
297
+ transform: translateY(-50%);
298
+ background: rgba($black, 0.1);
299
+ border-radius: $radius-block-ui;
300
+ padding: 2px 6px;
301
+ max-width: 100%;
302
+ box-sizing: border-box;
303
+ }
304
+
305
+ &.is-selected .block-editor-list-view-block-select-button__anchor {
306
+ background: rgba($black, 0.3);
307
+ }
308
+
309
+ .block-editor-list-view-block-select-button__lock {
310
+ line-height: 0;
311
+ width: 24px;
312
+ min-width: 24px;
313
+ margin-left: auto;
314
+ padding: 0;
315
+ vertical-align: middle;
316
+ }
317
+ }
318
+
319
+ .block-editor-list-view-block-select-button__description,
320
+ .block-editor-list-view-appender__description {
321
+ display: none;
322
+ }
323
+
324
+ .block-editor-list-view-block__contents-cell,
325
+ .block-editor-list-view-appender__cell {
326
+ .block-editor-list-view-block__contents-container,
327
+ .block-editor-list-view-appender__container {
328
+ display: flex;
329
+ }
330
+ }
331
+
332
+ // Chevron container metrics.
333
+ .block-editor-list-view__expander {
334
+ height: $icon-size;
335
+ margin-left: $grid-unit-05;
336
+ width: $icon-size;
337
+ }
338
+
339
+ // First level of indentation is aria-level 2, max indent is 8.
340
+ // Indent is a full icon size, plus 4px which optically aligns child icons to the text label above.
341
+ $block-navigation-max-indent: 8;
342
+ .block-editor-list-view-leaf[aria-level] .block-editor-list-view__expander {
343
+ margin-left: ( $icon-size ) * $block-navigation-max-indent + 4 * ( $block-navigation-max-indent - 1 );
344
+ }
345
+
346
+ .block-editor-list-view-leaf:not([aria-level="1"]) {
347
+ .block-editor-list-view__expander {
348
+ margin-right: 4px;
349
+ }
350
+ }
351
+
352
+ @for $i from 0 to $block-navigation-max-indent {
353
+ .block-editor-list-view-leaf[aria-level="#{ $i + 1 }"] .block-editor-list-view__expander {
354
+ @if $i - 1 >= 0 {
355
+ margin-left: ( $icon-size * $i ) + 4 * ($i - 1);
356
+ }
357
+ @else {
358
+ margin-left: ( $icon-size * $i );
359
+ }
360
+ }
361
+ }
362
+
363
+ .block-editor-list-view-leaf .block-editor-list-view__expander {
364
+ visibility: hidden;
365
+ }
366
+
367
+ // Point downwards when open.
368
+ .block-editor-list-view-leaf[aria-expanded="true"] .block-editor-list-view__expander svg {
369
+ visibility: visible;
370
+ transition: transform 0.2s ease;
371
+ transform: rotate(90deg);
372
+ @include reduce-motion("transition");
373
+ }
374
+
375
+ // Point rightwards when closed
376
+ .block-editor-list-view-leaf[aria-expanded="false"] .block-editor-list-view__expander svg {
377
+ visibility: visible;
378
+ transform: rotate(0deg);
379
+ transition: transform 0.2s ease;
380
+ @include reduce-motion("transition");
381
+ }
382
+
383
+ .block-editor-list-view-drop-indicator {
384
+ pointer-events: none;
385
+
386
+ .block-editor-list-view-drop-indicator__line {
387
+ background: var(--wp-admin-theme-color);
388
+ height: $border-width;
389
+ }
390
+ }
391
+
392
+ .block-editor-list-view-placeholder {
393
+ padding: 0;
394
+ margin: 0;
395
+ height: 36px;
396
+ }
397
+
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { getCommonDepthClientIds } from '../utils';
5
+
6
+ describe( 'getCommonDepthClientIds', () => {
7
+ it( 'should return start and end when no depth is provided', () => {
8
+ const result = getCommonDepthClientIds(
9
+ 'start-id',
10
+ 'clicked-id',
11
+ [],
12
+ []
13
+ );
14
+
15
+ expect( result ).toEqual( { start: 'start-id', end: 'clicked-id' } );
16
+ } );
17
+
18
+ it( 'should return deepest start and end when depths match', () => {
19
+ const result = getCommonDepthClientIds(
20
+ 'start-id',
21
+ 'clicked-id',
22
+ [ 'start-1', 'start-2', 'start-3' ],
23
+ [ 'end-1', 'end-2', 'end-3' ]
24
+ );
25
+
26
+ expect( result ).toEqual( { start: 'start-id', end: 'clicked-id' } );
27
+ } );
28
+
29
+ it( 'should return shallower ids when start is shallower', () => {
30
+ const result = getCommonDepthClientIds(
31
+ 'start-id',
32
+ 'clicked-id',
33
+ [ 'start-1' ],
34
+ [ 'end-1', 'end-2', 'end-3' ]
35
+ );
36
+
37
+ expect( result ).toEqual( { start: 'start-id', end: 'end-2' } );
38
+ } );
39
+
40
+ it( 'should return shallower ids when end is shallower', () => {
41
+ const result = getCommonDepthClientIds(
42
+ 'start-id',
43
+ 'clicked-id',
44
+ [ 'start-1', 'start-2', 'start-3' ],
45
+ [ 'end-1', 'end-2' ]
46
+ );
47
+
48
+ expect( result ).toEqual( { start: 'start-3', end: 'clicked-id' } );
49
+ } );
50
+ } );