@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
@@ -0,0 +1,257 @@
1
+ import { __ } from '@wordpress/i18n';
2
+ import {
3
+ Button,
4
+ Composite,
5
+ Dropdown,
6
+ SelectControl as WCSelectControl,
7
+ } from '@wordpress/components';
8
+ import { Stack, Text } from '@wordpress/ui';
9
+ import { useRef, useMemo } from '@wordpress/element';
10
+ import { shadow as textShadowIcon, Icon, check, reset } from '@wordpress/icons';
11
+ import type { TextShadowPreset } from '@wordpress/global-styles-engine';
12
+ import clsx from 'clsx';
13
+ import { useSettings } from '../use-settings';
14
+
15
+ type TextShadowValue = string | undefined;
16
+
17
+ interface TextShadowProps {
18
+ textShadow: TextShadowValue;
19
+ onChange: ( textShadow: TextShadowValue ) => void;
20
+ }
21
+
22
+ interface TextShadowToggleProps extends TextShadowProps {
23
+ onToggle: () => void;
24
+ isOpen: boolean;
25
+ }
26
+
27
+ /**
28
+ * Shared reference to an empty array for cases where it is important to avoid
29
+ * returning a new array reference on every invocation.
30
+ */
31
+ const EMPTY_ARRAY: TextShadowPreset[] = [];
32
+
33
+ // Above this number of presets, the list is rendered as a compact dropdown
34
+ // rather than a long list of options.
35
+ const PRESETS_SELECT_THRESHOLD = 7;
36
+
37
+ /**
38
+ * Extracts the preset slug from a raw text shadow value.
39
+ *
40
+ * @param rawValue The stored text shadow value.
41
+ * @return The preset slug, or undefined for custom values.
42
+ */
43
+ function getTextShadowPresetSlug( rawValue: TextShadowValue ) {
44
+ if ( ! rawValue || typeof rawValue !== 'string' ) {
45
+ return undefined;
46
+ }
47
+
48
+ // Block supports use the `var:preset|text-shadow|slug` format.
49
+ if ( rawValue.startsWith( 'var:preset|text-shadow|' ) ) {
50
+ return rawValue.replace( 'var:preset|text-shadow|', '' );
51
+ }
52
+
53
+ // Global styles data uses the `var(--wp--preset--text-shadow--slug)` format.
54
+ const cssVarMatch = rawValue.match(
55
+ /^var\(--wp--preset--text-shadow--([^)]+)\)$/
56
+ );
57
+ if ( cssVarMatch ) {
58
+ return cssVarMatch[ 1 ];
59
+ }
60
+
61
+ return undefined;
62
+ }
63
+
64
+ export function TextShadowPopover( { textShadow, onChange }: TextShadowProps ) {
65
+ const popoverProps = {
66
+ placement: 'left-start' as const,
67
+ offset: 36,
68
+ shift: true,
69
+ className: 'block-editor-global-styles__text-shadow-popover',
70
+ };
71
+
72
+ return (
73
+ <Dropdown
74
+ popoverProps={ popoverProps }
75
+ className="block-editor-global-styles__text-shadow-dropdown"
76
+ renderToggle={ ( { onToggle, isOpen } ) => (
77
+ <TextShadowToggle
78
+ textShadow={ textShadow }
79
+ onChange={ onChange }
80
+ onToggle={ onToggle }
81
+ isOpen={ isOpen }
82
+ />
83
+ ) }
84
+ renderContent={ () => (
85
+ <TextShadowControl
86
+ textShadow={ textShadow }
87
+ onChange={ onChange }
88
+ />
89
+ ) }
90
+ />
91
+ );
92
+ }
93
+
94
+ function TextShadowControl( { textShadow, onChange }: TextShadowProps ) {
95
+ const [
96
+ defaultPresetsEnabled,
97
+ defaultPresets,
98
+ themePresets,
99
+ customPresets,
100
+ ] = useSettings(
101
+ 'typography.defaultTextShadowPresets',
102
+ 'typography.textShadowPresets.default',
103
+ 'typography.textShadowPresets.theme',
104
+ 'typography.textShadowPresets.custom'
105
+ ) as [
106
+ boolean | undefined,
107
+ TextShadowPreset[] | undefined,
108
+ TextShadowPreset[] | undefined,
109
+ TextShadowPreset[] | undefined,
110
+ ];
111
+
112
+ const presets = useMemo(
113
+ () => [
114
+ ...( ( defaultPresetsEnabled && defaultPresets ) || EMPTY_ARRAY ),
115
+ ...( themePresets || EMPTY_ARRAY ),
116
+ ...( customPresets || EMPTY_ARRAY ),
117
+ ],
118
+ [ defaultPresetsEnabled, defaultPresets, themePresets, customPresets ]
119
+ );
120
+
121
+ const choices = [
122
+ { value: 'none', label: __( 'None' ) },
123
+ ...presets.map( ( preset ) => ( {
124
+ value: `var:preset|text-shadow|${ preset.slug }`,
125
+ label: preset.name,
126
+ } ) ),
127
+ ];
128
+
129
+ const activeSlug = getTextShadowPresetSlug( textShadow );
130
+ const activeValue = activeSlug
131
+ ? `var:preset|text-shadow|${ activeSlug }`
132
+ : ( textShadow ?? '' );
133
+ const previewValue = activeSlug
134
+ ? presets.find( ( preset ) => preset.slug === activeSlug )?.textShadow
135
+ : textShadow;
136
+
137
+ return (
138
+ <Stack
139
+ className="block-editor-global-styles__text-shadow"
140
+ direction="column"
141
+ gap="sm"
142
+ >
143
+ <Text variant="heading-sm" render={ <h2 /> }>
144
+ { __( 'Text shadow' ) }
145
+ </Text>
146
+ <div
147
+ className="block-editor-global-styles__text-shadow-preview"
148
+ style={ { textShadow: previewValue } }
149
+ >
150
+ { __( 'Code is poetry' ) }
151
+ </div>
152
+ { presets.length >= PRESETS_SELECT_THRESHOLD ? (
153
+ <WCSelectControl
154
+ hideLabelFromVision
155
+ label={ __( 'Text shadow preset' ) }
156
+ value={ activeValue }
157
+ options={ [
158
+ { value: '', label: __( 'Default' ) },
159
+ ...choices,
160
+ ] }
161
+ onChange={ onChange }
162
+ />
163
+ ) : (
164
+ <Composite
165
+ role="listbox"
166
+ aria-label={ __( 'Text shadow presets' ) }
167
+ render={ <Stack direction="column" /> }
168
+ >
169
+ { choices.map( ( { value, label } ) => {
170
+ const isActive = value === activeValue;
171
+ return (
172
+ <Composite.Item
173
+ key={ value }
174
+ role="option"
175
+ aria-selected={ isActive }
176
+ className={ clsx(
177
+ 'block-editor-global-styles__text-shadow-list-item',
178
+ { 'is-active': isActive }
179
+ ) }
180
+ onClick={ () => onChange( value ) }
181
+ render={ <Button __next40pxDefaultSize /> }
182
+ >
183
+ <span>{ label }</span>
184
+ <Icon icon={ check } />
185
+ </Composite.Item>
186
+ );
187
+ } ) }
188
+ </Composite>
189
+ ) }
190
+ <Stack direction="row" justify="flex-end">
191
+ <Button
192
+ __next40pxDefaultSize
193
+ variant="tertiary"
194
+ onClick={ () => onChange( undefined ) }
195
+ disabled={ ! textShadow }
196
+ accessibleWhenDisabled
197
+ >
198
+ { __( 'Clear' ) }
199
+ </Button>
200
+ </Stack>
201
+ </Stack>
202
+ );
203
+ }
204
+
205
+ function TextShadowToggle( {
206
+ textShadow,
207
+ onChange,
208
+ onToggle,
209
+ isOpen,
210
+ }: TextShadowToggleProps ) {
211
+ const buttonRef = useRef< HTMLButtonElement >( undefined );
212
+
213
+ return (
214
+ <>
215
+ <Button
216
+ __next40pxDefaultSize
217
+ onClick={ onToggle }
218
+ className={ clsx(
219
+ 'block-editor-global-styles__text-shadow-dropdown-toggle',
220
+ { 'is-open': isOpen }
221
+ ) }
222
+ aria-expanded={ isOpen }
223
+ ref={ buttonRef }
224
+ >
225
+ <Stack
226
+ direction="row"
227
+ justify="flex-start"
228
+ align="center"
229
+ gap="sm"
230
+ >
231
+ <Icon icon={ textShadowIcon } size={ 24 } />
232
+ <span>{ __( 'Text shadow' ) }</span>
233
+ </Stack>
234
+ </Button>
235
+ { !! textShadow && (
236
+ <Button
237
+ __next40pxDefaultSize
238
+ size="small"
239
+ icon={ reset }
240
+ onClick={ () => {
241
+ if ( isOpen ) {
242
+ onToggle();
243
+ }
244
+ onChange( undefined );
245
+ // Return focus to parent button.
246
+ buttonRef.current?.focus();
247
+ } }
248
+ className={ clsx(
249
+ 'block-editor-global-styles__text-shadow-remove-button',
250
+ { 'is-open': isOpen }
251
+ ) }
252
+ label={ __( 'Remove text shadow' ) }
253
+ />
254
+ ) }
255
+ </>
256
+ );
257
+ }
@@ -17,6 +17,7 @@ import TextTransformControl from '../text-transform-control';
17
17
  import TextDecorationControl from '../text-decoration-control';
18
18
  import TextIndentControl from '../text-indent-control';
19
19
  import WritingModeControl from '../writing-mode-control';
20
+ import { TextShadowPopover } from './text-shadow-panel';
20
21
  import ColorGradientDropdownItem from './color-gradient-dropdown-item';
21
22
  import { useHasTextPanel } from './color-panel';
22
23
  import { useColorGradientSettings } from './hooks';
@@ -34,7 +35,7 @@ import { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights
34
35
  import {
35
36
  getInheritanceProps,
36
37
  InheritanceToolsPanelItem,
37
- isGlobalStylesInheritanceEnabled,
38
+ isGlobalStylesInheritanceIndicatorUIEnabled,
38
39
  } from './inheritance';
39
40
 
40
41
  const MIN_TEXT_COLUMNS = 1;
@@ -79,6 +80,7 @@ export function useHasTypographyPanel( settings ) {
79
80
  const hasTextColumns = useHasTextColumnsControl( settings );
80
81
  const hasFontSize = useHasFontSizeControl( settings );
81
82
  const hasTextColor = useHasTextPanel( settings );
83
+ const hasTextShadow = useHasTextShadowControl( settings );
82
84
 
83
85
  return (
84
86
  hasFontFamily ||
@@ -92,7 +94,8 @@ export function useHasTypographyPanel( settings ) {
92
94
  hasTextIndent ||
93
95
  hasWritingMode ||
94
96
  hasTextColumns ||
95
- hasTextColor
97
+ hasTextColor ||
98
+ hasTextShadow
96
99
  );
97
100
  }
98
101
 
@@ -158,6 +161,10 @@ function useHasTextIndentControl( settings ) {
158
161
  return settings?.typography?.textIndent;
159
162
  }
160
163
 
164
+ function useHasTextShadowControl( settings ) {
165
+ return settings?.typography?.textShadow;
166
+ }
167
+
161
168
  /**
162
169
  * Concatenate all the font sizes into a single list for the font size picker.
163
170
  *
@@ -171,7 +178,7 @@ function getMergedFontSizes( settings ) {
171
178
  return [
172
179
  ...( fontSizes?.custom ?? [] ),
173
180
  ...( fontSizes?.theme ?? [] ),
174
- ...( defaultFontSizesEnabled ? fontSizes?.default ?? [] : [] ),
181
+ ...( defaultFontSizesEnabled ? ( fontSizes?.default ?? [] ) : [] ),
175
182
  ];
176
183
  }
177
184
 
@@ -214,6 +221,7 @@ const DEFAULT_CONTROLS = {
214
221
  textIndent: true,
215
222
  writingMode: true,
216
223
  textColumns: true,
224
+ textShadow: true,
217
225
  };
218
226
 
219
227
  const EMPTY_VALUES = [ undefined, null, '' ];
@@ -248,7 +256,7 @@ export default function TypographyPanel( {
248
256
  panelId,
249
257
  defaultControls = DEFAULT_CONTROLS,
250
258
  isGlobalStyles = false,
251
- showInheritanceLabelIndicators = isGlobalStylesInheritanceEnabled(),
259
+ showInheritanceLabelIndicators = isGlobalStylesInheritanceIndicatorUIEnabled(),
252
260
  contrastWarning,
253
261
  } ) {
254
262
  const { colors, allColors, areCustomSolidsEnabled, decodeValue } =
@@ -276,13 +284,7 @@ export default function TypographyPanel( {
276
284
  newSlug
277
285
  );
278
286
  let changedObject = setImmutably( value, [ 'color', 'text' ], encoded );
279
- // With the experiment off, keep the pre-inheritance comparison on
280
- // `inheritedValue`.
281
- const syncLinkColor = isGlobalStylesInheritanceEnabled()
282
- ? shouldSyncLinkColor( value, inheritedValue )
283
- : inheritedValue?.color?.text ===
284
- inheritedValue?.elements?.link?.color?.text;
285
- if ( syncLinkColor ) {
287
+ if ( shouldSyncLinkColor( value, inheritedValue ) ) {
286
288
  changedObject = setImmutably(
287
289
  changedObject,
288
290
  [ 'elements', 'link', 'color', 'text' ],
@@ -778,6 +780,25 @@ export default function TypographyPanel( {
778
780
  const hasTextAlign = () => hasValue( value?.typography?.textAlign );
779
781
  const resetTextAlign = () => setTextAlign( undefined );
780
782
 
783
+ // Text Shadow
784
+ const hasTextShadowControl = useHasTextShadowControl( settings );
785
+ const inheritedTextShadow = inheritedValue?.typography?.textShadow;
786
+ const textShadow = value?.typography?.textShadow ?? inheritedTextShadow;
787
+ const isTextShadowPlaceholder =
788
+ ! hasValue( value?.typography?.textShadow ) &&
789
+ hasValue( inheritedTextShadow );
790
+ const setTextShadow = ( newValue ) => {
791
+ onChange(
792
+ setImmutably(
793
+ value,
794
+ [ 'typography', 'textShadow' ],
795
+ newValue || undefined
796
+ )
797
+ );
798
+ };
799
+ const hasTextShadow = () => hasValue( value?.typography?.textShadow );
800
+ const resetTextShadow = () => setTextShadow( undefined );
801
+
781
802
  const resetAllFilter = useCallback(
782
803
  ( previousValue ) => {
783
804
  if ( ! hasTextColorEnabled ) {
@@ -943,7 +964,7 @@ export default function TypographyPanel( {
943
964
  getNumericPlaceholder(
944
965
  inheritedLineHeight
945
966
  ),
946
- }
967
+ }
947
968
  : {} ) }
948
969
  />
949
970
  </InheritanceToolsPanelItem>
@@ -977,7 +998,7 @@ export default function TypographyPanel( {
977
998
  isLetterSpacingPlaceholder
978
999
  ? getNumericPlaceholder(
979
1000
  inheritedLetterSpacing
980
- )
1001
+ )
981
1002
  : undefined
982
1003
  }
983
1004
  />
@@ -1113,6 +1134,24 @@ export default function TypographyPanel( {
1113
1134
  />
1114
1135
  </InheritanceToolsPanelItem>
1115
1136
  ) }
1137
+ { hasTextShadowControl && (
1138
+ <InheritanceToolsPanelItem
1139
+ { ...inheritanceProps(
1140
+ isTextShadowPlaceholder,
1141
+ hasTextShadow() && inheritedTextShadow !== undefined
1142
+ ) }
1143
+ label={ __( 'Text shadow' ) }
1144
+ hasValue={ hasTextShadow }
1145
+ onDeselect={ resetTextShadow }
1146
+ isShownByDefault={ defaultControls.textShadow }
1147
+ panelId={ panelId }
1148
+ >
1149
+ <TextShadowPopover
1150
+ textShadow={ textShadow }
1151
+ onChange={ setTextShadow }
1152
+ />
1153
+ </InheritanceToolsPanelItem>
1154
+ ) }
1116
1155
  { hasTextAlignmentControl && (
1117
1156
  <InheritanceToolsPanelItem
1118
1157
  { ...inheritanceProps(
@@ -142,7 +142,7 @@ export function findNearestStyleAndWeight(
142
142
  ( option ) =>
143
143
  option.style.fontWeight ===
144
144
  findNearestFontWeight( fontWeights, fontWeight )
145
- )?.style?.fontStyle;
145
+ )?.style?.fontStyle;
146
146
  }
147
147
 
148
148
  if ( ! hasFontWeight ) {
@@ -156,7 +156,7 @@ export function findNearestStyleAndWeight(
156
156
  ( option ) =>
157
157
  option.style.fontStyle ===
158
158
  ( nearestFontStyle || fontStyle )
159
- )?.style?.fontWeight;
159
+ )?.style?.fontWeight;
160
160
  }
161
161
 
162
162
  return { nearestFontStyle, nearestFontWeight };
@@ -9,7 +9,7 @@ export function useToolsPanelDropdownMenuProps() {
9
9
  // For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)
10
10
  offset: 259,
11
11
  },
12
- }
12
+ }
13
13
  : {};
14
14
  }
15
15
 
@@ -1,6 +1,6 @@
1
1
  import { __, sprintf } from '@wordpress/i18n';
2
2
  import {
3
- SelectControl,
3
+ SelectControl as WCSelectControl,
4
4
  Notice,
5
5
  __experimentalVStack as VStack,
6
6
  } from '@wordpress/components';
@@ -80,7 +80,7 @@ export default function HTMLElementControl( {
80
80
 
81
81
  return (
82
82
  <VStack spacing={ 2 } className="block-editor-html-element-control">
83
- <SelectControl
83
+ <WCSelectControl
84
84
  label={ __( 'HTML element' ) }
85
85
  options={ modifiedOptions }
86
86
  value={ tagName }
@@ -83,7 +83,7 @@ const iframeSrcCache = new WeakMap();
83
83
  const iframeSrcCleanup = globalThis.FinalizationRegistry
84
84
  ? new globalThis.FinalizationRegistry( ( url ) =>
85
85
  URL.revokeObjectURL( url )
86
- )
86
+ )
87
87
  : undefined;
88
88
 
89
89
  function getIframeSrc( resolvedAssets ) {
@@ -215,7 +215,7 @@ export function useScaleCanvas( {
215
215
  containerWidth,
216
216
  maxContainerWidth,
217
217
  scaleContainerWidth,
218
- } )
218
+ } )
219
219
  : scale;
220
220
 
221
221
  /**
@@ -1,5 +1,5 @@
1
1
  import {
2
- SelectControl,
2
+ SelectControl as WCSelectControl,
3
3
  __experimentalNumberControl as NumberControl,
4
4
  __experimentalHStack as HStack,
5
5
  __experimentalVStack as VStack,
@@ -83,7 +83,7 @@ export default function ImageSizeControl( {
83
83
  return (
84
84
  <VStack className="block-editor-image-size-control" spacing="4">
85
85
  { imageSizeOptions && imageSizeOptions.length > 0 && (
86
- <SelectControl
86
+ <WCSelectControl
87
87
  label={ __( 'Resolution' ) }
88
88
  value={ slug }
89
89
  options={ imageSizeOptions }
@@ -18,6 +18,7 @@ import { useBlockEditContext } from '../block-edit/context';
18
18
  import useBlockSync from '../provider/use-block-sync';
19
19
  import { store as blockEditorStore } from '../../store';
20
20
  import useBlockDropZone from '../use-block-drop-zone';
21
+ import { normalizeLegacyLayout } from '../../layouts/utils';
21
22
  import { unlock } from '../../lock-unlock';
22
23
 
23
24
  const EMPTY_OBJECT = {};
@@ -94,11 +95,18 @@ function UncontrolledInnerBlocks( props ) {
94
95
  EMPTY_OBJECT;
95
96
 
96
97
  const { allowSizingOnChildren = false } = defaultLayoutBlockSupport;
98
+ // Legacy markup expresses a constrained layout as `inherit: true` or bare
99
+ // content/wide sizes with no `type`. Promote it the way the layout styling
100
+ // hooks do, so the inner blocks resolve to constrained rather than flow.
101
+ const normalizedLayout = useMemo(
102
+ () => normalizeLegacyLayout( layout ),
103
+ [ layout ]
104
+ );
97
105
  // The support is a config object, e.g. `{ allowSwitching: false, default: { type: 'flex' } }`,
98
106
  // so the layout itself lives under `default`. Passing the config through would leave the
99
107
  // context without a `type`, and consumers would resolve it to the flow layout.
100
108
  const usedLayout =
101
- layout || defaultLayoutBlockSupport.default || EMPTY_OBJECT;
109
+ normalizedLayout || defaultLayoutBlockSupport.default || EMPTY_OBJECT;
102
110
 
103
111
  const memoedLayout = useMemo(
104
112
  () => ( {
@@ -104,7 +104,7 @@ export default function InnerContent( { clientId } ) {
104
104
  </AsyncModeProvider>,
105
105
  slots[ index ],
106
106
  childClientId
107
- )
107
+ )
108
108
  : null
109
109
  ) }
110
110
  </LayoutProvider>
@@ -1,5 +1,5 @@
1
1
  import { useMemo } from '@wordpress/element';
2
- import { _x, _n, sprintf } from '@wordpress/i18n';
2
+ import { _n, sprintf } from '@wordpress/i18n';
3
3
  import { speak } from '@wordpress/a11y';
4
4
  import usePatternsState from '../hooks/use-patterns-state';
5
5
  import {
@@ -7,19 +7,10 @@ import {
7
7
  allPatternsCategory,
8
8
  myPatternsCategory,
9
9
  starterPatternsCategory,
10
+ getPopulatedCategories,
10
11
  INSERTER_PATTERN_TYPES,
11
12
  } from './utils';
12
13
 
13
- function hasRegisteredCategory( pattern, allCategories ) {
14
- if ( ! pattern.categories || ! pattern.categories.length ) {
15
- return false;
16
- }
17
-
18
- return pattern.categories.some( ( cat ) =>
19
- allCategories.some( ( category ) => category.name === cat )
20
- );
21
- }
22
-
23
14
  export function usePatternCategories( rootClientId, sourceFilter = 'all' ) {
24
15
  const [ patterns, allCategories ] = usePatternsState(
25
16
  undefined,
@@ -33,33 +24,16 @@ export function usePatternCategories( rootClientId, sourceFilter = 'all' ) {
33
24
  : patterns.filter(
34
25
  ( pattern ) =>
35
26
  ! isPatternFiltered( pattern, sourceFilter )
36
- ),
27
+ ),
37
28
  [ sourceFilter, patterns ]
38
29
  );
39
30
 
40
31
  // Remove any empty categories.
41
32
  const populatedCategories = useMemo( () => {
42
- const categories = allCategories
43
- .filter( ( category ) =>
44
- filteredPatterns.some( ( pattern ) =>
45
- pattern.categories?.includes( category.name )
46
- )
47
- )
48
- .sort( ( a, b ) => a.label.localeCompare( b.label ) );
49
-
50
- if (
51
- filteredPatterns.some(
52
- ( pattern ) => ! hasRegisteredCategory( pattern, allCategories )
53
- ) &&
54
- ! categories.find(
55
- ( category ) => category.name === 'uncategorized'
56
- )
57
- ) {
58
- categories.push( {
59
- name: 'uncategorized',
60
- label: _x( 'Uncategorized' ),
61
- } );
62
- }
33
+ const categories = getPopulatedCategories(
34
+ filteredPatterns,
35
+ allCategories
36
+ );
63
37
  if (
64
38
  filteredPatterns.some( ( pattern ) =>
65
39
  pattern.blockTypes?.includes( 'core/post-content' )
@@ -26,6 +26,50 @@ export const starterPatternsCategory = {
26
26
  label: __( 'Starter content' ),
27
27
  };
28
28
 
29
+ function hasRegisteredCategory( pattern, allCategories ) {
30
+ if ( ! pattern.categories || ! pattern.categories.length ) {
31
+ return false;
32
+ }
33
+
34
+ return pattern.categories.some( ( cat ) =>
35
+ allCategories.some( ( category ) => category.name === cat )
36
+ );
37
+ }
38
+
39
+ /**
40
+ * Returns the categories that contain at least one of the given patterns,
41
+ * sorted by label. An "Uncategorized" category is appended when some pattern
42
+ * belongs to no registered category.
43
+ *
44
+ * @param {Array} patterns The patterns to derive the categories from.
45
+ * @param {Array} allCategories The registered pattern categories.
46
+ *
47
+ * @return {Array} The populated categories.
48
+ */
49
+ export function getPopulatedCategories( patterns, allCategories ) {
50
+ const categories = allCategories
51
+ .filter( ( category ) =>
52
+ patterns.some( ( pattern ) =>
53
+ pattern.categories?.includes( category.name )
54
+ )
55
+ )
56
+ .sort( ( a, b ) => a.label.localeCompare( b.label ) );
57
+
58
+ if (
59
+ patterns.some(
60
+ ( pattern ) => ! hasRegisteredCategory( pattern, allCategories )
61
+ ) &&
62
+ ! categories.find( ( category ) => category.name === 'uncategorized' )
63
+ ) {
64
+ categories.push( {
65
+ name: 'uncategorized',
66
+ label: __( 'Uncategorized' ),
67
+ } );
68
+ }
69
+
70
+ return categories;
71
+ }
72
+
29
73
  export function isPatternFiltered( pattern, sourceFilter, syncFilter ) {
30
74
  const isUserPattern = pattern.name.startsWith( 'core/block' );
31
75
  const isDirectoryPattern =
@@ -81,13 +81,13 @@ const useBlockTypesState = ( rootClientId, onInsert, isQuick ) => {
81
81
  syncStatus === 'unsynced'
82
82
  ? parse( content, {
83
83
  __unstableSkipMigrationLogs: true,
84
- } )
84
+ } )
85
85
  : createBlock(
86
86
  name,
87
87
  initialAttributes,
88
88
  createBlocksFromInnerBlocksTemplate( innerBlocks ),
89
89
  innerContent
90
- );
90
+ );
91
91
  onInsert(
92
92
  insertedBlock,
93
93
  undefined,
@@ -163,7 +163,7 @@ function useInsertionPoint( {
163
163
  destinationIndex,
164
164
  rootClientId: _rootClientId,
165
165
  registry,
166
- } ),
166
+ } ),
167
167
  isAppender || _rootClientId === undefined
168
168
  ? destinationRootClientId
169
169
  : _rootClientId,
@@ -105,7 +105,7 @@ const usePatternsState = (
105
105
  : getClosestAllowedInsertionPointForPattern(
106
106
  pattern,
107
107
  rootClientId
108
- );
108
+ );
109
109
  if ( destinationRootClientId === null ) {
110
110
  return;
111
111
  }