@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/global-styles/inherited-value-context.js"],
4
- "sourcesContent": ["import { useContext, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { privateApis as globalStylesEnginePrivateApis } from '@wordpress/global-styles-engine';\nimport { store as blockEditorStore } from '../../store';\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\nimport { getVariationNameFromClass } from '../../hooks/block-style-variation';\nimport { useBlockEditContext } from '../block-edit/context';\nimport BlockContext from '../block-context';\nimport { unlock } from '../../lock-unlock';\nimport { isGlobalStylesInheritanceEnabled } from './inheritance';\n\nconst { resolveStyle } = unlock( globalStylesEnginePrivateApis );\n\n// Undefined so the panels fall back to their `inheritedValue = value` default.\nconst NO_RESOLVED_STYLE = { value: undefined, sources: undefined };\n\n/**\n * Reads the Global Styles payload and returns it as a `GlobalStylesConfig`\n * (`{ styles, _links }`), the shape `resolveStyle` expects. `_links` carries\n * the theme-file map used to resolve pointers such as background images.\n *\n * @return {?Object} Global Styles config, or `null` before the payload settles.\n */\nfunction useRawGlobalStyles() {\n\tconst { rawGlobalStylesData, links } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\trawGlobalStylesData: settings[ globalStylesDataKey ] ?? null,\n\t\t\tlinks: settings[ globalStylesLinksDataKey ] ?? null,\n\t\t};\n\t}, [] );\n\treturn useMemo(\n\t\t() =>\n\t\t\trawGlobalStylesData\n\t\t\t\t? { styles: rawGlobalStylesData, _links: links ?? undefined }\n\t\t\t\t: null,\n\t\t[ rawGlobalStylesData, links ]\n\t);\n}\n\n/**\n * Blocks whose heading level is handed down by a parent through block context\n * rather than held in their own `level` attribute, mapped to that context key\n * and the level they fall back to.\n *\n * Accordion Heading is the only one: the parent Accordion owns the level, and\n * the child's `level` attribute has no default and is absent on pattern-,\n * template- and paste-inserted blocks.\n */\nconst CONTEXT_HEADING_LEVEL_BLOCKS = {\n\t'core/accordion-heading': {\n\t\tcontextKey: 'core/accordion-heading-level',\n\t\tfallbackLevel: 3,\n\t},\n};\n\n/**\n * Resolves the heading level that selects a block's `h1`-`h6` element layer.\n *\n * @param {string} blockName Block name.\n * @param {?number} levelAttribute The block's own `level` attribute, if it has one.\n * @param {?number} contextLevel Level supplied by a parent through block context.\n * @return {?number} Resolved heading level, or `undefined` when the block has none.\n */\nfunction getHeadingLevel( blockName, levelAttribute, contextLevel ) {\n\tconst contextOwned = CONTEXT_HEADING_LEVEL_BLOCKS[ blockName ];\n\tif ( ! contextOwned ) {\n\t\treturn levelAttribute;\n\t}\n\t// Mirrors the block's own chain (Accordion Heading saves `h${ level || 3 }`),\n\t// so `0` coerces to the fallback instead of reading as a level-0 state.\n\treturn levelAttribute || contextLevel || contextOwned.fallbackLevel;\n}\n\n/**\n * Reads the heading level a parent supplies through block context.\n *\n * Only the blocks in `CONTEXT_HEADING_LEVEL_BLOCKS` read a key: the value\n * reaches every descendant, so an ordinary Heading inside an Accordion Panel\n * must not pick it up. Returns a primitive so callers can use it as a\n * `useSelect` dependency.\n *\n * @param {?string} blockName Block name.\n * @return {?number} Level from block context, or `undefined`.\n */\nfunction useContextHeadingLevel( blockName ) {\n\tconst blockContext = useContext( BlockContext );\n\tconst contextKey = CONTEXT_HEADING_LEVEL_BLOCKS[ blockName ]?.contextKey;\n\treturn contextKey ? blockContext[ contextKey ] : undefined;\n}\n\n/**\n * Maps a block to the root-level Global Styles *element* layers that paint it\n * on the canvas, in addition to (or instead of) the block's own class — e.g. a\n * Button renders `.wp-element-button`, a level-2 Heading renders `<h2>`.\n *\n * Keys are ordered low to high precedence, so a level-specific `h2` wins over\n * the generic `heading`. A level of `0` (e.g. a Site or Post Title rendered as\n * a paragraph) renders no heading tag, so no element layer applies.\n *\n * Hand-maintained by necessity: the block-to-element relationship is not\n * inferable from block metadata. `supports.color.link` and friends mark blocks\n * that *contain* an element, not blocks that *are* one, and only the inverse\n * element-to-selector map exists (`__EXPERIMENTAL_ELEMENTS`). Standardizing it\n * as a block property is tracked in\n * https://github.com/WordPress/gutenberg/issues/80438.\n *\n * Only blocks that *are* a link fold the `link` layer (e.g. Read More, Login/out\n * and the pagination links render `<a>` as their whole selves). Blocks that\n * merely *contain* a link — the heading family, Paragraph, Group, and the\n * hybrid blocks with a Link colour control (Post Author Name, Post Date, …) —\n * get no `link` layer: their inner-link control reads the\n * `inheritedValue.elements.link` passthrough instead, so folding `link` in would\n * bleed link color into the block's own text.\n *\n * @param {string} blockName Block name.\n * @param {?number} headingLevel Resolved heading level, from `getHeadingLevel`.\n * @return {string[]} Ordered element keys, low to high precedence.\n */\nfunction getElementLayers( blockName, headingLevel ) {\n\tswitch ( blockName ) {\n\t\tcase 'core/button':\n\t\t\treturn [ 'button' ];\n\t\tcase 'core/accordion-heading':\n\t\tcase 'core/heading':\n\t\tcase 'core/post-title':\n\t\tcase 'core/site-title':\n\t\tcase 'core/query-title':\n\t\tcase 'core/comments-title':\n\t\tcase 'core/term-name':\n\t\tcase 'core/site-tagline':\n\t\t\tif ( headingLevel === 0 ) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn headingLevel\n\t\t\t\t? [ 'heading', `h${ headingLevel }` ]\n\t\t\t\t: [ 'heading' ];\n\t\t// Whole-block link blocks: the entire block renders as an `<a>`, so the\n\t\t// root `styles.elements.link` layer paints it, mirroring how `button`\n\t\t// paints Button. For the blocks whose `color.text` support is disabled\n\t\t// this is inert at the (hidden) text control while their typography\n\t\t// controls now reflect the link element; Read More (`color.text: true`)\n\t\t// surfaces the inherited link color at its Text control.\n\t\tcase 'core/read-more':\n\t\tcase 'core/loginout':\n\t\tcase 'core/post-navigation-link':\n\t\tcase 'core/query-pagination-next':\n\t\tcase 'core/query-pagination-previous':\n\t\tcase 'core/query-pagination-numbers':\n\t\tcase 'core/comments-pagination-next':\n\t\tcase 'core/comments-pagination-previous':\n\t\tcase 'core/comments-pagination-numbers':\n\t\tcase 'core/comment-edit-link':\n\t\tcase 'core/comment-reply-link':\n\t\tcase 'core/post-comments-link':\n\t\t\treturn [ 'link' ];\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n\n/**\n * Internal hook that derives the active block-style-variation slug from a\n * block's `className` by matching registered styles via\n * `getVariationNameFromClass`, together with the element layers that paint\n * the block. Both come from a single store subscription.\n *\n * The lookup is scoped to a single `useSelect` subscription; the\n * `@wordpress/blocks` registered-styles slice changes only when a block's\n * styles are (un)registered, so this subscription is cold in steady-state\n * editor use.\n *\n * The block's `clientId` comes from the block edit context rather than an\n * argument: these panels always render inside `BlockEditContextProvider`, so\n * the caller does not have to thread it through.\n *\n * @param {?string} blockName Block name (e.g. `core/heading`).\n * @param {?string} className Space-separated class string from block attributes.\n * @return {{ variationName: ?string, headingLevel: ?number }} Variation slug\n * (without the `is-style-` prefix) and the block's heading level, if any.\n */\nfunction useVariationAndElements( blockName, className ) {\n\tconst { clientId } = useBlockEditContext();\n\tconst contextHeadingLevel = useContextHeadingLevel( blockName );\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! blockName ) {\n\t\t\t\treturn { variationName: null, headingLevel: undefined };\n\t\t\t}\n\t\t\tconst registeredStyles =\n\t\t\t\tselect( blocksStore ).getBlockStyles( blockName );\n\t\t\tconst { level } =\n\t\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\t\t// Primitives only: `useSelect` shallow-compares this object, so\n\t\t\t// returning a fresh array here would re-render on every action.\n\t\t\treturn {\n\t\t\t\tvariationName: className\n\t\t\t\t\t? getVariationNameFromClass( className, registeredStyles )\n\t\t\t\t\t: null,\n\t\t\t\theadingLevel: getHeadingLevel(\n\t\t\t\t\tblockName,\n\t\t\t\t\tlevel,\n\t\t\t\t\tcontextHeadingLevel\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ blockName, className, clientId, contextHeadingLevel ]\n\t);\n}\n\n/**\n * Hook: computes the merged, cascade-resolved `inheritedValue` payload and\n * source map for a selected block, ready to hand to a shared Global Styles\n * panel via props.\n *\n * It reads the merged Global Styles payload and the block's applied variation,\n * then folds the Root ‹ Block-type ‹ applied-variation cascade (resolving\n * `{ ref }` envelopes and theme-file pointers) via the pure `resolveStyle`\n * resolver in `@wordpress/global-styles-engine`. All store access lives here;\n * the panels stay presentational.\n *\n * Before the `globalStylesDataKey` payload settles (hydration) or when\n * `blockName` is missing, the hook returns empty value and source objects, so\n * each panel's `inheritedValue = value` default preserves pre-feature behavior.\n *\n * @param {?string} blockName Selected block name (e.g. `core/heading`).\n * @param {?string} className Block `className` used to detect an applied variation.\n * @param {?Object} [selectedState] Selected block style state (`{ viewport, pseudo }`), or null for the default state.\n * @return {{ value: Object, sources: Object }} Merged panel-scoped payload and source map.\n */\nexport function useResolvedStyle( blockName, className, selectedState = null ) {\n\tconst { variationName, headingLevel } = useVariationAndElements(\n\t\tblockName,\n\t\tclassName\n\t);\n\tconst globalStyles = useRawGlobalStyles();\n\n\treturn useMemo( () => {\n\t\t// Skip the cascade merge entirely when the experiment is off.\n\t\tif ( ! isGlobalStylesInheritanceEnabled() ) {\n\t\t\treturn NO_RESOLVED_STYLE;\n\t\t}\n\t\tif ( ! blockName ) {\n\t\t\treturn { value: {}, sources: {} };\n\t\t}\n\t\treturn resolveStyle( globalStyles, {\n\t\t\tblockName,\n\t\t\tvariationName,\n\t\t\telements: getElementLayers( blockName, headingLevel ),\n\t\t\tviewport: selectedState?.viewport ?? null,\n\t\t\tpseudoState: selectedState?.pseudo ?? null,\n\t\t} );\n\t}, [\n\t\tblockName,\n\t\tvariationName,\n\t\theadingLevel,\n\t\tglobalStyles,\n\t\tselectedState,\n\t] );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useContext, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { privateApis as globalStylesEnginePrivateApis } from '@wordpress/global-styles-engine';\nimport { store as blockEditorStore } from '../../store';\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\nimport { getVariationNameFromClass } from '../../hooks/block-style-variation';\nimport { useBlockEditContext } from '../block-edit/context';\nimport BlockContext from '../block-context';\nimport { unlock } from '../../lock-unlock';\n\nconst { resolveStyle } = unlock( globalStylesEnginePrivateApis );\n\n/**\n * Reads the Global Styles payload and returns it as a `GlobalStylesConfig`\n * (`{ styles, _links }`), the shape `resolveStyle` expects. `_links` carries\n * the theme-file map used to resolve pointers such as background images.\n *\n * @return {?Object} Global Styles config, or `null` before the payload settles.\n */\nfunction useRawGlobalStyles() {\n\tconst { rawGlobalStylesData, links } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\trawGlobalStylesData: settings[ globalStylesDataKey ] ?? null,\n\t\t\tlinks: settings[ globalStylesLinksDataKey ] ?? null,\n\t\t};\n\t}, [] );\n\treturn useMemo(\n\t\t() =>\n\t\t\trawGlobalStylesData\n\t\t\t\t? { styles: rawGlobalStylesData, _links: links ?? undefined }\n\t\t\t\t: null,\n\t\t[ rawGlobalStylesData, links ]\n\t);\n}\n\n/**\n * Blocks whose heading level is handed down by a parent through block context\n * rather than held in their own `level` attribute, mapped to that context key\n * and the level they fall back to.\n *\n * Accordion Heading is the only one: the parent Accordion owns the level, and\n * the child's `level` attribute has no default and is absent on pattern-,\n * template- and paste-inserted blocks.\n */\nconst CONTEXT_HEADING_LEVEL_BLOCKS = {\n\t'core/accordion-heading': {\n\t\tcontextKey: 'core/accordion-heading-level',\n\t\tfallbackLevel: 3,\n\t},\n};\n\n/**\n * Resolves the heading level that selects a block's `h1`-`h6` element layer.\n *\n * @param {string} blockName Block name.\n * @param {?number} levelAttribute The block's own `level` attribute, if it has one.\n * @param {?number} contextLevel Level supplied by a parent through block context.\n * @return {?number} Resolved heading level, or `undefined` when the block has none.\n */\nfunction getHeadingLevel( blockName, levelAttribute, contextLevel ) {\n\tconst contextOwned = CONTEXT_HEADING_LEVEL_BLOCKS[ blockName ];\n\tif ( ! contextOwned ) {\n\t\treturn levelAttribute;\n\t}\n\t// Mirrors the block's own chain (Accordion Heading saves `h${ level || 3 }`),\n\t// so `0` coerces to the fallback instead of reading as a level-0 state.\n\treturn levelAttribute || contextLevel || contextOwned.fallbackLevel;\n}\n\n/**\n * Reads the heading level a parent supplies through block context.\n *\n * Only the blocks in `CONTEXT_HEADING_LEVEL_BLOCKS` read a key: the value\n * reaches every descendant, so an ordinary Heading inside an Accordion Panel\n * must not pick it up. Returns a primitive so callers can use it as a\n * `useSelect` dependency.\n *\n * @param {?string} blockName Block name.\n * @return {?number} Level from block context, or `undefined`.\n */\nfunction useContextHeadingLevel( blockName ) {\n\tconst blockContext = useContext( BlockContext );\n\tconst contextKey = CONTEXT_HEADING_LEVEL_BLOCKS[ blockName ]?.contextKey;\n\treturn contextKey ? blockContext[ contextKey ] : undefined;\n}\n\n/**\n * Maps a block to the root-level Global Styles *element* layers that paint it\n * on the canvas, in addition to (or instead of) the block's own class — e.g. a\n * Button renders `.wp-element-button`, a level-2 Heading renders `<h2>`.\n *\n * Keys are ordered low to high precedence, so a level-specific `h2` wins over\n * the generic `heading`. A level of `0` (e.g. a Site or Post Title rendered as\n * a paragraph) renders no heading tag, so no element layer applies.\n *\n * Hand-maintained by necessity: the block-to-element relationship is not\n * inferable from block metadata. `supports.color.link` and friends mark blocks\n * that *contain* an element, not blocks that *are* one, and only the inverse\n * element-to-selector map exists (`__EXPERIMENTAL_ELEMENTS`). Standardizing it\n * as a block property is tracked in\n * https://github.com/WordPress/gutenberg/issues/80438.\n *\n * Only blocks that *are* a link fold the `link` layer (e.g. Read More, Login/out\n * and the pagination links render `<a>` as their whole selves). Blocks that\n * merely *contain* a link — the heading family, Paragraph, Group, and the\n * hybrid blocks with a Link colour control (Post Author Name, Post Date, …) —\n * get no `link` layer: their inner-link control reads the\n * `inheritedValue.elements.link` passthrough instead, so folding `link` in would\n * bleed link color into the block's own text.\n *\n * @param {string} blockName Block name.\n * @param {?number} headingLevel Resolved heading level, from `getHeadingLevel`.\n * @return {string[]} Ordered element keys, low to high precedence.\n */\nfunction getElementLayers( blockName, headingLevel ) {\n\tswitch ( blockName ) {\n\t\tcase 'core/button':\n\t\t\treturn [ 'button' ];\n\t\tcase 'core/accordion-heading':\n\t\tcase 'core/heading':\n\t\tcase 'core/post-title':\n\t\tcase 'core/site-title':\n\t\tcase 'core/query-title':\n\t\tcase 'core/comments-title':\n\t\tcase 'core/term-name':\n\t\tcase 'core/site-tagline':\n\t\t\tif ( headingLevel === 0 ) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn headingLevel\n\t\t\t\t? [ 'heading', `h${ headingLevel }` ]\n\t\t\t\t: [ 'heading' ];\n\t\t// Whole-block link blocks: the entire block renders as an `<a>`, so the\n\t\t// root `styles.elements.link` layer paints it, mirroring how `button`\n\t\t// paints Button. For the blocks whose `color.text` support is disabled\n\t\t// this is inert at the (hidden) text control while their typography\n\t\t// controls now reflect the link element; Read More (`color.text: true`)\n\t\t// surfaces the inherited link color at its Text control.\n\t\tcase 'core/read-more':\n\t\tcase 'core/loginout':\n\t\tcase 'core/post-navigation-link':\n\t\tcase 'core/query-pagination-next':\n\t\tcase 'core/query-pagination-previous':\n\t\tcase 'core/query-pagination-numbers':\n\t\tcase 'core/comments-pagination-next':\n\t\tcase 'core/comments-pagination-previous':\n\t\tcase 'core/comments-pagination-numbers':\n\t\tcase 'core/comment-edit-link':\n\t\tcase 'core/comment-reply-link':\n\t\tcase 'core/post-comments-link':\n\t\t\treturn [ 'link' ];\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n\n/**\n * Internal hook that derives the active block-style-variation slug from a\n * block's `className` by matching registered styles via\n * `getVariationNameFromClass`, together with the element layers that paint\n * the block. Both come from a single store subscription.\n *\n * The lookup is scoped to a single `useSelect` subscription; the\n * `@wordpress/blocks` registered-styles slice changes only when a block's\n * styles are (un)registered, so this subscription is cold in steady-state\n * editor use.\n *\n * The block's `clientId` comes from the block edit context rather than an\n * argument: these panels always render inside `BlockEditContextProvider`, so\n * the caller does not have to thread it through.\n *\n * @param {?string} blockName Block name (e.g. `core/heading`).\n * @param {?string} className Space-separated class string from block attributes.\n * @return {{ variationName: ?string, headingLevel: ?number }} Variation slug\n * (without the `is-style-` prefix) and the block's heading level, if any.\n */\nfunction useVariationAndElements( blockName, className ) {\n\tconst { clientId } = useBlockEditContext();\n\tconst contextHeadingLevel = useContextHeadingLevel( blockName );\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! blockName ) {\n\t\t\t\treturn { variationName: null, headingLevel: undefined };\n\t\t\t}\n\t\t\tconst registeredStyles =\n\t\t\t\tselect( blocksStore ).getBlockStyles( blockName );\n\t\t\tconst { level } =\n\t\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\t\t// Primitives only: `useSelect` shallow-compares this object, so\n\t\t\t// returning a fresh array here would re-render on every action.\n\t\t\treturn {\n\t\t\t\tvariationName: className\n\t\t\t\t\t? getVariationNameFromClass( className, registeredStyles )\n\t\t\t\t\t: null,\n\t\t\t\theadingLevel: getHeadingLevel(\n\t\t\t\t\tblockName,\n\t\t\t\t\tlevel,\n\t\t\t\t\tcontextHeadingLevel\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ blockName, className, clientId, contextHeadingLevel ]\n\t);\n}\n\n/**\n * Hook: computes the merged, cascade-resolved `inheritedValue` payload and\n * source map for a selected block, ready to hand to a shared Global Styles\n * panel via props.\n *\n * It reads the merged Global Styles payload and the block's applied variation,\n * then folds the Root ‹ Block-type ‹ applied-variation cascade (resolving\n * `{ ref }` envelopes and theme-file pointers) via the pure `resolveStyle`\n * resolver in `@wordpress/global-styles-engine`. All store access lives here;\n * the panels stay presentational.\n *\n * Before the `globalStylesDataKey` payload settles (hydration) or when\n * `blockName` is missing, the hook returns empty value and source objects, so\n * each panel reads no inherited value and renders its local value alone.\n *\n * @param {?string} blockName Selected block name (e.g. `core/heading`).\n * @param {?string} className Block `className` used to detect an applied variation.\n * @param {?Object} [selectedState] Selected block style state (`{ viewport, pseudo }`), or null for the default state.\n * @return {{ value: Object, sources: Object }} Merged panel-scoped payload and source map.\n */\nexport function useResolvedStyle( blockName, className, selectedState = null ) {\n\tconst { variationName, headingLevel } = useVariationAndElements(\n\t\tblockName,\n\t\tclassName\n\t);\n\tconst globalStyles = useRawGlobalStyles();\n\n\treturn useMemo( () => {\n\t\tif ( ! blockName ) {\n\t\t\treturn { value: {}, sources: {} };\n\t\t}\n\t\treturn resolveStyle( globalStyles, {\n\t\t\tblockName,\n\t\t\tvariationName,\n\t\t\telements: getElementLayers( blockName, headingLevel ),\n\t\t\tviewport: selectedState?.viewport ?? null,\n\t\t\tpseudoState: selectedState?.pseudo ?? null,\n\t\t} );\n\t}, [\n\t\tblockName,\n\t\tvariationName,\n\t\theadingLevel,\n\t\tglobalStyles,\n\t\tselectedState,\n\t] );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -54,7 +54,6 @@ function StateControlBadges({
54
54
  WCBadge,
55
55
  {
56
56
  className: "block-editor-global-styles-state-control__badge",
57
- intent: "info",
58
57
  children: [
59
58
  state.label,
60
59
  !!state.tooltipText && /* @__PURE__ */ jsx(VisuallyHidden, { render: /* @__PURE__ */ jsx("span", {}), children: state.tooltipText })
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/global-styles/state-control-badges.jsx"],
4
- "sourcesContent": ["import { privateApis as componentsPrivateApis } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { Stack, Tooltip, VisuallyHidden } from '@wordpress/ui';\nimport { unlock } from '../../lock-unlock';\n\nconst { Badge: WCBadge } = unlock( componentsPrivateApis );\n\nexport default function StateControlBadges( {\n\tviewportStates = [],\n\tpseudoStates = [],\n\tviewportValue = 'default',\n\tpseudoStateValue = 'default',\n\tclassName = 'block-editor-global-styles-state-control__badges',\n} ) {\n\tconst activeStates = [];\n\tconst selectedViewport = viewportStates.find(\n\t\t( state ) => state.value === viewportValue\n\t);\n\tconst selectedPseudoState = pseudoStates.find(\n\t\t( state ) => state.value === pseudoStateValue\n\t);\n\n\tif ( selectedViewport ) {\n\t\tactiveStates.push( {\n\t\t\tkey: `viewport-${ selectedViewport.value }`,\n\t\t\tlabel: selectedViewport.label,\n\t\t\ttooltipText: sprintf(\n\t\t\t\t/* translators: %s: viewport name, e.g. \"Tablet\". */\n\t\t\t\t__( 'Style changes apply to the %s viewport.' ),\n\t\t\t\tselectedViewport.label\n\t\t\t),\n\t\t} );\n\t}\n\n\tif ( selectedPseudoState ) {\n\t\tactiveStates.push( {\n\t\t\tkey: `pseudo-${ selectedPseudoState.value }`,\n\t\t\tlabel: selectedPseudoState.label,\n\t\t\ttooltipText: sprintf(\n\t\t\t\t/* translators: %s: pseudo state name, e.g. \"Hover\". */\n\t\t\t\t__( 'Style changes apply to the %s state.' ),\n\t\t\t\tselectedPseudoState.label\n\t\t\t),\n\t\t} );\n\t}\n\n\treturn (\n\t\t<Stack\n\t\t\tclassName={ className }\n\t\t\tdirection=\"row\"\n\t\t\tjustify=\"flex-start\"\n\t\t\tgap=\"xs\"\n\t\t\twrap=\"wrap\"\n\t\t>\n\t\t\t{ activeStates.map( ( state ) => {\n\t\t\t\tconst badge = (\n\t\t\t\t\t<WCBadge\n\t\t\t\t\t\tkey={ state.key }\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-state-control__badge\"\n\t\t\t\t\t\tintent=\"info\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ state.label }\n\t\t\t\t\t\t{ !! state.tooltipText && (\n\t\t\t\t\t\t\t<VisuallyHidden render={ <span /> }>\n\t\t\t\t\t\t\t\t{ state.tooltipText }\n\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</WCBadge>\n\t\t\t\t);\n\n\t\t\t\tif ( ! state.tooltipText ) {\n\t\t\t\t\treturn badge;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<Tooltip.Root key={ state.key }>\n\t\t\t\t\t\t<Tooltip.Trigger\n\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t<span className=\"block-editor-global-styles-state-control__badge-tooltip-trigger\">\n\t\t\t\t\t\t\t\t\t{ badge }\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Tooltip.Popup>{ state.tooltipText }</Tooltip.Popup>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Stack>\n\t);\n}\n"],
5
- "mappings": ";AAAA,SAAS,eAAe,6BAA6B;AACrD,SAAS,IAAI,eAAe;AAC5B,SAAS,OAAO,SAAS,sBAAsB;AAC/C,SAAS,cAAc;AAqDlB,SAO2B,KAP3B;AAnDL,IAAM,EAAE,OAAO,QAAQ,IAAI,OAAQ,qBAAsB;AAE1C,SAAR,mBAAqC;AAAA,EAC3C,iBAAiB,CAAC;AAAA,EAClB,eAAe,CAAC;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,YAAY;AACb,GAAI;AACH,QAAM,eAAe,CAAC;AACtB,QAAM,mBAAmB,eAAe;AAAA,IACvC,CAAE,UAAW,MAAM,UAAU;AAAA,EAC9B;AACA,QAAM,sBAAsB,aAAa;AAAA,IACxC,CAAE,UAAW,MAAM,UAAU;AAAA,EAC9B;AAEA,MAAK,kBAAmB;AACvB,iBAAa,KAAM;AAAA,MAClB,KAAK,YAAa,iBAAiB,KAAM;AAAA,MACzC,OAAO,iBAAiB;AAAA,MACxB,aAAa;AAAA;AAAA,QAEZ,GAAI,yCAA0C;AAAA,QAC9C,iBAAiB;AAAA,MAClB;AAAA,IACD,CAAE;AAAA,EACH;AAEA,MAAK,qBAAsB;AAC1B,iBAAa,KAAM;AAAA,MAClB,KAAK,UAAW,oBAAoB,KAAM;AAAA,MAC1C,OAAO,oBAAoB;AAAA,MAC3B,aAAa;AAAA;AAAA,QAEZ,GAAI,sCAAuC;AAAA,QAC3C,oBAAoB;AAAA,MACrB;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,KAAI;AAAA,MACJ,MAAK;AAAA,MAEH,uBAAa,IAAK,CAAE,UAAW;AAChC,cAAM,QACL;AAAA,UAAC;AAAA;AAAA,YAEA,WAAU;AAAA,YACV,QAAO;AAAA,YAEL;AAAA,oBAAM;AAAA,cACN,CAAC,CAAE,MAAM,eACV,oBAAC,kBAAe,QAAS,oBAAC,UAAK,GAC5B,gBAAM,aACT;AAAA;AAAA;AAAA,UARK,MAAM;AAAA,QAUb;AAGD,YAAK,CAAE,MAAM,aAAc;AAC1B,iBAAO;AAAA,QACR;AAEA,eACC,qBAAC,QAAQ,MAAR,EACA;AAAA;AAAA,YAAC,QAAQ;AAAA,YAAR;AAAA,cACA,QACC,oBAAC,UAAK,WAAU,mEACb,iBACH;AAAA;AAAA,UAEF;AAAA,UACA,oBAAC,QAAQ,OAAR,EAAgB,gBAAM,aAAa;AAAA,aARjB,MAAM,GAS1B;AAAA,MAEF,CAAE;AAAA;AAAA,EACH;AAEF;",
4
+ "sourcesContent": ["import { privateApis as componentsPrivateApis } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { Stack, Tooltip, VisuallyHidden } from '@wordpress/ui';\nimport { unlock } from '../../lock-unlock';\n\nconst { Badge: WCBadge } = unlock( componentsPrivateApis );\n\nexport default function StateControlBadges( {\n\tviewportStates = [],\n\tpseudoStates = [],\n\tviewportValue = 'default',\n\tpseudoStateValue = 'default',\n\tclassName = 'block-editor-global-styles-state-control__badges',\n} ) {\n\tconst activeStates = [];\n\tconst selectedViewport = viewportStates.find(\n\t\t( state ) => state.value === viewportValue\n\t);\n\tconst selectedPseudoState = pseudoStates.find(\n\t\t( state ) => state.value === pseudoStateValue\n\t);\n\n\tif ( selectedViewport ) {\n\t\tactiveStates.push( {\n\t\t\tkey: `viewport-${ selectedViewport.value }`,\n\t\t\tlabel: selectedViewport.label,\n\t\t\ttooltipText: sprintf(\n\t\t\t\t/* translators: %s: viewport name, e.g. \"Tablet\". */\n\t\t\t\t__( 'Style changes apply to the %s viewport.' ),\n\t\t\t\tselectedViewport.label\n\t\t\t),\n\t\t} );\n\t}\n\n\tif ( selectedPseudoState ) {\n\t\tactiveStates.push( {\n\t\t\tkey: `pseudo-${ selectedPseudoState.value }`,\n\t\t\tlabel: selectedPseudoState.label,\n\t\t\ttooltipText: sprintf(\n\t\t\t\t/* translators: %s: pseudo state name, e.g. \"Hover\". */\n\t\t\t\t__( 'Style changes apply to the %s state.' ),\n\t\t\t\tselectedPseudoState.label\n\t\t\t),\n\t\t} );\n\t}\n\n\treturn (\n\t\t<Stack\n\t\t\tclassName={ className }\n\t\t\tdirection=\"row\"\n\t\t\tjustify=\"flex-start\"\n\t\t\tgap=\"xs\"\n\t\t\twrap=\"wrap\"\n\t\t>\n\t\t\t{ activeStates.map( ( state ) => {\n\t\t\t\tconst badge = (\n\t\t\t\t\t<WCBadge\n\t\t\t\t\t\tkey={ state.key }\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-state-control__badge\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ state.label }\n\t\t\t\t\t\t{ !! state.tooltipText && (\n\t\t\t\t\t\t\t<VisuallyHidden render={ <span /> }>\n\t\t\t\t\t\t\t\t{ state.tooltipText }\n\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</WCBadge>\n\t\t\t\t);\n\n\t\t\t\tif ( ! state.tooltipText ) {\n\t\t\t\t\treturn badge;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<Tooltip.Root key={ state.key }>\n\t\t\t\t\t\t<Tooltip.Trigger\n\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t<span className=\"block-editor-global-styles-state-control__badge-tooltip-trigger\">\n\t\t\t\t\t\t\t\t\t{ badge }\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Tooltip.Popup>{ state.tooltipText }</Tooltip.Popup>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Stack>\n\t);\n}\n"],
5
+ "mappings": ";AAAA,SAAS,eAAe,6BAA6B;AACrD,SAAS,IAAI,eAAe;AAC5B,SAAS,OAAO,SAAS,sBAAsB;AAC/C,SAAS,cAAc;AAqDlB,SAM2B,KAN3B;AAnDL,IAAM,EAAE,OAAO,QAAQ,IAAI,OAAQ,qBAAsB;AAE1C,SAAR,mBAAqC;AAAA,EAC3C,iBAAiB,CAAC;AAAA,EAClB,eAAe,CAAC;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,YAAY;AACb,GAAI;AACH,QAAM,eAAe,CAAC;AACtB,QAAM,mBAAmB,eAAe;AAAA,IACvC,CAAE,UAAW,MAAM,UAAU;AAAA,EAC9B;AACA,QAAM,sBAAsB,aAAa;AAAA,IACxC,CAAE,UAAW,MAAM,UAAU;AAAA,EAC9B;AAEA,MAAK,kBAAmB;AACvB,iBAAa,KAAM;AAAA,MAClB,KAAK,YAAa,iBAAiB,KAAM;AAAA,MACzC,OAAO,iBAAiB;AAAA,MACxB,aAAa;AAAA;AAAA,QAEZ,GAAI,yCAA0C;AAAA,QAC9C,iBAAiB;AAAA,MAClB;AAAA,IACD,CAAE;AAAA,EACH;AAEA,MAAK,qBAAsB;AAC1B,iBAAa,KAAM;AAAA,MAClB,KAAK,UAAW,oBAAoB,KAAM;AAAA,MAC1C,OAAO,oBAAoB;AAAA,MAC3B,aAAa;AAAA;AAAA,QAEZ,GAAI,sCAAuC;AAAA,QAC3C,oBAAoB;AAAA,MACrB;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,KAAI;AAAA,MACJ,MAAK;AAAA,MAEH,uBAAa,IAAK,CAAE,UAAW;AAChC,cAAM,QACL;AAAA,UAAC;AAAA;AAAA,YAEA,WAAU;AAAA,YAER;AAAA,oBAAM;AAAA,cACN,CAAC,CAAE,MAAM,eACV,oBAAC,kBAAe,QAAS,oBAAC,UAAK,GAC5B,gBAAM,aACT;AAAA;AAAA;AAAA,UAPK,MAAM;AAAA,QASb;AAGD,YAAK,CAAE,MAAM,aAAc;AAC1B,iBAAO;AAAA,QACR;AAEA,eACC,qBAAC,QAAQ,MAAR,EACA;AAAA;AAAA,YAAC,QAAQ;AAAA,YAAR;AAAA,cACA,QACC,oBAAC,UAAK,WAAU,mEACb,iBACH;AAAA;AAAA,UAEF;AAAA,UACA,oBAAC,QAAQ,OAAR,EAAgB,gBAAM,aAAa;AAAA,aARjB,MAAM,GAS1B;AAAA,MAEF,CAAE;AAAA;AAAA,EACH;AAEF;",
6
6
  "names": []
7
7
  }
@@ -12,7 +12,8 @@ function StateControl({
12
12
  onChangeViewport,
13
13
  onChangePseudoState,
14
14
  showText = true,
15
- popoverProps = {}
15
+ popoverProps = {},
16
+ children
16
17
  }) {
17
18
  if (!viewportStates.length && !pseudoStates.length) {
18
19
  return null;
@@ -88,7 +89,7 @@ function StateControl({
88
89
  {
89
90
  onClick: () => {
90
91
  onChangeViewport?.(option.value);
91
- if (!hasPseudoStateOptions) {
92
+ if (!hasPseudoStateOptions && !children) {
92
93
  onClose();
93
94
  }
94
95
  },
@@ -104,7 +105,7 @@ function StateControl({
104
105
  onChangePseudoState?.(
105
106
  option.value
106
107
  );
107
- if (!hasViewportOptions) {
108
+ if (!hasViewportOptions && !children) {
108
109
  onClose();
109
110
  }
110
111
  },
@@ -112,7 +113,8 @@ function StateControl({
112
113
  children: option.label
113
114
  },
114
115
  `pseudo-${option.value}`
115
- )) })
116
+ )) }),
117
+ children
116
118
  ] })
117
119
  }
118
120
  )
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/global-styles/state-control.jsx"],
4
- "sourcesContent": ["import { __, sprintf } from '@wordpress/i18n';\nimport { check, chevronDown, moreVertical } from '@wordpress/icons';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { Stack } from '@wordpress/ui';\n\n/**\n * State control for managing viewport and pseudo-state styles.\n * Displays a dropdown menu with separate groups for each selector.\n *\n * @param {Object} props Component props.\n * @param {Array} props.viewportStates Array of available viewport states.\n * @param {Array} props.pseudoStates Array of available pseudo states.\n * @param {string} props.viewportValue Currently selected viewport value.\n * @param {string} props.pseudoStateValue Currently selected pseudo state value.\n * @param {Function} props.onChangeViewport Callback when viewport selection changes.\n * @param {Function} props.onChangePseudoState Callback when pseudo state selection changes.\n * @param {boolean} props.showText Whether to show text label on the toggle. Default true.\n * @param {Object} props.popoverProps Popover props for the dropdown menu.\n * @return {Element|null} State control component.\n */\nexport default function StateControl( {\n\tviewportStates = [],\n\tpseudoStates = [],\n\tviewportValue = 'default',\n\tpseudoStateValue = 'default',\n\tonChangeViewport,\n\tonChangePseudoState,\n\tshowText = true,\n\tpopoverProps = {},\n} ) {\n\tif ( ! viewportStates.length && ! pseudoStates.length ) {\n\t\treturn null;\n\t}\n\n\tconst viewportOptions = [\n\t\t{ label: __( 'Default' ), value: 'default' },\n\t\t...viewportStates.map( ( state ) => ( {\n\t\t\tlabel: state.label,\n\t\t\tvalue: state.value,\n\t\t} ) ),\n\t];\n\tconst pseudoStateOptions = [\n\t\t{ label: __( 'Default' ), value: 'default' },\n\t\t...pseudoStates.map( ( state ) => ( {\n\t\t\tlabel: state.label,\n\t\t\tvalue: state.value,\n\t\t} ) ),\n\t];\n\n\tconst hasViewportOptions = viewportStates.length > 0;\n\tconst hasPseudoStateOptions = pseudoStates.length > 0;\n\tconst triggerLabel = __( 'States' );\n\tconst activeStates = [];\n\n\tif ( hasViewportOptions && viewportValue !== 'default' ) {\n\t\tconst selectedViewport = viewportOptions.find(\n\t\t\t( option ) => option.value === viewportValue\n\t\t);\n\n\t\tif ( selectedViewport ) {\n\t\t\tactiveStates.push( {\n\t\t\t\tkey: `viewport-${ selectedViewport.value }`,\n\t\t\t\tlabel: selectedViewport.label,\n\t\t\t} );\n\t\t}\n\t}\n\n\tif ( hasPseudoStateOptions && pseudoStateValue !== 'default' ) {\n\t\tconst selectedPseudoState = pseudoStateOptions.find(\n\t\t\t( option ) => option.value === pseudoStateValue\n\t\t);\n\n\t\tif ( selectedPseudoState ) {\n\t\t\tactiveStates.push( {\n\t\t\t\tkey: `pseudo-${ selectedPseudoState.value }`,\n\t\t\t\tlabel: selectedPseudoState.label,\n\t\t\t} );\n\t\t}\n\t}\n\n\tconst currentStateLabel = activeStates.length\n\t\t? activeStates.map( ( state ) => state.label ).join( ', ' )\n\t\t: __( 'Default' );\n\tconst icon = showText ? chevronDown : moreVertical;\n\tconst toggleProps = showText\n\t\t? { size: 'compact', iconPosition: 'right' }\n\t\t: { size: 'small' };\n\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"column\"\n\t\t\tgap=\"sm\"\n\t\t\talign=\"flex-end\"\n\t\t\tclassName=\"block-editor-global-styles-state-control\"\n\t\t>\n\t\t\t<DropdownMenu\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={\n\t\t\t\t\tshowText\n\t\t\t\t\t\t? triggerLabel\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t/* translators: %s: Current state (e.g. \"Hover\", \"Focus\") */\n\t\t\t\t\t\t\t\t__( 'State: %s' ),\n\t\t\t\t\t\t\t\tcurrentStateLabel\n\t\t\t\t\t\t )\n\t\t\t\t}\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tplacement: 'right-start',\n\t\t\t\t\t...popoverProps,\n\t\t\t\t} }\n\t\t\t\ttext={ showText ? triggerLabel : undefined }\n\t\t\t\ttoggleProps={ toggleProps }\n\t\t\t>\n\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ hasViewportOptions && (\n\t\t\t\t\t\t\t<MenuGroup label={ __( 'Viewport' ) }>\n\t\t\t\t\t\t\t\t{ viewportOptions.map( ( option ) => (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ `viewport-${ option.value }` }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tonChangeViewport?.( option.value );\n\t\t\t\t\t\t\t\t\t\t\tif ( ! hasPseudoStateOptions ) {\n\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\tviewportValue === option.value\n\t\t\t\t\t\t\t\t\t\t\t\t? check\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasPseudoStateOptions && (\n\t\t\t\t\t\t\t<MenuGroup label={ __( 'Pseudo state' ) }>\n\t\t\t\t\t\t\t\t{ pseudoStateOptions.map( ( option ) => (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ `pseudo-${ option.value }` }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tonChangePseudoState?.(\n\t\t\t\t\t\t\t\t\t\t\t\toption.value\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tif ( ! hasViewportOptions ) {\n\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\tpseudoStateValue === option.value\n\t\t\t\t\t\t\t\t\t\t\t\t? check\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</DropdownMenu>\n\t\t</Stack>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { __, sprintf } from '@wordpress/i18n';\nimport { check, chevronDown, moreVertical } from '@wordpress/icons';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { Stack } from '@wordpress/ui';\n\n/**\n * State control for managing viewport and pseudo-state styles.\n * Displays a dropdown menu with separate groups for each selector.\n *\n * @param {Object} props Component props.\n * @param {Array} props.viewportStates Array of available viewport states.\n * @param {Array} props.pseudoStates Array of available pseudo states.\n * @param {string} props.viewportValue Currently selected viewport value.\n * @param {string} props.pseudoStateValue Currently selected pseudo state value.\n * @param {Function} props.onChangeViewport Callback when viewport selection changes.\n * @param {Function} props.onChangePseudoState Callback when pseudo state selection changes.\n * @param {boolean} props.showText Whether to show text label on the toggle. Default true.\n * @param {Object} props.popoverProps Popover props for the dropdown menu.\n * @param {Element} props.children Optional menu content rendered after the state groups.\n * @return {Element|null} State control component.\n */\nexport default function StateControl( {\n\tviewportStates = [],\n\tpseudoStates = [],\n\tviewportValue = 'default',\n\tpseudoStateValue = 'default',\n\tonChangeViewport,\n\tonChangePseudoState,\n\tshowText = true,\n\tpopoverProps = {},\n\tchildren,\n} ) {\n\tif ( ! viewportStates.length && ! pseudoStates.length ) {\n\t\treturn null;\n\t}\n\n\tconst viewportOptions = [\n\t\t{ label: __( 'Default' ), value: 'default' },\n\t\t...viewportStates.map( ( state ) => ( {\n\t\t\tlabel: state.label,\n\t\t\tvalue: state.value,\n\t\t} ) ),\n\t];\n\tconst pseudoStateOptions = [\n\t\t{ label: __( 'Default' ), value: 'default' },\n\t\t...pseudoStates.map( ( state ) => ( {\n\t\t\tlabel: state.label,\n\t\t\tvalue: state.value,\n\t\t} ) ),\n\t];\n\n\tconst hasViewportOptions = viewportStates.length > 0;\n\tconst hasPseudoStateOptions = pseudoStates.length > 0;\n\tconst triggerLabel = __( 'States' );\n\tconst activeStates = [];\n\n\tif ( hasViewportOptions && viewportValue !== 'default' ) {\n\t\tconst selectedViewport = viewportOptions.find(\n\t\t\t( option ) => option.value === viewportValue\n\t\t);\n\n\t\tif ( selectedViewport ) {\n\t\t\tactiveStates.push( {\n\t\t\t\tkey: `viewport-${ selectedViewport.value }`,\n\t\t\t\tlabel: selectedViewport.label,\n\t\t\t} );\n\t\t}\n\t}\n\n\tif ( hasPseudoStateOptions && pseudoStateValue !== 'default' ) {\n\t\tconst selectedPseudoState = pseudoStateOptions.find(\n\t\t\t( option ) => option.value === pseudoStateValue\n\t\t);\n\n\t\tif ( selectedPseudoState ) {\n\t\t\tactiveStates.push( {\n\t\t\t\tkey: `pseudo-${ selectedPseudoState.value }`,\n\t\t\t\tlabel: selectedPseudoState.label,\n\t\t\t} );\n\t\t}\n\t}\n\n\tconst currentStateLabel = activeStates.length\n\t\t? activeStates.map( ( state ) => state.label ).join( ', ' )\n\t\t: __( 'Default' );\n\tconst icon = showText ? chevronDown : moreVertical;\n\tconst toggleProps = showText\n\t\t? { size: 'compact', iconPosition: 'right' }\n\t\t: { size: 'small' };\n\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"column\"\n\t\t\tgap=\"sm\"\n\t\t\talign=\"flex-end\"\n\t\t\tclassName=\"block-editor-global-styles-state-control\"\n\t\t>\n\t\t\t<DropdownMenu\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={\n\t\t\t\t\tshowText\n\t\t\t\t\t\t? triggerLabel\n\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t/* translators: %s: Current state (e.g. \"Hover\", \"Focus\") */\n\t\t\t\t\t\t\t\t__( 'State: %s' ),\n\t\t\t\t\t\t\t\tcurrentStateLabel\n\t\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tplacement: 'right-start',\n\t\t\t\t\t...popoverProps,\n\t\t\t\t} }\n\t\t\t\ttext={ showText ? triggerLabel : undefined }\n\t\t\t\ttoggleProps={ toggleProps }\n\t\t\t>\n\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ hasViewportOptions && (\n\t\t\t\t\t\t\t<MenuGroup label={ __( 'Viewport' ) }>\n\t\t\t\t\t\t\t\t{ viewportOptions.map( ( option ) => (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ `viewport-${ option.value }` }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tonChangeViewport?.( option.value );\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t! hasPseudoStateOptions &&\n\t\t\t\t\t\t\t\t\t\t\t\t! children\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\tviewportValue === option.value\n\t\t\t\t\t\t\t\t\t\t\t\t? check\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasPseudoStateOptions && (\n\t\t\t\t\t\t\t<MenuGroup label={ __( 'Pseudo state' ) }>\n\t\t\t\t\t\t\t\t{ pseudoStateOptions.map( ( option ) => (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={ `pseudo-${ option.value }` }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tonChangePseudoState?.(\n\t\t\t\t\t\t\t\t\t\t\t\toption.value\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t! hasViewportOptions &&\n\t\t\t\t\t\t\t\t\t\t\t\t! children\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\tpseudoStateValue === option.value\n\t\t\t\t\t\t\t\t\t\t\t\t? check\n\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</DropdownMenu>\n\t\t</Stack>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,224 @@
1
+ // packages/block-editor/src/components/global-styles/text-shadow-panel.tsx
2
+ import { __ } from "@wordpress/i18n";
3
+ import {
4
+ Button,
5
+ Composite,
6
+ Dropdown,
7
+ SelectControl as WCSelectControl
8
+ } from "@wordpress/components";
9
+ import { Stack, Text } from "@wordpress/ui";
10
+ import { useRef, useMemo } from "@wordpress/element";
11
+ import { shadow as textShadowIcon, Icon, check, reset } from "@wordpress/icons";
12
+ import clsx from "clsx";
13
+ import { useSettings } from "../use-settings/index.mjs";
14
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
+ var EMPTY_ARRAY = [];
16
+ var PRESETS_SELECT_THRESHOLD = 7;
17
+ function getTextShadowPresetSlug(rawValue) {
18
+ if (!rawValue || typeof rawValue !== "string") {
19
+ return void 0;
20
+ }
21
+ if (rawValue.startsWith("var:preset|text-shadow|")) {
22
+ return rawValue.replace("var:preset|text-shadow|", "");
23
+ }
24
+ const cssVarMatch = rawValue.match(
25
+ /^var\(--wp--preset--text-shadow--([^)]+)\)$/
26
+ );
27
+ if (cssVarMatch) {
28
+ return cssVarMatch[1];
29
+ }
30
+ return void 0;
31
+ }
32
+ function TextShadowPopover({ textShadow, onChange }) {
33
+ const popoverProps = {
34
+ placement: "left-start",
35
+ offset: 36,
36
+ shift: true,
37
+ className: "block-editor-global-styles__text-shadow-popover"
38
+ };
39
+ return /* @__PURE__ */ jsx(
40
+ Dropdown,
41
+ {
42
+ popoverProps,
43
+ className: "block-editor-global-styles__text-shadow-dropdown",
44
+ renderToggle: ({ onToggle, isOpen }) => /* @__PURE__ */ jsx(
45
+ TextShadowToggle,
46
+ {
47
+ textShadow,
48
+ onChange,
49
+ onToggle,
50
+ isOpen
51
+ }
52
+ ),
53
+ renderContent: () => /* @__PURE__ */ jsx(
54
+ TextShadowControl,
55
+ {
56
+ textShadow,
57
+ onChange
58
+ }
59
+ )
60
+ }
61
+ );
62
+ }
63
+ function TextShadowControl({ textShadow, onChange }) {
64
+ const [
65
+ defaultPresetsEnabled,
66
+ defaultPresets,
67
+ themePresets,
68
+ customPresets
69
+ ] = useSettings(
70
+ "typography.defaultTextShadowPresets",
71
+ "typography.textShadowPresets.default",
72
+ "typography.textShadowPresets.theme",
73
+ "typography.textShadowPresets.custom"
74
+ );
75
+ const presets = useMemo(
76
+ () => [
77
+ ...defaultPresetsEnabled && defaultPresets || EMPTY_ARRAY,
78
+ ...themePresets || EMPTY_ARRAY,
79
+ ...customPresets || EMPTY_ARRAY
80
+ ],
81
+ [defaultPresetsEnabled, defaultPresets, themePresets, customPresets]
82
+ );
83
+ const choices = [
84
+ { value: "none", label: __("None") },
85
+ ...presets.map((preset) => ({
86
+ value: `var:preset|text-shadow|${preset.slug}`,
87
+ label: preset.name
88
+ }))
89
+ ];
90
+ const activeSlug = getTextShadowPresetSlug(textShadow);
91
+ const activeValue = activeSlug ? `var:preset|text-shadow|${activeSlug}` : textShadow ?? "";
92
+ const previewValue = activeSlug ? presets.find((preset) => preset.slug === activeSlug)?.textShadow : textShadow;
93
+ return /* @__PURE__ */ jsxs(
94
+ Stack,
95
+ {
96
+ className: "block-editor-global-styles__text-shadow",
97
+ direction: "column",
98
+ gap: "sm",
99
+ children: [
100
+ /* @__PURE__ */ jsx(Text, { variant: "heading-sm", render: /* @__PURE__ */ jsx("h2", {}), children: __("Text shadow") }),
101
+ /* @__PURE__ */ jsx(
102
+ "div",
103
+ {
104
+ className: "block-editor-global-styles__text-shadow-preview",
105
+ style: { textShadow: previewValue },
106
+ children: __("Code is poetry")
107
+ }
108
+ ),
109
+ presets.length >= PRESETS_SELECT_THRESHOLD ? /* @__PURE__ */ jsx(
110
+ WCSelectControl,
111
+ {
112
+ hideLabelFromVision: true,
113
+ label: __("Text shadow preset"),
114
+ value: activeValue,
115
+ options: [
116
+ { value: "", label: __("Default") },
117
+ ...choices
118
+ ],
119
+ onChange
120
+ }
121
+ ) : /* @__PURE__ */ jsx(
122
+ Composite,
123
+ {
124
+ role: "listbox",
125
+ "aria-label": __("Text shadow presets"),
126
+ render: /* @__PURE__ */ jsx(Stack, { direction: "column" }),
127
+ children: choices.map(({ value, label }) => {
128
+ const isActive = value === activeValue;
129
+ return /* @__PURE__ */ jsxs(
130
+ Composite.Item,
131
+ {
132
+ role: "option",
133
+ "aria-selected": isActive,
134
+ className: clsx(
135
+ "block-editor-global-styles__text-shadow-list-item",
136
+ { "is-active": isActive }
137
+ ),
138
+ onClick: () => onChange(value),
139
+ render: /* @__PURE__ */ jsx(Button, { __next40pxDefaultSize: true }),
140
+ children: [
141
+ /* @__PURE__ */ jsx("span", { children: label }),
142
+ /* @__PURE__ */ jsx(Icon, { icon: check })
143
+ ]
144
+ },
145
+ value
146
+ );
147
+ })
148
+ }
149
+ ),
150
+ /* @__PURE__ */ jsx(Stack, { direction: "row", justify: "flex-end", children: /* @__PURE__ */ jsx(
151
+ Button,
152
+ {
153
+ __next40pxDefaultSize: true,
154
+ variant: "tertiary",
155
+ onClick: () => onChange(void 0),
156
+ disabled: !textShadow,
157
+ accessibleWhenDisabled: true,
158
+ children: __("Clear")
159
+ }
160
+ ) })
161
+ ]
162
+ }
163
+ );
164
+ }
165
+ function TextShadowToggle({
166
+ textShadow,
167
+ onChange,
168
+ onToggle,
169
+ isOpen
170
+ }) {
171
+ const buttonRef = useRef(void 0);
172
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
173
+ /* @__PURE__ */ jsx(
174
+ Button,
175
+ {
176
+ __next40pxDefaultSize: true,
177
+ onClick: onToggle,
178
+ className: clsx(
179
+ "block-editor-global-styles__text-shadow-dropdown-toggle",
180
+ { "is-open": isOpen }
181
+ ),
182
+ "aria-expanded": isOpen,
183
+ ref: buttonRef,
184
+ children: /* @__PURE__ */ jsxs(
185
+ Stack,
186
+ {
187
+ direction: "row",
188
+ justify: "flex-start",
189
+ align: "center",
190
+ gap: "sm",
191
+ children: [
192
+ /* @__PURE__ */ jsx(Icon, { icon: textShadowIcon, size: 24 }),
193
+ /* @__PURE__ */ jsx("span", { children: __("Text shadow") })
194
+ ]
195
+ }
196
+ )
197
+ }
198
+ ),
199
+ !!textShadow && /* @__PURE__ */ jsx(
200
+ Button,
201
+ {
202
+ __next40pxDefaultSize: true,
203
+ size: "small",
204
+ icon: reset,
205
+ onClick: () => {
206
+ if (isOpen) {
207
+ onToggle();
208
+ }
209
+ onChange(void 0);
210
+ buttonRef.current?.focus();
211
+ },
212
+ className: clsx(
213
+ "block-editor-global-styles__text-shadow-remove-button",
214
+ { "is-open": isOpen }
215
+ ),
216
+ label: __("Remove text shadow")
217
+ }
218
+ )
219
+ ] });
220
+ }
221
+ export {
222
+ TextShadowPopover
223
+ };
224
+ //# sourceMappingURL=text-shadow-panel.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/global-styles/text-shadow-panel.tsx"],
4
+ "sourcesContent": ["import { __ } from '@wordpress/i18n';\nimport {\n\tButton,\n\tComposite,\n\tDropdown,\n\tSelectControl as WCSelectControl,\n} from '@wordpress/components';\nimport { Stack, Text } from '@wordpress/ui';\nimport { useRef, useMemo } from '@wordpress/element';\nimport { shadow as textShadowIcon, Icon, check, reset } from '@wordpress/icons';\nimport type { TextShadowPreset } from '@wordpress/global-styles-engine';\nimport clsx from 'clsx';\nimport { useSettings } from '../use-settings';\n\ntype TextShadowValue = string | undefined;\n\ninterface TextShadowProps {\n\ttextShadow: TextShadowValue;\n\tonChange: ( textShadow: TextShadowValue ) => void;\n}\n\ninterface TextShadowToggleProps extends TextShadowProps {\n\tonToggle: () => void;\n\tisOpen: boolean;\n}\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n */\nconst EMPTY_ARRAY: TextShadowPreset[] = [];\n\n// Above this number of presets, the list is rendered as a compact dropdown\n// rather than a long list of options.\nconst PRESETS_SELECT_THRESHOLD = 7;\n\n/**\n * Extracts the preset slug from a raw text shadow value.\n *\n * @param rawValue The stored text shadow value.\n * @return The preset slug, or undefined for custom values.\n */\nfunction getTextShadowPresetSlug( rawValue: TextShadowValue ) {\n\tif ( ! rawValue || typeof rawValue !== 'string' ) {\n\t\treturn undefined;\n\t}\n\n\t// Block supports use the `var:preset|text-shadow|slug` format.\n\tif ( rawValue.startsWith( 'var:preset|text-shadow|' ) ) {\n\t\treturn rawValue.replace( 'var:preset|text-shadow|', '' );\n\t}\n\n\t// Global styles data uses the `var(--wp--preset--text-shadow--slug)` format.\n\tconst cssVarMatch = rawValue.match(\n\t\t/^var\\(--wp--preset--text-shadow--([^)]+)\\)$/\n\t);\n\tif ( cssVarMatch ) {\n\t\treturn cssVarMatch[ 1 ];\n\t}\n\n\treturn undefined;\n}\n\nexport function TextShadowPopover( { textShadow, onChange }: TextShadowProps ) {\n\tconst popoverProps = {\n\t\tplacement: 'left-start' as const,\n\t\toffset: 36,\n\t\tshift: true,\n\t\tclassName: 'block-editor-global-styles__text-shadow-popover',\n\t};\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ popoverProps }\n\t\t\tclassName=\"block-editor-global-styles__text-shadow-dropdown\"\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => (\n\t\t\t\t<TextShadowToggle\n\t\t\t\t\ttextShadow={ textShadow }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tonToggle={ onToggle }\n\t\t\t\t\tisOpen={ isOpen }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t<TextShadowControl\n\t\t\t\t\ttextShadow={ textShadow }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t/>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction TextShadowControl( { textShadow, onChange }: TextShadowProps ) {\n\tconst [\n\t\tdefaultPresetsEnabled,\n\t\tdefaultPresets,\n\t\tthemePresets,\n\t\tcustomPresets,\n\t] = useSettings(\n\t\t'typography.defaultTextShadowPresets',\n\t\t'typography.textShadowPresets.default',\n\t\t'typography.textShadowPresets.theme',\n\t\t'typography.textShadowPresets.custom'\n\t) as [\n\t\tboolean | undefined,\n\t\tTextShadowPreset[] | undefined,\n\t\tTextShadowPreset[] | undefined,\n\t\tTextShadowPreset[] | undefined,\n\t];\n\n\tconst presets = useMemo(\n\t\t() => [\n\t\t\t...( ( defaultPresetsEnabled && defaultPresets ) || EMPTY_ARRAY ),\n\t\t\t...( themePresets || EMPTY_ARRAY ),\n\t\t\t...( customPresets || EMPTY_ARRAY ),\n\t\t],\n\t\t[ defaultPresetsEnabled, defaultPresets, themePresets, customPresets ]\n\t);\n\n\tconst choices = [\n\t\t{ value: 'none', label: __( 'None' ) },\n\t\t...presets.map( ( preset ) => ( {\n\t\t\tvalue: `var:preset|text-shadow|${ preset.slug }`,\n\t\t\tlabel: preset.name,\n\t\t} ) ),\n\t];\n\n\tconst activeSlug = getTextShadowPresetSlug( textShadow );\n\tconst activeValue = activeSlug\n\t\t? `var:preset|text-shadow|${ activeSlug }`\n\t\t: ( textShadow ?? '' );\n\tconst previewValue = activeSlug\n\t\t? presets.find( ( preset ) => preset.slug === activeSlug )?.textShadow\n\t\t: textShadow;\n\n\treturn (\n\t\t<Stack\n\t\t\tclassName=\"block-editor-global-styles__text-shadow\"\n\t\t\tdirection=\"column\"\n\t\t\tgap=\"sm\"\n\t\t>\n\t\t\t<Text variant=\"heading-sm\" render={ <h2 /> }>\n\t\t\t\t{ __( 'Text shadow' ) }\n\t\t\t</Text>\n\t\t\t<div\n\t\t\t\tclassName=\"block-editor-global-styles__text-shadow-preview\"\n\t\t\t\tstyle={ { textShadow: previewValue } }\n\t\t\t>\n\t\t\t\t{ __( 'Code is poetry' ) }\n\t\t\t</div>\n\t\t\t{ presets.length >= PRESETS_SELECT_THRESHOLD ? (\n\t\t\t\t<WCSelectControl\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t\tlabel={ __( 'Text shadow preset' ) }\n\t\t\t\t\tvalue={ activeValue }\n\t\t\t\t\toptions={ [\n\t\t\t\t\t\t{ value: '', label: __( 'Default' ) },\n\t\t\t\t\t\t...choices,\n\t\t\t\t\t] }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Composite\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-label={ __( 'Text shadow presets' ) }\n\t\t\t\t\trender={ <Stack direction=\"column\" /> }\n\t\t\t\t>\n\t\t\t\t\t{ choices.map( ( { value, label } ) => {\n\t\t\t\t\t\tconst isActive = value === activeValue;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Composite.Item\n\t\t\t\t\t\t\t\tkey={ value }\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\taria-selected={ isActive }\n\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t'block-editor-global-styles__text-shadow-list-item',\n\t\t\t\t\t\t\t\t\t{ 'is-active': isActive }\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tonClick={ () => onChange( value ) }\n\t\t\t\t\t\t\t\trender={ <Button __next40pxDefaultSize /> }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span>{ label }</span>\n\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t</Composite.Item>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Composite>\n\t\t\t) }\n\t\t\t<Stack direction=\"row\" justify=\"flex-end\">\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\tonClick={ () => onChange( undefined ) }\n\t\t\t\t\tdisabled={ ! textShadow }\n\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Clear' ) }\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n}\n\nfunction TextShadowToggle( {\n\ttextShadow,\n\tonChange,\n\tonToggle,\n\tisOpen,\n}: TextShadowToggleProps ) {\n\tconst buttonRef = useRef< HTMLButtonElement >( undefined );\n\n\treturn (\n\t\t<>\n\t\t\t<Button\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tonClick={ onToggle }\n\t\t\t\tclassName={ clsx(\n\t\t\t\t\t'block-editor-global-styles__text-shadow-dropdown-toggle',\n\t\t\t\t\t{ 'is-open': isOpen }\n\t\t\t\t) }\n\t\t\t\taria-expanded={ isOpen }\n\t\t\t\tref={ buttonRef }\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\tjustify=\"flex-start\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap=\"sm\"\n\t\t\t\t>\n\t\t\t\t\t<Icon icon={ textShadowIcon } size={ 24 } />\n\t\t\t\t\t<span>{ __( 'Text shadow' ) }</span>\n\t\t\t\t</Stack>\n\t\t\t</Button>\n\t\t\t{ !! textShadow && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\ticon={ reset }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tif ( isOpen ) {\n\t\t\t\t\t\t\tonToggle();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonChange( undefined );\n\t\t\t\t\t\t// Return focus to parent button.\n\t\t\t\t\t\tbuttonRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'block-editor-global-styles__text-shadow-remove-button',\n\t\t\t\t\t\t{ 'is-open': isOpen }\n\t\t\t\t\t) }\n\t\t\t\t\tlabel={ __( 'Remove text shadow' ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -18,6 +18,7 @@ import TextTransformControl from "../text-transform-control/index.mjs";
18
18
  import TextDecorationControl from "../text-decoration-control/index.mjs";
19
19
  import TextIndentControl from "../text-indent-control/index.mjs";
20
20
  import WritingModeControl from "../writing-mode-control/index.mjs";
21
+ import { TextShadowPopover } from "./text-shadow-panel.mjs";
21
22
  import ColorGradientDropdownItem from "./color-gradient-dropdown-item.mjs";
22
23
  import { useHasTextPanel } from "./color-panel.mjs";
23
24
  import { useColorGradientSettings } from "./hooks.mjs";
@@ -35,7 +36,7 @@ import { getFontStylesAndWeights } from "../../utils/get-font-styles-and-weights
35
36
  import {
36
37
  getInheritanceProps,
37
38
  InheritanceToolsPanelItem,
38
- isGlobalStylesInheritanceEnabled
39
+ isGlobalStylesInheritanceIndicatorUIEnabled
39
40
  } from "./inheritance/index.mjs";
40
41
  import { jsx, jsxs } from "react/jsx-runtime";
41
42
  var MIN_TEXT_COLUMNS = 1;
@@ -61,7 +62,8 @@ function useHasTypographyPanel(settings) {
61
62
  const hasTextColumns = useHasTextColumnsControl(settings);
62
63
  const hasFontSize = useHasFontSizeControl(settings);
63
64
  const hasTextColor = useHasTextPanel(settings);
64
- return hasFontFamily || hasLineHeight || hasFontAppearance || hasLetterSpacing || hasTextAlign || hasTextTransform || hasFontSize || hasTextDecoration || hasTextIndent || hasWritingMode || hasTextColumns || hasTextColor;
65
+ const hasTextShadow = useHasTextShadowControl(settings);
66
+ return hasFontFamily || hasLineHeight || hasFontAppearance || hasLetterSpacing || hasTextAlign || hasTextTransform || hasFontSize || hasTextDecoration || hasTextIndent || hasWritingMode || hasTextColumns || hasTextColor || hasTextShadow;
65
67
  }
66
68
  function useHasFontSizeControl(settings) {
67
69
  return settings?.typography?.defaultFontSizes !== false && settings?.typography?.fontSizes?.default?.length || settings?.typography?.fontSizes?.theme?.length || settings?.typography?.fontSizes?.custom?.length || settings?.typography?.customFontSize;
@@ -107,6 +109,9 @@ function useHasTextColumnsControl(settings) {
107
109
  function useHasTextIndentControl(settings) {
108
110
  return settings?.typography?.textIndent;
109
111
  }
112
+ function useHasTextShadowControl(settings) {
113
+ return settings?.typography?.textShadow;
114
+ }
110
115
  function getMergedFontSizes(settings) {
111
116
  const fontSizes = settings?.typography?.fontSizes;
112
117
  const defaultFontSizesEnabled = !!settings?.typography?.defaultFontSizes;
@@ -152,7 +157,8 @@ var DEFAULT_CONTROLS = {
152
157
  textDecoration: true,
153
158
  textIndent: true,
154
159
  writingMode: true,
155
- textColumns: true
160
+ textColumns: true,
161
+ textShadow: true
156
162
  };
157
163
  var EMPTY_VALUES = [void 0, null, ""];
158
164
  function hasValue(value) {
@@ -174,7 +180,7 @@ function TypographyPanel({
174
180
  panelId,
175
181
  defaultControls = DEFAULT_CONTROLS,
176
182
  isGlobalStyles = false,
177
- showInheritanceLabelIndicators = isGlobalStylesInheritanceEnabled(),
183
+ showInheritanceLabelIndicators = isGlobalStylesInheritanceIndicatorUIEnabled(),
178
184
  contrastWarning
179
185
  }) {
180
186
  const { colors, allColors, areCustomSolidsEnabled, decodeValue } = useColorGradientSettings(settings);
@@ -194,8 +200,7 @@ function TypographyPanel({
194
200
  newSlug
195
201
  );
196
202
  let changedObject = setImmutably(value, ["color", "text"], encoded);
197
- const syncLinkColor = isGlobalStylesInheritanceEnabled() ? shouldSyncLinkColor(value, inheritedValue) : inheritedValue?.color?.text === inheritedValue?.elements?.link?.color?.text;
198
- if (syncLinkColor) {
203
+ if (shouldSyncLinkColor(value, inheritedValue)) {
199
204
  changedObject = setImmutably(
200
205
  changedObject,
201
206
  ["elements", "link", "color", "text"],
@@ -548,6 +553,21 @@ function TypographyPanel({
548
553
  };
549
554
  const hasTextAlign = () => hasValue(value?.typography?.textAlign);
550
555
  const resetTextAlign = () => setTextAlign(void 0);
556
+ const hasTextShadowControl = useHasTextShadowControl(settings);
557
+ const inheritedTextShadow = inheritedValue?.typography?.textShadow;
558
+ const textShadow = value?.typography?.textShadow ?? inheritedTextShadow;
559
+ const isTextShadowPlaceholder = !hasValue(value?.typography?.textShadow) && hasValue(inheritedTextShadow);
560
+ const setTextShadow = (newValue) => {
561
+ onChange(
562
+ setImmutably(
563
+ value,
564
+ ["typography", "textShadow"],
565
+ newValue || void 0
566
+ )
567
+ );
568
+ };
569
+ const hasTextShadow = () => hasValue(value?.typography?.textShadow);
570
+ const resetTextShadow = () => setTextShadow(void 0);
551
571
  const resetAllFilter = useCallback(
552
572
  (previousValue) => {
553
573
  if (!hasTextColorEnabled) {
@@ -874,6 +894,27 @@ function TypographyPanel({
874
894
  )
875
895
  }
876
896
  ),
897
+ hasTextShadowControl && /* @__PURE__ */ jsx(
898
+ InheritanceToolsPanelItem,
899
+ {
900
+ ...inheritanceProps(
901
+ isTextShadowPlaceholder,
902
+ hasTextShadow() && inheritedTextShadow !== void 0
903
+ ),
904
+ label: __("Text shadow"),
905
+ hasValue: hasTextShadow,
906
+ onDeselect: resetTextShadow,
907
+ isShownByDefault: defaultControls.textShadow,
908
+ panelId,
909
+ children: /* @__PURE__ */ jsx(
910
+ TextShadowPopover,
911
+ {
912
+ textShadow,
913
+ onChange: setTextShadow
914
+ }
915
+ )
916
+ }
917
+ ),
877
918
  hasTextAlignmentControl && /* @__PURE__ */ jsxs(
878
919
  InheritanceToolsPanelItem,
879
920
  {