@wordpress/block-editor 17.1.0 → 17.2.1-next.v.202609171837.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 (541) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +214 -214
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/alignment-control/ui.cjs.map +2 -2
  5. package/build/components/background-image-control/index.cjs +1 -1
  6. package/build/components/background-image-control/index.cjs.map +2 -2
  7. package/build/components/block-alignment-control/ui.cjs +21 -7
  8. package/build/components/block-alignment-control/ui.cjs.map +3 -3
  9. package/build/components/block-alignment-control/use-available-alignments.cjs +60 -13
  10. package/build/components/block-alignment-control/use-available-alignments.cjs.map +2 -2
  11. package/build/components/block-allowed-blocks/allowed-blocks-control.cjs.map +2 -2
  12. package/build/components/block-bindings/attribute-control.cjs +30 -30
  13. package/build/components/block-bindings/attribute-control.cjs.map +3 -3
  14. package/build/components/block-bindings/source-fields-list.cjs +27 -32
  15. package/build/components/block-bindings/source-fields-list.cjs.map +3 -3
  16. package/build/components/block-canvas/index.cjs.map +2 -2
  17. package/build/components/block-card/index.cjs +1 -2
  18. package/build/components/block-card/index.cjs.map +3 -3
  19. package/build/components/block-edit/edit.cjs.map +2 -2
  20. package/build/components/block-heading-level-dropdown/index.cjs.map +2 -2
  21. package/build/components/block-icon/index.cjs.map +2 -2
  22. package/build/components/block-inspector/edit-contents.cjs.map +2 -2
  23. package/build/components/block-inspector/index.cjs +27 -8
  24. package/build/components/block-inspector/index.cjs.map +3 -3
  25. package/build/components/block-keyboard-shortcuts/index.cjs.map +2 -2
  26. package/build/components/block-list/block-html.cjs +1 -12
  27. package/build/components/block-list/block-html.cjs.map +3 -3
  28. package/build/components/block-list/block.cjs +2 -4
  29. package/build/components/block-list/block.cjs.map +2 -2
  30. package/build/components/block-list/layout.cjs +1 -1
  31. package/build/components/block-list/layout.cjs.map +2 -2
  32. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  33. package/build/components/block-lock/modal.cjs +1 -3
  34. package/build/components/block-lock/modal.cjs.map +2 -2
  35. package/build/components/block-parent-selector/index.cjs +8 -5
  36. package/build/components/block-parent-selector/index.cjs.map +2 -2
  37. package/build/components/block-popover/index.cjs.map +2 -2
  38. package/build/components/block-rename/modal.cjs.map +2 -2
  39. package/build/components/block-settings-menu/block-settings-dropdown.cjs.map +2 -2
  40. package/build/components/block-styles/utils.cjs.map +2 -2
  41. package/build/components/block-switcher/index.cjs.map +2 -2
  42. package/build/components/block-toolbar/edit-section-button.cjs.map +2 -2
  43. package/build/components/block-toolbar/index.cjs +6 -4
  44. package/build/components/block-toolbar/index.cjs.map +2 -2
  45. package/build/components/block-toolbar/switch-section-style.cjs.map +2 -2
  46. package/build/components/block-variation-transforms/index.cjs +28 -18
  47. package/build/components/block-variation-transforms/index.cjs.map +3 -3
  48. package/build/components/block-visibility/modal.cjs.map +2 -2
  49. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  50. package/build/components/border-radius-control/index.cjs.map +2 -2
  51. package/build/components/color-palette/with-color-context.cjs.map +2 -2
  52. package/build/components/colors/with-colors.cjs.map +2 -2
  53. package/build/components/colors-gradients/control.cjs.map +2 -2
  54. package/build/components/contrast-checker/index.cjs.map +2 -2
  55. package/build/components/date-format-picker/index.cjs.map +2 -2
  56. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
  57. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  58. package/build/components/font-sizes/with-font-sizes.cjs.map +2 -2
  59. package/build/components/global-styles/background-panel.cjs +1 -1
  60. package/build/components/global-styles/background-panel.cjs.map +2 -2
  61. package/build/components/global-styles/border-panel.cjs +1 -1
  62. package/build/components/global-styles/border-panel.cjs.map +2 -2
  63. package/build/components/global-styles/color-gradient-dropdown-item.cjs +1 -1
  64. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +2 -2
  65. package/build/components/global-styles/color-panel.cjs +1 -1
  66. package/build/components/global-styles/color-panel.cjs.map +2 -2
  67. package/build/components/global-styles/dimensions-panel.cjs +1 -1
  68. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  69. package/build/components/global-styles/filters-panel.cjs +1 -1
  70. package/build/components/global-styles/filters-panel.cjs.map +2 -2
  71. package/build/components/global-styles/hooks.cjs +1 -0
  72. package/build/components/global-styles/hooks.cjs.map +2 -2
  73. package/build/components/global-styles/inheritance/index.cjs +3 -3
  74. package/build/components/global-styles/inheritance/index.cjs.map +2 -2
  75. package/build/components/global-styles/inherited-value-context.cjs +0 -5
  76. package/build/components/global-styles/inherited-value-context.cjs.map +2 -2
  77. package/build/components/global-styles/state-control-badges.cjs +0 -1
  78. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  79. package/build/components/global-styles/state-control.cjs +6 -4
  80. package/build/components/global-styles/state-control.cjs.map +2 -2
  81. package/build/components/global-styles/text-shadow-panel.cjs +254 -0
  82. package/build/components/global-styles/text-shadow-panel.cjs.map +7 -0
  83. package/build/components/global-styles/typography-panel.cjs +46 -5
  84. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  85. package/build/components/global-styles/typography-utils.cjs.map +2 -2
  86. package/build/components/global-styles/utils.cjs.map +2 -2
  87. package/build/components/html-element-control/index.cjs.map +3 -3
  88. package/build/components/iframe/index.cjs.map +2 -2
  89. package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
  90. package/build/components/image-size-control/index.cjs.map +3 -3
  91. package/build/components/inner-blocks/index.cjs +6 -1
  92. package/build/components/inner-blocks/index.cjs.map +2 -2
  93. package/build/components/inner-content/index.cjs.map +2 -2
  94. package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs +4 -23
  95. package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs.map +2 -2
  96. package/build/components/inserter/block-patterns-tab/utils.cjs +26 -0
  97. package/build/components/inserter/block-patterns-tab/utils.cjs.map +2 -2
  98. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  99. package/build/components/inserter/hooks/use-insertion-point.cjs.map +2 -2
  100. package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
  101. package/build/components/inserter/media-tab/media-panel.cjs.map +2 -2
  102. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  103. package/build/components/inserter-list-item/index.cjs.map +2 -2
  104. package/build/components/inspector-controls/list-view-content-popover.cjs.map +2 -2
  105. package/build/components/link-control/search-results.cjs.map +2 -2
  106. package/build/components/link-control/use-search-handler.cjs +3 -0
  107. package/build/components/link-control/use-search-handler.cjs.map +2 -2
  108. package/build/components/list-view/branch.cjs.map +2 -2
  109. package/build/components/list-view/drop-indicator.cjs.map +2 -2
  110. package/build/components/list-view/index.cjs.map +2 -2
  111. package/build/components/list-view/use-list-view-drop-zone.cjs.map +2 -2
  112. package/build/components/list-view/utils.cjs.map +2 -2
  113. package/build/components/media-replace-flow/index.cjs +4 -1
  114. package/build/components/media-replace-flow/index.cjs.map +2 -2
  115. package/build/components/plain-text/index.cjs +1 -2
  116. package/build/components/plain-text/index.cjs.map +3 -3
  117. package/build/components/preset-input-control/index.cjs.map +2 -2
  118. package/build/components/provider/index.cjs +3 -1
  119. package/build/components/provider/index.cjs.map +2 -2
  120. package/build/components/provider/use-block-sync.cjs.map +2 -2
  121. package/build/components/publish-date-time-picker/index.cjs.map +2 -2
  122. package/build/components/resizable-box-popover/index.cjs +1 -1
  123. package/build/components/resizable-box-popover/index.cjs.map +1 -1
  124. package/build/components/resolution-tool/index.cjs.map +3 -3
  125. package/build/components/rich-text/event-listeners/enter.cjs +8 -22
  126. package/build/components/rich-text/event-listeners/enter.cjs.map +2 -2
  127. package/build/components/rich-text/format-edit.cjs.map +2 -2
  128. package/build/components/rich-text/index.cjs +20 -0
  129. package/build/components/rich-text/index.cjs.map +2 -2
  130. package/build/components/rich-text/multiline.cjs +10 -2
  131. package/build/components/rich-text/multiline.cjs.map +2 -2
  132. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.cjs.map +2 -2
  133. package/build/components/typewriter/index.cjs.map +2 -2
  134. package/build/components/use-block-commands/index.cjs.map +2 -2
  135. package/build/components/writing-flow/index.cjs +3 -0
  136. package/build/components/writing-flow/index.cjs.map +2 -2
  137. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  138. package/build/components/writing-flow/use-selection-observer.cjs +5 -3
  139. package/build/components/writing-flow/use-selection-observer.cjs.map +2 -2
  140. package/build/hooks/align.cjs +3 -5
  141. package/build/hooks/align.cjs.map +2 -2
  142. package/build/hooks/background.cjs.map +2 -2
  143. package/build/hooks/block-bindings.cjs.map +2 -2
  144. package/build/hooks/border.cjs.map +2 -2
  145. package/build/hooks/contrast-checker.cjs.map +2 -2
  146. package/build/hooks/dimensions.cjs.map +2 -2
  147. package/build/hooks/duotone.cjs.map +2 -2
  148. package/build/hooks/elements.cjs.map +2 -2
  149. package/build/hooks/fit-text.cjs.map +2 -2
  150. package/build/hooks/gap.cjs +2 -1
  151. package/build/hooks/gap.cjs.map +3 -3
  152. package/build/hooks/index.cjs +4 -2
  153. package/build/hooks/index.cjs.map +3 -3
  154. package/build/hooks/layout-child.cjs.map +2 -2
  155. package/build/hooks/layout.cjs +15 -14
  156. package/build/hooks/layout.cjs.map +3 -3
  157. package/build/hooks/position.cjs +3 -31
  158. package/build/hooks/position.cjs.map +2 -2
  159. package/build/hooks/states.cjs +3 -2
  160. package/build/hooks/states.cjs.map +2 -2
  161. package/build/hooks/text-shadow.cjs +100 -0
  162. package/build/hooks/text-shadow.cjs.map +7 -0
  163. package/build/hooks/typography.cjs +30 -6
  164. package/build/hooks/typography.cjs.map +2 -2
  165. package/build/hooks/utils.cjs +24 -2
  166. package/build/hooks/utils.cjs.map +2 -2
  167. package/build/layouts/grid.cjs.map +2 -2
  168. package/build/layouts/utils.cjs +7 -2
  169. package/build/layouts/utils.cjs.map +2 -2
  170. package/build/private-apis.cjs +9 -6
  171. package/build/private-apis.cjs.map +2 -2
  172. package/build/store/actions.cjs +26 -4
  173. package/build/store/actions.cjs.map +3 -3
  174. package/build/store/private-selectors.cjs.map +2 -2
  175. package/build/store/reducer.cjs.map +2 -2
  176. package/build/store/selectors.cjs.map +2 -2
  177. package/build/utils/get-font-styles-and-weights.cjs.map +2 -2
  178. package/build/utils/transform-styles/index.cjs.map +1 -1
  179. package/build-module/autocompleters/block.mjs.map +2 -2
  180. package/build-module/components/alignment-control/ui.mjs.map +2 -2
  181. package/build-module/components/background-image-control/index.mjs +2 -2
  182. package/build-module/components/background-image-control/index.mjs.map +2 -2
  183. package/build-module/components/block-alignment-control/ui.mjs +21 -7
  184. package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
  185. package/build-module/components/block-alignment-control/use-available-alignments.mjs +56 -13
  186. package/build-module/components/block-alignment-control/use-available-alignments.mjs.map +2 -2
  187. package/build-module/components/block-allowed-blocks/allowed-blocks-control.mjs.map +2 -2
  188. package/build-module/components/block-bindings/attribute-control.mjs +31 -32
  189. package/build-module/components/block-bindings/attribute-control.mjs.map +2 -2
  190. package/build-module/components/block-bindings/source-fields-list.mjs +25 -30
  191. package/build-module/components/block-bindings/source-fields-list.mjs.map +2 -2
  192. package/build-module/components/block-canvas/index.mjs.map +2 -2
  193. package/build-module/components/block-card/index.mjs +3 -8
  194. package/build-module/components/block-card/index.mjs.map +2 -2
  195. package/build-module/components/block-edit/edit.mjs.map +2 -2
  196. package/build-module/components/block-heading-level-dropdown/index.mjs.map +2 -2
  197. package/build-module/components/block-icon/index.mjs.map +2 -2
  198. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  199. package/build-module/components/block-inspector/index.mjs +29 -10
  200. package/build-module/components/block-inspector/index.mjs.map +2 -2
  201. package/build-module/components/block-keyboard-shortcuts/index.mjs.map +2 -2
  202. package/build-module/components/block-list/block-html.mjs +1 -2
  203. package/build-module/components/block-list/block-html.mjs.map +2 -2
  204. package/build-module/components/block-list/block.mjs +2 -4
  205. package/build-module/components/block-list/block.mjs.map +2 -2
  206. package/build-module/components/block-list/layout.mjs +1 -1
  207. package/build-module/components/block-list/layout.mjs.map +2 -2
  208. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  209. package/build-module/components/block-lock/modal.mjs +1 -3
  210. package/build-module/components/block-lock/modal.mjs.map +2 -2
  211. package/build-module/components/block-parent-selector/index.mjs +8 -5
  212. package/build-module/components/block-parent-selector/index.mjs.map +2 -2
  213. package/build-module/components/block-popover/index.mjs.map +2 -2
  214. package/build-module/components/block-rename/modal.mjs.map +2 -2
  215. package/build-module/components/block-settings-menu/block-settings-dropdown.mjs.map +2 -2
  216. package/build-module/components/block-styles/utils.mjs.map +2 -2
  217. package/build-module/components/block-switcher/index.mjs.map +2 -2
  218. package/build-module/components/block-toolbar/edit-section-button.mjs.map +2 -2
  219. package/build-module/components/block-toolbar/index.mjs +6 -4
  220. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  221. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  222. package/build-module/components/block-variation-transforms/index.mjs +30 -21
  223. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  224. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  225. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  226. package/build-module/components/border-radius-control/index.mjs.map +2 -2
  227. package/build-module/components/color-palette/with-color-context.mjs.map +2 -2
  228. package/build-module/components/colors/with-colors.mjs.map +2 -2
  229. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  230. package/build-module/components/contrast-checker/index.mjs.map +2 -2
  231. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  232. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +2 -2
  233. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  234. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  235. package/build-module/components/font-sizes/with-font-sizes.mjs.map +2 -2
  236. package/build-module/components/global-styles/background-panel.mjs +2 -2
  237. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  238. package/build-module/components/global-styles/border-panel.mjs +2 -2
  239. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  240. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +2 -2
  241. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
  242. package/build-module/components/global-styles/color-panel.mjs +2 -2
  243. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  244. package/build-module/components/global-styles/dimensions-panel.mjs +2 -2
  245. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  246. package/build-module/components/global-styles/filters-panel.mjs +2 -2
  247. package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
  248. package/build-module/components/global-styles/hooks.mjs +1 -0
  249. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  250. package/build-module/components/global-styles/inheritance/index.mjs +2 -2
  251. package/build-module/components/global-styles/inheritance/index.mjs.map +2 -2
  252. package/build-module/components/global-styles/inherited-value-context.mjs +0 -5
  253. package/build-module/components/global-styles/inherited-value-context.mjs.map +2 -2
  254. package/build-module/components/global-styles/state-control-badges.mjs +0 -1
  255. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  256. package/build-module/components/global-styles/state-control.mjs +6 -4
  257. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  258. package/build-module/components/global-styles/text-shadow-panel.mjs +224 -0
  259. package/build-module/components/global-styles/text-shadow-panel.mjs.map +7 -0
  260. package/build-module/components/global-styles/typography-panel.mjs +47 -6
  261. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  262. package/build-module/components/global-styles/typography-utils.mjs.map +2 -2
  263. package/build-module/components/global-styles/utils.mjs.map +2 -2
  264. package/build-module/components/html-element-control/index.mjs +2 -2
  265. package/build-module/components/html-element-control/index.mjs.map +2 -2
  266. package/build-module/components/iframe/index.mjs.map +2 -2
  267. package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
  268. package/build-module/components/image-size-control/index.mjs +2 -2
  269. package/build-module/components/image-size-control/index.mjs.map +2 -2
  270. package/build-module/components/inner-blocks/index.mjs +6 -1
  271. package/build-module/components/inner-blocks/index.mjs.map +2 -2
  272. package/build-module/components/inner-content/index.mjs.map +2 -2
  273. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs +6 -24
  274. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs.map +2 -2
  275. package/build-module/components/inserter/block-patterns-tab/utils.mjs +25 -0
  276. package/build-module/components/inserter/block-patterns-tab/utils.mjs.map +2 -2
  277. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  278. package/build-module/components/inserter/hooks/use-insertion-point.mjs.map +2 -2
  279. package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
  280. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  281. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  282. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  283. package/build-module/components/inspector-controls/list-view-content-popover.mjs.map +2 -2
  284. package/build-module/components/link-control/search-results.mjs.map +2 -2
  285. package/build-module/components/link-control/use-search-handler.mjs +3 -0
  286. package/build-module/components/link-control/use-search-handler.mjs.map +2 -2
  287. package/build-module/components/list-view/branch.mjs.map +2 -2
  288. package/build-module/components/list-view/drop-indicator.mjs.map +2 -2
  289. package/build-module/components/list-view/index.mjs.map +2 -2
  290. package/build-module/components/list-view/use-list-view-drop-zone.mjs.map +2 -2
  291. package/build-module/components/list-view/utils.mjs.map +2 -2
  292. package/build-module/components/media-replace-flow/index.mjs +4 -1
  293. package/build-module/components/media-replace-flow/index.mjs.map +2 -2
  294. package/build-module/components/plain-text/index.mjs +1 -2
  295. package/build-module/components/plain-text/index.mjs.map +2 -2
  296. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  297. package/build-module/components/provider/index.mjs +3 -1
  298. package/build-module/components/provider/index.mjs.map +2 -2
  299. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  300. package/build-module/components/publish-date-time-picker/index.mjs.map +2 -2
  301. package/build-module/components/resizable-box-popover/index.mjs +1 -1
  302. package/build-module/components/resizable-box-popover/index.mjs.map +1 -1
  303. package/build-module/components/resolution-tool/index.mjs +2 -2
  304. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  305. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -22
  306. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  307. package/build-module/components/rich-text/format-edit.mjs.map +2 -2
  308. package/build-module/components/rich-text/index.mjs +21 -0
  309. package/build-module/components/rich-text/index.mjs.map +2 -2
  310. package/build-module/components/rich-text/multiline.mjs +11 -3
  311. package/build-module/components/rich-text/multiline.mjs.map +2 -2
  312. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.mjs.map +2 -2
  313. package/build-module/components/typewriter/index.mjs.map +2 -2
  314. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  315. package/build-module/components/writing-flow/index.mjs +3 -0
  316. package/build-module/components/writing-flow/index.mjs.map +2 -2
  317. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  318. package/build-module/components/writing-flow/use-selection-observer.mjs +5 -3
  319. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  320. package/build-module/hooks/align.mjs +6 -6
  321. package/build-module/hooks/align.mjs.map +2 -2
  322. package/build-module/hooks/background.mjs.map +2 -2
  323. package/build-module/hooks/block-bindings.mjs.map +2 -2
  324. package/build-module/hooks/border.mjs.map +2 -2
  325. package/build-module/hooks/contrast-checker.mjs.map +2 -2
  326. package/build-module/hooks/dimensions.mjs.map +2 -2
  327. package/build-module/hooks/duotone.mjs.map +2 -2
  328. package/build-module/hooks/elements.mjs.map +2 -2
  329. package/build-module/hooks/fit-text.mjs.map +2 -2
  330. package/build-module/hooks/gap.mjs +2 -1
  331. package/build-module/hooks/gap.mjs.map +2 -2
  332. package/build-module/hooks/index.mjs +4 -2
  333. package/build-module/hooks/index.mjs.map +2 -2
  334. package/build-module/hooks/layout-child.mjs.map +2 -2
  335. package/build-module/hooks/layout.mjs +6 -5
  336. package/build-module/hooks/layout.mjs.map +2 -2
  337. package/build-module/hooks/position.mjs +5 -33
  338. package/build-module/hooks/position.mjs.map +2 -2
  339. package/build-module/hooks/states.mjs +3 -2
  340. package/build-module/hooks/states.mjs.map +2 -2
  341. package/build-module/hooks/text-shadow.mjs +65 -0
  342. package/build-module/hooks/text-shadow.mjs.map +7 -0
  343. package/build-module/hooks/typography.mjs +30 -6
  344. package/build-module/hooks/typography.mjs.map +2 -2
  345. package/build-module/hooks/utils.mjs +24 -2
  346. package/build-module/hooks/utils.mjs.map +2 -2
  347. package/build-module/layouts/grid.mjs.map +2 -2
  348. package/build-module/layouts/utils.mjs +5 -1
  349. package/build-module/layouts/utils.mjs.map +2 -2
  350. package/build-module/private-apis.mjs +6 -2
  351. package/build-module/private-apis.mjs.map +2 -2
  352. package/build-module/store/actions.mjs +28 -5
  353. package/build-module/store/actions.mjs.map +3 -3
  354. package/build-module/store/private-selectors.mjs.map +2 -2
  355. package/build-module/store/reducer.mjs.map +2 -2
  356. package/build-module/store/selectors.mjs.map +2 -2
  357. package/build-module/utils/get-font-styles-and-weights.mjs.map +2 -2
  358. package/build-module/utils/transform-styles/index.mjs.map +1 -1
  359. package/build-style/content-rtl.css +7 -2
  360. package/build-style/content.css +7 -2
  361. package/build-style/style-rtl.css +90 -25
  362. package/build-style/style.css +92 -25
  363. package/package.json +42 -43
  364. package/src/autocompleters/block.jsx +4 -4
  365. package/src/components/alignment-control/ui.jsx +1 -1
  366. package/src/components/background-image-control/index.jsx +3 -3
  367. package/src/components/block-alignment-control/test/index.jsdom.test.jsx +267 -0
  368. package/src/components/block-alignment-control/ui.jsx +47 -9
  369. package/src/components/block-alignment-control/use-available-alignments.js +106 -20
  370. package/src/components/block-allowed-blocks/allowed-blocks-control.jsx +1 -1
  371. package/src/components/block-bindings/attribute-control.jsx +27 -29
  372. package/src/components/block-bindings/source-fields-list.jsx +22 -32
  373. package/src/components/block-bindings/test/attribute-control.jsdom.test.jsx +115 -0
  374. package/src/components/block-canvas/index.jsx +1 -1
  375. package/src/components/block-card/index.jsx +5 -11
  376. package/src/components/block-card/style.scss +1 -0
  377. package/src/components/block-edit/edit.jsx +1 -1
  378. package/src/components/block-heading-level-dropdown/index.jsx +1 -1
  379. package/src/components/block-icon/index.jsx +1 -1
  380. package/src/components/block-icon/test/index.browser.test.jsx +74 -0
  381. package/src/components/block-inspector/edit-contents.jsx +2 -2
  382. package/src/components/block-inspector/index.jsx +46 -15
  383. package/src/components/block-inspector/style.scss +16 -0
  384. package/src/components/block-keyboard-shortcuts/index.jsx +2 -2
  385. package/src/components/block-list/block-html.jsx +2 -3
  386. package/src/components/block-list/block.jsx +7 -5
  387. package/src/components/block-list/content.scss +3 -2
  388. package/src/components/block-list/layout.jsx +4 -1
  389. package/src/components/block-list/test/layout.jsdom.test.js +40 -0
  390. package/src/components/block-list/use-block-props/index.js +1 -1
  391. package/src/components/block-lock/modal.jsx +2 -3
  392. package/src/components/block-lock/style.scss +1 -1
  393. package/src/components/block-mover/style.scss +0 -13
  394. package/src/components/block-parent-selector/index.jsx +12 -6
  395. package/src/components/block-patterns-list/style.scss +1 -1
  396. package/src/components/block-popover/index.jsx +1 -1
  397. package/src/components/block-rename/modal.jsx +3 -3
  398. package/src/components/block-settings-menu/block-settings-dropdown.jsx +1 -1
  399. package/src/components/block-styles/utils.js +1 -1
  400. package/src/components/block-switcher/index.jsx +3 -3
  401. package/src/components/block-toolbar/edit-section-button.jsx +2 -2
  402. package/src/components/block-toolbar/index.jsx +8 -4
  403. package/src/components/block-toolbar/switch-section-style.jsx +1 -1
  404. package/src/components/block-variation-transforms/index.jsx +24 -23
  405. package/src/components/block-variation-transforms/test/index.jsdom.test.jsx +93 -0
  406. package/src/components/block-visibility/modal.jsx +7 -7
  407. package/src/components/block-visibility/style.scss +1 -1
  408. package/src/components/block-visibility/viewport-visibility-info.jsx +5 -7
  409. package/src/components/border-radius-control/index.jsx +2 -2
  410. package/src/components/border-radius-control/test/index.jsdom.test.jsx +0 -22
  411. package/src/components/border-radius-control/test/select.browser.test.js +30 -0
  412. package/src/components/color-palette/with-color-context.jsx +1 -1
  413. package/src/components/colors/with-colors.jsx +1 -1
  414. package/src/components/colors-gradients/control.jsx +2 -2
  415. package/src/components/colors-gradients/test/{control.jsdom.test.jsx → control.browser.test.jsx} +6 -9
  416. package/src/components/contrast-checker/index.jsx +2 -2
  417. package/src/components/date-format-picker/index.jsx +2 -2
  418. package/src/components/dimensions-tool/aspect-ratio-tool.jsx +4 -4
  419. package/src/components/dimensions-tool/test/index.jsdom.test.jsx +17 -11
  420. package/src/components/dimensions-tool/width-height-tool.jsx +2 -2
  421. package/src/components/font-sizes/with-font-sizes.jsx +2 -3
  422. package/src/components/global-styles/background-panel.jsx +2 -2
  423. package/src/components/global-styles/border-panel.jsx +2 -2
  424. package/src/components/global-styles/color-gradient-dropdown-item.jsx +3 -3
  425. package/src/components/global-styles/color-panel.jsx +3 -3
  426. package/src/components/global-styles/dimensions-panel.jsx +6 -6
  427. package/src/components/global-styles/filters-panel.jsx +2 -2
  428. package/src/components/global-styles/hooks.js +1 -0
  429. package/src/components/global-styles/inheritance/index.jsx +9 -6
  430. package/src/components/global-styles/inheritance/test/{index.jsdom.test.jsx → index.browser.test.jsx} +34 -28
  431. package/src/components/global-styles/inherited-value-context.js +1 -9
  432. package/src/components/global-styles/state-control-badges.jsx +0 -1
  433. package/src/components/global-styles/state-control.jsx +12 -3
  434. package/src/components/global-styles/style.scss +68 -0
  435. package/src/components/global-styles/test/{color-panel.jsdom.test.jsx → color-panel.browser.test.jsx} +53 -54
  436. package/src/components/global-styles/test/inherited-value-context-core.jsdom.test.js +17 -26
  437. package/src/components/global-styles/test/{typography-panel-core.jsdom.test.jsx → typography-panel-core.browser.test.jsx} +84 -39
  438. package/src/components/global-styles/test/{typography-panel.jsdom.test.jsx → typography-panel.browser.test.jsx} +80 -122
  439. package/src/components/global-styles/text-shadow-panel.tsx +257 -0
  440. package/src/components/global-styles/typography-panel.jsx +52 -13
  441. package/src/components/global-styles/typography-utils.js +2 -2
  442. package/src/components/global-styles/utils.js +1 -1
  443. package/src/components/html-element-control/index.jsx +2 -2
  444. package/src/components/iframe/index.jsx +1 -1
  445. package/src/components/iframe/use-scale-canvas.js +1 -1
  446. package/src/components/image-size-control/index.jsx +2 -2
  447. package/src/components/inner-blocks/index.jsx +9 -1
  448. package/src/components/inner-content/index.jsx +1 -1
  449. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +7 -33
  450. package/src/components/inserter/block-patterns-tab/utils.js +44 -0
  451. package/src/components/inserter/hooks/use-block-types-state.js +2 -2
  452. package/src/components/inserter/hooks/use-insertion-point.js +1 -1
  453. package/src/components/inserter/hooks/use-patterns-state.js +1 -1
  454. package/src/components/inserter/media-tab/media-panel.jsx +9 -9
  455. package/src/components/inserter/media-tab/media-preview.jsx +1 -1
  456. package/src/components/inserter-list-item/index.jsx +1 -1
  457. package/src/components/inserter-list-item/style.scss +2 -2
  458. package/src/components/inspector-controls/list-view-content-popover.jsx +1 -1
  459. package/src/components/link-control/search-results.jsx +1 -1
  460. package/src/components/link-control/style.scss +1 -1
  461. package/src/components/link-control/test/index.jsdom.test.jsx +38 -110
  462. package/src/components/link-control/test/keyboard-selection.browser.test.js +110 -0
  463. package/src/components/link-control/use-search-handler.js +8 -3
  464. package/src/components/list-view/branch.jsx +1 -1
  465. package/src/components/list-view/drop-indicator.jsx +3 -3
  466. package/src/components/list-view/index.jsx +1 -1
  467. package/src/components/list-view/style.scss +1 -9
  468. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  469. package/src/components/list-view/utils.js +1 -1
  470. package/src/components/media-replace-flow/index.jsx +4 -1
  471. package/src/components/navigable-toolbar/test/index.browser.test.js +6 -7
  472. package/src/components/plain-text/README.md +3 -2
  473. package/src/components/plain-text/content.scss +0 -1
  474. package/src/components/plain-text/index.jsx +2 -3
  475. package/src/components/plain-text/style.scss +4 -0
  476. package/src/components/preset-input-control/index.jsx +2 -2
  477. package/src/components/preset-input-control/test/index.jsdom.test.jsx +0 -56
  478. package/src/components/preset-input-control/test/interaction.browser.test.js +63 -0
  479. package/src/components/provider/index.jsx +5 -3
  480. package/src/components/provider/use-block-sync.js +5 -5
  481. package/src/components/publish-date-time-picker/index.jsx +1 -1
  482. package/src/components/resizable-box-popover/index.jsx +1 -1
  483. package/src/components/resolution-tool/index.jsx +2 -2
  484. package/src/components/responsive-block-control/style.scss +1 -2
  485. package/src/components/responsive-block-control/test/index.jsdom.test.jsx +2 -2
  486. package/src/components/rich-text/event-listeners/enter.js +16 -23
  487. package/src/components/rich-text/format-edit.jsx +1 -1
  488. package/src/components/rich-text/index.jsx +39 -2
  489. package/src/components/rich-text/multiline.jsx +11 -3
  490. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  491. package/src/components/spacing-sizes-control/test/index.jsdom.test.jsx +0 -21
  492. package/src/components/spacing-sizes-control/test/select.browser.test.js +58 -0
  493. package/src/components/typewriter/index.jsx +1 -1
  494. package/src/components/url-input/test/fixtures/validated-input-control-deprecation.js +1 -1
  495. package/src/components/use-block-commands/index.js +1 -1
  496. package/src/components/use-block-drop-zone/test/index.js +2 -2
  497. package/src/components/writing-flow/index.jsx +8 -0
  498. package/src/components/writing-flow/use-clipboard-handler.js +1 -1
  499. package/src/components/writing-flow/use-selection-observer.js +15 -6
  500. package/src/content.scss +1 -0
  501. package/src/hooks/align.jsx +22 -6
  502. package/src/hooks/background.jsx +1 -1
  503. package/src/hooks/block-bindings.jsx +1 -1
  504. package/src/hooks/block-hooks.scss +0 -6
  505. package/src/hooks/border.jsx +2 -2
  506. package/src/hooks/contrast-checker.js +1 -1
  507. package/src/hooks/dimensions.jsx +2 -2
  508. package/src/hooks/duotone.jsx +3 -3
  509. package/src/hooks/elements.jsx +3 -3
  510. package/src/hooks/fit-text.jsx +1 -1
  511. package/src/hooks/gap.js +2 -4
  512. package/src/hooks/index.js +3 -1
  513. package/src/hooks/layout-child.jsx +3 -4
  514. package/src/hooks/layout.jsx +17 -18
  515. package/src/hooks/position.jsx +5 -36
  516. package/src/hooks/states.jsx +6 -2
  517. package/src/hooks/test/layout.jsdom.test.js +44 -1
  518. package/src/hooks/text-shadow.ts +105 -0
  519. package/src/hooks/typography.jsx +58 -30
  520. package/src/hooks/utils.jsx +23 -1
  521. package/src/layouts/grid.jsx +2 -2
  522. package/src/layouts/test/flex.jsdom.test.jsx +4 -3
  523. package/src/layouts/test/utils.js +48 -1
  524. package/src/layouts/utils.js +19 -0
  525. package/src/private-apis.js +4 -0
  526. package/src/store/actions.js +50 -10
  527. package/src/store/private-selectors.js +5 -5
  528. package/src/store/reducer.js +6 -6
  529. package/src/store/selectors.js +3 -3
  530. package/src/store/test/actions.jsdom.test.js +60 -0
  531. package/src/style.scss +1 -0
  532. package/src/utils/get-font-styles-and-weights.ts +1 -1
  533. package/src/utils/transform-styles/index.ts +1 -1
  534. package/build/hooks/cross-origin-isolation.cjs +0 -56
  535. package/build/hooks/cross-origin-isolation.cjs.map +0 -7
  536. package/build-module/hooks/cross-origin-isolation.mjs +0 -54
  537. package/build-module/hooks/cross-origin-isolation.mjs.map +0 -7
  538. package/src/components/block-icon/test/__snapshots__/index.jsdom.test.jsx.snap +0 -27
  539. package/src/components/block-icon/test/index.jsdom.test.jsx +0 -67
  540. package/src/hooks/cross-origin-isolation.js +0 -73
  541. package/src/hooks/test/cross-origin-isolation.jsdom.test.js +0 -173
@@ -187,7 +187,7 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
187
187
  ),
188
188
  attachedCount,
189
189
  category.postTypeLabel
190
- )
190
+ )
191
191
  : sprintf(
192
192
  /* translators: %d: Number of images attached to the post. */
193
193
  _n(
@@ -196,7 +196,7 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
196
196
  attachedCount
197
197
  ),
198
198
  attachedCount
199
- ),
199
+ ),
200
200
  { type: 'snackbar', id: 'inserter-notice' }
201
201
  );
202
202
  } catch {
@@ -227,7 +227,7 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
227
227
  /* translators: %s: Name of the post type e.g: "Page". */
228
228
  __( 'Image detached from %s.' ),
229
229
  category.postTypeLabel
230
- )
230
+ )
231
231
  : __( 'Image detached from post.' ),
232
232
  { type: 'snackbar', id: 'inserter-notice' }
233
233
  );
@@ -277,10 +277,10 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
277
277
  <InserterNoResults>
278
278
  { category.emptyMessage && ! debouncedSearch
279
279
  ? // For a source with a custom empty message (e.g.
280
- // Attachments) and no active search, an empty result
281
- // means nothing is attached yet — clearer than the
282
- // generic "no results found".
283
- category.emptyMessage
280
+ // Attachments) and no active search, an empty result
281
+ // means nothing is attached yet — clearer than the
282
+ // generic "no results found".
283
+ category.emptyMessage
284
284
  : __( 'No results found.' ) }
285
285
  </InserterNoResults>
286
286
  ) }
@@ -346,10 +346,10 @@ export function MediaCategoryPanel( { rootClientId, onInsert, category } ) {
346
346
  'Detach this image from the current %s? The image will remain in the Media Library.'
347
347
  ),
348
348
  category.postTypeLabel
349
- )
349
+ )
350
350
  : __(
351
351
  'Detach this image from the current post? The image will remain in the Media Library.'
352
- ) }
352
+ ) }
353
353
  </p>
354
354
  <div className={ `${ baseCssClass }-detach-actions` }>
355
355
  <Button
@@ -69,7 +69,7 @@ function MediaPreviewOptions( { category, media, onDetach } ) {
69
69
  /* translators: %s: Name of the post type e.g: "Page". */
70
70
  __( 'Detach from %s' ),
71
71
  category.postTypeLabel
72
- )
72
+ )
73
73
  : __( 'Detach from post' ) }
74
74
  </MenuItem>
75
75
  ) }
@@ -26,7 +26,7 @@ function InserterListItem( {
26
26
  ? {
27
27
  backgroundColor: item.icon.background,
28
28
  color: item.icon.foreground,
29
- }
29
+ }
30
30
  : {};
31
31
  const blocks = useMemo(
32
32
  () => [
@@ -44,8 +44,8 @@
44
44
  justify-content: center;
45
45
  cursor: var(--wpds-cursor-control);
46
46
  background: transparent;
47
- // stylelint-disable-next-line declaration-property-value-keyword-no-deprecated -- Pending review of overflow-wrap alternative.
48
- word-break: break-word;
47
+ word-break: normal;
48
+ overflow-wrap: break-word;
49
49
  @media not ( prefers-reduced-motion ) {
50
50
  transition: all 0.05s ease-in-out;
51
51
  }
@@ -27,7 +27,7 @@ function useInspectorPopoverPlacement() {
27
27
  offset: 35,
28
28
  resize: false,
29
29
  },
30
- }
30
+ }
31
31
  : {};
32
32
  }
33
33
 
@@ -42,7 +42,7 @@ function LinkControlSearchResults( {
42
42
  /* translators: %s: search term. */
43
43
  __( 'Search results for "%s"' ),
44
44
  currentInputValue
45
- );
45
+ );
46
46
 
47
47
  return (
48
48
  <div className="block-editor-link-control__search-results-wrapper">
@@ -233,7 +233,7 @@ $block-editor-link-control-number-of-actions: 1;
233
233
  }
234
234
 
235
235
  span {
236
- font-weight: normal;
236
+ font-weight: 400;
237
237
  }
238
238
 
239
239
  .components-external-link__icon {
@@ -31,8 +31,6 @@ import { expectValidatedInputControlDeprecationIfCalled } from '../../url-input/
31
31
  globalThis.wpVitest.mockMatchMedia();
32
32
 
33
33
  globalThis.wpVitest.mockScrollIntoView();
34
- globalThis.wpVitest.mockVisibleElements();
35
-
36
34
  const mockFetchSearchSuggestions = vi.fn();
37
35
 
38
36
  function getExpectedVisualTypeName( type ) {
@@ -1706,114 +1704,6 @@ describe( 'Selecting links', () => {
1706
1704
  } );
1707
1705
 
1708
1706
  describe( 'Selection using keyboard', () => {
1709
- it.each( [
1710
- [ 'entity', 'hello world', fauxEntitySuggestions[ 0 ] ], // Entity search.
1711
- [
1712
- 'url',
1713
- 'https://www.wordpress.org',
1714
- {
1715
- id: '1',
1716
- title: 'https://www.wordpress.org',
1717
- url: 'https://www.wordpress.org',
1718
- type: 'link',
1719
- },
1720
- ], // Url.
1721
- ] )(
1722
- 'should display a current selected link UI when an %s suggestion for the search "%s" is selected using the keyboard',
1723
- async ( type, searchTerm, selectedLink ) => {
1724
- const user = userEvent.setup();
1725
- const LinkControlConsumer = () => {
1726
- const [ link, setLink ] = useState();
1727
-
1728
- return (
1729
- <LinkControl
1730
- value={ link }
1731
- onChange={ ( suggestion ) => setLink( suggestion ) }
1732
- />
1733
- );
1734
- };
1735
-
1736
- render( <LinkControlConsumer /> );
1737
-
1738
- // Search Input UI.
1739
- const searchInput = screen.getByRole( 'combobox', {
1740
- name: 'Search or type URL',
1741
- } );
1742
-
1743
- // Simulate searching for a term.
1744
- await user.type( searchInput, searchTerm );
1745
-
1746
- const searchResults = await screen.findByRole( 'listbox', {
1747
- name: /Search results for.*/,
1748
- } );
1749
-
1750
- // Step down into the search results, highlighting the first result item.
1751
- triggerArrowDown( searchInput );
1752
-
1753
- const searchResultElements =
1754
- within( searchResults ).getAllByRole( 'option' );
1755
-
1756
- const firstSearchSuggestion = searchResultElements[ 0 ];
1757
- const secondSearchSuggestion = searchResultElements[ 1 ];
1758
-
1759
- let selectedSearchResultElement = screen.getByRole( 'option', {
1760
- selected: true,
1761
- } );
1762
-
1763
- // We should have highlighted the first item using the keyboard.
1764
- expect( selectedSearchResultElement ).toBe(
1765
- firstSearchSuggestion
1766
- );
1767
-
1768
- // Only entity searches contain more than 1 suggestion.
1769
- if ( type === 'entity' ) {
1770
- // Check we can go down again using the down arrow.
1771
- triggerArrowDown( searchInput );
1772
-
1773
- selectedSearchResultElement = screen.getByRole( 'option', {
1774
- selected: true,
1775
- } );
1776
-
1777
- // We should have highlighted the first item using the keyboard
1778
- expect( selectedSearchResultElement ).toBe(
1779
- secondSearchSuggestion
1780
- );
1781
-
1782
- // Check we can go back up via up arrow.
1783
- triggerArrowUp( searchInput );
1784
-
1785
- selectedSearchResultElement = screen.getByRole( 'option', {
1786
- selected: true,
1787
- } );
1788
-
1789
- // We should be back to highlighting the first search result again
1790
- expect( selectedSearchResultElement ).toBe(
1791
- firstSearchSuggestion
1792
- );
1793
- }
1794
-
1795
- // Submit the selected item as the current link.
1796
- triggerEnter( searchInput );
1797
-
1798
- // Check that the suggestion selected via is now shown as selected.
1799
- const currentLink = screen.getByRole( 'group', {
1800
- name: 'Manage link',
1801
- } );
1802
- const currentLinkAnchor = screen.getByRole( 'link', {
1803
- name: `${ selectedLink.title } (opens in a new tab)`,
1804
- } );
1805
-
1806
- // Make sure focus is retained after submission.
1807
- expect( currentLinkAnchor ).toHaveFocus();
1808
-
1809
- expect( currentLink ).toBeVisible();
1810
- expect(
1811
- screen.getByRole( 'button', { name: 'Edit link' } )
1812
- ).toBeVisible();
1813
- expect( currentLinkAnchor ).toBeVisible();
1814
- }
1815
- );
1816
-
1817
1707
  it( 'should allow selection of initial search results via the keyboard', async () => {
1818
1708
  render( <LinkControl showInitialSuggestions /> );
1819
1709
 
@@ -3741,3 +3631,41 @@ describe( 'Link preview with entity data from navigation blocks', () => {
3741
3631
  } );
3742
3632
  } );
3743
3633
  } );
3634
+
3635
+ describe( 'Front page and blog home labelling', () => {
3636
+ it( 'should not label a term that shares the front page id as the front page', async () => {
3637
+ const user = userEvent.setup();
3638
+ const aCategory = {
3639
+ id: 1,
3640
+ title: 'Uncategorized',
3641
+ type: 'category',
3642
+ kind: 'taxonomy',
3643
+ url: '/category/uncategorized',
3644
+ };
3645
+
3646
+ // Posts and terms are separate tables, so a term can share an id with
3647
+ // the page set as the front page.
3648
+ useSelect.mockImplementation( () => ( {
3649
+ fetchSearchSuggestions: () => Promise.resolve( [ aCategory ] ),
3650
+ fetchRichUrlData: mockFetchRichUrlData,
3651
+ pageOnFront: 1,
3652
+ pageForPosts: 2,
3653
+ } ) );
3654
+
3655
+ render( <LinkControl /> );
3656
+
3657
+ await user.type(
3658
+ screen.getByRole( 'combobox', { name: 'Search or type URL' } ),
3659
+ 'Uncategorized'
3660
+ );
3661
+
3662
+ const searchResults = await screen.findByRole( 'listbox', {
3663
+ name: /Search results for.*/,
3664
+ } );
3665
+
3666
+ const option = within( searchResults ).getByRole( 'option' );
3667
+
3668
+ expect( option ).toHaveTextContent( 'Category' );
3669
+ expect( option ).not.toHaveTextContent( 'Front page' );
3670
+ } );
3671
+ } );
@@ -0,0 +1,110 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { page, userEvent } from 'vitest/browser';
3
+ import { render } from 'vitest-browser-react';
4
+ import { screen } from '@testing-library/react';
5
+ import { SlotFillProvider } from '@wordpress/components';
6
+ import { createElement, useState } from '@wordpress/element';
7
+ import { useDispatch, useSelect } from '@wordpress/data';
8
+ import LinkControl from '../';
9
+ import { fauxEntitySuggestions, fetchFauxEntitySuggestions } from './fixtures';
10
+
11
+ const mockFetchSearchSuggestions = vi.fn();
12
+
13
+ vi.mock( import( '@wordpress/data' ), { spy: true } );
14
+
15
+ vi.mock( import( '@wordpress/compose' ), async ( importOriginal ) => ( {
16
+ ...( await importOriginal() ),
17
+ useReducedMotion: () => true,
18
+ } ) );
19
+
20
+ beforeEach( () => {
21
+ vi.mocked( useDispatch ).mockReturnValue( {
22
+ saveEntityRecords: vi.fn(),
23
+ } );
24
+ useSelect.mockImplementation( () => ( {
25
+ fetchSearchSuggestions: mockFetchSearchSuggestions,
26
+ fetchRichUrlData: undefined,
27
+ } ) );
28
+ mockFetchSearchSuggestions.mockImplementation( fetchFauxEntitySuggestions );
29
+ } );
30
+
31
+ describe( 'LinkControl keyboard selection', () => {
32
+ it.each( [
33
+ [ 'entity', 'hello world', fauxEntitySuggestions[ 0 ] ],
34
+ [
35
+ 'url',
36
+ 'https://www.wordpress.org',
37
+ {
38
+ title: 'https://www.wordpress.org',
39
+ url: 'https://www.wordpress.org',
40
+ },
41
+ ],
42
+ ] )(
43
+ 'should display a current selected link UI when an %s suggestion for the search "%s" is selected using the keyboard',
44
+ async ( type, searchTerm, selectedLink ) => {
45
+ const user = userEvent.setup();
46
+ function LinkControlConsumer() {
47
+ const [ link, setLink ] = useState();
48
+
49
+ return createElement( LinkControl, {
50
+ value: link,
51
+ onChange: ( suggestion ) => setLink( suggestion ),
52
+ } );
53
+ }
54
+
55
+ await render(
56
+ createElement(
57
+ SlotFillProvider,
58
+ null,
59
+ createElement( LinkControlConsumer )
60
+ )
61
+ );
62
+
63
+ const searchInput = screen.getByRole( 'combobox', {
64
+ name: 'Search or type URL',
65
+ } );
66
+ await user.type( searchInput, searchTerm );
67
+
68
+ await screen.findByRole( 'listbox', {
69
+ name: /Search results for.*/,
70
+ } );
71
+ const selectedOption = page.getByRole( 'option', {
72
+ selected: true,
73
+ } );
74
+
75
+ await user.keyboard( '{ArrowDown}' );
76
+ await expect
77
+ .element( selectedOption )
78
+ .toHaveTextContent(
79
+ type === 'entity'
80
+ ? fauxEntitySuggestions[ 0 ].title
81
+ : searchTerm
82
+ );
83
+
84
+ if ( type === 'entity' ) {
85
+ await user.keyboard( '{ArrowDown}' );
86
+ await expect
87
+ .element( selectedOption )
88
+ .toHaveTextContent( fauxEntitySuggestions[ 1 ].title );
89
+
90
+ await user.keyboard( '{ArrowUp}' );
91
+ await expect
92
+ .element( selectedOption )
93
+ .toHaveTextContent( fauxEntitySuggestions[ 0 ].title );
94
+ }
95
+
96
+ await user.keyboard( '{Enter}' );
97
+
98
+ const selectedLinkName = `${ selectedLink.title } (opens in a new tab)`;
99
+ await expect
100
+ .element( page.getByRole( 'link', { name: selectedLinkName } ) )
101
+ .toHaveFocus();
102
+ await expect
103
+ .element( page.getByRole( 'group', { name: 'Manage link' } ) )
104
+ .toBeVisible();
105
+ await expect
106
+ .element( page.getByRole( 'button', { name: 'Edit link' } ) )
107
+ .toBeVisible();
108
+ }
109
+ );
110
+ } );
@@ -32,8 +32,13 @@ const handleEntitySearch = async (
32
32
 
33
33
  const results = await fetchSearchSuggestions( val, suggestionsQuery );
34
34
 
35
- // Identify front page and update type to match.
35
+ // Identify front page and update type to match. Posts, terms and media can
36
+ // share an id, so only pages are considered.
36
37
  results.map( ( result ) => {
38
+ if ( result.type !== 'page' ) {
39
+ return result;
40
+ }
41
+
37
42
  if ( Number( result.id ) === pageOnFront ) {
38
43
  result.isFrontPage = true;
39
44
  return result;
@@ -73,7 +78,7 @@ const handleEntitySearch = async (
73
78
  title: val, // Must match the existing `<input>`s text value.
74
79
  url: val, // Must match the existing `<input>`s text value.
75
80
  type: CREATE_TYPE,
76
- } );
81
+ } );
77
82
  };
78
83
 
79
84
  export default function useSearchHandler(
@@ -110,7 +115,7 @@ export default function useSearchHandler(
110
115
  withCreateSuggestion,
111
116
  pageOnFront,
112
117
  pageForPosts
113
- );
118
+ );
114
119
  },
115
120
  [
116
121
  directEntryHandler,
@@ -163,7 +163,7 @@ function ListViewBranch( props ) {
163
163
  const hasNestedBlocks = !! innerBlocks?.length;
164
164
 
165
165
  const shouldExpand = hasNestedBlocks
166
- ? expansionState[ clientId ] ?? isExpanded
166
+ ? ( expansionState[ clientId ] ?? isExpanded )
167
167
  : undefined;
168
168
 
169
169
  // Make updates to the selected or dragged blocks synchronous,
@@ -35,7 +35,7 @@ export default function ListViewDropIndicatorPreview( {
35
35
  const _rootBlockElement = rootClientId
36
36
  ? listViewRef.current.querySelector(
37
37
  `[data-block="${ rootClientId }"]`
38
- )
38
+ )
39
39
  : undefined;
40
40
 
41
41
  // The clientId represents the sibling block, the dragged block will
@@ -44,7 +44,7 @@ export default function ListViewDropIndicatorPreview( {
44
44
  const _blockElement = clientId
45
45
  ? listViewRef.current.querySelector(
46
46
  `[data-block="${ clientId }"]`
47
- )
47
+ )
48
48
  : undefined;
49
49
 
50
50
  return [ _rootBlockElement, _blockElement ];
@@ -251,7 +251,7 @@ export default function ListViewDropIndicatorPreview( {
251
251
  // drop indicator.
252
252
  const scrollbarWidth = rtl
253
253
  ? scrollContainer.offsetWidth -
254
- scrollContainer.clientWidth
254
+ scrollContainer.clientWidth
255
255
  : 0;
256
256
 
257
257
  if ( left < scrollContainerRect.left + scrollbarWidth ) {
@@ -401,7 +401,7 @@ function ListViewComponent(
401
401
  ? `${
402
402
  BLOCK_LIST_ITEM_HEIGHT *
403
403
  ( draggedClientIds.length - 1 )
404
- }px`
404
+ }px`
405
405
  : null,
406
406
  } }
407
407
  >
@@ -353,7 +353,7 @@
353
353
  align-items: center;
354
354
  }
355
355
 
356
- // Keep the tap target large but the focus target small.
356
+ // Keep the tap target large.
357
357
  .block-editor-block-mover-button {
358
358
  position: relative;
359
359
  width: $button-size;
@@ -380,14 +380,6 @@
380
380
  top: -$grid-unit-05;
381
381
  }
382
382
  }
383
-
384
- // Tweak size and position of focus ring.
385
- &::before {
386
- height: 16px;
387
- min-width: 100%;
388
- left: 0;
389
- right: 0;
390
- }
391
383
  }
392
384
 
393
385
  .block-editor-inserter__toggle {
@@ -506,7 +506,7 @@ export default function useListViewDropZone( {
506
506
  ? canInsertBlocks(
507
507
  draggedBlockClientIds,
508
508
  rootClientId
509
- )
509
+ )
510
510
  : true,
511
511
  canInsertDraggedBlocksAsChild: isBlockDrag
512
512
  ? canInsertBlocks( draggedBlockClientIds, clientId )
@@ -21,7 +21,7 @@ export const getBlockPropertiesDescription = ( positionLabel, isLocked ) =>
21
21
  // translators: %s: Position of selected block, e.g. "Sticky" or "Fixed".
22
22
  __( 'Position: %s' ),
23
23
  positionLabel
24
- ) }.`
24
+ ) }.`
25
25
  : undefined,
26
26
  isLocked ? __( 'This block is locked.' ) : undefined,
27
27
  ]
@@ -227,7 +227,10 @@ const MediaReplaceFlow = ( {
227
227
  { onToggleFeaturedImage && (
228
228
  <MenuItem
229
229
  icon={ postFeaturedImage }
230
- onClick={ onToggleFeaturedImage }
230
+ onClick={ () => {
231
+ onToggleFeaturedImage();
232
+ onClose();
233
+ } }
231
234
  isPressed={ useFeaturedImage }
232
235
  >
233
236
  { __( 'Use featured image' ) }
@@ -1,5 +1,6 @@
1
- import { afterEach, describe, expect, it } from 'vitest';
2
- import { act, cleanup, render, screen, waitFor } from '@testing-library/react';
1
+ import { describe, expect, it } from 'vitest';
2
+ import { act, screen, waitFor } from '@testing-library/react';
3
+ import { render } from 'vitest-browser-react';
3
4
  import { createElement } from '@wordpress/element';
4
5
  import NavigableToolbar from '..';
5
6
 
@@ -19,13 +20,11 @@ function createToolbar( { hidden = false, extraChildren = 0 } = {} ) {
19
20
  }
20
21
 
21
22
  describe( 'NavigableToolbar', () => {
22
- afterEach( cleanup );
23
-
24
23
  it( 'does not reclassify a visibility-hidden toolbar when its subtree changes', async () => {
25
- const { rerender } = render( createToolbar() );
24
+ const { rerender } = await render( createToolbar() );
26
25
  const initialToolbar = screen.getByRole( 'toolbar' );
27
26
 
28
- rerender( createToolbar( { extraChildren: 1 } ) );
27
+ await rerender( createToolbar( { extraChildren: 1 } ) );
29
28
 
30
29
  await waitFor( () => {
31
30
  expect( screen.getByRole( 'toolbar' ) ).not.toBe( initialToolbar );
@@ -33,7 +32,7 @@ describe( 'NavigableToolbar', () => {
33
32
  expect( console ).toHaveWarned();
34
33
  const toolbar = screen.getByRole( 'toolbar' );
35
34
 
36
- rerender( createToolbar( { hidden: true, extraChildren: 2 } ) );
35
+ await rerender( createToolbar( { hidden: true, extraChildren: 2 } ) );
37
36
 
38
37
  await act(
39
38
  () =>
@@ -14,9 +14,11 @@ _Required._ Function called when the text value changes.
14
14
 
15
15
  You can also pass any extra prop to the textarea rendered by this component.
16
16
 
17
+ Automatic sizing uses CSS `field-sizing: content`. In browsers that support it, `rows` and `cols` do not set the field's size. Use CSS `min-height` and `max-height` to constrain its height. In browsers without support, the field keeps its native size and scrolls when its content overflows.
18
+
17
19
  ### `ref: Object`
18
20
 
19
- _Optional._ The component forwards the `ref` property to the `TextareaAutosize` component.
21
+ _Optional._ The component forwards the `ref` property to the `textarea` element.
20
22
 
21
23
  ## Example
22
24
 
@@ -44,4 +46,3 @@ registerBlockType( /* ... */, {
44
46
  },
45
47
  } );
46
48
  ```
47
-
@@ -7,5 +7,4 @@
7
7
  border: none;
8
8
  padding: 0;
9
9
  margin: 0;
10
- width: 100%;
11
10
  }
@@ -1,4 +1,3 @@
1
- import TextareaAutosize from 'react-autosize-textarea';
2
1
  import clsx from 'clsx';
3
2
  import { forwardRef } from '@wordpress/element';
4
3
  import EditableText from '../editable-text';
@@ -37,7 +36,7 @@ import EditableText from '../editable-text';
37
36
  * @param {Object} props Component props.
38
37
  * @param {string} props.value String value of the textarea.
39
38
  * @param {Function} props.onChange Function called when the text value changes.
40
- * @param {Object} [props.ref] The component forwards the `ref` property to the `TextareaAutosize` component.
39
+ * @param {Object} [props.ref] The component forwards the `ref` property to the `textarea` element.
41
40
  * @return {Element} Plain text component
42
41
  */
43
42
  const PlainText = forwardRef( ( { __experimentalVersion, ...props }, ref ) => {
@@ -48,7 +47,7 @@ const PlainText = forwardRef( ( { __experimentalVersion, ...props }, ref ) => {
48
47
  const { className, onChange, ...remainingProps } = props;
49
48
 
50
49
  return (
51
- <TextareaAutosize
50
+ <textarea
52
51
  ref={ ref }
53
52
  className={ clsx( 'block-editor-plain-text', className ) }
54
53
  onChange={ ( event ) => onChange( event.target.value ) }
@@ -0,0 +1,4 @@
1
+ .block-editor-plain-text {
2
+ width: 100%;
3
+ field-sizing: content;
4
+ }
@@ -91,7 +91,7 @@ export default function PresetInputControl( {
91
91
  const hasPresets = marks.length > 0;
92
92
  const showRangeControl = presets.length <= RANGE_CONTROL_MAX_SIZE;
93
93
 
94
- const allPlaceholder = isMixed ? __( 'Mixed' ) : placeholder ?? null;
94
+ const allPlaceholder = isMixed ? __( 'Mixed' ) : ( placeholder ?? null );
95
95
 
96
96
  const [ minValue, setMinValue ] = useState( minimumCustomValue );
97
97
  const [ showCustomValueControl, setShowCustomValueControl ] = useState(
@@ -129,7 +129,7 @@ export default function PresetInputControl( {
129
129
  {
130
130
  name: ! isMixed
131
131
  ? // translators: %s: A custom measurement, e.g. a number followed by a unit like 12px.
132
- sprintf( __( 'Custom (%s)' ), value )
132
+ sprintf( __( 'Custom (%s)' ), value )
133
133
  : __( 'Mixed' ),
134
134
  slug: 'custom',
135
135
  size: value,