@wordpress/block-editor 12.11.1 → 12.12.2-next.f8d8eceb.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 (453) hide show
  1. package/CHANGELOG.md +14 -10
  2. package/README.md +35 -3
  3. package/build/components/block-alignment-control/use-available-alignments.js +30 -28
  4. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  5. package/build/components/block-controls/hook.js +4 -1
  6. package/build/components/block-controls/hook.js.map +1 -1
  7. package/build/components/block-list/block-outline.native.js +1 -1
  8. package/build/components/block-list/block-outline.native.js.map +1 -1
  9. package/build/components/block-list/block.js +2 -0
  10. package/build/components/block-list/block.js.map +1 -1
  11. package/build/components/block-list/block.native.js +4 -4
  12. package/build/components/block-list/block.native.js.map +1 -1
  13. package/build/components/block-list/layout.js +2 -3
  14. package/build/components/block-list/layout.js.map +1 -1
  15. package/build/components/block-preview/index.js +4 -1
  16. package/build/components/block-preview/index.js.map +1 -1
  17. package/build/components/block-styles/index.js +1 -2
  18. package/build/components/block-styles/index.js.map +1 -1
  19. package/build/components/block-switcher/pattern-transformations-menu.js +2 -4
  20. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  21. package/build/components/block-tools/block-contextual-toolbar.js +1 -0
  22. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  23. package/build/components/border-radius-control/index.js +3 -2
  24. package/build/components/border-radius-control/index.js.map +1 -1
  25. package/build/components/color-palette/with-color-context.js +6 -6
  26. package/build/components/color-palette/with-color-context.js.map +1 -1
  27. package/build/components/colors/with-colors.js +2 -8
  28. package/build/components/colors/with-colors.js.map +1 -1
  29. package/build/components/colors-gradients/control.js +6 -7
  30. package/build/components/colors-gradients/control.js.map +1 -1
  31. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +5 -13
  32. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  33. package/build/components/dimensions-tool/index.js +22 -22
  34. package/build/components/dimensions-tool/index.js.map +1 -1
  35. package/build/components/dimensions-tool/scale-tool.js +1 -1
  36. package/build/components/dimensions-tool/scale-tool.js.map +1 -1
  37. package/build/components/font-family/index.js +2 -3
  38. package/build/components/font-family/index.js.map +1 -1
  39. package/build/components/font-sizes/font-size-picker.js +3 -5
  40. package/build/components/font-sizes/font-size-picker.js.map +1 -1
  41. package/build/components/font-sizes/with-font-sizes.js +3 -4
  42. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  43. package/build/components/global-styles/filters-panel.js +7 -8
  44. package/build/components/global-styles/filters-panel.js.map +1 -1
  45. package/build/components/global-styles/image-settings-panel.js +2 -2
  46. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  47. package/build/components/global-styles/typography-panel.js +1 -1
  48. package/build/components/global-styles/typography-panel.js.map +1 -1
  49. package/build/components/gradients/use-gradient.js +2 -5
  50. package/build/components/gradients/use-gradient.js.map +1 -1
  51. package/build/components/height-control/index.js +93 -5
  52. package/build/components/height-control/index.js.map +1 -1
  53. package/build/components/iframe/index.js +9 -1
  54. package/build/components/iframe/index.js.map +1 -1
  55. package/build/components/image-editor/aspect-ratio-dropdown.js +0 -6
  56. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  57. package/build/components/index.js +9 -2
  58. package/build/components/index.js.map +1 -1
  59. package/build/components/index.native.js +17 -2
  60. package/build/components/index.native.js.map +1 -1
  61. package/build/components/inner-blocks/index.js +2 -2
  62. package/build/components/inner-blocks/index.js.map +1 -1
  63. package/build/components/letter-spacing-control/index.js +3 -3
  64. package/build/components/letter-spacing-control/index.js.map +1 -1
  65. package/build/components/link-control/link-preview.js +5 -2
  66. package/build/components/link-control/link-preview.js.map +1 -1
  67. package/build/components/link-control/search-item.js +11 -0
  68. package/build/components/link-control/search-item.js.map +1 -1
  69. package/build/components/link-control/search-results.js +2 -1
  70. package/build/components/link-control/search-results.js.map +1 -1
  71. package/build/components/link-control/use-internal-value.js +14 -8
  72. package/build/components/link-control/use-internal-value.js.map +1 -1
  73. package/build/components/link-control/use-search-handler.js +10 -5
  74. package/build/components/link-control/use-search-handler.js.map +1 -1
  75. package/build/components/list-view/index.js +6 -5
  76. package/build/components/list-view/index.js.map +1 -1
  77. package/build/components/media-replace-flow/index.js +2 -4
  78. package/build/components/media-replace-flow/index.js.map +1 -1
  79. package/build/components/provider/use-block-sync.js +2 -2
  80. package/build/components/provider/use-block-sync.js.map +1 -1
  81. package/build/components/rich-text/index.js +1 -1
  82. package/build/components/rich-text/index.js.map +1 -1
  83. package/build/components/rich-text/index.native.js +14 -3
  84. package/build/components/rich-text/index.native.js.map +1 -1
  85. package/build/components/rich-text/use-delete.js +1 -1
  86. package/build/components/rich-text/use-delete.js.map +1 -1
  87. package/build/components/rich-text/use-paste-handler.js +25 -22
  88. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  89. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +6 -3
  90. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  91. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +91 -3
  92. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  93. package/build/components/tool-selector/index.js +1 -2
  94. package/build/components/tool-selector/index.js.map +1 -1
  95. package/build/components/unit-control/index.js +3 -3
  96. package/build/components/unit-control/index.js.map +1 -1
  97. package/build/components/use-block-commands/index.js +96 -47
  98. package/build/components/use-block-commands/index.js.map +1 -1
  99. package/build/components/use-settings/index.js +212 -0
  100. package/build/components/use-settings/index.js.map +1 -0
  101. package/build/components/writing-flow/use-arrow-nav.js +4 -0
  102. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  103. package/build/hooks/align.js +51 -35
  104. package/build/hooks/align.js.map +1 -1
  105. package/build/hooks/anchor.js +37 -32
  106. package/build/hooks/anchor.js.map +1 -1
  107. package/build/hooks/background.js +4 -4
  108. package/build/hooks/background.js.map +1 -1
  109. package/build/hooks/block-rename-ui.js +5 -5
  110. package/build/hooks/block-rename-ui.js.map +1 -1
  111. package/build/hooks/{metadata-name.js → block-renaming.js} +3 -7
  112. package/build/hooks/block-renaming.js.map +1 -0
  113. package/build/hooks/color.js +2 -4
  114. package/build/hooks/color.js.map +1 -1
  115. package/build/hooks/custom-class-name.js +28 -21
  116. package/build/hooks/custom-class-name.js.map +1 -1
  117. package/build/hooks/duotone.js +33 -8
  118. package/build/hooks/duotone.js.map +1 -1
  119. package/build/hooks/font-size.js +4 -4
  120. package/build/hooks/font-size.js.map +1 -1
  121. package/build/hooks/index.js +1 -1
  122. package/build/hooks/index.js.map +1 -1
  123. package/build/hooks/layout.js +16 -17
  124. package/build/hooks/layout.js.map +1 -1
  125. package/build/hooks/line-height.js +3 -3
  126. package/build/hooks/line-height.js.map +1 -1
  127. package/build/hooks/metadata.js +6 -27
  128. package/build/hooks/metadata.js.map +1 -1
  129. package/build/hooks/position.js +2 -3
  130. package/build/hooks/position.js.map +1 -1
  131. package/build/hooks/use-color-props.js +3 -11
  132. package/build/hooks/use-color-props.js.map +1 -1
  133. package/build/hooks/utils.js +2 -43
  134. package/build/hooks/utils.js.map +1 -1
  135. package/build/layouts/constrained.js +3 -3
  136. package/build/layouts/constrained.js.map +1 -1
  137. package/build/layouts/grid.js +25 -3
  138. package/build/layouts/grid.js.map +1 -1
  139. package/build/layouts/utils.js +1 -1
  140. package/build/layouts/utils.js.map +1 -1
  141. package/build/lock-unlock.js +1 -1
  142. package/build/lock-unlock.js.map +1 -1
  143. package/build/store/actions.js +13 -5
  144. package/build/store/actions.js.map +1 -1
  145. package/build/utils/object.js +4 -1
  146. package/build/utils/object.js.map +1 -1
  147. package/build/utils/parse-css-unit-to-px.js +20 -0
  148. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  149. package/build/utils/pasting.js +1 -1
  150. package/build/utils/pasting.js.map +1 -1
  151. package/build/utils/transform-styles/index.js +19 -24
  152. package/build/utils/transform-styles/index.js.map +1 -1
  153. package/build-module/components/block-alignment-control/use-available-alignments.js +30 -28
  154. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  155. package/build-module/components/block-controls/hook.js +4 -1
  156. package/build-module/components/block-controls/hook.js.map +1 -1
  157. package/build-module/components/block-list/block-outline.native.js +1 -1
  158. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  159. package/build-module/components/block-list/block.js +2 -0
  160. package/build-module/components/block-list/block.js.map +1 -1
  161. package/build-module/components/block-list/block.native.js +4 -4
  162. package/build-module/components/block-list/block.native.js.map +1 -1
  163. package/build-module/components/block-list/layout.js +2 -2
  164. package/build-module/components/block-list/layout.js.map +1 -1
  165. package/build-module/components/block-preview/index.js +4 -1
  166. package/build-module/components/block-preview/index.js.map +1 -1
  167. package/build-module/components/block-styles/index.js +1 -2
  168. package/build-module/components/block-styles/index.js.map +1 -1
  169. package/build-module/components/block-switcher/pattern-transformations-menu.js +2 -4
  170. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  171. package/build-module/components/block-tools/block-contextual-toolbar.js +1 -0
  172. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  173. package/build-module/components/border-radius-control/index.js +3 -2
  174. package/build-module/components/border-radius-control/index.js.map +1 -1
  175. package/build-module/components/color-palette/with-color-context.js +6 -5
  176. package/build-module/components/color-palette/with-color-context.js.map +1 -1
  177. package/build-module/components/colors/with-colors.js +2 -7
  178. package/build-module/components/colors/with-colors.js.map +1 -1
  179. package/build-module/components/colors-gradients/control.js +6 -7
  180. package/build-module/components/colors-gradients/control.js.map +1 -1
  181. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +5 -12
  182. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  183. package/build-module/components/dimensions-tool/index.js +22 -22
  184. package/build-module/components/dimensions-tool/index.js.map +1 -1
  185. package/build-module/components/dimensions-tool/scale-tool.js +1 -1
  186. package/build-module/components/dimensions-tool/scale-tool.js.map +1 -1
  187. package/build-module/components/font-family/index.js +2 -2
  188. package/build-module/components/font-family/index.js.map +1 -1
  189. package/build-module/components/font-sizes/font-size-picker.js +3 -4
  190. package/build-module/components/font-sizes/font-size-picker.js.map +1 -1
  191. package/build-module/components/font-sizes/with-font-sizes.js +3 -3
  192. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  193. package/build-module/components/global-styles/filters-panel.js +7 -8
  194. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  195. package/build-module/components/global-styles/image-settings-panel.js +2 -2
  196. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  197. package/build-module/components/global-styles/typography-panel.js +1 -1
  198. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  199. package/build-module/components/gradients/use-gradient.js +2 -4
  200. package/build-module/components/gradients/use-gradient.js.map +1 -1
  201. package/build-module/components/height-control/index.js +93 -4
  202. package/build-module/components/height-control/index.js.map +1 -1
  203. package/build-module/components/iframe/index.js +9 -1
  204. package/build-module/components/iframe/index.js.map +1 -1
  205. package/build-module/components/image-editor/aspect-ratio-dropdown.js +0 -6
  206. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  207. package/build-module/components/index.js +1 -1
  208. package/build-module/components/index.js.map +1 -1
  209. package/build-module/components/index.native.js +2 -1
  210. package/build-module/components/index.native.js.map +1 -1
  211. package/build-module/components/inner-blocks/index.js +2 -2
  212. package/build-module/components/inner-blocks/index.js.map +1 -1
  213. package/build-module/components/letter-spacing-control/index.js +3 -2
  214. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  215. package/build-module/components/link-control/link-preview.js +6 -3
  216. package/build-module/components/link-control/link-preview.js.map +1 -1
  217. package/build-module/components/link-control/search-item.js +12 -1
  218. package/build-module/components/link-control/search-item.js.map +1 -1
  219. package/build-module/components/link-control/search-results.js +2 -1
  220. package/build-module/components/link-control/search-results.js.map +1 -1
  221. package/build-module/components/link-control/use-internal-value.js +14 -9
  222. package/build-module/components/link-control/use-internal-value.js.map +1 -1
  223. package/build-module/components/link-control/use-search-handler.js +10 -5
  224. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  225. package/build-module/components/list-view/index.js +7 -6
  226. package/build-module/components/list-view/index.js.map +1 -1
  227. package/build-module/components/media-replace-flow/index.js +3 -5
  228. package/build-module/components/media-replace-flow/index.js.map +1 -1
  229. package/build-module/components/provider/use-block-sync.js +2 -2
  230. package/build-module/components/provider/use-block-sync.js.map +1 -1
  231. package/build-module/components/rich-text/index.js +1 -1
  232. package/build-module/components/rich-text/index.js.map +1 -1
  233. package/build-module/components/rich-text/index.native.js +15 -4
  234. package/build-module/components/rich-text/index.native.js.map +1 -1
  235. package/build-module/components/rich-text/use-delete.js +1 -1
  236. package/build-module/components/rich-text/use-delete.js.map +1 -1
  237. package/build-module/components/rich-text/use-paste-handler.js +25 -22
  238. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  239. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +6 -2
  240. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  241. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +91 -2
  242. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  243. package/build-module/components/tool-selector/index.js +1 -2
  244. package/build-module/components/tool-selector/index.js.map +1 -1
  245. package/build-module/components/unit-control/index.js +3 -2
  246. package/build-module/components/unit-control/index.js.map +1 -1
  247. package/build-module/components/use-block-commands/index.js +95 -47
  248. package/build-module/components/use-block-commands/index.js.map +1 -1
  249. package/build-module/components/use-settings/index.js +203 -0
  250. package/build-module/components/use-settings/index.js.map +1 -0
  251. package/build-module/components/writing-flow/use-arrow-nav.js +4 -0
  252. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  253. package/build-module/hooks/align.js +51 -35
  254. package/build-module/hooks/align.js.map +1 -1
  255. package/build-module/hooks/anchor.js +37 -32
  256. package/build-module/hooks/anchor.js.map +1 -1
  257. package/build-module/hooks/background.js +4 -4
  258. package/build-module/hooks/background.js.map +1 -1
  259. package/build-module/hooks/block-rename-ui.js +6 -6
  260. package/build-module/hooks/block-rename-ui.js.map +1 -1
  261. package/build-module/hooks/{metadata-name.js → block-renaming.js} +3 -6
  262. package/build-module/hooks/block-renaming.js.map +1 -0
  263. package/build-module/hooks/color.js +2 -4
  264. package/build-module/hooks/color.js.map +1 -1
  265. package/build-module/hooks/custom-class-name.js +28 -21
  266. package/build-module/hooks/custom-class-name.js.map +1 -1
  267. package/build-module/hooks/duotone.js +34 -9
  268. package/build-module/hooks/duotone.js.map +1 -1
  269. package/build-module/hooks/font-size.js +4 -4
  270. package/build-module/hooks/font-size.js.map +1 -1
  271. package/build-module/hooks/index.js +1 -1
  272. package/build-module/hooks/index.js.map +1 -1
  273. package/build-module/hooks/layout.js +16 -17
  274. package/build-module/hooks/layout.js.map +1 -1
  275. package/build-module/hooks/line-height.js +3 -3
  276. package/build-module/hooks/line-height.js.map +1 -1
  277. package/build-module/hooks/metadata.js +6 -25
  278. package/build-module/hooks/metadata.js.map +1 -1
  279. package/build-module/hooks/position.js +2 -3
  280. package/build-module/hooks/position.js.map +1 -1
  281. package/build-module/hooks/use-color-props.js +3 -11
  282. package/build-module/hooks/use-color-props.js.map +1 -1
  283. package/build-module/hooks/utils.js +3 -44
  284. package/build-module/hooks/utils.js.map +1 -1
  285. package/build-module/layouts/constrained.js +3 -2
  286. package/build-module/layouts/constrained.js.map +1 -1
  287. package/build-module/layouts/grid.js +25 -3
  288. package/build-module/layouts/grid.js.map +1 -1
  289. package/build-module/layouts/utils.js +1 -1
  290. package/build-module/layouts/utils.js.map +1 -1
  291. package/build-module/lock-unlock.js +1 -1
  292. package/build-module/lock-unlock.js.map +1 -1
  293. package/build-module/store/actions.js +14 -6
  294. package/build-module/store/actions.js.map +1 -1
  295. package/build-module/utils/object.js +3 -1
  296. package/build-module/utils/object.js.map +1 -1
  297. package/build-module/utils/parse-css-unit-to-px.js +20 -0
  298. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  299. package/build-module/utils/pasting.js +1 -1
  300. package/build-module/utils/pasting.js.map +1 -1
  301. package/build-module/utils/transform-styles/index.js +20 -24
  302. package/build-module/utils/transform-styles/index.js.map +1 -1
  303. package/build-style/style-rtl.css +24 -12
  304. package/build-style/style.css +24 -12
  305. package/package.json +36 -34
  306. package/src/components/block-alignment-control/use-available-alignments.js +49 -34
  307. package/src/components/block-controls/hook.js +6 -3
  308. package/src/components/block-list/block-outline.native.js +1 -1
  309. package/src/components/block-list/block.js +2 -0
  310. package/src/components/block-list/block.native.js +4 -4
  311. package/src/components/block-list/layout.js +2 -2
  312. package/src/components/block-preview/index.js +7 -1
  313. package/src/components/block-styles/index.js +1 -4
  314. package/src/components/block-styles/style.scss +1 -1
  315. package/src/components/block-switcher/pattern-transformations-menu.js +1 -4
  316. package/src/components/block-switcher/style.scss +6 -0
  317. package/src/components/block-tools/block-contextual-toolbar.js +1 -0
  318. package/src/components/block-tools/style.scss +0 -1
  319. package/src/components/border-radius-control/index.js +3 -2
  320. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -1
  321. package/src/components/color-palette/with-color-context.js +9 -9
  322. package/src/components/colors/with-colors.js +6 -7
  323. package/src/components/colors-gradients/control.js +10 -7
  324. package/src/components/colors-gradients/style.scss +4 -2
  325. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +29 -15
  326. package/src/components/dimensions-tool/index.js +25 -25
  327. package/src/components/dimensions-tool/scale-tool.js +1 -1
  328. package/src/components/font-family/index.js +2 -2
  329. package/src/components/font-sizes/font-size-picker.js +6 -4
  330. package/src/components/font-sizes/with-font-sizes.js +3 -5
  331. package/src/components/global-styles/filters-panel.js +9 -15
  332. package/src/components/global-styles/image-settings-panel.js +2 -2
  333. package/src/components/global-styles/typography-panel.js +1 -1
  334. package/src/components/gradients/use-gradient.js +10 -4
  335. package/src/components/height-control/index.js +53 -4
  336. package/src/components/iframe/index.js +8 -1
  337. package/src/components/image-editor/aspect-ratio-dropdown.js +0 -8
  338. package/src/components/index.js +1 -1
  339. package/src/components/index.native.js +2 -1
  340. package/src/components/inner-blocks/index.js +2 -2
  341. package/src/components/inserter/style.scss +9 -1
  342. package/src/components/letter-spacing-control/index.js +3 -2
  343. package/src/components/link-control/README.md +43 -0
  344. package/src/components/link-control/link-preview.js +11 -5
  345. package/src/components/link-control/search-item.js +14 -0
  346. package/src/components/link-control/search-results.js +1 -0
  347. package/src/components/link-control/style.scss +3 -3
  348. package/src/components/link-control/test/index.js +19 -0
  349. package/src/components/link-control/use-internal-value.js +14 -10
  350. package/src/components/link-control/use-search-handler.js +22 -15
  351. package/src/components/list-view/index.js +13 -3
  352. package/src/components/media-replace-flow/index.js +9 -14
  353. package/src/components/provider/test/use-block-sync.js +1 -1
  354. package/src/components/provider/use-block-sync.js +2 -2
  355. package/src/components/rich-text/index.js +1 -1
  356. package/src/components/rich-text/index.native.js +19 -3
  357. package/src/components/rich-text/use-delete.js +1 -1
  358. package/src/components/rich-text/use-paste-handler.js +27 -24
  359. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +7 -5
  360. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +25 -2
  361. package/src/components/tool-selector/index.js +1 -1
  362. package/src/components/unit-control/index.js +3 -8
  363. package/src/components/use-block-commands/index.js +93 -47
  364. package/src/components/{use-setting → use-settings}/README.md +9 -10
  365. package/src/components/use-settings/index.js +272 -0
  366. package/src/components/{use-setting → use-settings}/test/index.js +47 -5
  367. package/src/components/writing-flow/use-arrow-nav.js +4 -0
  368. package/src/hooks/align.js +79 -54
  369. package/src/hooks/anchor.js +75 -65
  370. package/src/hooks/background.js +7 -9
  371. package/src/hooks/block-rename-ui.js +5 -14
  372. package/src/hooks/{metadata-name.js → block-renaming.js} +4 -7
  373. package/src/hooks/color.js +7 -4
  374. package/src/hooks/custom-class-name.js +36 -31
  375. package/src/hooks/duotone.js +51 -14
  376. package/src/hooks/font-size.js +4 -4
  377. package/src/hooks/index.js +1 -1
  378. package/src/hooks/layout.js +17 -17
  379. package/src/hooks/line-height.js +3 -3
  380. package/src/hooks/metadata.js +6 -38
  381. package/src/hooks/position.js +5 -3
  382. package/src/hooks/use-color-props.js +21 -14
  383. package/src/hooks/utils.js +90 -43
  384. package/src/layouts/constrained.js +3 -8
  385. package/src/layouts/grid.js +50 -2
  386. package/src/layouts/utils.js +2 -1
  387. package/src/lock-unlock.js +1 -1
  388. package/src/store/actions.js +25 -8
  389. package/src/utils/object.js +4 -1
  390. package/src/utils/parse-css-unit-to-px.js +20 -0
  391. package/src/utils/pasting.js +1 -4
  392. package/src/utils/test/__snapshots__/transform-styles.js.snap +103 -0
  393. package/src/utils/test/pasting.js +12 -19
  394. package/src/utils/test/transform-styles.js +217 -0
  395. package/src/utils/transform-styles/index.js +25 -25
  396. package/build/components/use-setting/index.js +0 -159
  397. package/build/components/use-setting/index.js.map +0 -1
  398. package/build/hooks/metadata-name.js.map +0 -1
  399. package/build/utils/transform-styles/ast/index.js +0 -21
  400. package/build/utils/transform-styles/ast/index.js.map +0 -1
  401. package/build/utils/transform-styles/ast/parse.js +0 -660
  402. package/build/utils/transform-styles/ast/parse.js.map +0 -1
  403. package/build/utils/transform-styles/ast/stringify/compiler.js +0 -52
  404. package/build/utils/transform-styles/ast/stringify/compiler.js.map +0 -1
  405. package/build/utils/transform-styles/ast/stringify/compress.js +0 -178
  406. package/build/utils/transform-styles/ast/stringify/compress.js.map +0 -1
  407. package/build/utils/transform-styles/ast/stringify/identity.js +0 -207
  408. package/build/utils/transform-styles/ast/stringify/identity.js.map +0 -1
  409. package/build/utils/transform-styles/ast/stringify/index.js +0 -36
  410. package/build/utils/transform-styles/ast/stringify/index.js.map +0 -1
  411. package/build/utils/transform-styles/transforms/url-rewrite.js +0 -130
  412. package/build/utils/transform-styles/transforms/url-rewrite.js.map +0 -1
  413. package/build/utils/transform-styles/transforms/wrap.js +0 -59
  414. package/build/utils/transform-styles/transforms/wrap.js.map +0 -1
  415. package/build/utils/transform-styles/traverse.js +0 -37
  416. package/build/utils/transform-styles/traverse.js.map +0 -1
  417. package/build-module/components/use-setting/index.js +0 -152
  418. package/build-module/components/use-setting/index.js.map +0 -1
  419. package/build-module/hooks/metadata-name.js.map +0 -1
  420. package/build-module/utils/transform-styles/ast/index.js +0 -6
  421. package/build-module/utils/transform-styles/ast/index.js.map +0 -1
  422. package/build-module/utils/transform-styles/ast/parse.js +0 -654
  423. package/build-module/utils/transform-styles/ast/parse.js.map +0 -1
  424. package/build-module/utils/transform-styles/ast/stringify/compiler.js +0 -49
  425. package/build-module/utils/transform-styles/ast/stringify/compiler.js.map +0 -1
  426. package/build-module/utils/transform-styles/ast/stringify/compress.js +0 -176
  427. package/build-module/utils/transform-styles/ast/stringify/compress.js.map +0 -1
  428. package/build-module/utils/transform-styles/ast/stringify/identity.js +0 -206
  429. package/build-module/utils/transform-styles/ast/stringify/identity.js.map +0 -1
  430. package/build-module/utils/transform-styles/ast/stringify/index.js +0 -29
  431. package/build-module/utils/transform-styles/ast/stringify/index.js.map +0 -1
  432. package/build-module/utils/transform-styles/transforms/url-rewrite.js +0 -123
  433. package/build-module/utils/transform-styles/transforms/url-rewrite.js.map +0 -1
  434. package/build-module/utils/transform-styles/transforms/wrap.js +0 -52
  435. package/build-module/utils/transform-styles/transforms/wrap.js.map +0 -1
  436. package/build-module/utils/transform-styles/traverse.js +0 -28
  437. package/build-module/utils/transform-styles/traverse.js.map +0 -1
  438. package/src/components/use-setting/index.js +0 -213
  439. package/src/utils/transform-styles/ast/index.js +0 -5
  440. package/src/utils/transform-styles/ast/parse.js +0 -732
  441. package/src/utils/transform-styles/ast/stringify/compiler.js +0 -50
  442. package/src/utils/transform-styles/ast/stringify/compress.js +0 -238
  443. package/src/utils/transform-styles/ast/stringify/identity.js +0 -286
  444. package/src/utils/transform-styles/ast/stringify/index.js +0 -32
  445. package/src/utils/transform-styles/test/__snapshots__/traverse.js.snap +0 -7
  446. package/src/utils/transform-styles/test/traverse.js +0 -24
  447. package/src/utils/transform-styles/transforms/test/__snapshots__/url-rewrite.js.snap +0 -25
  448. package/src/utils/transform-styles/transforms/test/__snapshots__/wrap.js.snap +0 -64
  449. package/src/utils/transform-styles/transforms/test/url-rewrite.js +0 -39
  450. package/src/utils/transform-styles/transforms/test/wrap.js +0 -95
  451. package/src/utils/transform-styles/transforms/url-rewrite.js +0 -139
  452. package/src/utils/transform-styles/transforms/wrap.js +0 -56
  453. package/src/utils/transform-styles/traverse.js +0 -32
@@ -8,7 +8,7 @@ import { Component } from '@wordpress/element';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { getFontSize, getFontSizeClass } from './utils';
11
- import useSetting from '../use-setting';
11
+ import { useSettings } from '../use-settings';
12
12
 
13
13
  const DEFAULT_FONT_SIZES = [];
14
14
 
@@ -52,13 +52,11 @@ export default ( ...fontSizeNames ) => {
52
52
  compose( [
53
53
  createHigherOrderComponent(
54
54
  ( WrappedComponent ) => ( props ) => {
55
- const fontSizes =
56
- useSetting( 'typography.fontSizes' ) ||
57
- DEFAULT_FONT_SIZES;
55
+ const [ fontSizes ] = useSettings( 'typography.fontSizes' );
58
56
  return (
59
57
  <WrappedComponent
60
58
  { ...props }
61
- fontSizes={ fontSizes }
59
+ fontSizes={ fontSizes || DEFAULT_FONT_SIZES }
62
60
  />
63
61
  );
64
62
  },
@@ -54,13 +54,15 @@ function useMultiOriginColorPresets(
54
54
  }
55
55
 
56
56
  export function useHasFiltersPanel( settings ) {
57
- const hasDuotone = useHasDuotoneControl( settings );
58
-
59
- return hasDuotone;
57
+ return useHasDuotoneControl( settings );
60
58
  }
61
59
 
62
60
  function useHasDuotoneControl( settings ) {
63
- return settings.color.customDuotone || settings.color.defaultDuotone;
61
+ return (
62
+ settings.color.customDuotone ||
63
+ settings.color.defaultDuotone ||
64
+ settings.color.duotone.length > 0
65
+ );
64
66
  }
65
67
 
66
68
  function FiltersToolsPanel( {
@@ -148,11 +150,6 @@ export default function FiltersPanel( {
148
150
  const hasDuotone = () => !! value?.filter?.duotone;
149
151
  const resetDuotone = () => setDuotone( undefined );
150
152
 
151
- const disableCustomColors = ! settings?.color?.custom;
152
- const disableCustomDuotone =
153
- ! settings?.color?.customDuotone ||
154
- ( colorPalette?.length === 0 && disableCustomColors );
155
-
156
153
  const resetAllFilter = useCallback( ( previousValue ) => {
157
154
  return {
158
155
  ...previousValue,
@@ -210,12 +207,9 @@ export default function FiltersPanel( {
210
207
  <DuotonePicker
211
208
  colorPalette={ colorPalette }
212
209
  duotonePalette={ duotonePalette }
213
- disableCustomColors={
214
- disableCustomColors
215
- }
216
- disableCustomDuotone={
217
- disableCustomDuotone
218
- }
210
+ // TODO: Re-enable both when custom colors are supported for block-level styles.
211
+ disableCustomColors
212
+ disableCustomDuotone
219
213
  value={ duotone }
220
214
  onChange={ setDuotone }
221
215
  />
@@ -54,13 +54,13 @@ export default function ImageSettingsPanel( {
54
54
  // "RESET" button ONLY when the user has explicitly set a value in the
55
55
  // Global Styles.
56
56
  hasValue={ () => !! value?.lightbox }
57
- label={ __( 'Expand on Click' ) }
57
+ label={ __( 'Expand on click' ) }
58
58
  onDeselect={ resetLightbox }
59
59
  isShownByDefault={ true }
60
60
  panelId={ panelId }
61
61
  >
62
62
  <ToggleControl
63
- label={ __( 'Expand on Click' ) }
63
+ label={ __( 'Expand on click' ) }
64
64
  checked={ lightboxChecked }
65
65
  onChange={ onChangeLightbox }
66
66
  />
@@ -67,7 +67,7 @@ function useHasFontFamilyControl( settings ) {
67
67
  .concat( fontFamiliesPerOrigin?.theme ?? [] )
68
68
  .concat( fontFamiliesPerOrigin?.default ?? [] )
69
69
  .sort( ( a, b ) =>
70
- ( a?.name || a?.slug ).localeCompare( b?.name || a?.slug )
70
+ ( a?.name || a?.slug )?.localeCompare( b?.name || a?.slug )
71
71
  );
72
72
  return !! fontFamilies?.length;
73
73
  }
@@ -8,7 +8,7 @@ import { useSelect, useDispatch } from '@wordpress/data';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { useBlockEditContext } from '../block-edit';
11
- import useSetting from '../use-setting';
11
+ import { useSettings } from '../use-settings';
12
12
  import { store as blockEditorStore } from '../../store';
13
13
 
14
14
  export function __experimentalGetGradientClass( gradientSlug ) {
@@ -60,9 +60,15 @@ export function __experimentalUseGradient( {
60
60
  } = {} ) {
61
61
  const { clientId } = useBlockEditContext();
62
62
 
63
- const userGradientPalette = useSetting( 'color.gradients.custom' );
64
- const themeGradientPalette = useSetting( 'color.gradients.theme' );
65
- const defaultGradientPalette = useSetting( 'color.gradients.default' );
63
+ const [
64
+ userGradientPalette,
65
+ themeGradientPalette,
66
+ defaultGradientPalette,
67
+ ] = useSettings(
68
+ 'color.gradients.custom',
69
+ 'color.gradients.theme',
70
+ 'color.gradients.default'
71
+ );
66
72
  const allGradients = useMemo(
67
73
  () => [
68
74
  ...( userGradientPalette || [] ),
@@ -17,7 +17,7 @@ import { __ } from '@wordpress/i18n';
17
17
  /**
18
18
  * Internal dependencies
19
19
  */
20
- import useSetting from '../use-setting';
20
+ import { useSettings } from '../use-settings';
21
21
 
22
22
  const RANGE_CONTROL_CUSTOM_SETTINGS = {
23
23
  px: { max: 1000, step: 1 },
@@ -26,6 +26,28 @@ const RANGE_CONTROL_CUSTOM_SETTINGS = {
26
26
  vh: { max: 100, step: 1 },
27
27
  em: { max: 50, step: 0.1 },
28
28
  rem: { max: 50, step: 0.1 },
29
+ svw: { max: 100, step: 1 },
30
+ lvw: { max: 100, step: 1 },
31
+ dvw: { max: 100, step: 1 },
32
+ svh: { max: 100, step: 1 },
33
+ lvh: { max: 100, step: 1 },
34
+ dvh: { max: 100, step: 1 },
35
+ vi: { max: 100, step: 1 },
36
+ svi: { max: 100, step: 1 },
37
+ lvi: { max: 100, step: 1 },
38
+ dvi: { max: 100, step: 1 },
39
+ vb: { max: 100, step: 1 },
40
+ svb: { max: 100, step: 1 },
41
+ lvb: { max: 100, step: 1 },
42
+ dvb: { max: 100, step: 1 },
43
+ vmin: { max: 100, step: 1 },
44
+ svmin: { max: 100, step: 1 },
45
+ lvmin: { max: 100, step: 1 },
46
+ dvmin: { max: 100, step: 1 },
47
+ vmax: { max: 100, step: 1 },
48
+ svmax: { max: 100, step: 1 },
49
+ lvmax: { max: 100, step: 1 },
50
+ dvmax: { max: 100, step: 1 },
29
51
  };
30
52
 
31
53
  /**
@@ -47,8 +69,9 @@ export default function HeightControl( {
47
69
  } ) {
48
70
  const customRangeValue = parseFloat( value );
49
71
 
72
+ const [ availableUnits ] = useSettings( 'spacing.units' );
50
73
  const units = useCustomUnits( {
51
- availableUnits: useSetting( 'spacing.units' ) || [
74
+ availableUnits: availableUnits || [
52
75
  '%',
53
76
  'px',
54
77
  'em',
@@ -86,10 +109,36 @@ export default function HeightControl( {
86
109
  // Convert to pixel value assuming a root size of 16px.
87
110
  onChange( Math.round( currentValue * 16 ) + newUnit );
88
111
  } else if (
89
- [ 'vh', 'vw', '%' ].includes( newUnit ) &&
112
+ [
113
+ '%',
114
+ 'vw',
115
+ 'svw',
116
+ 'lvw',
117
+ 'dvw',
118
+ 'vh',
119
+ 'svh',
120
+ 'lvh',
121
+ 'dvh',
122
+ 'vi',
123
+ 'svi',
124
+ 'lvi',
125
+ 'dvi',
126
+ 'vb',
127
+ 'svb',
128
+ 'lvb',
129
+ 'dvb',
130
+ 'vmin',
131
+ 'svmin',
132
+ 'lvmin',
133
+ 'dvmin',
134
+ 'vmax',
135
+ 'svmax',
136
+ 'lvmax',
137
+ 'dvmax',
138
+ ].includes( newUnit ) &&
90
139
  currentValue > 100
91
140
  ) {
92
- // When converting to `vh`, `vw`, or `%` units, cap the new value at 100.
141
+ // When converting to `%` or viewport-relative units, cap the new value at 100.
93
142
  onChange( 100 + newUnit );
94
143
  }
95
144
  };
@@ -38,7 +38,14 @@ function bubbleEvent( event, Constructor, frame ) {
38
38
  init[ key ] = event[ key ];
39
39
  }
40
40
 
41
- if ( event instanceof frame.ownerDocument.defaultView.MouseEvent ) {
41
+ // Check if the event is a MouseEvent generated within the iframe.
42
+ // If so, adjust the coordinates to be relative to the position of
43
+ // the iframe. This ensures that components such as Draggable
44
+ // receive coordinates relative to the window, instead of relative
45
+ // to the iframe. Without this, the Draggable event handler would
46
+ // result in components "jumping" position as soon as the user
47
+ // drags over the iframe.
48
+ if ( event instanceof frame.contentDocument.defaultView.MouseEvent ) {
42
49
  const rect = frame.getBoundingClientRect();
43
50
  init.clientX += rect.left;
44
51
  init.clientY += rect.top;
@@ -74,10 +74,6 @@ export default function AspectRatioDropdown( { toggleProps } ) {
74
74
  } }
75
75
  value={ aspect }
76
76
  aspectRatios={ [
77
- {
78
- title: __( '16:10' ),
79
- aspect: 16 / 10,
80
- },
81
77
  {
82
78
  title: __( '16:9' ),
83
79
  aspect: 16 / 9,
@@ -101,10 +97,6 @@ export default function AspectRatioDropdown( { toggleProps } ) {
101
97
  } }
102
98
  value={ aspect }
103
99
  aspectRatios={ [
104
- {
105
- title: __( '10:16' ),
106
- aspect: 10 / 16,
107
- },
108
100
  {
109
101
  title: __( '9:16' ),
110
102
  aspect: 9 / 16,
@@ -165,7 +165,7 @@ export { useBlockEditingMode } from './block-editing-mode';
165
165
  */
166
166
 
167
167
  export { default as BlockEditorProvider } from './provider';
168
- export { default as useSetting } from './use-setting';
168
+ export { useSettings, useSetting } from './use-settings';
169
169
  export { useBlockCommands } from './use-block-commands';
170
170
 
171
171
  /*
@@ -59,7 +59,7 @@ export { default as BlockCaption } from './block-caption';
59
59
  export { default as Caption } from './caption';
60
60
  export { default as PanelColorSettings } from './panel-color-settings';
61
61
  export { default as __experimentalPanelColorGradientSettings } from './colors-gradients/panel-color-gradient-settings';
62
- export { default as useSetting } from './use-setting';
62
+ export { useSettings, default as useSetting } from './use-settings';
63
63
  export {
64
64
  RecursionProvider as __experimentalRecursionProvider,
65
65
  useHasRecursion as __experimentalUseHasRecursion,
@@ -67,6 +67,7 @@ export {
67
67
  export { default as Warning } from './warning';
68
68
  export { default as ContrastChecker } from './contrast-checker';
69
69
  export { default as useMultipleOriginColorsAndGradients } from './colors-gradients/use-multiple-origin-colors-and-gradients';
70
+ export { default as UnsupportedBlockDetails } from './unsupported-block-details';
70
71
 
71
72
  export {
72
73
  BottomSheetSettings,
@@ -29,7 +29,7 @@ import { useBlockEditContext } from '../block-edit/context';
29
29
  import useBlockSync from '../provider/use-block-sync';
30
30
  import { store as blockEditorStore } from '../../store';
31
31
  import useBlockDropZone from '../use-block-drop-zone';
32
- import useSetting from '../use-setting';
32
+ import { useSettings } from '../use-settings';
33
33
 
34
34
  const EMPTY_OBJECT = {};
35
35
 
@@ -98,7 +98,7 @@ function UncontrolledInnerBlocks( props ) {
98
98
 
99
99
  const { allowSizingOnChildren = false } = defaultLayoutBlockSupport;
100
100
 
101
- const defaultLayout = useSetting( 'layout' ) || EMPTY_OBJECT;
101
+ const [ defaultLayout ] = useSettings( 'layout' );
102
102
 
103
103
  const usedLayout = layout || defaultLayoutBlockSupport;
104
104
 
@@ -292,6 +292,11 @@ $block-inserter-tabs-height: 44px;
292
292
  div[role="listitem"]:last-child {
293
293
  margin-top: auto;
294
294
  }
295
+
296
+ .block-editor-inserter__patterns-category {
297
+ // Account for the icon on the right so that it's visually balanced.
298
+ padding-right: $grid-unit-05;
299
+ }
295
300
  }
296
301
 
297
302
  .block-editor-inserter__patterns-category-dialog {
@@ -533,7 +538,10 @@ $block-inserter-tabs-height: 44px;
533
538
  margin-top: auto;
534
539
  }
535
540
 
536
- &__media-category {
541
+ .block-editor-inserter__media-tabs__media-category {
542
+ // Account for the icon on the right so that it's visually balanced.
543
+ padding-right: $grid-unit-05;
544
+
537
545
  &.is-selected {
538
546
  color: var(--wp-admin-theme-color);
539
547
  position: relative;
@@ -10,7 +10,7 @@ import { __ } from '@wordpress/i18n';
10
10
  /**
11
11
  * Internal dependencies
12
12
  */
13
- import useSetting from '../../components/use-setting';
13
+ import { useSettings } from '../../components/use-settings';
14
14
 
15
15
  /**
16
16
  * Control for letter-spacing.
@@ -28,8 +28,9 @@ export default function LetterSpacingControl( {
28
28
  __unstableInputWidth = '60px',
29
29
  ...otherProps
30
30
  } ) {
31
+ const [ availableUnits ] = useSettings( 'spacing.units' );
31
32
  const units = useCustomUnits( {
32
- availableUnits: useSetting( 'spacing.units' ) || [ 'px', 'em', 'rem' ],
33
+ availableUnits: availableUnits || [ 'px', 'em', 'rem' ],
33
34
  defaultValues: { px: 2, em: 0.2, rem: 0.2 },
34
35
  } );
35
36
  return (
@@ -4,6 +4,26 @@ Renders a link control. A link control is a controlled input which maintains a v
4
4
 
5
5
  It is designed to provide a standardized UI for the creation of a link throughout the Editor, see History section at bottom for further background.
6
6
 
7
+ ## Best Practices
8
+
9
+ ### Ensuring unique instances
10
+
11
+ It is possible that a given editor may render multiple instances of the `<LinkControl>` component. As a result, it is important to ensure each instance is unique across the editor to avoid state "leaking" between components.
12
+
13
+ Why would this happen?
14
+
15
+ React's reconciliation algorithm means that if you return the same element from a component, it keeps the nodes around as an optimization, even if the props change. This means that if you render two (or more) `<LinkControl>`s, it is possible that the `value` from one will appear in the other as you move between them.
16
+
17
+ As a result it is recommended that consumers provide a `key` prop to each instance of `<LinkControl>`:
18
+
19
+ ```jsx
20
+ <LinkControl key="some-unique-key" { ...props } />
21
+ ```
22
+
23
+ This will cause React to return the same component/element type but force remount a new instance, thus avoiding the issues described above.
24
+
25
+ For more information see: https://github.com/WordPress/gutenberg/pull/34742.
26
+
7
27
  ## Relationship to `<URLInput>`
8
28
 
9
29
  As of Gutenberg 7.4, `<LinkControl>` became the default link creation interface within the Block Editor, replacing previous disparate uses of `<URLInput>` and standardizing the UI.
@@ -59,6 +79,29 @@ The resulting default properties of `value` include:
59
79
  - `title` (`string`, optional): Link title.
60
80
  - `opensInNewTab` (`boolean`, optional): Whether link should open in a new browser tab. This value is only assigned when not providing a custom `settings` prop.
61
81
 
82
+ Note: `<LinkControl>` maintains an internal state tracking temporary user edits to the link `value` prior to submission. To avoid unwanted synchronization of this internal value, it is advised that the `value` prop is stablized (likely via memozation) before it is passed to the component. This will avoid unwanted loss of any changes users have may made whilst interacting with the control.
83
+
84
+ ```jsx
85
+ const memoizedValue = useMemo(
86
+ () => ( {
87
+ url: attributes.url,
88
+ type: attributes.type,
89
+ opensInNewTab: attributes.target === '_blank',
90
+ title: attributes.text,
91
+ } ),
92
+ [
93
+ attributes.url,
94
+ attributes.type,
95
+ attributes.target,
96
+ attributes.text,
97
+ ]
98
+ );
99
+
100
+ <LinkControl
101
+ value={ memoizedValue }
102
+ >
103
+ ```
104
+
62
105
  ### settings
63
106
 
64
107
  - Type: `Array`
@@ -11,6 +11,7 @@ import {
11
11
  Button,
12
12
  ExternalLink,
13
13
  __experimentalText as Text,
14
+ Tooltip,
14
15
  } from '@wordpress/components';
15
16
  import { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';
16
17
  import { Icon, globe, info, linkOff, edit } from '@wordpress/icons';
@@ -87,12 +88,17 @@ export default function LinkPreview( {
87
88
  <span className="block-editor-link-control__search-item-details">
88
89
  { ! isEmptyURL ? (
89
90
  <>
90
- <ExternalLink
91
- className="block-editor-link-control__search-item-title"
92
- href={ value.url }
91
+ <Tooltip
92
+ text={ value.url }
93
+ placement="bottom-start"
93
94
  >
94
- { displayTitle }
95
- </ExternalLink>
95
+ <ExternalLink
96
+ className="block-editor-link-control__search-item-title"
97
+ href={ value.url }
98
+ >
99
+ { displayTitle }
100
+ </ExternalLink>
101
+ </Tooltip>
96
102
 
97
103
  { value?.url && displayTitle !== displayURL && (
98
104
  <span className="block-editor-link-control__search-item-info">
@@ -11,6 +11,8 @@ import {
11
11
  postList,
12
12
  category,
13
13
  file,
14
+ home,
15
+ verse,
14
16
  } from '@wordpress/icons';
15
17
  import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
16
18
  import { safeDecodeURI, filterURLForDisplay, getPath } from '@wordpress/url';
@@ -31,6 +33,14 @@ function SearchItemIcon( { isURL, suggestion } ) {
31
33
  icon = globe;
32
34
  } else if ( suggestion.type in ICONS_MAP ) {
33
35
  icon = ICONS_MAP[ suggestion.type ];
36
+ if ( suggestion.type === 'page' ) {
37
+ if ( suggestion.isFrontPage ) {
38
+ icon = home;
39
+ }
40
+ if ( suggestion.isBlogHome ) {
41
+ icon = verse;
42
+ }
43
+ }
34
44
  }
35
45
 
36
46
  if ( icon ) {
@@ -135,6 +145,10 @@ function getVisualTypeName( suggestion ) {
135
145
  return 'front page';
136
146
  }
137
147
 
148
+ if ( suggestion.isBlogHome ) {
149
+ return 'blog home';
150
+ }
151
+
138
152
  // Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label.
139
153
  return suggestion.type === 'post_tag' ? 'tag' : suggestion.type;
140
154
  }
@@ -123,6 +123,7 @@ export default function LinkControlSearchResults( {
123
123
  searchTerm={ currentInputValue }
124
124
  shouldShowType={ shouldShowSuggestionsTypes }
125
125
  isFrontPage={ suggestion?.isFrontPage }
126
+ isBlogHome={ suggestion?.isBlogHome }
126
127
  />
127
128
  );
128
129
  } ) }
@@ -297,9 +297,9 @@ $preview-image-height: 140px;
297
297
 
298
298
  img {
299
299
  display: block; // remove unwanted space below image
300
- max-width: 100%;
301
- height: $preview-image-height; // limit height
302
- max-height: $preview-image-height; // limit height
300
+ width: 100%;
301
+ height: 100%;
302
+ object-fit: contain;
303
303
  }
304
304
  }
305
305
  }
@@ -2056,6 +2056,25 @@ describe( 'Addition Settings UI', () => {
2056
2056
  } )
2057
2057
  );
2058
2058
  } );
2059
+
2060
+ it( 'should show tooltip with full URL alongside filtered display', async () => {
2061
+ const user = userEvent.setup();
2062
+ const url =
2063
+ 'http://www.wordpress.org/wp-content/uploads/a-document.pdf';
2064
+ render( <LinkControl value={ { url } } /> );
2065
+
2066
+ const link = screen.getByRole( 'link' );
2067
+
2068
+ expect( link ).toHaveTextContent( 'a-document.pdf' );
2069
+
2070
+ await user.hover( link );
2071
+
2072
+ expect( await screen.findByRole( 'tooltip' ) ).toHaveTextContent( url );
2073
+
2074
+ await user.unhover( link );
2075
+
2076
+ expect( screen.queryByRole( 'tooltip' ) ).not.toBeInTheDocument();
2077
+ } );
2059
2078
  } );
2060
2079
 
2061
2080
  describe( 'Post types', () => {
@@ -1,21 +1,25 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useState, useEffect } from '@wordpress/element';
4
+ import { useState } from '@wordpress/element';
5
+
6
+ /**
7
+ * External dependencies
8
+ */
9
+ import fastDeepEqual from 'fast-deep-equal';
5
10
 
6
11
  export default function useInternalValue( value ) {
7
12
  const [ internalValue, setInternalValue ] = useState( value || {} );
13
+ const [ previousValue, setPreviousValue ] = useState( value );
8
14
 
9
15
  // If the value prop changes, update the internal state.
10
- useEffect( () => {
11
- setInternalValue( ( prevValue ) => {
12
- if ( value && value !== prevValue ) {
13
- return value;
14
- }
15
-
16
- return prevValue;
17
- } );
18
- }, [ value ] );
16
+ // See:
17
+ // - https://github.com/WordPress/gutenberg/pull/51387#issuecomment-1722927384.
18
+ // - https://react.dev/reference/react/useState#storing-information-from-previous-renders.
19
+ if ( ! fastDeepEqual( value, previousValue ) ) {
20
+ setPreviousValue( value );
21
+ setInternalValue( value );
22
+ }
19
23
 
20
24
  const setInternalURLInputValue = ( nextValue ) => {
21
25
  setInternalValue( {
@@ -52,7 +52,8 @@ const handleEntitySearch = async (
52
52
  suggestionsQuery,
53
53
  fetchSearchSuggestions,
54
54
  withCreateSuggestion,
55
- pageOnFront
55
+ pageOnFront,
56
+ pageForPosts
56
57
  ) => {
57
58
  const { isInitialSuggestions } = suggestionsQuery;
58
59
 
@@ -63,6 +64,9 @@ const handleEntitySearch = async (
63
64
  if ( Number( result.id ) === pageOnFront ) {
64
65
  result.isFrontPage = true;
65
66
  return result;
67
+ } else if ( Number( result.id ) === pageForPosts ) {
68
+ result.isBlogHome = true;
69
+ return result;
66
70
  }
67
71
 
68
72
  return result;
@@ -102,18 +106,21 @@ const handleEntitySearch = async (
102
106
  export default function useSearchHandler(
103
107
  suggestionsQuery,
104
108
  allowDirectEntry,
105
- withCreateSuggestion,
106
- withURLSuggestion
109
+ withCreateSuggestion
107
110
  ) {
108
- const { fetchSearchSuggestions, pageOnFront } = useSelect( ( select ) => {
109
- const { getSettings } = select( blockEditorStore );
110
-
111
- return {
112
- pageOnFront: getSettings().pageOnFront,
113
- fetchSearchSuggestions:
114
- getSettings().__experimentalFetchLinkSuggestions,
115
- };
116
- }, [] );
111
+ const { fetchSearchSuggestions, pageOnFront, pageForPosts } = useSelect(
112
+ ( select ) => {
113
+ const { getSettings } = select( blockEditorStore );
114
+
115
+ return {
116
+ pageOnFront: getSettings().pageOnFront,
117
+ pageForPosts: getSettings().pageForPosts,
118
+ fetchSearchSuggestions:
119
+ getSettings().__experimentalFetchLinkSuggestions,
120
+ };
121
+ },
122
+ []
123
+ );
117
124
 
118
125
  const directEntryHandler = allowDirectEntry
119
126
  ? handleDirectEntry
@@ -128,17 +135,17 @@ export default function useSearchHandler(
128
135
  { ...suggestionsQuery, isInitialSuggestions },
129
136
  fetchSearchSuggestions,
130
137
  withCreateSuggestion,
131
- withURLSuggestion,
132
- pageOnFront
138
+ pageOnFront,
139
+ pageForPosts
133
140
  );
134
141
  },
135
142
  [
136
143
  directEntryHandler,
137
144
  fetchSearchSuggestions,
138
145
  pageOnFront,
146
+ pageForPosts,
139
147
  suggestionsQuery,
140
148
  withCreateSuggestion,
141
- withURLSuggestion,
142
149
  ]
143
150
  );
144
151
  }
@@ -6,7 +6,10 @@ import {
6
6
  useMergeRefs,
7
7
  __experimentalUseFixedWindowList as useFixedWindowList,
8
8
  } from '@wordpress/compose';
9
- import { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';
9
+ import {
10
+ __experimentalTreeGrid as TreeGrid,
11
+ VisuallyHidden,
12
+ } from '@wordpress/components';
10
13
  import { AsyncModeProvider, useSelect } from '@wordpress/data';
11
14
  import deprecated from '@wordpress/deprecated';
12
15
  import {
@@ -257,12 +260,20 @@ function ListViewComponent(
257
260
  return null;
258
261
  }
259
262
 
263
+ const describedById =
264
+ description && `block-editor-list-view-description-${ instanceId }`;
265
+
260
266
  return (
261
267
  <AsyncModeProvider value={ true }>
262
268
  <ListViewDropIndicator
263
269
  listViewRef={ elementRef }
264
270
  blockDropTarget={ blockDropTarget }
265
271
  />
272
+ { description && (
273
+ <VisuallyHidden id={ describedById }>
274
+ { description }
275
+ </VisuallyHidden>
276
+ ) }
266
277
  <TreeGrid
267
278
  id={ id }
268
279
  className="block-editor-list-view-tree"
@@ -272,8 +283,7 @@ function ListViewComponent(
272
283
  onExpandRow={ expandRow }
273
284
  onFocusRow={ focusRow }
274
285
  applicationAriaLabel={ __( 'Block navigation structure' ) }
275
- // eslint-disable-next-line jsx-a11y/aria-props
276
- aria-description={ description }
286
+ aria-describedby={ describedById }
277
287
  >
278
288
  <ListViewContext.Provider value={ contextValue }>
279
289
  <ListViewBranch