@wordpress/block-editor 7.0.1 → 8.0.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 (1017) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +47 -4
  3. package/build/components/autocomplete/index.js +1 -1
  4. package/build/components/autocomplete/index.js.map +1 -1
  5. package/build/components/block-actions/index.js +8 -4
  6. package/build/components/block-actions/index.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.js +61 -14
  8. package/build/components/block-alignment-control/ui.js.map +1 -1
  9. package/build/components/block-alignment-control/use-available-alignments.js +25 -3
  10. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  11. package/build/components/block-content-overlay/index.js +2 -4
  12. package/build/components/block-content-overlay/index.js.map +1 -1
  13. package/build/components/block-controls/fill.js +6 -6
  14. package/build/components/block-controls/fill.js.map +1 -1
  15. package/build/components/block-controls/groups.js +3 -1
  16. package/build/components/block-controls/groups.js.map +1 -1
  17. package/build/components/block-controls/hook.js +57 -0
  18. package/build/components/block-controls/hook.js.map +1 -0
  19. package/build/components/block-edit/context.js +6 -5
  20. package/build/components/block-edit/context.js.map +1 -1
  21. package/build/components/block-edit/edit.js +1 -1
  22. package/build/components/block-edit/edit.js.map +1 -1
  23. package/build/components/block-icon/index.js +5 -1
  24. package/build/components/block-icon/index.js.map +1 -1
  25. package/build/components/block-icon/index.native.js +13 -9
  26. package/build/components/block-icon/index.native.js.map +1 -1
  27. package/build/components/block-inspector/index.js +14 -7
  28. package/build/components/block-inspector/index.js.map +1 -1
  29. package/build/components/block-list/block-html.js +5 -0
  30. package/build/components/block-list/block-html.js.map +1 -1
  31. package/build/components/block-list/block-list-item.native.js +31 -12
  32. package/build/components/block-list/block-list-item.native.js.map +1 -1
  33. package/build/components/block-list/block-selection-button.native.js +4 -4
  34. package/build/components/block-list/block-selection-button.native.js.map +1 -1
  35. package/build/components/block-list/block.js +15 -9
  36. package/build/components/block-list/block.js.map +1 -1
  37. package/build/components/block-list/block.native.js +6 -7
  38. package/build/components/block-list/block.native.js.map +1 -1
  39. package/build/components/block-list/grid-item.native.js +68 -0
  40. package/build/components/block-list/grid-item.native.js.map +1 -0
  41. package/build/components/block-list/index.js +19 -15
  42. package/build/components/block-list/index.js.map +1 -1
  43. package/build/components/block-list/index.native.js +13 -9
  44. package/build/components/block-list/index.native.js.map +1 -1
  45. package/build/components/block-list/use-block-props/index.js +6 -6
  46. package/build/components/block-list/use-block-props/index.js.map +1 -1
  47. package/build/components/block-list/use-block-props/use-block-custom-class-name.js +4 -6
  48. package/build/components/block-list/use-block-props/use-block-custom-class-name.js.map +1 -1
  49. package/build/components/block-list/use-block-props/use-block-default-class-name.js +1 -1
  50. package/build/components/block-list/use-block-props/use-block-default-class-name.js.map +1 -1
  51. package/build/components/block-list/use-block-props/use-multi-selection.js +21 -6
  52. package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  53. package/build/components/block-list/use-in-between-inserter.js +9 -1
  54. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  55. package/build/components/block-list-appender/index.js +9 -1
  56. package/build/components/block-list-appender/index.js.map +1 -1
  57. package/build/components/block-mover/index.js +4 -4
  58. package/build/components/block-mover/index.js.map +1 -1
  59. package/build/components/block-mover/index.native.js +4 -4
  60. package/build/components/block-mover/index.native.js.map +1 -1
  61. package/build/components/block-navigation/dropdown.js +0 -1
  62. package/build/components/block-navigation/dropdown.js.map +1 -1
  63. package/build/components/block-patterns-list/index.js +1 -8
  64. package/build/components/block-patterns-list/index.js.map +1 -1
  65. package/build/components/block-preview/auto.js +42 -14
  66. package/build/components/block-preview/auto.js.map +1 -1
  67. package/build/components/block-settings/container.native.js +5 -2
  68. package/build/components/block-settings/container.native.js.map +1 -1
  69. package/build/components/block-settings-menu/block-settings-dropdown.js +26 -5
  70. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  71. package/build/components/block-settings-menu-controls/index.js +10 -3
  72. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  73. package/build/components/block-styles/index.js +5 -1
  74. package/build/components/block-styles/index.js.map +1 -1
  75. package/build/components/block-styles/preview.native.js +2 -2
  76. package/build/components/block-styles/preview.native.js.map +1 -1
  77. package/build/components/block-switcher/block-styles-menu.js +1 -1
  78. package/build/components/block-switcher/block-styles-menu.js.map +1 -1
  79. package/build/components/block-switcher/index.js +10 -3
  80. package/build/components/block-switcher/index.js.map +1 -1
  81. package/build/components/block-title/index.js +3 -2
  82. package/build/components/block-title/index.js.map +1 -1
  83. package/build/components/block-toolbar/index.js +3 -0
  84. package/build/components/block-toolbar/index.js.map +1 -1
  85. package/build/components/block-tools/block-contextual-toolbar.js +1 -1
  86. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  87. package/build/components/block-tools/block-popover.js +8 -7
  88. package/build/components/block-tools/block-popover.js.map +1 -1
  89. package/build/components/block-tools/block-selection-button.js +2 -4
  90. package/build/components/block-tools/block-selection-button.js.map +1 -1
  91. package/build/components/block-tools/index.js +4 -1
  92. package/build/components/block-tools/index.js.map +1 -1
  93. package/build/components/block-tools/insertion-point.js +96 -7
  94. package/build/components/block-tools/insertion-point.js.map +1 -1
  95. package/build/components/block-types-list/index.native.js +3 -2
  96. package/build/components/block-types-list/index.native.js.map +1 -1
  97. package/build/components/border-radius-control/index.js.map +1 -1
  98. package/build/components/border-radius-control/utils.js +17 -8
  99. package/build/components/border-radius-control/utils.js.map +1 -1
  100. package/build/components/colors/utils.js +11 -3
  101. package/build/components/colors/utils.js.map +1 -1
  102. package/build/components/colors-gradients/control.js +22 -57
  103. package/build/components/colors-gradients/control.js.map +1 -1
  104. package/build/components/colors-gradients/panel-color-gradient-settings.js +83 -7
  105. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  106. package/build/components/contrast-checker/index.js +18 -12
  107. package/build/components/contrast-checker/index.js.map +1 -1
  108. package/build/components/copy-handler/index.js +9 -3
  109. package/build/components/copy-handler/index.js.map +1 -1
  110. package/build/components/default-block-appender/index.js +2 -2
  111. package/build/components/default-block-appender/index.js.map +1 -1
  112. package/build/components/duotone-control/index.js +41 -39
  113. package/build/components/duotone-control/index.js.map +1 -1
  114. package/build/components/editor-styles/index.js +9 -3
  115. package/build/components/editor-styles/index.js.map +1 -1
  116. package/build/components/font-appearance-control/index.js +44 -12
  117. package/build/components/font-appearance-control/index.js.map +1 -1
  118. package/build/components/font-sizes/index.native.js +24 -0
  119. package/build/components/font-sizes/index.native.js.map +1 -1
  120. package/build/components/iframe/index.js +46 -63
  121. package/build/components/iframe/index.js.map +1 -1
  122. package/build/components/image-editor/aspect-ratio-dropdown.js +126 -0
  123. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -0
  124. package/build/components/image-editor/constants.js +16 -0
  125. package/build/components/image-editor/constants.js.map +1 -0
  126. package/build/components/image-editor/context.js +59 -0
  127. package/build/components/image-editor/context.js.map +1 -0
  128. package/build/components/image-editor/cropper.js +83 -0
  129. package/build/components/image-editor/cropper.js.map +1 -0
  130. package/build/components/image-editor/form-controls.js +36 -0
  131. package/build/components/image-editor/form-controls.js.map +1 -0
  132. package/build/components/image-editor/index.js +60 -0
  133. package/build/components/image-editor/index.js.map +1 -0
  134. package/build/components/image-editor/rotation-button.js +37 -0
  135. package/build/components/image-editor/rotation-button.js.map +1 -0
  136. package/build/components/image-editor/use-save-image.js +84 -0
  137. package/build/components/image-editor/use-save-image.js.map +1 -0
  138. package/build/components/image-editor/use-transform-image.js +135 -0
  139. package/build/components/image-editor/use-transform-image.js.map +1 -0
  140. package/build/components/image-editor/zoom-dropdown.js +55 -0
  141. package/build/components/image-editor/zoom-dropdown.js.map +1 -0
  142. package/build/components/image-size-control/use-dimension-handler.js +14 -3
  143. package/build/components/image-size-control/use-dimension-handler.js.map +1 -1
  144. package/build/components/index.js +42 -37
  145. package/build/components/index.js.map +1 -1
  146. package/build/components/index.native.js +12 -7
  147. package/build/components/index.native.js.map +1 -1
  148. package/build/components/inner-blocks/button-block-appender.js +11 -1
  149. package/build/components/inner-blocks/button-block-appender.js.map +1 -1
  150. package/build/components/inner-blocks/index.js +28 -10
  151. package/build/components/inner-blocks/index.js.map +1 -1
  152. package/build/components/inner-blocks/index.native.js +42 -4
  153. package/build/components/inner-blocks/index.native.js.map +1 -1
  154. package/build/components/inner-blocks/use-nested-settings-update.js +24 -13
  155. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  156. package/build/components/inserter/block-patterns-explorer/explorer.js +62 -0
  157. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  158. package/build/components/inserter/block-patterns-explorer/patterns-list.js +111 -0
  159. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  160. package/build/components/inserter/block-patterns-explorer/sidebar.js +78 -0
  161. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  162. package/build/components/inserter/block-patterns-tab.js +74 -35
  163. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  164. package/build/components/inserter/block-types-tab.native.js +3 -6
  165. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  166. package/build/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  167. package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  168. package/build/components/inserter/hooks/use-clipboard-block.native.js +5 -4
  169. package/build/components/inserter/hooks/use-clipboard-block.native.js.map +1 -1
  170. package/build/components/inserter/index.js +12 -4
  171. package/build/components/inserter/index.js.map +1 -1
  172. package/build/components/inserter/index.native.js +1 -7
  173. package/build/components/inserter/index.native.js.map +1 -1
  174. package/build/components/inserter/library.js +2 -0
  175. package/build/components/inserter/library.js.map +1 -1
  176. package/build/components/inserter/menu.js +2 -1
  177. package/build/components/inserter/menu.js.map +1 -1
  178. package/build/components/inserter/menu.native.js +18 -17
  179. package/build/components/inserter/menu.native.js.map +1 -1
  180. package/build/components/inserter/pattern-panel.js +19 -10
  181. package/build/components/inserter/pattern-panel.js.map +1 -1
  182. package/build/components/inserter/preview-panel.js +1 -1
  183. package/build/components/inserter/preview-panel.js.map +1 -1
  184. package/build/components/inserter/quick-inserter.js +2 -1
  185. package/build/components/inserter/quick-inserter.js.map +1 -1
  186. package/build/components/inserter/reusable-blocks-tab.native.js +5 -6
  187. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  188. package/build/components/inserter/search-results.native.js +9 -2
  189. package/build/components/inserter/search-results.native.js.map +1 -1
  190. package/build/components/inserter/tabs.native.js +1 -4
  191. package/build/components/inserter/tabs.native.js.map +1 -1
  192. package/build/components/inserter/utils.native.js +44 -0
  193. package/build/components/inserter/utils.native.js.map +1 -0
  194. package/build/components/inspector-controls/block-support-slot-container.js +28 -0
  195. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -0
  196. package/build/components/inspector-controls/block-support-tools-panel.js +78 -0
  197. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -0
  198. package/build/components/inspector-controls/fill.js +64 -0
  199. package/build/components/inspector-controls/fill.js.map +1 -0
  200. package/build/components/inspector-controls/{index.native.js → fill.native.js} +20 -19
  201. package/build/components/inspector-controls/fill.native.js.map +1 -0
  202. package/build/components/inspector-controls/groups.js +25 -0
  203. package/build/components/inspector-controls/groups.js.map +1 -0
  204. package/build/components/inspector-controls/index.js +22 -20
  205. package/build/components/inspector-controls/index.js.map +1 -1
  206. package/build/components/inspector-controls/slot.js +67 -0
  207. package/build/components/inspector-controls/slot.js.map +1 -0
  208. package/build/components/inspector-controls/slot.native.js +38 -0
  209. package/build/components/inspector-controls/slot.native.js.map +1 -0
  210. package/build/components/letter-spacing-control/index.js +9 -6
  211. package/build/components/letter-spacing-control/index.js.map +1 -1
  212. package/build/components/line-height-control/index.native.js +39 -0
  213. package/build/components/line-height-control/index.native.js.map +1 -0
  214. package/build/components/link-control/index.js +93 -34
  215. package/build/components/link-control/index.js.map +1 -1
  216. package/build/components/link-control/link-preview.js +45 -15
  217. package/build/components/link-control/link-preview.js.map +1 -1
  218. package/build/components/link-control/search-input.js +25 -7
  219. package/build/components/link-control/search-input.js.map +1 -1
  220. package/build/components/list-view/block-contents.js +1 -20
  221. package/build/components/list-view/block-contents.js.map +1 -1
  222. package/build/components/list-view/block.js +54 -69
  223. package/build/components/list-view/block.js.map +1 -1
  224. package/build/components/list-view/branch.js +102 -76
  225. package/build/components/list-view/branch.js.map +1 -1
  226. package/build/components/list-view/index.js +53 -23
  227. package/build/components/list-view/index.js.map +1 -1
  228. package/build/components/list-view/leaf.js +2 -2
  229. package/build/components/list-view/leaf.js.map +1 -1
  230. package/build/components/list-view/list-item.js +3 -2
  231. package/build/components/list-view/list-item.js.map +1 -1
  232. package/build/components/list-view/use-list-view-client-ids.js +13 -54
  233. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  234. package/build/components/media-placeholder/index.js +35 -21
  235. package/build/components/media-placeholder/index.js.map +1 -1
  236. package/build/components/media-placeholder/index.native.js +2 -1
  237. package/build/components/media-placeholder/index.native.js.map +1 -1
  238. package/build/components/media-replace-flow/index.js +5 -3
  239. package/build/components/media-replace-flow/index.js.map +1 -1
  240. package/build/components/navigable-toolbar/index.js +1 -4
  241. package/build/components/navigable-toolbar/index.js.map +1 -1
  242. package/build/components/observe-typing/index.js +1 -1
  243. package/build/components/observe-typing/index.js.map +1 -1
  244. package/build/components/plain-text/index.native.js +30 -1
  245. package/build/components/plain-text/index.native.js.map +1 -1
  246. package/build/components/rich-text/embed-handler-picker.native.js +66 -0
  247. package/build/components/rich-text/embed-handler-picker.native.js.map +1 -0
  248. package/build/components/rich-text/format-edit.js +28 -2
  249. package/build/components/rich-text/format-edit.js.map +1 -1
  250. package/build/components/rich-text/format-toolbar/index.js +32 -11
  251. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  252. package/build/components/rich-text/index.js +29 -7
  253. package/build/components/rich-text/index.js.map +1 -1
  254. package/build/components/rich-text/index.native.js +43 -5
  255. package/build/components/rich-text/index.native.js.map +1 -1
  256. package/build/components/rich-text/input-event.js +25 -24
  257. package/build/components/rich-text/input-event.js.map +1 -1
  258. package/build/components/rich-text/shortcut.js +23 -9
  259. package/build/components/rich-text/shortcut.js.map +1 -1
  260. package/build/components/rich-text/use-input-events.js +27 -0
  261. package/build/components/rich-text/use-input-events.js.map +1 -0
  262. package/build/components/rich-text/use-paste-handler.js +45 -10
  263. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  264. package/build/components/rich-text/use-shortcuts.js +27 -0
  265. package/build/components/rich-text/use-shortcuts.js.map +1 -0
  266. package/build/components/rich-text/utils.js +22 -0
  267. package/build/components/rich-text/utils.js.map +1 -1
  268. package/build/components/typewriter/index.js +1 -1
  269. package/build/components/typewriter/index.js.map +1 -1
  270. package/build/components/url-input/index.js +25 -11
  271. package/build/components/url-input/index.js.map +1 -1
  272. package/build/components/use-display-block-controls/index.js +5 -7
  273. package/build/components/use-display-block-controls/index.js.map +1 -1
  274. package/build/components/use-moving-animation/index.js +13 -10
  275. package/build/components/use-moving-animation/index.js.map +1 -1
  276. package/build/components/use-on-block-drop/index.js +2 -1
  277. package/build/components/use-on-block-drop/index.js.map +1 -1
  278. package/build/components/use-resize-canvas/index.js +2 -13
  279. package/build/components/use-resize-canvas/index.js.map +1 -1
  280. package/build/components/use-setting/index.js +49 -14
  281. package/build/components/use-setting/index.js.map +1 -1
  282. package/build/components/writing-flow/use-multi-selection.js +6 -0
  283. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  284. package/build/components/writing-flow/use-tab-nav.js +18 -3
  285. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  286. package/build/hooks/align.js +14 -14
  287. package/build/hooks/align.js.map +1 -1
  288. package/build/hooks/anchor.js +4 -2
  289. package/build/hooks/anchor.js.map +1 -1
  290. package/build/hooks/border-color.js +9 -5
  291. package/build/hooks/border-color.js.map +1 -1
  292. package/build/hooks/border.js +5 -5
  293. package/build/hooks/border.js.map +1 -1
  294. package/build/hooks/color-panel.js +5 -2
  295. package/build/hooks/color-panel.js.map +1 -1
  296. package/build/hooks/color.js +6 -4
  297. package/build/hooks/color.js.map +1 -1
  298. package/build/hooks/compat.js +23 -0
  299. package/build/hooks/compat.js.map +1 -0
  300. package/build/hooks/custom-class-name.js +3 -1
  301. package/build/hooks/custom-class-name.js.map +1 -1
  302. package/build/hooks/dimensions.js +63 -28
  303. package/build/hooks/dimensions.js.map +1 -1
  304. package/build/hooks/duotone.js +63 -18
  305. package/build/hooks/duotone.js.map +1 -1
  306. package/build/hooks/font-appearance.js +49 -6
  307. package/build/hooks/font-appearance.js.map +1 -1
  308. package/build/hooks/font-family.js +123 -32
  309. package/build/hooks/font-family.js.map +1 -1
  310. package/build/hooks/font-size.js +51 -9
  311. package/build/hooks/font-size.js.map +1 -1
  312. package/build/hooks/gap.js +163 -0
  313. package/build/hooks/gap.js.map +1 -0
  314. package/build/hooks/index.js +12 -0
  315. package/build/hooks/index.js.map +1 -1
  316. package/build/hooks/index.native.js +10 -0
  317. package/build/hooks/index.native.js.map +1 -1
  318. package/build/hooks/layout.js +47 -30
  319. package/build/hooks/layout.js.map +1 -1
  320. package/build/hooks/letter-spacing.js +45 -8
  321. package/build/hooks/letter-spacing.js.map +1 -1
  322. package/build/hooks/line-height.js +45 -8
  323. package/build/hooks/line-height.js.map +1 -1
  324. package/build/hooks/lock.js +43 -0
  325. package/build/hooks/lock.js.map +1 -0
  326. package/build/hooks/margin.js +6 -3
  327. package/build/hooks/margin.js.map +1 -1
  328. package/build/hooks/padding.js +6 -3
  329. package/build/hooks/padding.js.map +1 -1
  330. package/build/hooks/style.js +39 -11
  331. package/build/hooks/style.js.map +1 -1
  332. package/build/hooks/text-decoration.js +42 -6
  333. package/build/hooks/text-decoration.js.map +1 -1
  334. package/build/hooks/text-transform.js +42 -6
  335. package/build/hooks/text-transform.js.map +1 -1
  336. package/build/hooks/typography.js +109 -9
  337. package/build/hooks/typography.js.map +1 -1
  338. package/build/hooks/typography.native.js +60 -0
  339. package/build/hooks/typography.native.js.map +1 -0
  340. package/build/hooks/use-cached-truthy.js +29 -0
  341. package/build/hooks/use-cached-truthy.js.map +1 -0
  342. package/build/index.js +7 -0
  343. package/build/index.js.map +1 -1
  344. package/build/layouts/flex.js +215 -11
  345. package/build/layouts/flex.js.map +1 -1
  346. package/build/layouts/flow.js +99 -6
  347. package/build/layouts/flow.js.map +1 -1
  348. package/build/store/actions.js +331 -266
  349. package/build/store/actions.js.map +1 -1
  350. package/build/store/defaults.js +2 -0
  351. package/build/store/defaults.js.map +1 -1
  352. package/build/store/defaults.native.js +16 -1
  353. package/build/store/defaults.native.js.map +1 -1
  354. package/build/store/index.js +1 -3
  355. package/build/store/index.js.map +1 -1
  356. package/build/store/reducer.js +165 -114
  357. package/build/store/reducer.js.map +1 -1
  358. package/build/store/selectors.js +203 -115
  359. package/build/store/selectors.js.map +1 -1
  360. package/build/utils/index.js +10 -1
  361. package/build/utils/index.js.map +1 -1
  362. package/build/utils/parse-css-unit-to-px.js +295 -0
  363. package/build/utils/parse-css-unit-to-px.js.map +1 -0
  364. package/build/utils/transform-styles/transforms/wrap.js +16 -0
  365. package/build/utils/transform-styles/transforms/wrap.js.map +1 -1
  366. package/build-module/components/autocomplete/index.js +2 -2
  367. package/build-module/components/autocomplete/index.js.map +1 -1
  368. package/build-module/components/block-actions/index.js +8 -4
  369. package/build-module/components/block-actions/index.js.map +1 -1
  370. package/build-module/components/block-alignment-control/ui.js +64 -17
  371. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  372. package/build-module/components/block-alignment-control/use-available-alignments.js +25 -3
  373. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  374. package/build-module/components/block-content-overlay/index.js +2 -4
  375. package/build-module/components/block-content-overlay/index.js.map +1 -1
  376. package/build-module/components/block-controls/fill.js +6 -5
  377. package/build-module/components/block-controls/fill.js.map +1 -1
  378. package/build-module/components/block-controls/groups.js +3 -1
  379. package/build-module/components/block-controls/groups.js.map +1 -1
  380. package/build-module/components/block-controls/hook.js +42 -0
  381. package/build-module/components/block-controls/hook.js.map +1 -0
  382. package/build-module/components/block-edit/context.js +4 -4
  383. package/build-module/components/block-edit/context.js.map +1 -1
  384. package/build-module/components/block-edit/edit.js +1 -1
  385. package/build-module/components/block-edit/edit.js.map +1 -1
  386. package/build-module/components/block-icon/index.js +5 -1
  387. package/build-module/components/block-icon/index.js.map +1 -1
  388. package/build-module/components/block-icon/index.native.js +14 -9
  389. package/build-module/components/block-icon/index.native.js.map +1 -1
  390. package/build-module/components/block-inspector/index.js +12 -6
  391. package/build-module/components/block-inspector/index.js.map +1 -1
  392. package/build-module/components/block-list/block-html.js +5 -0
  393. package/build-module/components/block-list/block-html.js.map +1 -1
  394. package/build-module/components/block-list/block-list-item.native.js +30 -12
  395. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  396. package/build-module/components/block-list/block-selection-button.native.js +3 -4
  397. package/build-module/components/block-list/block-selection-button.native.js.map +1 -1
  398. package/build-module/components/block-list/block.js +16 -10
  399. package/build-module/components/block-list/block.js.map +1 -1
  400. package/build-module/components/block-list/block.native.js +6 -7
  401. package/build-module/components/block-list/block.native.js.map +1 -1
  402. package/build-module/components/block-list/grid-item.native.js +57 -0
  403. package/build-module/components/block-list/grid-item.native.js.map +1 -0
  404. package/build-module/components/block-list/index.js +17 -14
  405. package/build-module/components/block-list/index.js.map +1 -1
  406. package/build-module/components/block-list/index.native.js +13 -9
  407. package/build-module/components/block-list/index.native.js.map +1 -1
  408. package/build-module/components/block-list/use-block-props/index.js +7 -7
  409. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  410. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js +5 -7
  411. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js.map +1 -1
  412. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js +2 -2
  413. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js.map +1 -1
  414. package/build-module/components/block-list/use-block-props/use-multi-selection.js +21 -6
  415. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  416. package/build-module/components/block-list/use-in-between-inserter.js +9 -1
  417. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  418. package/build-module/components/block-list-appender/index.js +9 -1
  419. package/build-module/components/block-list-appender/index.js.map +1 -1
  420. package/build-module/components/block-mover/index.js +4 -4
  421. package/build-module/components/block-mover/index.js.map +1 -1
  422. package/build-module/components/block-mover/index.native.js +4 -4
  423. package/build-module/components/block-mover/index.native.js.map +1 -1
  424. package/build-module/components/block-navigation/dropdown.js +0 -1
  425. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  426. package/build-module/components/block-patterns-list/index.js +1 -6
  427. package/build-module/components/block-patterns-list/index.js.map +1 -1
  428. package/build-module/components/block-preview/auto.js +40 -16
  429. package/build-module/components/block-preview/auto.js.map +1 -1
  430. package/build-module/components/block-settings/container.native.js +6 -3
  431. package/build-module/components/block-settings/container.native.js.map +1 -1
  432. package/build-module/components/block-settings-menu/block-settings-dropdown.js +28 -7
  433. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  434. package/build-module/components/block-settings-menu-controls/index.js +10 -3
  435. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  436. package/build-module/components/block-styles/index.js +5 -1
  437. package/build-module/components/block-styles/index.js.map +1 -1
  438. package/build-module/components/block-styles/preview.native.js +2 -2
  439. package/build-module/components/block-styles/preview.native.js.map +1 -1
  440. package/build-module/components/block-switcher/block-styles-menu.js +1 -1
  441. package/build-module/components/block-switcher/block-styles-menu.js.map +1 -1
  442. package/build-module/components/block-switcher/index.js +10 -3
  443. package/build-module/components/block-switcher/index.js.map +1 -1
  444. package/build-module/components/block-title/index.js +3 -2
  445. package/build-module/components/block-title/index.js.map +1 -1
  446. package/build-module/components/block-toolbar/index.js +3 -0
  447. package/build-module/components/block-toolbar/index.js.map +1 -1
  448. package/build-module/components/block-tools/block-contextual-toolbar.js +1 -1
  449. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  450. package/build-module/components/block-tools/block-popover.js +9 -8
  451. package/build-module/components/block-tools/block-popover.js.map +1 -1
  452. package/build-module/components/block-tools/block-selection-button.js +2 -4
  453. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  454. package/build-module/components/block-tools/index.js +4 -1
  455. package/build-module/components/block-tools/index.js.map +1 -1
  456. package/build-module/components/block-tools/insertion-point.js +96 -8
  457. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  458. package/build-module/components/block-types-list/index.native.js +3 -2
  459. package/build-module/components/block-types-list/index.native.js.map +1 -1
  460. package/build-module/components/border-radius-control/index.js.map +1 -1
  461. package/build-module/components/border-radius-control/utils.js +16 -9
  462. package/build-module/components/border-radius-control/utils.js.map +1 -1
  463. package/build-module/components/colors/utils.js +9 -3
  464. package/build-module/components/colors/utils.js.map +1 -1
  465. package/build-module/components/colors-gradients/control.js +26 -63
  466. package/build-module/components/colors-gradients/control.js.map +1 -1
  467. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +84 -7
  468. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  469. package/build-module/components/contrast-checker/index.js +13 -10
  470. package/build-module/components/contrast-checker/index.js.map +1 -1
  471. package/build-module/components/copy-handler/index.js +9 -3
  472. package/build-module/components/copy-handler/index.js.map +1 -1
  473. package/build-module/components/default-block-appender/index.js +2 -2
  474. package/build-module/components/default-block-appender/index.js.map +1 -1
  475. package/build-module/components/duotone-control/index.js +43 -39
  476. package/build-module/components/duotone-control/index.js.map +1 -1
  477. package/build-module/components/editor-styles/index.js +7 -3
  478. package/build-module/components/editor-styles/index.js.map +1 -1
  479. package/build-module/components/font-appearance-control/index.js +40 -12
  480. package/build-module/components/font-appearance-control/index.js.map +1 -1
  481. package/build-module/components/font-sizes/index.native.js +3 -1
  482. package/build-module/components/font-sizes/index.native.js.map +1 -1
  483. package/build-module/components/iframe/index.js +47 -65
  484. package/build-module/components/iframe/index.js.map +1 -1
  485. package/build-module/components/image-editor/aspect-ratio-dropdown.js +115 -0
  486. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -0
  487. package/build-module/components/image-editor/constants.js +7 -0
  488. package/build-module/components/image-editor/constants.js.map +1 -0
  489. package/build-module/components/image-editor/context.js +44 -0
  490. package/build-module/components/image-editor/context.js.map +1 -0
  491. package/build-module/components/image-editor/cropper.js +69 -0
  492. package/build-module/components/image-editor/cropper.js.map +1 -0
  493. package/build-module/components/image-editor/form-controls.js +26 -0
  494. package/build-module/components/image-editor/form-controls.js.map +1 -0
  495. package/build-module/components/image-editor/index.js +37 -0
  496. package/build-module/components/image-editor/index.js.map +1 -0
  497. package/build-module/components/image-editor/rotation-button.js +26 -0
  498. package/build-module/components/image-editor/rotation-button.js.map +1 -0
  499. package/build-module/components/image-editor/use-save-image.js +70 -0
  500. package/build-module/components/image-editor/use-save-image.js.map +1 -0
  501. package/build-module/components/image-editor/use-transform-image.js +127 -0
  502. package/build-module/components/image-editor/use-transform-image.js.map +1 -0
  503. package/build-module/components/image-editor/zoom-dropdown.js +43 -0
  504. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -0
  505. package/build-module/components/image-size-control/use-dimension-handler.js +13 -2
  506. package/build-module/components/image-size-control/use-dimension-handler.js.map +1 -1
  507. package/build-module/components/index.js +5 -6
  508. package/build-module/components/index.js.map +1 -1
  509. package/build-module/components/index.native.js +2 -3
  510. package/build-module/components/index.native.js.map +1 -1
  511. package/build-module/components/inner-blocks/button-block-appender.js +10 -1
  512. package/build-module/components/inner-blocks/button-block-appender.js.map +1 -1
  513. package/build-module/components/inner-blocks/index.js +29 -11
  514. package/build-module/components/inner-blocks/index.js.map +1 -1
  515. package/build-module/components/inner-blocks/index.native.js +41 -5
  516. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  517. package/build-module/components/inner-blocks/use-nested-settings-update.js +24 -13
  518. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  519. package/build-module/components/inserter/block-patterns-explorer/explorer.js +50 -0
  520. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  521. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +92 -0
  522. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  523. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +69 -0
  524. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  525. package/build-module/components/inserter/block-patterns-tab.js +75 -36
  526. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  527. package/build-module/components/inserter/block-types-tab.native.js +2 -5
  528. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  529. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  530. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  531. package/build-module/components/inserter/hooks/use-clipboard-block.native.js +5 -4
  532. package/build-module/components/inserter/hooks/use-clipboard-block.native.js.map +1 -1
  533. package/build-module/components/inserter/index.js +12 -4
  534. package/build-module/components/inserter/index.js.map +1 -1
  535. package/build-module/components/inserter/index.native.js +1 -7
  536. package/build-module/components/inserter/index.native.js.map +1 -1
  537. package/build-module/components/inserter/library.js +2 -0
  538. package/build-module/components/inserter/library.js.map +1 -1
  539. package/build-module/components/inserter/menu.js +2 -1
  540. package/build-module/components/inserter/menu.js.map +1 -1
  541. package/build-module/components/inserter/menu.native.js +17 -17
  542. package/build-module/components/inserter/menu.native.js.map +1 -1
  543. package/build-module/components/inserter/pattern-panel.js +21 -13
  544. package/build-module/components/inserter/pattern-panel.js.map +1 -1
  545. package/build-module/components/inserter/preview-panel.js +1 -1
  546. package/build-module/components/inserter/preview-panel.js.map +1 -1
  547. package/build-module/components/inserter/quick-inserter.js +2 -1
  548. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  549. package/build-module/components/inserter/reusable-blocks-tab.native.js +4 -5
  550. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  551. package/build-module/components/inserter/search-results.native.js +8 -2
  552. package/build-module/components/inserter/search-results.native.js.map +1 -1
  553. package/build-module/components/inserter/tabs.native.js +1 -4
  554. package/build-module/components/inserter/tabs.native.js.map +1 -1
  555. package/build-module/components/inserter/utils.native.js +35 -0
  556. package/build-module/components/inserter/utils.native.js.map +1 -0
  557. package/build-module/components/inspector-controls/block-support-slot-container.js +18 -0
  558. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -0
  559. package/build-module/components/inspector-controls/block-support-tools-panel.js +67 -0
  560. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -0
  561. package/build-module/components/inspector-controls/fill.js +50 -0
  562. package/build-module/components/inspector-controls/fill.js.map +1 -0
  563. package/build-module/components/inspector-controls/{index.native.js → fill.native.js} +16 -18
  564. package/build-module/components/inspector-controls/fill.native.js.map +1 -0
  565. package/build-module/components/inspector-controls/groups.js +16 -0
  566. package/build-module/components/inspector-controls/groups.js.map +1 -0
  567. package/build-module/components/inspector-controls/index.js +16 -17
  568. package/build-module/components/inspector-controls/index.js.map +1 -1
  569. package/build-module/components/inspector-controls/slot.js +52 -0
  570. package/build-module/components/inspector-controls/slot.js.map +1 -0
  571. package/build-module/components/inspector-controls/slot.native.js +27 -0
  572. package/build-module/components/inspector-controls/slot.native.js.map +1 -0
  573. package/build-module/components/letter-spacing-control/index.js +9 -6
  574. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  575. package/build-module/components/line-height-control/index.native.js +29 -0
  576. package/build-module/components/line-height-control/index.native.js.map +1 -0
  577. package/build-module/components/link-control/index.js +93 -35
  578. package/build-module/components/link-control/index.js.map +1 -1
  579. package/build-module/components/link-control/link-preview.js +46 -17
  580. package/build-module/components/link-control/link-preview.js.map +1 -1
  581. package/build-module/components/link-control/search-input.js +24 -7
  582. package/build-module/components/link-control/search-input.js.map +1 -1
  583. package/build-module/components/list-view/block-contents.js +1 -18
  584. package/build-module/components/list-view/block-contents.js.map +1 -1
  585. package/build-module/components/list-view/block.js +56 -71
  586. package/build-module/components/list-view/block.js.map +1 -1
  587. package/build-module/components/list-view/branch.js +102 -78
  588. package/build-module/components/list-view/branch.js.map +1 -1
  589. package/build-module/components/list-view/index.js +55 -27
  590. package/build-module/components/list-view/index.js.map +1 -1
  591. package/build-module/components/list-view/leaf.js +2 -2
  592. package/build-module/components/list-view/leaf.js.map +1 -1
  593. package/build-module/components/list-view/list-item.js +3 -2
  594. package/build-module/components/list-view/list-item.js.map +1 -1
  595. package/build-module/components/list-view/use-list-view-client-ids.js +13 -54
  596. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  597. package/build-module/components/media-placeholder/index.js +35 -21
  598. package/build-module/components/media-placeholder/index.js.map +1 -1
  599. package/build-module/components/media-placeholder/index.native.js +2 -1
  600. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  601. package/build-module/components/media-replace-flow/index.js +5 -3
  602. package/build-module/components/media-replace-flow/index.js.map +1 -1
  603. package/build-module/components/navigable-toolbar/index.js +1 -4
  604. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  605. package/build-module/components/observe-typing/index.js +1 -1
  606. package/build-module/components/observe-typing/index.js.map +1 -1
  607. package/build-module/components/plain-text/index.native.js +29 -2
  608. package/build-module/components/plain-text/index.native.js.map +1 -1
  609. package/build-module/components/rich-text/embed-handler-picker.native.js +54 -0
  610. package/build-module/components/rich-text/embed-handler-picker.native.js.map +1 -0
  611. package/build-module/components/rich-text/format-edit.js +28 -3
  612. package/build-module/components/rich-text/format-edit.js.map +1 -1
  613. package/build-module/components/rich-text/format-toolbar/index.js +29 -11
  614. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  615. package/build-module/components/rich-text/index.js +22 -6
  616. package/build-module/components/rich-text/index.js.map +1 -1
  617. package/build-module/components/rich-text/index.native.js +43 -6
  618. package/build-module/components/rich-text/index.native.js.map +1 -1
  619. package/build-module/components/rich-text/input-event.js +24 -22
  620. package/build-module/components/rich-text/input-event.js.map +1 -1
  621. package/build-module/components/rich-text/shortcut.js +22 -9
  622. package/build-module/components/rich-text/shortcut.js.map +1 -1
  623. package/build-module/components/rich-text/use-input-events.js +19 -0
  624. package/build-module/components/rich-text/use-input-events.js.map +1 -0
  625. package/build-module/components/rich-text/use-paste-handler.js +44 -10
  626. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  627. package/build-module/components/rich-text/use-shortcuts.js +19 -0
  628. package/build-module/components/rich-text/use-shortcuts.js.map +1 -0
  629. package/build-module/components/rich-text/utils.js +20 -0
  630. package/build-module/components/rich-text/utils.js.map +1 -1
  631. package/build-module/components/typewriter/index.js +1 -1
  632. package/build-module/components/typewriter/index.js.map +1 -1
  633. package/build-module/components/url-input/index.js +25 -11
  634. package/build-module/components/url-input/index.js.map +1 -1
  635. package/build-module/components/use-display-block-controls/index.js +5 -7
  636. package/build-module/components/use-display-block-controls/index.js.map +1 -1
  637. package/build-module/components/use-moving-animation/index.js +13 -10
  638. package/build-module/components/use-moving-animation/index.js.map +1 -1
  639. package/build-module/components/use-on-block-drop/index.js +3 -2
  640. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  641. package/build-module/components/use-resize-canvas/index.js +2 -10
  642. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  643. package/build-module/components/use-setting/index.js +48 -14
  644. package/build-module/components/use-setting/index.js.map +1 -1
  645. package/build-module/components/writing-flow/use-multi-selection.js +6 -0
  646. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  647. package/build-module/components/writing-flow/use-tab-nav.js +18 -3
  648. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  649. package/build-module/hooks/align.js +15 -15
  650. package/build-module/hooks/align.js.map +1 -1
  651. package/build-module/hooks/anchor.js +5 -3
  652. package/build-module/hooks/anchor.js.map +1 -1
  653. package/build-module/hooks/border-color.js +10 -5
  654. package/build-module/hooks/border-color.js.map +1 -1
  655. package/build-module/hooks/border.js +5 -5
  656. package/build-module/hooks/border.js.map +1 -1
  657. package/build-module/hooks/color-panel.js +6 -3
  658. package/build-module/hooks/color-panel.js.map +1 -1
  659. package/build-module/hooks/color.js +6 -4
  660. package/build-module/hooks/color.js.map +1 -1
  661. package/build-module/hooks/compat.js +20 -0
  662. package/build-module/hooks/compat.js.map +1 -0
  663. package/build-module/hooks/custom-class-name.js +4 -2
  664. package/build-module/hooks/custom-class-name.js.map +1 -1
  665. package/build-module/hooks/dimensions.js +57 -26
  666. package/build-module/hooks/dimensions.js.map +1 -1
  667. package/build-module/hooks/duotone.js +62 -18
  668. package/build-module/hooks/duotone.js.map +1 -1
  669. package/build-module/hooks/font-appearance.js +45 -6
  670. package/build-module/hooks/font-appearance.js.map +1 -1
  671. package/build-module/hooks/font-family.js +117 -33
  672. package/build-module/hooks/font-family.js.map +1 -1
  673. package/build-module/hooks/font-size.js +47 -9
  674. package/build-module/hooks/font-size.js.map +1 -1
  675. package/build-module/hooks/gap.js +140 -0
  676. package/build-module/hooks/gap.js.map +1 -0
  677. package/build-module/hooks/index.js +3 -0
  678. package/build-module/hooks/index.js.map +1 -1
  679. package/build-module/hooks/index.native.js +2 -0
  680. package/build-module/hooks/index.native.js.map +1 -1
  681. package/build-module/hooks/layout.js +47 -30
  682. package/build-module/hooks/layout.js.map +1 -1
  683. package/build-module/hooks/letter-spacing.js +41 -8
  684. package/build-module/hooks/letter-spacing.js.map +1 -1
  685. package/build-module/hooks/line-height.js +41 -8
  686. package/build-module/hooks/line-height.js.map +1 -1
  687. package/build-module/hooks/lock.js +33 -0
  688. package/build-module/hooks/lock.js.map +1 -0
  689. package/build-module/hooks/margin.js +7 -4
  690. package/build-module/hooks/margin.js.map +1 -1
  691. package/build-module/hooks/padding.js +7 -4
  692. package/build-module/hooks/padding.js.map +1 -1
  693. package/build-module/hooks/style.js +39 -11
  694. package/build-module/hooks/style.js.map +1 -1
  695. package/build-module/hooks/text-decoration.js +38 -6
  696. package/build-module/hooks/text-decoration.js.map +1 -1
  697. package/build-module/hooks/text-transform.js +38 -6
  698. package/build-module/hooks/text-transform.js.map +1 -1
  699. package/build-module/hooks/typography.js +118 -19
  700. package/build-module/hooks/typography.js.map +1 -1
  701. package/build-module/hooks/typography.native.js +41 -0
  702. package/build-module/hooks/typography.native.js.map +1 -0
  703. package/build-module/hooks/use-cached-truthy.js +21 -0
  704. package/build-module/hooks/use-cached-truthy.js.map +1 -0
  705. package/build-module/index.js +1 -1
  706. package/build-module/index.js.map +1 -1
  707. package/build-module/layouts/flex.js +210 -12
  708. package/build-module/layouts/flex.js.map +1 -1
  709. package/build-module/layouts/flow.js +99 -7
  710. package/build-module/layouts/flow.js.map +1 -1
  711. package/build-module/store/actions.js +294 -242
  712. package/build-module/store/actions.js.map +1 -1
  713. package/build-module/store/defaults.js +2 -0
  714. package/build-module/store/defaults.js.map +1 -1
  715. package/build-module/store/defaults.native.js +15 -1
  716. package/build-module/store/defaults.native.js.map +1 -1
  717. package/build-module/store/index.js +1 -2
  718. package/build-module/store/index.js.map +1 -1
  719. package/build-module/store/reducer.js +167 -115
  720. package/build-module/store/reducer.js.map +1 -1
  721. package/build-module/store/selectors.js +189 -104
  722. package/build-module/store/selectors.js.map +1 -1
  723. package/build-module/utils/index.js +1 -0
  724. package/build-module/utils/index.js.map +1 -1
  725. package/build-module/utils/parse-css-unit-to-px.js +285 -0
  726. package/build-module/utils/parse-css-unit-to-px.js.map +1 -0
  727. package/build-module/utils/transform-styles/transforms/wrap.js +16 -0
  728. package/build-module/utils/transform-styles/transforms/wrap.js.map +1 -1
  729. package/build-style/default-editor-styles-rtl.css +114 -0
  730. package/build-style/default-editor-styles.css +114 -0
  731. package/build-style/style-rtl.css +292 -181
  732. package/build-style/style.css +292 -181
  733. package/build-types/components/block-context/index.d.ts +1 -1
  734. package/build-types/components/block-context/index.d.ts.map +1 -1
  735. package/package.json +28 -27
  736. package/src/components/autocomplete/index.js +5 -2
  737. package/src/components/block-actions/index.js +9 -5
  738. package/src/components/block-alignment-control/style.scss +5 -0
  739. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +15 -1
  740. package/src/components/block-alignment-control/test/index.native.js +37 -0
  741. package/src/components/block-alignment-control/ui.js +98 -27
  742. package/src/components/block-alignment-control/use-available-alignments.js +31 -10
  743. package/src/components/block-content-overlay/index.js +3 -6
  744. package/src/components/block-content-overlay/style.scss +9 -21
  745. package/src/components/block-controls/fill.js +7 -4
  746. package/src/components/block-controls/groups.js +2 -0
  747. package/src/components/block-controls/hook.js +44 -0
  748. package/src/components/block-draggable/style.scss +19 -4
  749. package/src/components/block-edit/context.js +4 -3
  750. package/src/components/block-edit/edit.js +1 -4
  751. package/src/components/block-icon/index.js +4 -1
  752. package/src/components/block-icon/index.native.js +11 -12
  753. package/src/components/block-inspector/index.js +19 -9
  754. package/src/components/block-list/block-html.js +5 -0
  755. package/src/components/block-list/block-list-item.native.js +34 -11
  756. package/src/components/block-list/block-list-item.native.scss +4 -0
  757. package/src/components/block-list/block-selection-button.native.js +8 -5
  758. package/src/components/block-list/block.js +13 -9
  759. package/src/components/block-list/block.native.js +7 -5
  760. package/src/components/block-list/grid-item.native.js +58 -0
  761. package/src/components/block-list/index.js +33 -27
  762. package/src/components/block-list/index.native.js +10 -4
  763. package/src/components/block-list/style.native.scss +0 -1
  764. package/src/components/block-list/style.scss +15 -0
  765. package/src/components/block-list/use-block-props/index.js +4 -7
  766. package/src/components/block-list/use-block-props/use-block-custom-class-name.js +5 -7
  767. package/src/components/block-list/use-block-props/use-block-default-class-name.js +2 -8
  768. package/src/components/block-list/use-block-props/use-multi-selection.js +30 -4
  769. package/src/components/block-list/use-in-between-inserter.js +9 -0
  770. package/src/components/block-list-appender/index.js +8 -0
  771. package/src/components/block-mover/index.js +4 -4
  772. package/src/components/block-mover/index.native.js +4 -4
  773. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +10 -6
  774. package/src/components/block-mover/test/index.native.js +26 -28
  775. package/src/components/block-navigation/dropdown.js +0 -1
  776. package/src/components/block-patterns-list/index.js +1 -8
  777. package/src/components/block-patterns-list/style.scss +22 -12
  778. package/src/components/block-preview/README.md +1 -1
  779. package/src/components/block-preview/auto.js +36 -18
  780. package/src/components/block-preview/style.scss +0 -20
  781. package/src/components/block-settings/container.native.js +7 -0
  782. package/src/components/block-settings-menu/block-settings-dropdown.js +26 -13
  783. package/src/components/block-settings-menu-controls/index.js +9 -6
  784. package/src/components/block-styles/index.js +6 -1
  785. package/src/components/block-styles/preview.native.js +2 -2
  786. package/src/components/block-switcher/block-styles-menu.js +1 -1
  787. package/src/components/block-switcher/index.js +7 -3
  788. package/src/components/block-switcher/test/__snapshots__/index.js.snap +1 -1
  789. package/src/components/block-switcher/test/index.js +3 -0
  790. package/src/components/block-title/index.js +5 -2
  791. package/src/components/block-toolbar/index.js +4 -0
  792. package/src/components/block-tools/block-contextual-toolbar.js +7 -5
  793. package/src/components/block-tools/block-popover.js +8 -8
  794. package/src/components/block-tools/block-selection-button.js +2 -4
  795. package/src/components/block-tools/index.js +5 -2
  796. package/src/components/block-tools/insertion-point.js +97 -9
  797. package/src/components/block-tools/style.scss +4 -35
  798. package/src/components/block-types-list/index.native.js +8 -2
  799. package/src/components/block-types-list/style.scss +0 -3
  800. package/src/components/block-variation-picker/README.md +47 -14
  801. package/src/components/block-variation-picker/style.native.scss +4 -0
  802. package/src/components/border-radius-control/index.js +1 -0
  803. package/src/components/border-radius-control/test/utils.js +216 -0
  804. package/src/components/border-radius-control/utils.js +18 -10
  805. package/src/components/color-palette/test/__snapshots__/control.js.snap +128 -71
  806. package/src/components/colors/test/utils.js +41 -0
  807. package/src/components/colors/utils.js +9 -5
  808. package/src/components/colors-gradients/control.js +70 -110
  809. package/src/components/colors-gradients/panel-color-gradient-settings.js +79 -7
  810. package/src/components/colors-gradients/style.scss +10 -18
  811. package/src/components/colors-gradients/test/control.js +41 -66
  812. package/src/components/contrast-checker/index.js +14 -10
  813. package/src/components/copy-handler/index.js +6 -1
  814. package/src/components/default-block-appender/index.js +2 -2
  815. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +3 -3
  816. package/src/components/duotone-control/index.js +49 -41
  817. package/src/components/duotone-control/style.scss +27 -12
  818. package/src/components/editor-styles/index.js +8 -4
  819. package/src/components/font-appearance-control/index.js +62 -24
  820. package/src/components/font-appearance-control/style.scss +1 -1
  821. package/src/components/font-sizes/index.native.js +7 -1
  822. package/src/components/iframe/index.js +64 -75
  823. package/src/components/image-editor/aspect-ratio-dropdown.js +129 -0
  824. package/src/components/image-editor/constants.js +6 -0
  825. package/src/components/image-editor/context.js +56 -0
  826. package/src/components/image-editor/cropper.js +74 -0
  827. package/src/components/image-editor/form-controls.js +22 -0
  828. package/src/components/image-editor/index.js +52 -0
  829. package/src/components/image-editor/rotation-button.js +24 -0
  830. package/src/components/image-editor/use-save-image.js +97 -0
  831. package/src/components/image-editor/use-transform-image.js +162 -0
  832. package/src/components/image-editor/zoom-dropdown.js +40 -0
  833. package/src/components/image-size-control/use-dimension-handler.js +18 -1
  834. package/src/components/index.js +10 -8
  835. package/src/components/index.native.js +5 -3
  836. package/src/components/inner-blocks/button-block-appender.js +9 -0
  837. package/src/components/inner-blocks/index.js +43 -14
  838. package/src/components/inner-blocks/index.native.js +48 -4
  839. package/src/components/inner-blocks/use-nested-settings-update.js +26 -11
  840. package/src/components/inserter/block-patterns-explorer/explorer.js +50 -0
  841. package/src/components/inserter/block-patterns-explorer/patterns-list.js +122 -0
  842. package/src/components/inserter/block-patterns-explorer/sidebar.js +73 -0
  843. package/src/components/inserter/block-patterns-tab.js +107 -73
  844. package/src/components/inserter/block-types-tab.native.js +3 -6
  845. package/src/components/inserter/hooks/use-block-type-impressions.native.js +14 -21
  846. package/src/components/inserter/hooks/use-clipboard-block.native.js +3 -2
  847. package/src/components/inserter/index.js +15 -3
  848. package/src/components/inserter/index.native.js +2 -19
  849. package/src/components/inserter/library.js +2 -0
  850. package/src/components/inserter/menu.js +4 -1
  851. package/src/components/inserter/menu.native.js +18 -15
  852. package/src/components/inserter/pattern-panel.js +33 -16
  853. package/src/components/inserter/preview-panel.js +1 -1
  854. package/src/components/inserter/quick-inserter.js +1 -1
  855. package/src/components/inserter/reusable-blocks-tab.native.js +4 -6
  856. package/src/components/inserter/search-results.native.js +8 -1
  857. package/src/components/inserter/style.native.scss +8 -5
  858. package/src/components/inserter/style.scss +80 -16
  859. package/src/components/inserter/tabs.native.js +1 -7
  860. package/src/components/inserter/test/block-types-tab.native.js +3 -2
  861. package/src/components/inserter/test/fixtures/index.native.js +12 -0
  862. package/src/components/inserter/utils.native.js +35 -0
  863. package/src/components/inserter-list-item/style.scss +4 -2
  864. package/src/components/inspector-controls/README.md +43 -198
  865. package/src/components/inspector-controls/block-support-slot-container.js +10 -0
  866. package/src/components/inspector-controls/block-support-tools-panel.js +60 -0
  867. package/src/components/inspector-controls/fill.js +53 -0
  868. package/src/components/inspector-controls/{index.native.js → fill.native.js} +14 -14
  869. package/src/components/inspector-controls/groups.js +22 -0
  870. package/src/components/inspector-controls/index.js +16 -18
  871. package/src/components/inspector-controls/slot.js +45 -0
  872. package/src/components/inspector-controls/slot.native.js +22 -0
  873. package/src/components/letter-spacing-control/index.js +12 -6
  874. package/src/components/line-height-control/index.native.js +25 -0
  875. package/src/components/link-control/README.md +47 -14
  876. package/src/components/link-control/index.js +102 -31
  877. package/src/components/link-control/link-preview.js +53 -20
  878. package/src/components/link-control/search-input.js +21 -7
  879. package/src/components/link-control/style.scss +66 -19
  880. package/src/components/link-control/test/index.js +311 -4
  881. package/src/components/list-view/block-contents.js +17 -38
  882. package/src/components/list-view/block.js +73 -84
  883. package/src/components/list-view/branch.js +123 -94
  884. package/src/components/list-view/index.js +95 -37
  885. package/src/components/list-view/leaf.js +2 -2
  886. package/src/components/list-view/list-item.js +5 -4
  887. package/src/components/list-view/style.scss +70 -33
  888. package/src/components/list-view/use-list-view-client-ids.js +9 -68
  889. package/src/components/media-placeholder/README.md +9 -0
  890. package/src/components/media-placeholder/index.js +31 -20
  891. package/src/components/media-placeholder/index.native.js +2 -1
  892. package/src/components/media-placeholder/style.scss +2 -0
  893. package/src/components/media-replace-flow/README.md +7 -0
  894. package/src/components/media-replace-flow/index.js +4 -1
  895. package/src/components/media-replace-flow/style.scss +11 -12
  896. package/src/components/media-upload/README.md +1 -1
  897. package/src/components/navigable-toolbar/index.js +1 -4
  898. package/src/components/observe-typing/index.js +3 -2
  899. package/src/components/plain-text/index.native.js +26 -4
  900. package/src/components/rich-text/embed-handler-picker.native.js +68 -0
  901. package/src/components/rich-text/format-edit.js +36 -2
  902. package/src/components/rich-text/format-toolbar/index.js +25 -6
  903. package/src/components/rich-text/index.js +38 -12
  904. package/src/components/rich-text/index.native.js +37 -4
  905. package/src/components/rich-text/input-event.js +21 -20
  906. package/src/components/rich-text/shortcut.js +24 -9
  907. package/src/components/rich-text/style.scss +7 -5
  908. package/src/components/rich-text/use-input-events.js +19 -0
  909. package/src/components/rich-text/use-paste-handler.js +47 -12
  910. package/src/components/rich-text/use-shortcuts.js +19 -0
  911. package/src/components/rich-text/utils.js +16 -0
  912. package/src/components/skip-to-selected-block/README.md +39 -0
  913. package/src/components/tool-selector/style.scss +5 -5
  914. package/src/components/typewriter/index.js +3 -2
  915. package/src/components/url-input/index.js +26 -10
  916. package/src/components/use-display-block-controls/index.js +7 -10
  917. package/src/components/use-moving-animation/index.js +9 -8
  918. package/src/components/use-on-block-drop/index.js +5 -1
  919. package/src/components/use-resize-canvas/index.js +2 -17
  920. package/src/components/use-setting/index.js +48 -16
  921. package/src/components/writing-flow/use-multi-selection.js +6 -0
  922. package/src/components/writing-flow/use-tab-nav.js +21 -11
  923. package/src/default-editor-styles.scss +24 -0
  924. package/src/hooks/align.js +28 -20
  925. package/src/hooks/anchor.js +5 -5
  926. package/src/hooks/border-color.js +12 -1
  927. package/src/hooks/border.js +8 -11
  928. package/src/hooks/color-panel.js +4 -1
  929. package/src/hooks/color.js +11 -4
  930. package/src/hooks/compat.js +23 -0
  931. package/src/hooks/custom-class-name.js +3 -3
  932. package/src/hooks/dimensions.js +94 -50
  933. package/src/hooks/duotone.js +70 -21
  934. package/src/hooks/font-appearance.js +38 -7
  935. package/src/hooks/font-family.js +129 -33
  936. package/src/hooks/font-size.js +42 -6
  937. package/src/hooks/gap.js +146 -0
  938. package/src/hooks/index.js +3 -0
  939. package/src/hooks/index.native.js +2 -0
  940. package/src/hooks/layout.js +82 -56
  941. package/src/hooks/layout.scss +8 -0
  942. package/src/hooks/letter-spacing.js +37 -8
  943. package/src/hooks/line-height.js +37 -9
  944. package/src/hooks/lock.js +34 -0
  945. package/src/hooks/margin.js +13 -3
  946. package/src/hooks/padding.js +13 -3
  947. package/src/hooks/style.js +57 -18
  948. package/src/hooks/test/style.js +4 -0
  949. package/src/hooks/text-decoration.js +34 -6
  950. package/src/hooks/text-transform.js +34 -6
  951. package/src/hooks/typography.js +167 -21
  952. package/src/hooks/typography.native.js +64 -0
  953. package/src/hooks/typography.scss +16 -0
  954. package/src/hooks/use-cached-truthy.js +20 -0
  955. package/src/index.js +1 -0
  956. package/src/layouts/flex.js +237 -14
  957. package/src/layouts/flow.js +81 -14
  958. package/src/store/actions.js +248 -378
  959. package/src/store/defaults.js +2 -0
  960. package/src/store/defaults.native.js +15 -0
  961. package/src/store/index.js +1 -2
  962. package/src/store/reducer.js +248 -145
  963. package/src/store/selectors.js +212 -158
  964. package/src/store/test/actions.js +407 -705
  965. package/src/store/test/reducer.js +184 -146
  966. package/src/store/test/selectors.js +197 -177
  967. package/src/style.scss +2 -15
  968. package/src/utils/index.js +1 -0
  969. package/src/utils/parse-css-unit-to-px.js +272 -0
  970. package/src/utils/test/parse-css-unit-to-px.js +166 -0
  971. package/src/utils/transform-styles/transforms/test/wrap.js +1 -1
  972. package/src/utils/transform-styles/transforms/wrap.js +16 -0
  973. package/tsconfig.tsbuildinfo +1 -466
  974. package/build/components/block-list/head.js +0 -27
  975. package/build/components/block-list/head.js.map +0 -1
  976. package/build/components/duotone-control/duotone-picker-popover.js +0 -44
  977. package/build/components/duotone-control/duotone-picker-popover.js.map +0 -1
  978. package/build/components/inspector-advanced-controls/index.js +0 -46
  979. package/build/components/inspector-advanced-controls/index.js.map +0 -1
  980. package/build/components/inspector-controls/index.native.js.map +0 -1
  981. package/build/components/list-view/block-slot.js +0 -121
  982. package/build/components/list-view/block-slot.js.map +0 -1
  983. package/build/components/list-view/editor.js +0 -35
  984. package/build/components/list-view/editor.js.map +0 -1
  985. package/build/components/text-decoration-and-transform/index.js +0 -39
  986. package/build/components/text-decoration-and-transform/index.js.map +0 -1
  987. package/build/components/use-simulated-media-query/index.js +0 -137
  988. package/build/components/use-simulated-media-query/index.js.map +0 -1
  989. package/build/store/controls.js +0 -44
  990. package/build/store/controls.js.map +0 -1
  991. package/build-module/components/block-list/head.js +0 -19
  992. package/build-module/components/block-list/head.js.map +0 -1
  993. package/build-module/components/duotone-control/duotone-picker-popover.js +0 -35
  994. package/build-module/components/duotone-control/duotone-picker-popover.js.map +0 -1
  995. package/build-module/components/inspector-advanced-controls/index.js +0 -36
  996. package/build-module/components/inspector-advanced-controls/index.js.map +0 -1
  997. package/build-module/components/inspector-controls/index.native.js.map +0 -1
  998. package/build-module/components/list-view/block-slot.js +0 -96
  999. package/build-module/components/list-view/block-slot.js.map +0 -1
  1000. package/build-module/components/list-view/editor.js +0 -25
  1001. package/build-module/components/list-view/editor.js.map +0 -1
  1002. package/build-module/components/text-decoration-and-transform/index.js +0 -30
  1003. package/build-module/components/text-decoration-and-transform/index.js.map +0 -1
  1004. package/build-module/components/use-simulated-media-query/index.js +0 -126
  1005. package/build-module/components/use-simulated-media-query/index.js.map +0 -1
  1006. package/build-module/store/controls.js +0 -32
  1007. package/build-module/store/controls.js.map +0 -1
  1008. package/src/components/block-list/head.js +0 -18
  1009. package/src/components/duotone-control/duotone-picker-popover.js +0 -36
  1010. package/src/components/inspector-advanced-controls/README.md +0 -72
  1011. package/src/components/inspector-advanced-controls/index.js +0 -32
  1012. package/src/components/list-view/block-slot.js +0 -120
  1013. package/src/components/list-view/editor.js +0 -29
  1014. package/src/components/text-decoration-and-transform/index.js +0 -36
  1015. package/src/components/text-decoration-and-transform/style.scss +0 -3
  1016. package/src/components/use-simulated-media-query/index.js +0 -144
  1017. package/src/store/controls.js +0 -39
@@ -3,7 +3,7 @@ import { createElement } from "@wordpress/element";
3
3
  /**
4
4
  * WordPress dependencies
5
5
  */
6
- import { __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';
6
+ import { __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';
7
7
  import { Platform } from '@wordpress/element';
8
8
  import { __ } from '@wordpress/i18n';
9
9
  import { getBlockSupport } from '@wordpress/blocks';
@@ -12,10 +12,12 @@ import { getBlockSupport } from '@wordpress/blocks';
12
12
  */
13
13
 
14
14
  import InspectorControls from '../components/inspector-controls';
15
+ import { GapEdit, hasGapSupport, hasGapValue, resetGap, useIsGapDisabled } from './gap';
15
16
  import { MarginEdit, hasMarginSupport, hasMarginValue, resetMargin, useIsMarginDisabled } from './margin';
16
17
  import { PaddingEdit, hasPaddingSupport, hasPaddingValue, resetPadding, useIsPaddingDisabled } from './padding';
17
- import { cleanEmptyObject } from './utils';
18
18
  export const SPACING_SUPPORT_KEY = 'spacing';
19
+ export const ALL_SIDES = ['top', 'right', 'bottom', 'left'];
20
+ export const AXIAL_SIDES = ['vertical', 'horizontal'];
19
21
  /**
20
22
  * Inspector controls for dimensions support.
21
23
  *
@@ -25,6 +27,7 @@ export const SPACING_SUPPORT_KEY = 'spacing';
25
27
  */
26
28
 
27
29
  export function DimensionsPanel(props) {
30
+ const isGapDisabled = useIsGapDisabled(props);
28
31
  const isPaddingDisabled = useIsPaddingDisabled(props);
29
32
  const isMarginDisabled = useIsMarginDisabled(props);
30
33
  const isDisabled = useIsDimensionsDisabled(props);
@@ -34,39 +37,44 @@ export function DimensionsPanel(props) {
34
37
  return null;
35
38
  }
36
39
 
37
- const defaultSpacingControls = getBlockSupport(props.name, [SPACING_SUPPORT_KEY, '__experimentalDefaultControls']); // Callback to reset all block support attributes controlled via this panel.
38
-
39
- const resetAll = () => {
40
- const {
41
- style
42
- } = props.attributes;
43
- props.setAttributes({
44
- style: cleanEmptyObject({ ...style,
45
- spacing: { ...(style === null || style === void 0 ? void 0 : style.spacing),
46
- margin: undefined,
47
- padding: undefined
40
+ const defaultSpacingControls = getBlockSupport(props.name, [SPACING_SUPPORT_KEY, '__experimentalDefaultControls']);
41
+
42
+ const createResetAllFilter = attribute => newAttributes => {
43
+ var _newAttributes$style;
44
+
45
+ return { ...newAttributes,
46
+ style: { ...newAttributes.style,
47
+ spacing: { ...((_newAttributes$style = newAttributes.style) === null || _newAttributes$style === void 0 ? void 0 : _newAttributes$style.spacing),
48
+ [attribute]: undefined
48
49
  }
49
- })
50
- });
50
+ }
51
+ };
51
52
  };
52
53
 
53
54
  return createElement(InspectorControls, {
54
- key: "dimensions"
55
- }, createElement(ToolsPanel, {
56
- label: __('Dimensions options'),
57
- header: __('Dimensions'),
58
- resetAll: resetAll
55
+ __experimentalGroup: "dimensions"
59
56
  }, !isPaddingDisabled && createElement(ToolsPanelItem, {
60
57
  hasValue: () => hasPaddingValue(props),
61
58
  label: __('Padding'),
62
59
  onDeselect: () => resetPadding(props),
63
- isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.padding
60
+ resetAllFilter: createResetAllFilter('padding'),
61
+ isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.padding,
62
+ panelId: props.clientId
64
63
  }, createElement(PaddingEdit, props)), !isMarginDisabled && createElement(ToolsPanelItem, {
65
64
  hasValue: () => hasMarginValue(props),
66
65
  label: __('Margin'),
67
66
  onDeselect: () => resetMargin(props),
68
- isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.margin
69
- }, createElement(MarginEdit, props))));
67
+ resetAllFilter: createResetAllFilter('margin'),
68
+ isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.margin,
69
+ panelId: props.clientId
70
+ }, createElement(MarginEdit, props)), !isGapDisabled && createElement(ToolsPanelItem, {
71
+ hasValue: () => hasGapValue(props),
72
+ label: __('Block spacing'),
73
+ onDeselect: () => resetGap(props),
74
+ resetAllFilter: createResetAllFilter('blockGap'),
75
+ isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.blockGap,
76
+ panelId: props.clientId
77
+ }, createElement(GapEdit, props)));
70
78
  }
71
79
  /**
72
80
  * Determine whether there is dimensions related block support.
@@ -81,7 +89,7 @@ export function hasDimensionsSupport(blockName) {
81
89
  return false;
82
90
  }
83
91
 
84
- return hasPaddingSupport(blockName) || hasMarginSupport(blockName);
92
+ return hasGapSupport(blockName) || hasPaddingSupport(blockName) || hasMarginSupport(blockName);
85
93
  }
86
94
  /**
87
95
  * Determines whether dimensions support has been disabled.
@@ -92,9 +100,10 @@ export function hasDimensionsSupport(blockName) {
92
100
  */
93
101
 
94
102
  const useIsDimensionsDisabled = (props = {}) => {
103
+ const gapDisabled = useIsGapDisabled(props);
95
104
  const paddingDisabled = useIsPaddingDisabled(props);
96
105
  const marginDisabled = useIsMarginDisabled(props);
97
- return paddingDisabled && marginDisabled;
106
+ return gapDisabled && paddingDisabled && marginDisabled;
98
107
  };
99
108
  /**
100
109
  * Custom hook to retrieve which padding/margin is supported
@@ -113,10 +122,32 @@ const useIsDimensionsDisabled = (props = {}) => {
113
122
  export function useCustomSides(blockName, feature) {
114
123
  const support = getBlockSupport(blockName, SPACING_SUPPORT_KEY); // Skip when setting is boolean as theme isn't setting arbitrary sides.
115
124
 
116
- if (typeof support[feature] === 'boolean') {
125
+ if (!support || typeof support[feature] === 'boolean') {
117
126
  return;
118
127
  }
119
128
 
120
129
  return support[feature];
121
130
  }
131
+ /**
132
+ * Custom hook to determine whether the sides configured in the
133
+ * block support are valid. A dimension property cannot declare
134
+ * support for a mix of axial and individual sides.
135
+ *
136
+ * @param {string} blockName Block name.
137
+ * @param {string} feature The feature custom sides relate to e.g. padding or margins.
138
+ *
139
+ * @return {boolean} If the feature has a valid configuration of sides.
140
+ */
141
+
142
+ export function useIsDimensionsSupportValid(blockName, feature) {
143
+ const sides = useCustomSides(blockName, feature);
144
+
145
+ if (sides && sides.some(side => ALL_SIDES.includes(side)) && sides.some(side => AXIAL_SIDES.includes(side))) {
146
+ // eslint-disable-next-line no-console
147
+ console.warn(`The ${feature} support for the "${blockName}" block can not be configured to support both axial and arbitrary sides.`);
148
+ return false;
149
+ }
150
+
151
+ return true;
152
+ }
122
153
  //# sourceMappingURL=dimensions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/dimensions.js"],"names":["__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","Platform","__","getBlockSupport","InspectorControls","MarginEdit","hasMarginSupport","hasMarginValue","resetMargin","useIsMarginDisabled","PaddingEdit","hasPaddingSupport","hasPaddingValue","resetPadding","useIsPaddingDisabled","cleanEmptyObject","SPACING_SUPPORT_KEY","DimensionsPanel","props","isPaddingDisabled","isMarginDisabled","isDisabled","useIsDimensionsDisabled","isSupported","hasDimensionsSupport","name","defaultSpacingControls","resetAll","style","attributes","setAttributes","spacing","margin","undefined","padding","blockName","OS","paddingDisabled","marginDisabled","useCustomSides","feature","support"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { Platform } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tMarginEdit,\n\thasMarginSupport,\n\thasMarginValue,\n\tresetMargin,\n\tuseIsMarginDisabled,\n} from './margin';\nimport {\n\tPaddingEdit,\n\thasPaddingSupport,\n\thasPaddingValue,\n\tresetPadding,\n\tuseIsPaddingDisabled,\n} from './padding';\nimport { cleanEmptyObject } from './utils';\n\nexport const SPACING_SUPPORT_KEY = 'spacing';\n\n/**\n * Inspector controls for dimensions support.\n *\n * @param {Object} props Block props.\n *\n * @return {WPElement} Inspector controls for spacing support features.\n */\nexport function DimensionsPanel( props ) {\n\tconst isPaddingDisabled = useIsPaddingDisabled( props );\n\tconst isMarginDisabled = useIsMarginDisabled( props );\n\tconst isDisabled = useIsDimensionsDisabled( props );\n\tconst isSupported = hasDimensionsSupport( props.name );\n\n\tif ( isDisabled || ! isSupported ) {\n\t\treturn null;\n\t}\n\n\tconst defaultSpacingControls = getBlockSupport( props.name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\t// Callback to reset all block support attributes controlled via this panel.\n\tconst resetAll = () => {\n\t\tconst { style } = props.attributes;\n\n\t\tprops.setAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\tspacing: {\n\t\t\t\t\t...style?.spacing,\n\t\t\t\t\tmargin: undefined,\n\t\t\t\t\tpadding: undefined,\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\treturn (\n\t\t<InspectorControls key=\"dimensions\">\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Dimensions options' ) }\n\t\t\t\theader={ __( 'Dimensions' ) }\n\t\t\t\tresetAll={ resetAll }\n\t\t\t>\n\t\t\t\t{ ! isPaddingDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasPaddingValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Padding' ) }\n\t\t\t\t\t\tonDeselect={ () => resetPadding( props ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.padding }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PaddingEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isMarginDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasMarginValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Margin' ) }\n\t\t\t\t\t\tonDeselect={ () => resetMargin( props ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.margin }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MarginEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Determine whether there is dimensions related block support.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\treturn hasPaddingSupport( blockName ) || hasMarginSupport( blockName );\n}\n\n/**\n * Determines whether dimensions support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} If spacing support is completely disabled.\n */\nconst useIsDimensionsDisabled = ( props = {} ) => {\n\tconst paddingDisabled = useIsPaddingDisabled( props );\n\tconst marginDisabled = useIsMarginDisabled( props );\n\n\treturn paddingDisabled && marginDisabled;\n};\n\n/**\n * Custom hook to retrieve which padding/margin is supported\n * e.g. top, right, bottom or left.\n *\n * Sides are opted into by default. It is only if a specific side is set to\n * false that it is omitted.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {Object} Sides supporting custom margin.\n */\nexport function useCustomSides( blockName, feature ) {\n\tconst support = getBlockSupport( blockName, SPACING_SUPPORT_KEY );\n\n\t// Skip when setting is boolean as theme isn't setting arbitrary sides.\n\tif ( typeof support[ feature ] === 'boolean' ) {\n\t\treturn;\n\t}\n\n\treturn support[ feature ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/dimensions.js"],"names":["__experimentalToolsPanelItem","ToolsPanelItem","Platform","__","getBlockSupport","InspectorControls","GapEdit","hasGapSupport","hasGapValue","resetGap","useIsGapDisabled","MarginEdit","hasMarginSupport","hasMarginValue","resetMargin","useIsMarginDisabled","PaddingEdit","hasPaddingSupport","hasPaddingValue","resetPadding","useIsPaddingDisabled","SPACING_SUPPORT_KEY","ALL_SIDES","AXIAL_SIDES","DimensionsPanel","props","isGapDisabled","isPaddingDisabled","isMarginDisabled","isDisabled","useIsDimensionsDisabled","isSupported","hasDimensionsSupport","name","defaultSpacingControls","createResetAllFilter","attribute","newAttributes","style","spacing","undefined","padding","clientId","margin","blockGap","blockName","OS","gapDisabled","paddingDisabled","marginDisabled","useCustomSides","feature","support","useIsDimensionsSupportValid","sides","some","side","includes","console","warn"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';\nimport { Platform } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tGapEdit,\n\thasGapSupport,\n\thasGapValue,\n\tresetGap,\n\tuseIsGapDisabled,\n} from './gap';\nimport {\n\tMarginEdit,\n\thasMarginSupport,\n\thasMarginValue,\n\tresetMargin,\n\tuseIsMarginDisabled,\n} from './margin';\nimport {\n\tPaddingEdit,\n\thasPaddingSupport,\n\thasPaddingValue,\n\tresetPadding,\n\tuseIsPaddingDisabled,\n} from './padding';\n\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\n/**\n * Inspector controls for dimensions support.\n *\n * @param {Object} props Block props.\n *\n * @return {WPElement} Inspector controls for spacing support features.\n */\nexport function DimensionsPanel( props ) {\n\tconst isGapDisabled = useIsGapDisabled( props );\n\tconst isPaddingDisabled = useIsPaddingDisabled( props );\n\tconst isMarginDisabled = useIsMarginDisabled( props );\n\tconst isDisabled = useIsDimensionsDisabled( props );\n\tconst isSupported = hasDimensionsSupport( props.name );\n\n\tif ( isDisabled || ! isSupported ) {\n\t\treturn null;\n\t}\n\n\tconst defaultSpacingControls = getBlockSupport( props.name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst createResetAllFilter = ( attribute ) => ( newAttributes ) => ( {\n\t\t...newAttributes,\n\t\tstyle: {\n\t\t\t...newAttributes.style,\n\t\t\tspacing: {\n\t\t\t\t...newAttributes.style?.spacing,\n\t\t\t\t[ attribute ]: undefined,\n\t\t\t},\n\t\t},\n\t} );\n\n\treturn (\n\t\t<InspectorControls __experimentalGroup=\"dimensions\">\n\t\t\t{ ! isPaddingDisabled && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => hasPaddingValue( props ) }\n\t\t\t\t\tlabel={ __( 'Padding' ) }\n\t\t\t\t\tonDeselect={ () => resetPadding( props ) }\n\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'padding' ) }\n\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.padding }\n\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t>\n\t\t\t\t\t<PaddingEdit { ...props } />\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t\t{ ! isMarginDisabled && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => hasMarginValue( props ) }\n\t\t\t\t\tlabel={ __( 'Margin' ) }\n\t\t\t\t\tonDeselect={ () => resetMargin( props ) }\n\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'margin' ) }\n\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.margin }\n\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t>\n\t\t\t\t\t<MarginEdit { ...props } />\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t\t{ ! isGapDisabled && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => hasGapValue( props ) }\n\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\tonDeselect={ () => resetGap( props ) }\n\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'blockGap' ) }\n\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.blockGap }\n\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t>\n\t\t\t\t\t<GapEdit { ...props } />\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Determine whether there is dimensions related block support.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\thasGapSupport( blockName ) ||\n\t\thasPaddingSupport( blockName ) ||\n\t\thasMarginSupport( blockName )\n\t);\n}\n\n/**\n * Determines whether dimensions support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} If spacing support is completely disabled.\n */\nconst useIsDimensionsDisabled = ( props = {} ) => {\n\tconst gapDisabled = useIsGapDisabled( props );\n\tconst paddingDisabled = useIsPaddingDisabled( props );\n\tconst marginDisabled = useIsMarginDisabled( props );\n\n\treturn gapDisabled && paddingDisabled && marginDisabled;\n};\n\n/**\n * Custom hook to retrieve which padding/margin is supported\n * e.g. top, right, bottom or left.\n *\n * Sides are opted into by default. It is only if a specific side is set to\n * false that it is omitted.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {Object} Sides supporting custom margin.\n */\nexport function useCustomSides( blockName, feature ) {\n\tconst support = getBlockSupport( blockName, SPACING_SUPPORT_KEY );\n\n\t// Skip when setting is boolean as theme isn't setting arbitrary sides.\n\tif ( ! support || typeof support[ feature ] === 'boolean' ) {\n\t\treturn;\n\t}\n\n\treturn support[ feature ];\n}\n\n/**\n * Custom hook to determine whether the sides configured in the\n * block support are valid. A dimension property cannot declare\n * support for a mix of axial and individual sides.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {boolean} If the feature has a valid configuration of sides.\n */\nexport function useIsDimensionsSupportValid( blockName, feature ) {\n\tconst sides = useCustomSides( blockName, feature );\n\n\tif (\n\t\tsides &&\n\t\tsides.some( ( side ) => ALL_SIDES.includes( side ) ) &&\n\t\tsides.some( ( side ) => AXIAL_SIDES.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support both axial and arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"]}
@@ -5,7 +5,8 @@ import { createElement, Fragment } from "@wordpress/element";
5
5
  * External dependencies
6
6
  */
7
7
  import classnames from 'classnames';
8
- import tinycolor from 'tinycolor2';
8
+ import { colord, extend } from 'colord';
9
+ import namesPlugin from 'colord/plugins/names';
9
10
  /**
10
11
  * WordPress dependencies
11
12
  */
@@ -20,8 +21,9 @@ import { useContext, createPortal } from '@wordpress/element';
20
21
  */
21
22
 
22
23
  import { BlockControls, __experimentalDuotoneControl as DuotoneControl, useSetting } from '../components';
23
- import { Head } from '../components/block-list/head';
24
+ import BlockList from '../components/block-list';
24
25
  const EMPTY_ARRAY = [];
26
+ extend([namesPlugin]);
25
27
  /**
26
28
  * Convert a list of colors to an object of R, G, and B values.
27
29
  *
@@ -34,14 +36,15 @@ export function getValuesFromColors(colors = []) {
34
36
  const values = {
35
37
  r: [],
36
38
  g: [],
37
- b: []
39
+ b: [],
40
+ a: []
38
41
  };
39
42
  colors.forEach(color => {
40
- // Access values directly to skip extra rounding that tinycolor.toRgb() does.
41
- const tcolor = tinycolor(color);
42
- values.r.push(tcolor._r / 255);
43
- values.g.push(tcolor._g / 255);
44
- values.b.push(tcolor._b / 255);
43
+ const rgbColor = colord(color).toRgb();
44
+ values.r.push(rgbColor.r / 255);
45
+ values.g.push(rgbColor.g / 255);
46
+ values.b.push(rgbColor.b / 255);
47
+ values.a.push(rgbColor.a);
45
48
  });
46
49
  return values;
47
50
  }
@@ -52,6 +55,7 @@ export function getValuesFromColors(colors = []) {
52
55
  * @property {number[]} r Red values.
53
56
  * @property {number[]} g Green values.
54
57
  * @property {number[]} b Blue values.
58
+ * @property {number[]} a Alpha values.
55
59
  */
56
60
 
57
61
  /**
@@ -60,7 +64,7 @@ export function getValuesFromColors(colors = []) {
60
64
  * @param {Object} props Duotone props.
61
65
  * @param {string} props.selector Selector to apply the filter to.
62
66
  * @param {string} props.id Unique id for this duotone filter.
63
- * @param {Values} props.values R, G, and B values to filter with.
67
+ * @param {Values} props.values R, G, B, and A values to filter with.
64
68
  *
65
69
  * @return {WPElement} Duotone element.
66
70
  */
@@ -91,10 +95,11 @@ ${selector} {
91
95
  }, createElement("defs", null, createElement("filter", {
92
96
  id: id
93
97
  }, createElement("feColorMatrix", {
98
+ // Use sRGB instead of linearRGB so transparency looks correct.
99
+ colorInterpolationFilters: "sRGB",
94
100
  type: "matrix" // Use perceptual brightness to convert to grayscale.
95
- // prettier-ignore
96
101
  ,
97
- values: ".299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 0 0 0 1 0"
102
+ values: " .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 "
98
103
  }), createElement("feComponentTransfer", {
99
104
  // Use sRGB instead of linearRGB to be consistent with how CSS gradients work.
100
105
  colorInterpolationFilters: "sRGB"
@@ -107,7 +112,14 @@ ${selector} {
107
112
  }), createElement("feFuncB", {
108
113
  type: "table",
109
114
  tableValues: values.b.join(' ')
110
- }))))), createElement("style", {
115
+ }), createElement("feFuncA", {
116
+ type: "table",
117
+ tableValues: values.a.join(' ')
118
+ })), createElement("feComposite", {
119
+ // Re-mask the image with the original transparency since the feColorMatrix above loses that information.
120
+ in2: "SourceGraphic",
121
+ operator: "in"
122
+ })))), createElement("style", {
111
123
  dangerouslySetInnerHTML: {
112
124
  __html: stylesheet
113
125
  }
@@ -132,7 +144,8 @@ function DuotonePanel({
132
144
  }
133
145
 
134
146
  return createElement(BlockControls, {
135
- group: "block"
147
+ group: "block",
148
+ __experimentalShareWithChildBlocks: true
136
149
  }, createElement(DuotoneControl, {
137
150
  duotonePalette: duotonePalette,
138
151
  colorPalette: colorPalette,
@@ -192,6 +205,35 @@ const withDuotoneControls = createHigherOrderComponent(BlockEdit => props => {
192
205
  const hasDuotoneSupport = hasBlockSupport(props.name, 'color.__experimentalDuotone');
193
206
  return createElement(Fragment, null, createElement(BlockEdit, props), hasDuotoneSupport && createElement(DuotonePanel, props));
194
207
  }, 'withDuotoneControls');
208
+ /**
209
+ * Function that scopes a selector with another one. This works a bit like
210
+ * SCSS nesting except the `&` operator isn't supported.
211
+ *
212
+ * @example
213
+ * ```js
214
+ * const scope = '.a, .b .c';
215
+ * const selector = '> .x, .y';
216
+ * const merged = scopeSelector( scope, selector );
217
+ * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'
218
+ * ```
219
+ *
220
+ * @param {string} scope Selector to scope to.
221
+ * @param {string} selector Original selector.
222
+ *
223
+ * @return {string} Scoped selector.
224
+ */
225
+
226
+ function scopeSelector(scope, selector) {
227
+ const scopes = scope.split(',');
228
+ const selectors = selector.split(',');
229
+ const selectorsScoped = [];
230
+ scopes.forEach(outer => {
231
+ selectors.forEach(inner => {
232
+ selectorsScoped.push(`${outer.trim()} ${inner.trim()}`);
233
+ });
234
+ });
235
+ return selectorsScoped.join(', ');
236
+ }
195
237
  /**
196
238
  * Override the default block element to include duotone styles.
197
239
  *
@@ -200,6 +242,7 @@ const withDuotoneControls = createHigherOrderComponent(BlockEdit => props => {
200
242
  * @return {Function} Wrapped component.
201
243
  */
202
244
 
245
+
203
246
  const withDuotoneStyles = createHigherOrderComponent(BlockListBlock => props => {
204
247
  var _props$attributes, _props$attributes$sty, _props$attributes$sty2;
205
248
 
@@ -210,12 +253,13 @@ const withDuotoneStyles = createHigherOrderComponent(BlockListBlock => props =>
210
253
  return createElement(BlockListBlock, props);
211
254
  }
212
255
 
213
- const id = `wp-duotone-filter-${useInstanceId(BlockListBlock)}`;
214
- const selectors = duotoneSupport.split(',');
215
- const selectorsScoped = selectors.map(selector => `.${id} ${selector.trim()}`);
216
- const selectorsGroup = selectorsScoped.join(', ');
256
+ const id = `wp-duotone-${useInstanceId(BlockListBlock)}`; // Extra .editor-styles-wrapper specificity is needed in the editor
257
+ // since we're not using inline styles to apply the filter. We need to
258
+ // override duotone applied by global styles and theme.json.
259
+
260
+ const selectorsGroup = scopeSelector(`.editor-styles-wrapper .${id}`, duotoneSupport);
217
261
  const className = classnames(props === null || props === void 0 ? void 0 : props.className, id);
218
- const element = useContext(Head.context);
262
+ const element = useContext(BlockList.__unstableElementContext);
219
263
  return createElement(Fragment, null, element && createPortal(createElement(DuotoneFilter, {
220
264
  selector: selectorsGroup,
221
265
  id: id,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","tinycolor","getBlockSupport","hasBlockSupport","SVG","createHigherOrderComponent","useInstanceId","addFilter","useContext","createPortal","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","Head","EMPTY_ARRAY","getValuesFromColors","colors","values","r","g","b","forEach","color","tcolor","push","_r","_g","_b","DuotoneFilter","selector","id","stylesheet","visibility","position","left","overflow","join","__html","DuotonePanel","attributes","setAttributes","style","duotone","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","withDuotoneStyles","BlockListBlock","duotoneSupport","selectors","split","selectorsScoped","map","trim","selectorsGroup","className","element","context"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport tinycolor from 'tinycolor2';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { SVG } from '@wordpress/components';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport { Head } from '../components/block-list/head';\n\nconst EMPTY_ARRAY = [];\n\n/**\n * Convert a list of colors to an object of R, G, and B values.\n *\n * @param {string[]} colors Array of RBG color strings.\n *\n * @return {Object} R, G, and B values.\n */\nexport function getValuesFromColors( colors = [] ) {\n\tconst values = { r: [], g: [], b: [] };\n\n\tcolors.forEach( ( color ) => {\n\t\t// Access values directly to skip extra rounding that tinycolor.toRgb() does.\n\t\tconst tcolor = tinycolor( color );\n\t\tvalues.r.push( tcolor._r / 255 );\n\t\tvalues.g.push( tcolor._g / 255 );\n\t\tvalues.b.push( tcolor._b / 255 );\n\t} );\n\n\treturn values;\n}\n\n/**\n * Values for the SVG `feComponentTransfer`.\n *\n * @typedef Values {Object}\n * @property {number[]} r Red values.\n * @property {number[]} g Green values.\n * @property {number[]} b Blue values.\n */\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {Values} props.values R, G, and B values to filter with.\n *\n * @return {WPElement} Duotone element.\n */\nfunction DuotoneFilter( { selector, id, values } ) {\n\tconst stylesheet = `\n${ selector } {\n\tfilter: url( #${ id } );\n}\n`;\n\n\treturn (\n\t\t<>\n\t\t\t<SVG\n\t\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\tviewBox=\"0 0 0 0\"\n\t\t\t\twidth=\"0\"\n\t\t\t\theight=\"0\"\n\t\t\t\tfocusable=\"false\"\n\t\t\t\trole=\"none\"\n\t\t\t\tstyle={ {\n\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tleft: '-9999px',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<filter id={ id }>\n\t\t\t\t\t\t<feColorMatrix\n\t\t\t\t\t\t\ttype=\"matrix\"\n\t\t\t\t\t\t\t// Use perceptual brightness to convert to grayscale.\n\t\t\t\t\t\t\t// prettier-ignore\n\t\t\t\t\t\t\tvalues=\".299 .587 .114 0 0\n\t\t\t\t\t\t\t .299 .587 .114 0 0\n\t\t\t\t\t\t\t .299 .587 .114 0 0\n\t\t\t\t\t\t\t 0 0 0 1 0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<feComponentTransfer\n\t\t\t\t\t\t\t// Use sRGB instead of linearRGB to be consistent with how CSS gradients work.\n\t\t\t\t\t\t\tcolorInterpolationFilters=\"sRGB\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<feFuncR\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.r.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncG\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.g.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncB\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.b.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</feComponentTransfer>\n\t\t\t\t\t</filter>\n\t\t\t\t</defs>\n\t\t\t</SVG>\n\t\t\t<style dangerouslySetInnerHTML={ { __html: stylesheet } } />\n\t\t</>\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useSetting( 'color.duotone' ) || EMPTY_ARRAY;\n\tconst colorPalette = useSetting( 'color.palette' ) || EMPTY_ARRAY;\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\">\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && <DuotonePanel { ...props } /> }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst values = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! values ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-filter-${ useInstanceId( BlockListBlock ) }`;\n\n\t\tconst selectors = duotoneSupport.split( ',' );\n\t\tconst selectorsScoped = selectors.map(\n\t\t\t( selector ) => `.${ id } ${ selector.trim() }`\n\t\t);\n\t\tconst selectorsGroup = selectorsScoped.join( ', ' );\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\tconst element = useContext( Head.context );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<DuotoneFilter\n\t\t\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tvalues={ getValuesFromColors( values ) }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","colord","extend","namesPlugin","getBlockSupport","hasBlockSupport","SVG","createHigherOrderComponent","useInstanceId","addFilter","useContext","createPortal","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","BlockList","EMPTY_ARRAY","getValuesFromColors","colors","values","r","g","b","a","forEach","color","rgbColor","toRgb","push","DuotoneFilter","selector","id","stylesheet","visibility","position","left","overflow","join","__html","DuotonePanel","attributes","setAttributes","style","duotone","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","scopeSelector","scope","scopes","split","selectors","selectorsScoped","outer","inner","trim","withDuotoneStyles","BlockListBlock","duotoneSupport","selectorsGroup","className","element","__unstableElementContext"],"mappings":";;;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,MAAT,EAAiBC,MAAjB,QAA+B,QAA/B;AACA,OAAOC,WAAP,MAAwB,sBAAxB;AAEA;AACA;AACA;;AACA,SAASC,eAAT,EAA0BC,eAA1B,QAAiD,mBAAjD;AACA,SAASC,GAAT,QAAoB,uBAApB;AACA,SAASC,0BAAT,EAAqCC,aAArC,QAA0D,oBAA1D;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,UAAT,EAAqBC,YAArB,QAAyC,oBAAzC;AAEA;AACA;AACA;;AACA,SACCC,aADD,EAECC,4BAA4B,IAAIC,cAFjC,EAGCC,UAHD,QAIO,eAJP;AAKA,OAAOC,SAAP,MAAsB,0BAAtB;AAEA,MAAMC,WAAW,GAAG,EAApB;AAEAf,MAAM,CAAE,CAAEC,WAAF,CAAF,CAAN;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASe,mBAAT,CAA8BC,MAAM,GAAG,EAAvC,EAA4C;AAClD,QAAMC,MAAM,GAAG;AAAEC,IAAAA,CAAC,EAAE,EAAL;AAASC,IAAAA,CAAC,EAAE,EAAZ;AAAgBC,IAAAA,CAAC,EAAE,EAAnB;AAAuBC,IAAAA,CAAC,EAAE;AAA1B,GAAf;AAEAL,EAAAA,MAAM,CAACM,OAAP,CAAkBC,KAAF,IAAa;AAC5B,UAAMC,QAAQ,GAAG1B,MAAM,CAAEyB,KAAF,CAAN,CAAgBE,KAAhB,EAAjB;AACAR,IAAAA,MAAM,CAACC,CAAP,CAASQ,IAAT,CAAeF,QAAQ,CAACN,CAAT,GAAa,GAA5B;AACAD,IAAAA,MAAM,CAACE,CAAP,CAASO,IAAT,CAAeF,QAAQ,CAACL,CAAT,GAAa,GAA5B;AACAF,IAAAA,MAAM,CAACG,CAAP,CAASM,IAAT,CAAeF,QAAQ,CAACJ,CAAT,GAAa,GAA5B;AACAH,IAAAA,MAAM,CAACI,CAAP,CAASK,IAAT,CAAeF,QAAQ,CAACH,CAAxB;AACA,GAND;AAQA,SAAOJ,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASU,aAAT,CAAwB;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,EAAZ;AAAgBZ,EAAAA;AAAhB,CAAxB,EAAmD;AAClD,QAAMa,UAAU,GAAI;AACrB,EAAGF,QAAU;AACb,iBAAkBC,EAAI;AACtB;AACA,CAJC;AAMA,SACC,8BACC,cAAC,GAAD;AACC,IAAA,UAAU,EAAC,8BADZ;AAEC,IAAA,OAAO,EAAC,SAFT;AAGC,IAAA,KAAK,EAAC,GAHP;AAIC,IAAA,MAAM,EAAC,GAJR;AAKC,IAAA,SAAS,EAAC,OALX;AAMC,IAAA,IAAI,EAAC,MANN;AAOC,IAAA,KAAK,EAAG;AACPE,MAAAA,UAAU,EAAE,QADL;AAEPC,MAAAA,QAAQ,EAAE,UAFH;AAGPC,MAAAA,IAAI,EAAE,SAHC;AAIPC,MAAAA,QAAQ,EAAE;AAJH;AAPT,KAcC,4BACC;AAAQ,IAAA,EAAE,EAAGL;AAAb,KACC;AACC;AACA,IAAA,yBAAyB,EAAC,MAF3B;AAGC,IAAA,IAAI,EAAC,QAHN,CAIC;AAJD;AAKC,IAAA,MAAM,EAAC;AALR,IADD,EAaC;AACC;AACA,IAAA,yBAAyB,EAAC;AAF3B,KAIC;AACC,IAAA,IAAI,EAAC,OADN;AAEC,IAAA,WAAW,EAAGZ,MAAM,CAACC,CAAP,CAASiB,IAAT,CAAe,GAAf;AAFf,IAJD,EAQC;AACC,IAAA,IAAI,EAAC,OADN;AAEC,IAAA,WAAW,EAAGlB,MAAM,CAACE,CAAP,CAASgB,IAAT,CAAe,GAAf;AAFf,IARD,EAYC;AACC,IAAA,IAAI,EAAC,OADN;AAEC,IAAA,WAAW,EAAGlB,MAAM,CAACG,CAAP,CAASe,IAAT,CAAe,GAAf;AAFf,IAZD,EAgBC;AACC,IAAA,IAAI,EAAC,OADN;AAEC,IAAA,WAAW,EAAGlB,MAAM,CAACI,CAAP,CAASc,IAAT,CAAe,GAAf;AAFf,IAhBD,CAbD,EAkCC;AACC;AACA,IAAA,GAAG,EAAC,eAFL;AAGC,IAAA,QAAQ,EAAC;AAHV,IAlCD,CADD,CAdD,CADD,EA0DC;AAAO,IAAA,uBAAuB,EAAG;AAAEC,MAAAA,MAAM,EAAEN;AAAV;AAAjC,IA1DD,CADD;AA8DA;;AAED,SAASO,YAAT,CAAuB;AAAEC,EAAAA,UAAF;AAAcC,EAAAA;AAAd,CAAvB,EAAuD;AAAA;;AACtD,QAAMC,KAAK,GAAGF,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEE,KAA1B;AACA,QAAMC,OAAO,GAAGD,KAAH,aAAGA,KAAH,uCAAGA,KAAK,CAAEjB,KAAV,iDAAG,aAAckB,OAA9B;AAEA,QAAMC,cAAc,GAAG9B,UAAU,CAAE,eAAF,CAAV,IAAiCE,WAAxD;AACA,QAAM6B,YAAY,GAAG/B,UAAU,CAAE,eAAF,CAAV,IAAiCE,WAAtD;AACA,QAAM8B,mBAAmB,GAAG,CAAEhC,UAAU,CAAE,cAAF,CAAxC;AACA,QAAMiC,oBAAoB,GACzB,CAAEjC,UAAU,CAAE,qBAAF,CAAZ,IACE,CAAA+B,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEG,MAAd,MAAyB,CAAzB,IAA8BF,mBAFjC;;AAIA,MAAK,CAAAF,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEI,MAAhB,MAA2B,CAA3B,IAAgCD,oBAArC,EAA4D;AAC3D,WAAO,IAAP;AACA;;AAED,SACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC,OAArB;AAA6B,IAAA,kCAAkC;AAA/D,KACC,cAAC,cAAD;AACC,IAAA,cAAc,EAAGH,cADlB;AAEC,IAAA,YAAY,EAAGC,YAFhB;AAGC,IAAA,oBAAoB,EAAGE,oBAHxB;AAIC,IAAA,mBAAmB,EAAGD,mBAJvB;AAKC,IAAA,KAAK,EAAGH,OALT;AAMC,IAAA,QAAQ,EAAKM,UAAF,IAAkB;AAC5B,YAAMC,QAAQ,GAAG,EAChB,GAAGR,KADa;AAEhBjB,QAAAA,KAAK,EAAE,EACN,IAAGiB,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAEjB,KAAV,CADM;AAENkB,UAAAA,OAAO,EAAEM;AAFH;AAFS,OAAjB;AAOAR,MAAAA,aAAa,CAAE;AAAEC,QAAAA,KAAK,EAAEQ;AAAT,OAAF,CAAb;AACA;AAfF,IADD,CADD;AAqBA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,oBAAT,CAA+BC,QAA/B,EAA0C;AACzC,MAAK,CAAEhD,eAAe,CAAEgD,QAAF,EAAY,6BAAZ,CAAtB,EAAoE;AACnE,WAAOA,QAAP;AACA,GAHwC,CAKzC;AACA;;;AACA,MAAK,CAAEA,QAAQ,CAACZ,UAAT,CAAoBE,KAA3B,EAAmC;AAClCW,IAAAA,MAAM,CAACC,MAAP,CAAeF,QAAQ,CAACZ,UAAxB,EAAoC;AACnCE,MAAAA,KAAK,EAAE;AACNa,QAAAA,IAAI,EAAE;AADA;AAD4B,KAApC;AAKA;;AAED,SAAOH,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMI,mBAAmB,GAAGlD,0BAA0B,CACnDmD,SAAF,IAAmBC,KAAF,IAAa;AAC7B,QAAMC,iBAAiB,GAAGvD,eAAe,CACxCsD,KAAK,CAACE,IADkC,EAExC,6BAFwC,CAAzC;AAKA,SACC,8BACC,cAAC,SAAD,EAAgBF,KAAhB,CADD,EAEGC,iBAAiB,IAAI,cAAC,YAAD,EAAmBD,KAAnB,CAFxB,CADD;AAMA,CAboD,EAcrD,qBAdqD,CAAtD;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASG,aAAT,CAAwBC,KAAxB,EAA+BhC,QAA/B,EAA0C;AACzC,QAAMiC,MAAM,GAAGD,KAAK,CAACE,KAAN,CAAa,GAAb,CAAf;AACA,QAAMC,SAAS,GAAGnC,QAAQ,CAACkC,KAAT,CAAgB,GAAhB,CAAlB;AAEA,QAAME,eAAe,GAAG,EAAxB;AACAH,EAAAA,MAAM,CAACvC,OAAP,CAAkB2C,KAAF,IAAa;AAC5BF,IAAAA,SAAS,CAACzC,OAAV,CAAqB4C,KAAF,IAAa;AAC/BF,MAAAA,eAAe,CAACtC,IAAhB,CAAuB,GAAGuC,KAAK,CAACE,IAAN,EAAc,IAAID,KAAK,CAACC,IAAN,EAAc,EAA1D;AACA,KAFD;AAGA,GAJD;AAMA,SAAOH,eAAe,CAAC7B,IAAhB,CAAsB,IAAtB,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMiC,iBAAiB,GAAGhE,0BAA0B,CACjDiE,cAAF,IAAwBb,KAAF,IAAa;AAAA;;AAClC,QAAMc,cAAc,GAAGrE,eAAe,CACrCuD,KAAK,CAACE,IAD+B,EAErC,6BAFqC,CAAtC;AAIA,QAAMzC,MAAM,GAAGuC,KAAH,aAAGA,KAAH,4CAAGA,KAAK,CAAElB,UAAV,+EAAG,kBAAmBE,KAAtB,oFAAG,sBAA0BjB,KAA7B,2DAAG,uBAAiCkB,OAAhD;;AAEA,MAAK,CAAE6B,cAAF,IAAoB,CAAErD,MAA3B,EAAoC;AACnC,WAAO,cAAC,cAAD,EAAqBuC,KAArB,CAAP;AACA;;AAED,QAAM3B,EAAE,GAAI,cAAcxB,aAAa,CAAEgE,cAAF,CAAoB,EAA3D,CAXkC,CAalC;AACA;AACA;;AACA,QAAME,cAAc,GAAGZ,aAAa,CAClC,2BAA2B9B,EAAI,EADG,EAEnCyC,cAFmC,CAApC;AAKA,QAAME,SAAS,GAAG3E,UAAU,CAAE2D,KAAF,aAAEA,KAAF,uBAAEA,KAAK,CAAEgB,SAAT,EAAoB3C,EAApB,CAA5B;AAEA,QAAM4C,OAAO,GAAGlE,UAAU,CAAEM,SAAS,CAAC6D,wBAAZ,CAA1B;AAEA,SACC,8BACGD,OAAO,IACRjE,YAAY,CACX,cAAC,aAAD;AACC,IAAA,QAAQ,EAAG+D,cADZ;AAEC,IAAA,EAAE,EAAG1C,EAFN;AAGC,IAAA,MAAM,EAAGd,mBAAmB,CAAEE,MAAF;AAH7B,IADW,EAMXwD,OANW,CAFd,EAUC,cAAC,cAAD,eAAqBjB,KAArB;AAA6B,IAAA,SAAS,EAAGgB;AAAzC,KAVD,CADD;AAcA,CAxCkD,EAyCnD,mBAzCmD,CAApD;AA4CAlE,SAAS,CACR,0BADQ,EAER,oCAFQ,EAGR2C,oBAHQ,CAAT;AAKA3C,SAAS,CACR,kBADQ,EAER,0CAFQ,EAGRgD,mBAHQ,CAAT;AAKAhD,SAAS,CACR,uBADQ,EAER,iCAFQ,EAGR8D,iBAHQ,CAAT","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { SVG } from '@wordpress/components';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport BlockList from '../components/block-list';\n\nconst EMPTY_ARRAY = [];\n\nextend( [ namesPlugin ] );\n\n/**\n * Convert a list of colors to an object of R, G, and B values.\n *\n * @param {string[]} colors Array of RBG color strings.\n *\n * @return {Object} R, G, and B values.\n */\nexport function getValuesFromColors( colors = [] ) {\n\tconst values = { r: [], g: [], b: [], a: [] };\n\n\tcolors.forEach( ( color ) => {\n\t\tconst rgbColor = colord( color ).toRgb();\n\t\tvalues.r.push( rgbColor.r / 255 );\n\t\tvalues.g.push( rgbColor.g / 255 );\n\t\tvalues.b.push( rgbColor.b / 255 );\n\t\tvalues.a.push( rgbColor.a );\n\t} );\n\n\treturn values;\n}\n\n/**\n * Values for the SVG `feComponentTransfer`.\n *\n * @typedef Values {Object}\n * @property {number[]} r Red values.\n * @property {number[]} g Green values.\n * @property {number[]} b Blue values.\n * @property {number[]} a Alpha values.\n */\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {Values} props.values R, G, B, and A values to filter with.\n *\n * @return {WPElement} Duotone element.\n */\nfunction DuotoneFilter( { selector, id, values } ) {\n\tconst stylesheet = `\n${ selector } {\n\tfilter: url( #${ id } );\n}\n`;\n\n\treturn (\n\t\t<>\n\t\t\t<SVG\n\t\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\tviewBox=\"0 0 0 0\"\n\t\t\t\twidth=\"0\"\n\t\t\t\theight=\"0\"\n\t\t\t\tfocusable=\"false\"\n\t\t\t\trole=\"none\"\n\t\t\t\tstyle={ {\n\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tleft: '-9999px',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<filter id={ id }>\n\t\t\t\t\t\t<feColorMatrix\n\t\t\t\t\t\t\t// Use sRGB instead of linearRGB so transparency looks correct.\n\t\t\t\t\t\t\tcolorInterpolationFilters=\"sRGB\"\n\t\t\t\t\t\t\ttype=\"matrix\"\n\t\t\t\t\t\t\t// Use perceptual brightness to convert to grayscale.\n\t\t\t\t\t\t\tvalues=\"\n\t\t\t\t\t\t\t\t.299 .587 .114 0 0\n\t\t\t\t\t\t\t\t.299 .587 .114 0 0\n\t\t\t\t\t\t\t\t.299 .587 .114 0 0\n\t\t\t\t\t\t\t\t.299 .587 .114 0 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<feComponentTransfer\n\t\t\t\t\t\t\t// Use sRGB instead of linearRGB to be consistent with how CSS gradients work.\n\t\t\t\t\t\t\tcolorInterpolationFilters=\"sRGB\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<feFuncR\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.r.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncG\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.g.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncB\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.b.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncA\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.a.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</feComponentTransfer>\n\t\t\t\t\t\t<feComposite\n\t\t\t\t\t\t\t// Re-mask the image with the original transparency since the feColorMatrix above loses that information.\n\t\t\t\t\t\t\tin2=\"SourceGraphic\"\n\t\t\t\t\t\t\toperator=\"in\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</filter>\n\t\t\t\t</defs>\n\t\t\t</SVG>\n\t\t\t<style dangerouslySetInnerHTML={ { __html: stylesheet } } />\n\t\t</>\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useSetting( 'color.duotone' ) || EMPTY_ARRAY;\n\tconst colorPalette = useSetting( 'color.palette' ) || EMPTY_ARRAY;\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && <DuotonePanel { ...props } /> }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nfunction scopeSelector( scope, selector ) {\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst values = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! values ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-${ useInstanceId( BlockListBlock ) }`;\n\n\t\t// Extra .editor-styles-wrapper specificity is needed in the editor\n\t\t// since we're not using inline styles to apply the filter. We need to\n\t\t// override duotone applied by global styles and theme.json.\n\t\tconst selectorsGroup = scopeSelector(\n\t\t\t`.editor-styles-wrapper .${ id }`,\n\t\t\tduotoneSupport\n\t\t);\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<DuotoneFilter\n\t\t\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tvalues={ getValuesFromColors( values ) }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
@@ -41,10 +41,6 @@ export function FontAppearanceEdit(props) {
41
41
  const hasFontStyles = !useIsFontStyleDisabled(props);
42
42
  const hasFontWeights = !useIsFontWeightDisabled(props);
43
43
 
44
- if (!hasFontStyles && !hasFontWeights) {
45
- return null;
46
- }
47
-
48
44
  const onChange = newStyles => {
49
45
  setAttributes({
50
46
  style: cleanEmptyObject({ ...style,
@@ -82,7 +78,7 @@ export function useIsFontStyleDisabled({
82
78
  name: blockName
83
79
  } = {}) {
84
80
  const styleSupport = hasBlockSupport(blockName, FONT_STYLE_SUPPORT_KEY);
85
- const hasFontStyles = useSetting('typography.customFontStyle');
81
+ const hasFontStyles = useSetting('typography.fontStyle');
86
82
  return !styleSupport || !hasFontStyles;
87
83
  }
88
84
  /**
@@ -99,7 +95,7 @@ export function useIsFontWeightDisabled({
99
95
  name: blockName
100
96
  } = {}) {
101
97
  const weightSupport = hasBlockSupport(blockName, FONT_WEIGHT_SUPPORT_KEY);
102
- const hasFontWeights = useSetting('typography.customFontWeight');
98
+ const hasFontWeights = useSetting('typography.fontWeight');
103
99
  return !weightSupport || !hasFontWeights;
104
100
  }
105
101
  /**
@@ -115,4 +111,47 @@ export function useIsFontAppearanceDisabled(props) {
115
111
  const weightsDisabled = useIsFontWeightDisabled(props);
116
112
  return stylesDisabled && weightsDisabled;
117
113
  }
114
+ /**
115
+ * Checks if there is either a font style or weight value set within the
116
+ * typography styles.
117
+ *
118
+ * @param {Object} props Block props.
119
+ * @return {boolean} Whether or not the block has a font style or weight.
120
+ */
121
+
122
+ export function hasFontAppearanceValue(props) {
123
+ var _props$attributes$sty;
124
+
125
+ const {
126
+ fontStyle,
127
+ fontWeight
128
+ } = ((_props$attributes$sty = props.attributes.style) === null || _props$attributes$sty === void 0 ? void 0 : _props$attributes$sty.typography) || {};
129
+ return !!fontStyle || !!fontWeight;
130
+ }
131
+ /**
132
+ * Resets the font style and weight block support attributes. This can be used
133
+ * when disabling the font appearance support controls for a block via a
134
+ * progressive discovery panel.
135
+ *
136
+ * @param {Object} props Block props.
137
+ * @param {Object} props.attributes Block's attributes.
138
+ * @param {Object} props.setAttributes Function to set block's attributes.
139
+ */
140
+
141
+ export function resetFontAppearance({
142
+ attributes = {},
143
+ setAttributes
144
+ }) {
145
+ const {
146
+ style
147
+ } = attributes;
148
+ setAttributes({
149
+ style: cleanEmptyObject({ ...style,
150
+ typography: { ...(style === null || style === void 0 ? void 0 : style.typography),
151
+ fontStyle: undefined,
152
+ fontWeight: undefined
153
+ }
154
+ })
155
+ });
156
+ }
118
157
  //# sourceMappingURL=font-appearance.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/font-appearance.js"],"names":["hasBlockSupport","FontAppearanceControl","useSetting","cleanEmptyObject","FONT_STYLE_SUPPORT_KEY","FONT_WEIGHT_SUPPORT_KEY","FontAppearanceEdit","props","attributes","style","setAttributes","hasFontStyles","useIsFontStyleDisabled","hasFontWeights","useIsFontWeightDisabled","onChange","newStyles","typography","fontStyle","fontWeight","name","blockName","styleSupport","weightSupport","useIsFontAppearanceDisabled","stylesDisabled","weightsDisabled"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,eAAT,QAAgC,mBAAhC;AAEA;AACA;AACA;;AACA,OAAOC,qBAAP,MAAkC,uCAAlC;AACA,OAAOC,UAAP,MAAuB,2BAAvB;AACA,SAASC,gBAAT,QAAiC,SAAjC;AAEA;AACA;AACA;;AACA,OAAO,MAAMC,sBAAsB,GAAG,oCAA/B;AAEP;AACA;AACA;;AACA,OAAO,MAAMC,uBAAuB,GAAG,qCAAhC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,kBAAT,CAA6BC,KAA7B,EAAqC;AAAA;;AAC3C,QAAM;AACLC,IAAAA,UAAU,EAAE;AAAEC,MAAAA;AAAF,KADP;AAELC,IAAAA;AAFK,MAGFH,KAHJ;AAKA,QAAMI,aAAa,GAAG,CAAEC,sBAAsB,CAAEL,KAAF,CAA9C;AACA,QAAMM,cAAc,GAAG,CAAEC,uBAAuB,CAAEP,KAAF,CAAhD;;AAEA,MAAK,CAAEI,aAAF,IAAmB,CAAEE,cAA1B,EAA2C;AAC1C,WAAO,IAAP;AACA;;AAED,QAAME,QAAQ,GAAKC,SAAF,IAAiB;AACjCN,IAAAA,aAAa,CAAE;AACdD,MAAAA,KAAK,EAAEN,gBAAgB,CAAE,EACxB,GAAGM,KADqB;AAExBQ,QAAAA,UAAU,EAAE,EACX,IAAGR,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAEQ,UAAV,CADW;AAEXC,UAAAA,SAAS,EAAEF,SAAS,CAACE,SAFV;AAGXC,UAAAA,UAAU,EAAEH,SAAS,CAACG;AAHX;AAFY,OAAF;AADT,KAAF,CAAb;AAUA,GAXD;;AAaA,QAAMD,SAAS,GAAGT,KAAH,aAAGA,KAAH,4CAAGA,KAAK,CAAEQ,UAAV,sDAAG,kBAAmBC,SAArC;AAEA,QAAMC,UAAU,GAAGV,KAAH,aAAGA,KAAH,6CAAGA,KAAK,CAAEQ,UAAV,uDAAG,mBAAmBE,UAAtC;AAEA,SACC,cAAC,qBAAD;AACC,IAAA,QAAQ,EAAGJ,QADZ;AAEC,IAAA,aAAa,EAAGJ,aAFjB;AAGC,IAAA,cAAc,EAAGE,cAHlB;AAIC,IAAA,KAAK,EAAG;AAAEK,MAAAA,SAAF;AAAaC,MAAAA;AAAb;AAJT,IADD;AAQA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASP,sBAAT,CAAiC;AAAEQ,EAAAA,IAAI,EAAEC;AAAR,IAAsB,EAAvD,EAA4D;AAClE,QAAMC,YAAY,GAAGtB,eAAe,CAAEqB,SAAF,EAAajB,sBAAb,CAApC;AACA,QAAMO,aAAa,GAAGT,UAAU,CAAE,4BAAF,CAAhC;AAEA,SAAO,CAAEoB,YAAF,IAAkB,CAAEX,aAA3B;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASG,uBAAT,CAAkC;AAAEM,EAAAA,IAAI,EAAEC;AAAR,IAAsB,EAAxD,EAA6D;AACnE,QAAME,aAAa,GAAGvB,eAAe,CAAEqB,SAAF,EAAahB,uBAAb,CAArC;AACA,QAAMQ,cAAc,GAAGX,UAAU,CAAE,6BAAF,CAAjC;AAEA,SAAO,CAAEqB,aAAF,IAAmB,CAAEV,cAA5B;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASW,2BAAT,CAAsCjB,KAAtC,EAA8C;AACpD,QAAMkB,cAAc,GAAGb,sBAAsB,CAAEL,KAAF,CAA7C;AACA,QAAMmB,eAAe,GAAGZ,uBAAuB,CAAEP,KAAF,CAA/C;AAEA,SAAOkB,cAAc,IAAIC,eAAzB;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport FontAppearanceControl from '../components/font-appearance-control';\nimport useSetting from '../components/use-setting';\nimport { cleanEmptyObject } from './utils';\n\n/**\n * Key within block settings' support array indicating support for font style.\n */\nexport const FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\n\n/**\n * Key within block settings' support array indicating support for font weight.\n */\nexport const FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\n\n/**\n * Inspector control panel containing the font appearance options.\n *\n * @param {Object} props Block properties.\n *\n * @return {WPElement} Font appearance edit element.\n */\nexport function FontAppearanceEdit( props ) {\n\tconst {\n\t\tattributes: { style },\n\t\tsetAttributes,\n\t} = props;\n\n\tconst hasFontStyles = ! useIsFontStyleDisabled( props );\n\tconst hasFontWeights = ! useIsFontWeightDisabled( props );\n\n\tif ( ! hasFontStyles && ! hasFontWeights ) {\n\t\treturn null;\n\t}\n\n\tconst onChange = ( newStyles ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\ttypography: {\n\t\t\t\t\t...style?.typography,\n\t\t\t\t\tfontStyle: newStyles.fontStyle,\n\t\t\t\t\tfontWeight: newStyles.fontWeight,\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\tconst fontStyle = style?.typography?.fontStyle;\n\n\tconst fontWeight = style?.typography?.fontWeight;\n\n\treturn (\n\t\t<FontAppearanceControl\n\t\t\tonChange={ onChange }\n\t\t\thasFontStyles={ hasFontStyles }\n\t\t\thasFontWeights={ hasFontWeights }\n\t\t\tvalue={ { fontStyle, fontWeight } }\n\t\t/>\n\t);\n}\n\n/**\n * Checks if font style support has been disabled either by not opting in for\n * support or by failing to provide preset styles.\n *\n * @param {Object} props Block properties.\n * @param {string} props.name Name for the block type.\n *\n * @return {boolean} Whether font style support has been disabled.\n */\nexport function useIsFontStyleDisabled( { name: blockName } = {} ) {\n\tconst styleSupport = hasBlockSupport( blockName, FONT_STYLE_SUPPORT_KEY );\n\tconst hasFontStyles = useSetting( 'typography.customFontStyle' );\n\n\treturn ! styleSupport || ! hasFontStyles;\n}\n\n/**\n * Checks if font weight support has been disabled either by not opting in for\n * support or by failing to provide preset weights.\n *\n * @param {Object} props Block properties.\n * @param {string} props.name Name for the block type.\n *\n * @return {boolean} Whether font weight support has been disabled.\n */\nexport function useIsFontWeightDisabled( { name: blockName } = {} ) {\n\tconst weightSupport = hasBlockSupport( blockName, FONT_WEIGHT_SUPPORT_KEY );\n\tconst hasFontWeights = useSetting( 'typography.customFontWeight' );\n\n\treturn ! weightSupport || ! hasFontWeights;\n}\n\n/**\n * Checks if font appearance support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} Whether font appearance support has been disabled.\n */\nexport function useIsFontAppearanceDisabled( props ) {\n\tconst stylesDisabled = useIsFontStyleDisabled( props );\n\tconst weightsDisabled = useIsFontWeightDisabled( props );\n\n\treturn stylesDisabled && weightsDisabled;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/font-appearance.js"],"names":["hasBlockSupport","FontAppearanceControl","useSetting","cleanEmptyObject","FONT_STYLE_SUPPORT_KEY","FONT_WEIGHT_SUPPORT_KEY","FontAppearanceEdit","props","attributes","style","setAttributes","hasFontStyles","useIsFontStyleDisabled","hasFontWeights","useIsFontWeightDisabled","onChange","newStyles","typography","fontStyle","fontWeight","name","blockName","styleSupport","weightSupport","useIsFontAppearanceDisabled","stylesDisabled","weightsDisabled","hasFontAppearanceValue","resetFontAppearance","undefined"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport FontAppearanceControl from '../components/font-appearance-control';\nimport useSetting from '../components/use-setting';\nimport { cleanEmptyObject } from './utils';\n\n/**\n * Key within block settings' support array indicating support for font style.\n */\nexport const FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\n\n/**\n * Key within block settings' support array indicating support for font weight.\n */\nexport const FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\n\n/**\n * Inspector control panel containing the font appearance options.\n *\n * @param {Object} props Block properties.\n *\n * @return {WPElement} Font appearance edit element.\n */\nexport function FontAppearanceEdit( props ) {\n\tconst {\n\t\tattributes: { style },\n\t\tsetAttributes,\n\t} = props;\n\n\tconst hasFontStyles = ! useIsFontStyleDisabled( props );\n\tconst hasFontWeights = ! useIsFontWeightDisabled( props );\n\n\tconst onChange = ( newStyles ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\ttypography: {\n\t\t\t\t\t...style?.typography,\n\t\t\t\t\tfontStyle: newStyles.fontStyle,\n\t\t\t\t\tfontWeight: newStyles.fontWeight,\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\tconst fontStyle = style?.typography?.fontStyle;\n\tconst fontWeight = style?.typography?.fontWeight;\n\n\treturn (\n\t\t<FontAppearanceControl\n\t\t\tonChange={ onChange }\n\t\t\thasFontStyles={ hasFontStyles }\n\t\t\thasFontWeights={ hasFontWeights }\n\t\t\tvalue={ { fontStyle, fontWeight } }\n\t\t/>\n\t);\n}\n\n/**\n * Checks if font style support has been disabled either by not opting in for\n * support or by failing to provide preset styles.\n *\n * @param {Object} props Block properties.\n * @param {string} props.name Name for the block type.\n *\n * @return {boolean} Whether font style support has been disabled.\n */\nexport function useIsFontStyleDisabled( { name: blockName } = {} ) {\n\tconst styleSupport = hasBlockSupport( blockName, FONT_STYLE_SUPPORT_KEY );\n\tconst hasFontStyles = useSetting( 'typography.fontStyle' );\n\n\treturn ! styleSupport || ! hasFontStyles;\n}\n\n/**\n * Checks if font weight support has been disabled either by not opting in for\n * support or by failing to provide preset weights.\n *\n * @param {Object} props Block properties.\n * @param {string} props.name Name for the block type.\n *\n * @return {boolean} Whether font weight support has been disabled.\n */\nexport function useIsFontWeightDisabled( { name: blockName } = {} ) {\n\tconst weightSupport = hasBlockSupport( blockName, FONT_WEIGHT_SUPPORT_KEY );\n\tconst hasFontWeights = useSetting( 'typography.fontWeight' );\n\n\treturn ! weightSupport || ! hasFontWeights;\n}\n\n/**\n * Checks if font appearance support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} Whether font appearance support has been disabled.\n */\nexport function useIsFontAppearanceDisabled( props ) {\n\tconst stylesDisabled = useIsFontStyleDisabled( props );\n\tconst weightsDisabled = useIsFontWeightDisabled( props );\n\n\treturn stylesDisabled && weightsDisabled;\n}\n\n/**\n * Checks if there is either a font style or weight value set within the\n * typography styles.\n *\n * @param {Object} props Block props.\n * @return {boolean} Whether or not the block has a font style or weight.\n */\nexport function hasFontAppearanceValue( props ) {\n\tconst { fontStyle, fontWeight } = props.attributes.style?.typography || {};\n\treturn !! fontStyle || !! fontWeight;\n}\n\n/**\n * Resets the font style and weight block support attributes. This can be used\n * when disabling the font appearance support controls for a block via a\n * progressive discovery panel.\n *\n * @param {Object} props Block props.\n * @param {Object} props.attributes Block's attributes.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetFontAppearance( { attributes = {}, setAttributes } ) {\n\tconst { style } = attributes;\n\n\tsetAttributes( {\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...style,\n\t\t\ttypography: {\n\t\t\t\t...style?.typography,\n\t\t\t\tfontStyle: undefined,\n\t\t\t\tfontWeight: undefined,\n\t\t\t},\n\t\t} ),\n\t} );\n}\n"]}