@wordpress/block-editor 7.0.2 → 8.0.1

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 (801) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +45 -1
  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-controls/fill.js +2 -2
  12. package/build/components/block-controls/fill.js.map +1 -1
  13. package/build/components/block-controls/hook.js +3 -3
  14. package/build/components/block-controls/hook.js.map +1 -1
  15. package/build/components/block-icon/index.js +5 -1
  16. package/build/components/block-icon/index.js.map +1 -1
  17. package/build/components/block-icon/index.native.js +9 -11
  18. package/build/components/block-icon/index.native.js.map +1 -1
  19. package/build/components/block-inspector/index.js +8 -0
  20. package/build/components/block-inspector/index.js.map +1 -1
  21. package/build/components/block-list/block-html.js +5 -0
  22. package/build/components/block-list/block-html.js.map +1 -1
  23. package/build/components/block-list/block.js +12 -5
  24. package/build/components/block-list/block.js.map +1 -1
  25. package/build/components/block-list/block.native.js +4 -3
  26. package/build/components/block-list/block.native.js.map +1 -1
  27. package/build/components/block-list/index.native.js +1 -1
  28. package/build/components/block-list/index.native.js.map +1 -1
  29. package/build/components/block-list/use-block-props/use-multi-selection.js +21 -8
  30. package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  31. package/build/components/block-list-appender/index.js +9 -1
  32. package/build/components/block-list-appender/index.js.map +1 -1
  33. package/build/components/block-mover/index.js +4 -4
  34. package/build/components/block-mover/index.js.map +1 -1
  35. package/build/components/block-mover/index.native.js +4 -4
  36. package/build/components/block-mover/index.native.js.map +1 -1
  37. package/build/components/block-navigation/dropdown.js +0 -1
  38. package/build/components/block-navigation/dropdown.js.map +1 -1
  39. package/build/components/block-patterns-list/index.js +1 -8
  40. package/build/components/block-patterns-list/index.js.map +1 -1
  41. package/build/components/block-preview/auto.js +1 -1
  42. package/build/components/block-preview/auto.js.map +1 -1
  43. package/build/components/block-settings/container.native.js +5 -2
  44. package/build/components/block-settings/container.native.js.map +1 -1
  45. package/build/components/block-settings-menu/block-settings-dropdown.js +26 -5
  46. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  47. package/build/components/block-settings-menu-controls/index.js +10 -3
  48. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  49. package/build/components/block-styles/preview.native.js +2 -2
  50. package/build/components/block-styles/preview.native.js.map +1 -1
  51. package/build/components/block-switcher/block-styles-menu.js +1 -1
  52. package/build/components/block-switcher/block-styles-menu.js.map +1 -1
  53. package/build/components/block-switcher/index.js +10 -3
  54. package/build/components/block-switcher/index.js.map +1 -1
  55. package/build/components/block-title/index.js +3 -2
  56. package/build/components/block-title/index.js.map +1 -1
  57. package/build/components/block-tools/block-popover.js +2 -4
  58. package/build/components/block-tools/block-popover.js.map +1 -1
  59. package/build/components/block-tools/index.js +4 -1
  60. package/build/components/block-tools/index.js.map +1 -1
  61. package/build/components/block-tools/insertion-point.js +96 -7
  62. package/build/components/block-tools/insertion-point.js.map +1 -1
  63. package/build/components/border-radius-control/index.js.map +1 -1
  64. package/build/components/border-radius-control/utils.js +17 -8
  65. package/build/components/border-radius-control/utils.js.map +1 -1
  66. package/build/components/colors/utils.js +11 -3
  67. package/build/components/colors/utils.js.map +1 -1
  68. package/build/components/colors-gradients/control.js +22 -57
  69. package/build/components/colors-gradients/control.js.map +1 -1
  70. package/build/components/colors-gradients/panel-color-gradient-settings.js +83 -7
  71. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  72. package/build/components/contrast-checker/index.js +18 -12
  73. package/build/components/contrast-checker/index.js.map +1 -1
  74. package/build/components/copy-handler/index.js +9 -3
  75. package/build/components/copy-handler/index.js.map +1 -1
  76. package/build/components/default-block-appender/index.js +2 -2
  77. package/build/components/default-block-appender/index.js.map +1 -1
  78. package/build/components/duotone-control/index.js +41 -39
  79. package/build/components/duotone-control/index.js.map +1 -1
  80. package/build/components/editor-styles/index.js +9 -3
  81. package/build/components/editor-styles/index.js.map +1 -1
  82. package/build/components/font-appearance-control/index.js +32 -21
  83. package/build/components/font-appearance-control/index.js.map +1 -1
  84. package/build/components/iframe/index.js +6 -4
  85. package/build/components/iframe/index.js.map +1 -1
  86. package/build/components/image-editor/aspect-ratio-dropdown.js +126 -0
  87. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -0
  88. package/build/components/image-editor/constants.js +16 -0
  89. package/build/components/image-editor/constants.js.map +1 -0
  90. package/build/components/image-editor/context.js +59 -0
  91. package/build/components/image-editor/context.js.map +1 -0
  92. package/build/components/image-editor/cropper.js +83 -0
  93. package/build/components/image-editor/cropper.js.map +1 -0
  94. package/build/components/image-editor/form-controls.js +36 -0
  95. package/build/components/image-editor/form-controls.js.map +1 -0
  96. package/build/components/image-editor/index.js +60 -0
  97. package/build/components/image-editor/index.js.map +1 -0
  98. package/build/components/image-editor/rotation-button.js +37 -0
  99. package/build/components/image-editor/rotation-button.js.map +1 -0
  100. package/build/components/image-editor/use-save-image.js +84 -0
  101. package/build/components/image-editor/use-save-image.js.map +1 -0
  102. package/build/components/image-editor/use-transform-image.js +135 -0
  103. package/build/components/image-editor/use-transform-image.js.map +1 -0
  104. package/build/components/image-editor/zoom-dropdown.js +55 -0
  105. package/build/components/image-editor/zoom-dropdown.js.map +1 -0
  106. package/build/components/image-size-control/use-dimension-handler.js +14 -3
  107. package/build/components/image-size-control/use-dimension-handler.js.map +1 -1
  108. package/build/components/index.js +36 -20
  109. package/build/components/index.js.map +1 -1
  110. package/build/components/index.native.js +2 -2
  111. package/build/components/index.native.js.map +1 -1
  112. package/build/components/inner-blocks/button-block-appender.js +11 -1
  113. package/build/components/inner-blocks/button-block-appender.js.map +1 -1
  114. package/build/components/inner-blocks/index.js +8 -5
  115. package/build/components/inner-blocks/index.js.map +1 -1
  116. package/build/components/inner-blocks/index.native.js +4 -3
  117. package/build/components/inner-blocks/index.native.js.map +1 -1
  118. package/build/components/inner-blocks/use-nested-settings-update.js +24 -13
  119. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  120. package/build/components/inserter/block-patterns-explorer/explorer.js +62 -0
  121. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  122. package/build/components/inserter/block-patterns-explorer/patterns-list.js +111 -0
  123. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  124. package/build/components/inserter/block-patterns-explorer/sidebar.js +78 -0
  125. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  126. package/build/components/inserter/block-patterns-tab.js +74 -35
  127. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  128. package/build/components/inserter/block-types-tab.native.js +3 -11
  129. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  130. package/build/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  131. package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  132. package/build/components/inserter/hooks/use-clipboard-block.native.js +5 -4
  133. package/build/components/inserter/hooks/use-clipboard-block.native.js.map +1 -1
  134. package/build/components/inserter/index.js +12 -4
  135. package/build/components/inserter/index.js.map +1 -1
  136. package/build/components/inserter/index.native.js +1 -7
  137. package/build/components/inserter/index.native.js.map +1 -1
  138. package/build/components/inserter/library.js +2 -0
  139. package/build/components/inserter/library.js.map +1 -1
  140. package/build/components/inserter/menu.js +2 -1
  141. package/build/components/inserter/menu.js.map +1 -1
  142. package/build/components/inserter/menu.native.js +11 -15
  143. package/build/components/inserter/menu.native.js.map +1 -1
  144. package/build/components/inserter/pattern-panel.js +19 -10
  145. package/build/components/inserter/pattern-panel.js.map +1 -1
  146. package/build/components/inserter/preview-panel.js +1 -1
  147. package/build/components/inserter/preview-panel.js.map +1 -1
  148. package/build/components/inserter/quick-inserter.js +2 -1
  149. package/build/components/inserter/quick-inserter.js.map +1 -1
  150. package/build/components/inserter/reusable-blocks-tab.native.js +5 -6
  151. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  152. package/build/components/inserter/search-results.native.js +6 -11
  153. package/build/components/inserter/search-results.native.js.map +1 -1
  154. package/build/components/inserter/utils.native.js +44 -0
  155. package/build/components/inserter/utils.native.js.map +1 -0
  156. package/build/components/inspector-controls/block-support-slot-container.js +28 -0
  157. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -0
  158. package/build/components/inspector-controls/block-support-tools-panel.js +78 -0
  159. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -0
  160. package/build/components/inspector-controls/fill.js +16 -1
  161. package/build/components/inspector-controls/fill.js.map +1 -1
  162. package/build/components/inspector-controls/groups.js +5 -1
  163. package/build/components/inspector-controls/groups.js.map +1 -1
  164. package/build/components/inspector-controls/slot.js +15 -0
  165. package/build/components/inspector-controls/slot.js.map +1 -1
  166. package/build/components/letter-spacing-control/index.js +9 -6
  167. package/build/components/letter-spacing-control/index.js.map +1 -1
  168. package/build/components/link-control/index.js +93 -34
  169. package/build/components/link-control/index.js.map +1 -1
  170. package/build/components/link-control/link-preview.js +45 -15
  171. package/build/components/link-control/link-preview.js.map +1 -1
  172. package/build/components/link-control/search-input.js +25 -7
  173. package/build/components/link-control/search-input.js.map +1 -1
  174. package/build/components/list-view/block-contents.js +1 -20
  175. package/build/components/list-view/block-contents.js.map +1 -1
  176. package/build/components/list-view/block.js +54 -69
  177. package/build/components/list-view/block.js.map +1 -1
  178. package/build/components/list-view/branch.js +102 -76
  179. package/build/components/list-view/branch.js.map +1 -1
  180. package/build/components/list-view/index.js +45 -20
  181. package/build/components/list-view/index.js.map +1 -1
  182. package/build/components/list-view/leaf.js +2 -2
  183. package/build/components/list-view/leaf.js.map +1 -1
  184. package/build/components/list-view/list-item.js +3 -2
  185. package/build/components/list-view/list-item.js.map +1 -1
  186. package/build/components/list-view/use-list-view-client-ids.js +13 -54
  187. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  188. package/build/components/media-placeholder/index.js +29 -20
  189. package/build/components/media-placeholder/index.js.map +1 -1
  190. package/build/components/media-replace-flow/index.js +5 -3
  191. package/build/components/media-replace-flow/index.js.map +1 -1
  192. package/build/components/navigable-toolbar/index.js +1 -4
  193. package/build/components/navigable-toolbar/index.js.map +1 -1
  194. package/build/components/observe-typing/index.js +1 -1
  195. package/build/components/observe-typing/index.js.map +1 -1
  196. package/build/components/plain-text/index.native.js +30 -1
  197. package/build/components/plain-text/index.native.js.map +1 -1
  198. package/build/components/rich-text/embed-handler-picker.native.js +66 -0
  199. package/build/components/rich-text/embed-handler-picker.native.js.map +1 -0
  200. package/build/components/rich-text/format-edit.js +28 -2
  201. package/build/components/rich-text/format-edit.js.map +1 -1
  202. package/build/components/rich-text/format-toolbar/index.js +32 -11
  203. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  204. package/build/components/rich-text/index.js +5 -1
  205. package/build/components/rich-text/index.js.map +1 -1
  206. package/build/components/rich-text/index.native.js +41 -2
  207. package/build/components/rich-text/index.native.js.map +1 -1
  208. package/build/components/rich-text/use-paste-handler.js +28 -9
  209. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  210. package/build/components/rich-text/utils.js +22 -0
  211. package/build/components/rich-text/utils.js.map +1 -1
  212. package/build/components/typewriter/index.js +1 -1
  213. package/build/components/typewriter/index.js.map +1 -1
  214. package/build/components/url-input/index.js +25 -11
  215. package/build/components/url-input/index.js.map +1 -1
  216. package/build/components/use-moving-animation/index.js +13 -10
  217. package/build/components/use-moving-animation/index.js.map +1 -1
  218. package/build/components/use-on-block-drop/index.js +2 -1
  219. package/build/components/use-on-block-drop/index.js.map +1 -1
  220. package/build/components/use-setting/index.js +48 -9
  221. package/build/components/use-setting/index.js.map +1 -1
  222. package/build/components/writing-flow/use-multi-selection.js +6 -0
  223. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  224. package/build/components/writing-flow/use-tab-nav.js +10 -1
  225. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  226. package/build/hooks/align.js +13 -10
  227. package/build/hooks/align.js.map +1 -1
  228. package/build/hooks/anchor.js +1 -1
  229. package/build/hooks/anchor.js.map +1 -1
  230. package/build/hooks/border.js +5 -5
  231. package/build/hooks/border.js.map +1 -1
  232. package/build/hooks/color-panel.js +5 -2
  233. package/build/hooks/color-panel.js.map +1 -1
  234. package/build/hooks/color.js +1 -1
  235. package/build/hooks/color.js.map +1 -1
  236. package/build/hooks/dimensions.js +23 -27
  237. package/build/hooks/dimensions.js.map +1 -1
  238. package/build/hooks/duotone.js +60 -16
  239. package/build/hooks/duotone.js.map +1 -1
  240. package/build/hooks/font-appearance.js +49 -6
  241. package/build/hooks/font-appearance.js.map +1 -1
  242. package/build/hooks/font-family.js +123 -32
  243. package/build/hooks/font-family.js.map +1 -1
  244. package/build/hooks/font-size.js +51 -9
  245. package/build/hooks/font-size.js.map +1 -1
  246. package/build/hooks/gap.js +2 -1
  247. package/build/hooks/gap.js.map +1 -1
  248. package/build/hooks/index.js +10 -0
  249. package/build/hooks/index.js.map +1 -1
  250. package/build/hooks/index.native.js +8 -0
  251. package/build/hooks/index.native.js.map +1 -1
  252. package/build/hooks/letter-spacing.js +44 -7
  253. package/build/hooks/letter-spacing.js.map +1 -1
  254. package/build/hooks/line-height.js +45 -8
  255. package/build/hooks/line-height.js.map +1 -1
  256. package/build/hooks/lock.js +43 -0
  257. package/build/hooks/lock.js.map +1 -0
  258. package/build/hooks/margin.js +1 -1
  259. package/build/hooks/margin.js.map +1 -1
  260. package/build/hooks/padding.js +1 -1
  261. package/build/hooks/padding.js.map +1 -1
  262. package/build/hooks/style.js +7 -4
  263. package/build/hooks/style.js.map +1 -1
  264. package/build/hooks/text-decoration.js +42 -6
  265. package/build/hooks/text-decoration.js.map +1 -1
  266. package/build/hooks/text-transform.js +42 -6
  267. package/build/hooks/text-transform.js.map +1 -1
  268. package/build/hooks/typography.js +108 -8
  269. package/build/hooks/typography.js.map +1 -1
  270. package/build/hooks/use-cached-truthy.js +29 -0
  271. package/build/hooks/use-cached-truthy.js.map +1 -0
  272. package/build/index.js +7 -0
  273. package/build/index.js.map +1 -1
  274. package/build/layouts/flex.js +160 -34
  275. package/build/layouts/flex.js.map +1 -1
  276. package/build/layouts/flow.js +75 -8
  277. package/build/layouts/flow.js.map +1 -1
  278. package/build/store/actions.js +323 -265
  279. package/build/store/actions.js.map +1 -1
  280. package/build/store/defaults.native.js +13 -1
  281. package/build/store/defaults.native.js.map +1 -1
  282. package/build/store/index.js +1 -3
  283. package/build/store/index.js.map +1 -1
  284. package/build/store/reducer.js +33 -22
  285. package/build/store/reducer.js.map +1 -1
  286. package/build/store/selectors.js +172 -38
  287. package/build/store/selectors.js.map +1 -1
  288. package/build/utils/index.js +10 -1
  289. package/build/utils/index.js.map +1 -1
  290. package/build/utils/parse-css-unit-to-px.js +51 -1
  291. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  292. package/build/utils/transform-styles/transforms/wrap.js +16 -0
  293. package/build/utils/transform-styles/transforms/wrap.js.map +1 -1
  294. package/build-module/components/autocomplete/index.js +2 -2
  295. package/build-module/components/autocomplete/index.js.map +1 -1
  296. package/build-module/components/block-actions/index.js +8 -4
  297. package/build-module/components/block-actions/index.js.map +1 -1
  298. package/build-module/components/block-alignment-control/ui.js +64 -17
  299. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  300. package/build-module/components/block-alignment-control/use-available-alignments.js +25 -3
  301. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  302. package/build-module/components/block-controls/fill.js +2 -2
  303. package/build-module/components/block-controls/fill.js.map +1 -1
  304. package/build-module/components/block-controls/hook.js +3 -3
  305. package/build-module/components/block-controls/hook.js.map +1 -1
  306. package/build-module/components/block-icon/index.js +5 -1
  307. package/build-module/components/block-icon/index.js.map +1 -1
  308. package/build-module/components/block-icon/index.native.js +10 -11
  309. package/build-module/components/block-icon/index.native.js.map +1 -1
  310. package/build-module/components/block-inspector/index.js +8 -0
  311. package/build-module/components/block-inspector/index.js.map +1 -1
  312. package/build-module/components/block-list/block-html.js +5 -0
  313. package/build-module/components/block-list/block-html.js.map +1 -1
  314. package/build-module/components/block-list/block.js +12 -5
  315. package/build-module/components/block-list/block.js.map +1 -1
  316. package/build-module/components/block-list/block.native.js +4 -3
  317. package/build-module/components/block-list/block.native.js.map +1 -1
  318. package/build-module/components/block-list/index.native.js +1 -1
  319. package/build-module/components/block-list/index.native.js.map +1 -1
  320. package/build-module/components/block-list/use-block-props/use-multi-selection.js +21 -8
  321. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  322. package/build-module/components/block-list-appender/index.js +9 -1
  323. package/build-module/components/block-list-appender/index.js.map +1 -1
  324. package/build-module/components/block-mover/index.js +4 -4
  325. package/build-module/components/block-mover/index.js.map +1 -1
  326. package/build-module/components/block-mover/index.native.js +4 -4
  327. package/build-module/components/block-mover/index.native.js.map +1 -1
  328. package/build-module/components/block-navigation/dropdown.js +0 -1
  329. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  330. package/build-module/components/block-patterns-list/index.js +1 -6
  331. package/build-module/components/block-patterns-list/index.js.map +1 -1
  332. package/build-module/components/block-preview/auto.js +1 -1
  333. package/build-module/components/block-preview/auto.js.map +1 -1
  334. package/build-module/components/block-settings/container.native.js +6 -3
  335. package/build-module/components/block-settings/container.native.js.map +1 -1
  336. package/build-module/components/block-settings-menu/block-settings-dropdown.js +28 -7
  337. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  338. package/build-module/components/block-settings-menu-controls/index.js +10 -3
  339. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  340. package/build-module/components/block-styles/preview.native.js +2 -2
  341. package/build-module/components/block-styles/preview.native.js.map +1 -1
  342. package/build-module/components/block-switcher/block-styles-menu.js +1 -1
  343. package/build-module/components/block-switcher/block-styles-menu.js.map +1 -1
  344. package/build-module/components/block-switcher/index.js +10 -3
  345. package/build-module/components/block-switcher/index.js.map +1 -1
  346. package/build-module/components/block-title/index.js +3 -2
  347. package/build-module/components/block-title/index.js.map +1 -1
  348. package/build-module/components/block-tools/block-popover.js +3 -5
  349. package/build-module/components/block-tools/block-popover.js.map +1 -1
  350. package/build-module/components/block-tools/index.js +4 -1
  351. package/build-module/components/block-tools/index.js.map +1 -1
  352. package/build-module/components/block-tools/insertion-point.js +96 -8
  353. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  354. package/build-module/components/border-radius-control/index.js.map +1 -1
  355. package/build-module/components/border-radius-control/utils.js +16 -9
  356. package/build-module/components/border-radius-control/utils.js.map +1 -1
  357. package/build-module/components/colors/utils.js +9 -3
  358. package/build-module/components/colors/utils.js.map +1 -1
  359. package/build-module/components/colors-gradients/control.js +26 -63
  360. package/build-module/components/colors-gradients/control.js.map +1 -1
  361. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +84 -7
  362. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  363. package/build-module/components/contrast-checker/index.js +13 -10
  364. package/build-module/components/contrast-checker/index.js.map +1 -1
  365. package/build-module/components/copy-handler/index.js +9 -3
  366. package/build-module/components/copy-handler/index.js.map +1 -1
  367. package/build-module/components/default-block-appender/index.js +2 -2
  368. package/build-module/components/default-block-appender/index.js.map +1 -1
  369. package/build-module/components/duotone-control/index.js +43 -39
  370. package/build-module/components/duotone-control/index.js.map +1 -1
  371. package/build-module/components/editor-styles/index.js +7 -3
  372. package/build-module/components/editor-styles/index.js.map +1 -1
  373. package/build-module/components/font-appearance-control/index.js +28 -21
  374. package/build-module/components/font-appearance-control/index.js.map +1 -1
  375. package/build-module/components/iframe/index.js +6 -4
  376. package/build-module/components/iframe/index.js.map +1 -1
  377. package/build-module/components/image-editor/aspect-ratio-dropdown.js +115 -0
  378. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -0
  379. package/build-module/components/image-editor/constants.js +7 -0
  380. package/build-module/components/image-editor/constants.js.map +1 -0
  381. package/build-module/components/image-editor/context.js +44 -0
  382. package/build-module/components/image-editor/context.js.map +1 -0
  383. package/build-module/components/image-editor/cropper.js +69 -0
  384. package/build-module/components/image-editor/cropper.js.map +1 -0
  385. package/build-module/components/image-editor/form-controls.js +26 -0
  386. package/build-module/components/image-editor/form-controls.js.map +1 -0
  387. package/build-module/components/image-editor/index.js +37 -0
  388. package/build-module/components/image-editor/index.js.map +1 -0
  389. package/build-module/components/image-editor/rotation-button.js +26 -0
  390. package/build-module/components/image-editor/rotation-button.js.map +1 -0
  391. package/build-module/components/image-editor/use-save-image.js +70 -0
  392. package/build-module/components/image-editor/use-save-image.js.map +1 -0
  393. package/build-module/components/image-editor/use-transform-image.js +127 -0
  394. package/build-module/components/image-editor/use-transform-image.js.map +1 -0
  395. package/build-module/components/image-editor/zoom-dropdown.js +43 -0
  396. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -0
  397. package/build-module/components/image-size-control/use-dimension-handler.js +13 -2
  398. package/build-module/components/image-size-control/use-dimension-handler.js.map +1 -1
  399. package/build-module/components/index.js +4 -3
  400. package/build-module/components/index.js.map +1 -1
  401. package/build-module/components/index.native.js +1 -1
  402. package/build-module/components/index.native.js.map +1 -1
  403. package/build-module/components/inner-blocks/button-block-appender.js +10 -1
  404. package/build-module/components/inner-blocks/button-block-appender.js.map +1 -1
  405. package/build-module/components/inner-blocks/index.js +9 -6
  406. package/build-module/components/inner-blocks/index.js.map +1 -1
  407. package/build-module/components/inner-blocks/index.native.js +5 -4
  408. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  409. package/build-module/components/inner-blocks/use-nested-settings-update.js +24 -13
  410. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  411. package/build-module/components/inserter/block-patterns-explorer/explorer.js +50 -0
  412. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  413. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +92 -0
  414. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  415. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +69 -0
  416. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  417. package/build-module/components/inserter/block-patterns-tab.js +75 -36
  418. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  419. package/build-module/components/inserter/block-types-tab.native.js +2 -10
  420. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  421. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  422. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  423. package/build-module/components/inserter/hooks/use-clipboard-block.native.js +5 -4
  424. package/build-module/components/inserter/hooks/use-clipboard-block.native.js.map +1 -1
  425. package/build-module/components/inserter/index.js +12 -4
  426. package/build-module/components/inserter/index.js.map +1 -1
  427. package/build-module/components/inserter/index.native.js +1 -7
  428. package/build-module/components/inserter/index.native.js.map +1 -1
  429. package/build-module/components/inserter/library.js +2 -0
  430. package/build-module/components/inserter/library.js.map +1 -1
  431. package/build-module/components/inserter/menu.js +2 -1
  432. package/build-module/components/inserter/menu.js.map +1 -1
  433. package/build-module/components/inserter/menu.native.js +10 -15
  434. package/build-module/components/inserter/menu.native.js.map +1 -1
  435. package/build-module/components/inserter/pattern-panel.js +21 -13
  436. package/build-module/components/inserter/pattern-panel.js.map +1 -1
  437. package/build-module/components/inserter/preview-panel.js +1 -1
  438. package/build-module/components/inserter/preview-panel.js.map +1 -1
  439. package/build-module/components/inserter/quick-inserter.js +2 -1
  440. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  441. package/build-module/components/inserter/reusable-blocks-tab.native.js +4 -5
  442. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  443. package/build-module/components/inserter/search-results.native.js +5 -10
  444. package/build-module/components/inserter/search-results.native.js.map +1 -1
  445. package/build-module/components/inserter/utils.native.js +35 -0
  446. package/build-module/components/inserter/utils.native.js.map +1 -0
  447. package/build-module/components/inspector-controls/block-support-slot-container.js +18 -0
  448. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -0
  449. package/build-module/components/inspector-controls/block-support-tools-panel.js +67 -0
  450. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -0
  451. package/build-module/components/inspector-controls/fill.js +16 -2
  452. package/build-module/components/inspector-controls/fill.js.map +1 -1
  453. package/build-module/components/inspector-controls/groups.js +5 -1
  454. package/build-module/components/inspector-controls/groups.js.map +1 -1
  455. package/build-module/components/inspector-controls/slot.js +13 -0
  456. package/build-module/components/inspector-controls/slot.js.map +1 -1
  457. package/build-module/components/letter-spacing-control/index.js +9 -6
  458. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  459. package/build-module/components/link-control/index.js +93 -35
  460. package/build-module/components/link-control/index.js.map +1 -1
  461. package/build-module/components/link-control/link-preview.js +46 -17
  462. package/build-module/components/link-control/link-preview.js.map +1 -1
  463. package/build-module/components/link-control/search-input.js +24 -7
  464. package/build-module/components/link-control/search-input.js.map +1 -1
  465. package/build-module/components/list-view/block-contents.js +1 -18
  466. package/build-module/components/list-view/block-contents.js.map +1 -1
  467. package/build-module/components/list-view/block.js +56 -71
  468. package/build-module/components/list-view/block.js.map +1 -1
  469. package/build-module/components/list-view/branch.js +102 -78
  470. package/build-module/components/list-view/branch.js.map +1 -1
  471. package/build-module/components/list-view/index.js +48 -23
  472. package/build-module/components/list-view/index.js.map +1 -1
  473. package/build-module/components/list-view/leaf.js +2 -2
  474. package/build-module/components/list-view/leaf.js.map +1 -1
  475. package/build-module/components/list-view/list-item.js +3 -2
  476. package/build-module/components/list-view/list-item.js.map +1 -1
  477. package/build-module/components/list-view/use-list-view-client-ids.js +13 -54
  478. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  479. package/build-module/components/media-placeholder/index.js +29 -20
  480. package/build-module/components/media-placeholder/index.js.map +1 -1
  481. package/build-module/components/media-replace-flow/index.js +5 -3
  482. package/build-module/components/media-replace-flow/index.js.map +1 -1
  483. package/build-module/components/navigable-toolbar/index.js +1 -4
  484. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  485. package/build-module/components/observe-typing/index.js +1 -1
  486. package/build-module/components/observe-typing/index.js.map +1 -1
  487. package/build-module/components/plain-text/index.native.js +29 -2
  488. package/build-module/components/plain-text/index.native.js.map +1 -1
  489. package/build-module/components/rich-text/embed-handler-picker.native.js +54 -0
  490. package/build-module/components/rich-text/embed-handler-picker.native.js.map +1 -0
  491. package/build-module/components/rich-text/format-edit.js +28 -3
  492. package/build-module/components/rich-text/format-edit.js.map +1 -1
  493. package/build-module/components/rich-text/format-toolbar/index.js +29 -11
  494. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  495. package/build-module/components/rich-text/index.js +4 -1
  496. package/build-module/components/rich-text/index.js.map +1 -1
  497. package/build-module/components/rich-text/index.native.js +41 -3
  498. package/build-module/components/rich-text/index.native.js.map +1 -1
  499. package/build-module/components/rich-text/use-paste-handler.js +28 -9
  500. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  501. package/build-module/components/rich-text/utils.js +20 -0
  502. package/build-module/components/rich-text/utils.js.map +1 -1
  503. package/build-module/components/typewriter/index.js +1 -1
  504. package/build-module/components/typewriter/index.js.map +1 -1
  505. package/build-module/components/url-input/index.js +25 -11
  506. package/build-module/components/url-input/index.js.map +1 -1
  507. package/build-module/components/use-moving-animation/index.js +13 -10
  508. package/build-module/components/use-moving-animation/index.js.map +1 -1
  509. package/build-module/components/use-on-block-drop/index.js +3 -2
  510. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  511. package/build-module/components/use-setting/index.js +48 -9
  512. package/build-module/components/use-setting/index.js.map +1 -1
  513. package/build-module/components/writing-flow/use-multi-selection.js +6 -0
  514. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  515. package/build-module/components/writing-flow/use-tab-nav.js +10 -1
  516. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  517. package/build-module/hooks/align.js +13 -10
  518. package/build-module/hooks/align.js.map +1 -1
  519. package/build-module/hooks/anchor.js +1 -1
  520. package/build-module/hooks/anchor.js.map +1 -1
  521. package/build-module/hooks/border.js +5 -5
  522. package/build-module/hooks/border.js.map +1 -1
  523. package/build-module/hooks/color-panel.js +6 -3
  524. package/build-module/hooks/color-panel.js.map +1 -1
  525. package/build-module/hooks/color.js +1 -1
  526. package/build-module/hooks/color.js.map +1 -1
  527. package/build-module/hooks/dimensions.js +24 -27
  528. package/build-module/hooks/dimensions.js.map +1 -1
  529. package/build-module/hooks/duotone.js +59 -16
  530. package/build-module/hooks/duotone.js.map +1 -1
  531. package/build-module/hooks/font-appearance.js +45 -6
  532. package/build-module/hooks/font-appearance.js.map +1 -1
  533. package/build-module/hooks/font-family.js +117 -33
  534. package/build-module/hooks/font-family.js.map +1 -1
  535. package/build-module/hooks/font-size.js +47 -9
  536. package/build-module/hooks/font-size.js.map +1 -1
  537. package/build-module/hooks/gap.js +2 -1
  538. package/build-module/hooks/gap.js.map +1 -1
  539. package/build-module/hooks/index.js +2 -0
  540. package/build-module/hooks/index.js.map +1 -1
  541. package/build-module/hooks/index.native.js +1 -0
  542. package/build-module/hooks/index.native.js.map +1 -1
  543. package/build-module/hooks/letter-spacing.js +40 -7
  544. package/build-module/hooks/letter-spacing.js.map +1 -1
  545. package/build-module/hooks/line-height.js +41 -8
  546. package/build-module/hooks/line-height.js.map +1 -1
  547. package/build-module/hooks/lock.js +33 -0
  548. package/build-module/hooks/lock.js.map +1 -0
  549. package/build-module/hooks/margin.js +1 -1
  550. package/build-module/hooks/margin.js.map +1 -1
  551. package/build-module/hooks/padding.js +1 -1
  552. package/build-module/hooks/padding.js.map +1 -1
  553. package/build-module/hooks/style.js +7 -4
  554. package/build-module/hooks/style.js.map +1 -1
  555. package/build-module/hooks/text-decoration.js +38 -6
  556. package/build-module/hooks/text-decoration.js.map +1 -1
  557. package/build-module/hooks/text-transform.js +38 -6
  558. package/build-module/hooks/text-transform.js.map +1 -1
  559. package/build-module/hooks/typography.js +117 -17
  560. package/build-module/hooks/typography.js.map +1 -1
  561. package/build-module/hooks/use-cached-truthy.js +21 -0
  562. package/build-module/hooks/use-cached-truthy.js.map +1 -0
  563. package/build-module/index.js +1 -1
  564. package/build-module/index.js.map +1 -1
  565. package/build-module/layouts/flex.js +163 -38
  566. package/build-module/layouts/flex.js.map +1 -1
  567. package/build-module/layouts/flow.js +74 -8
  568. package/build-module/layouts/flow.js.map +1 -1
  569. package/build-module/store/actions.js +286 -241
  570. package/build-module/store/actions.js.map +1 -1
  571. package/build-module/store/defaults.native.js +12 -1
  572. package/build-module/store/defaults.native.js.map +1 -1
  573. package/build-module/store/index.js +1 -2
  574. package/build-module/store/index.js.map +1 -1
  575. package/build-module/store/reducer.js +33 -22
  576. package/build-module/store/reducer.js.map +1 -1
  577. package/build-module/store/selectors.js +160 -34
  578. package/build-module/store/selectors.js.map +1 -1
  579. package/build-module/utils/index.js +1 -0
  580. package/build-module/utils/index.js.map +1 -1
  581. package/build-module/utils/parse-css-unit-to-px.js +48 -1
  582. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  583. package/build-module/utils/transform-styles/transforms/wrap.js +16 -0
  584. package/build-module/utils/transform-styles/transforms/wrap.js.map +1 -1
  585. package/build-style/style-rtl.css +267 -144
  586. package/build-style/style.css +267 -144
  587. package/package.json +28 -27
  588. package/src/components/autocomplete/index.js +5 -2
  589. package/src/components/block-actions/index.js +9 -5
  590. package/src/components/block-alignment-control/style.scss +5 -0
  591. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +15 -1
  592. package/src/components/block-alignment-control/test/index.native.js +37 -0
  593. package/src/components/block-alignment-control/ui.js +98 -27
  594. package/src/components/block-alignment-control/use-available-alignments.js +31 -10
  595. package/src/components/block-controls/fill.js +5 -2
  596. package/src/components/block-controls/hook.js +3 -3
  597. package/src/components/block-draggable/style.scss +19 -4
  598. package/src/components/block-icon/index.js +4 -1
  599. package/src/components/block-icon/index.native.js +10 -16
  600. package/src/components/block-inspector/index.js +10 -0
  601. package/src/components/block-list/block-html.js +5 -0
  602. package/src/components/block-list/block.js +11 -3
  603. package/src/components/block-list/block.native.js +5 -3
  604. package/src/components/block-list/index.native.js +1 -1
  605. package/src/components/block-list/style.scss +15 -0
  606. package/src/components/block-list/use-block-props/use-multi-selection.js +27 -7
  607. package/src/components/block-list-appender/index.js +8 -0
  608. package/src/components/block-mover/index.js +4 -4
  609. package/src/components/block-mover/index.native.js +4 -4
  610. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +10 -6
  611. package/src/components/block-mover/test/index.native.js +26 -28
  612. package/src/components/block-navigation/dropdown.js +0 -1
  613. package/src/components/block-patterns-list/index.js +1 -8
  614. package/src/components/block-patterns-list/style.scss +22 -12
  615. package/src/components/block-preview/README.md +1 -1
  616. package/src/components/block-preview/auto.js +1 -1
  617. package/src/components/block-preview/style.scss +0 -17
  618. package/src/components/block-settings/container.native.js +7 -0
  619. package/src/components/block-settings-menu/block-settings-dropdown.js +26 -13
  620. package/src/components/block-settings-menu-controls/index.js +9 -6
  621. package/src/components/block-styles/preview.native.js +2 -2
  622. package/src/components/block-switcher/block-styles-menu.js +1 -1
  623. package/src/components/block-switcher/index.js +7 -3
  624. package/src/components/block-switcher/test/__snapshots__/index.js.snap +1 -1
  625. package/src/components/block-switcher/test/index.js +3 -0
  626. package/src/components/block-title/index.js +5 -2
  627. package/src/components/block-tools/block-popover.js +3 -5
  628. package/src/components/block-tools/index.js +5 -2
  629. package/src/components/block-tools/insertion-point.js +97 -9
  630. package/src/components/block-tools/style.scss +4 -35
  631. package/src/components/block-types-list/style.scss +0 -3
  632. package/src/components/border-radius-control/index.js +1 -0
  633. package/src/components/border-radius-control/test/utils.js +216 -0
  634. package/src/components/border-radius-control/utils.js +18 -10
  635. package/src/components/color-palette/test/__snapshots__/control.js.snap +128 -71
  636. package/src/components/colors/test/utils.js +41 -0
  637. package/src/components/colors/utils.js +9 -5
  638. package/src/components/colors-gradients/control.js +70 -110
  639. package/src/components/colors-gradients/panel-color-gradient-settings.js +79 -7
  640. package/src/components/colors-gradients/style.scss +10 -18
  641. package/src/components/colors-gradients/test/control.js +41 -66
  642. package/src/components/contrast-checker/index.js +14 -10
  643. package/src/components/copy-handler/index.js +6 -1
  644. package/src/components/default-block-appender/index.js +2 -2
  645. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +3 -3
  646. package/src/components/duotone-control/index.js +49 -41
  647. package/src/components/duotone-control/style.scss +27 -12
  648. package/src/components/editor-styles/index.js +7 -4
  649. package/src/components/font-appearance-control/index.js +41 -33
  650. package/src/components/font-appearance-control/style.scss +1 -1
  651. package/src/components/iframe/index.js +4 -4
  652. package/src/components/image-editor/aspect-ratio-dropdown.js +129 -0
  653. package/src/components/image-editor/constants.js +6 -0
  654. package/src/components/image-editor/context.js +56 -0
  655. package/src/components/image-editor/cropper.js +74 -0
  656. package/src/components/image-editor/form-controls.js +22 -0
  657. package/src/components/image-editor/index.js +52 -0
  658. package/src/components/image-editor/rotation-button.js +24 -0
  659. package/src/components/image-editor/use-save-image.js +97 -0
  660. package/src/components/image-editor/use-transform-image.js +162 -0
  661. package/src/components/image-editor/zoom-dropdown.js +40 -0
  662. package/src/components/image-size-control/use-dimension-handler.js +18 -1
  663. package/src/components/index.js +7 -6
  664. package/src/components/index.native.js +1 -4
  665. package/src/components/inner-blocks/button-block-appender.js +9 -0
  666. package/src/components/inner-blocks/index.js +8 -4
  667. package/src/components/inner-blocks/index.native.js +7 -4
  668. package/src/components/inner-blocks/use-nested-settings-update.js +26 -11
  669. package/src/components/inserter/block-patterns-explorer/explorer.js +50 -0
  670. package/src/components/inserter/block-patterns-explorer/patterns-list.js +122 -0
  671. package/src/components/inserter/block-patterns-explorer/sidebar.js +73 -0
  672. package/src/components/inserter/block-patterns-tab.js +107 -73
  673. package/src/components/inserter/block-types-tab.native.js +3 -15
  674. package/src/components/inserter/hooks/use-block-type-impressions.native.js +14 -21
  675. package/src/components/inserter/hooks/use-clipboard-block.native.js +3 -2
  676. package/src/components/inserter/index.js +15 -3
  677. package/src/components/inserter/index.native.js +2 -19
  678. package/src/components/inserter/library.js +2 -0
  679. package/src/components/inserter/menu.js +4 -1
  680. package/src/components/inserter/menu.native.js +9 -14
  681. package/src/components/inserter/pattern-panel.js +33 -16
  682. package/src/components/inserter/preview-panel.js +1 -1
  683. package/src/components/inserter/quick-inserter.js +1 -1
  684. package/src/components/inserter/reusable-blocks-tab.native.js +4 -6
  685. package/src/components/inserter/search-results.native.js +5 -15
  686. package/src/components/inserter/style.scss +80 -16
  687. package/src/components/inserter/test/block-types-tab.native.js +1 -1
  688. package/src/components/inserter/test/fixtures/index.native.js +12 -0
  689. package/src/components/inserter/utils.native.js +35 -0
  690. package/src/components/inserter-list-item/style.scss +4 -2
  691. package/src/components/inspector-controls/block-support-slot-container.js +10 -0
  692. package/src/components/inspector-controls/block-support-tools-panel.js +60 -0
  693. package/src/components/inspector-controls/fill.js +23 -2
  694. package/src/components/inspector-controls/groups.js +8 -0
  695. package/src/components/inspector-controls/slot.js +15 -0
  696. package/src/components/letter-spacing-control/index.js +12 -6
  697. package/src/components/link-control/README.md +47 -14
  698. package/src/components/link-control/index.js +102 -31
  699. package/src/components/link-control/link-preview.js +53 -20
  700. package/src/components/link-control/search-input.js +21 -7
  701. package/src/components/link-control/style.scss +66 -19
  702. package/src/components/link-control/test/index.js +311 -4
  703. package/src/components/list-view/block-contents.js +17 -38
  704. package/src/components/list-view/block.js +73 -84
  705. package/src/components/list-view/branch.js +123 -94
  706. package/src/components/list-view/index.js +82 -30
  707. package/src/components/list-view/leaf.js +2 -2
  708. package/src/components/list-view/list-item.js +5 -4
  709. package/src/components/list-view/style.scss +70 -33
  710. package/src/components/list-view/use-list-view-client-ids.js +9 -68
  711. package/src/components/media-placeholder/index.js +26 -19
  712. package/src/components/media-replace-flow/README.md +7 -0
  713. package/src/components/media-replace-flow/index.js +4 -1
  714. package/src/components/media-upload/README.md +1 -1
  715. package/src/components/navigable-toolbar/index.js +1 -4
  716. package/src/components/observe-typing/index.js +3 -2
  717. package/src/components/plain-text/index.native.js +26 -4
  718. package/src/components/rich-text/embed-handler-picker.native.js +68 -0
  719. package/src/components/rich-text/format-edit.js +36 -2
  720. package/src/components/rich-text/format-toolbar/index.js +25 -6
  721. package/src/components/rich-text/index.js +12 -8
  722. package/src/components/rich-text/index.native.js +35 -1
  723. package/src/components/rich-text/use-paste-handler.js +30 -12
  724. package/src/components/rich-text/utils.js +16 -0
  725. package/src/components/skip-to-selected-block/README.md +39 -0
  726. package/src/components/typewriter/index.js +3 -2
  727. package/src/components/url-input/index.js +26 -10
  728. package/src/components/use-moving-animation/index.js +9 -8
  729. package/src/components/use-on-block-drop/index.js +5 -1
  730. package/src/components/use-setting/index.js +49 -11
  731. package/src/components/writing-flow/use-multi-selection.js +6 -0
  732. package/src/components/writing-flow/use-tab-nav.js +17 -3
  733. package/src/hooks/align.js +19 -10
  734. package/src/hooks/anchor.js +2 -2
  735. package/src/hooks/border.js +8 -11
  736. package/src/hooks/color-panel.js +4 -1
  737. package/src/hooks/color.js +7 -4
  738. package/src/hooks/dimensions.js +48 -59
  739. package/src/hooks/duotone.js +68 -19
  740. package/src/hooks/font-appearance.js +38 -7
  741. package/src/hooks/font-family.js +129 -33
  742. package/src/hooks/font-size.js +42 -6
  743. package/src/hooks/gap.js +2 -1
  744. package/src/hooks/index.js +2 -0
  745. package/src/hooks/index.native.js +1 -0
  746. package/src/hooks/layout.scss +8 -0
  747. package/src/hooks/letter-spacing.js +35 -7
  748. package/src/hooks/line-height.js +37 -9
  749. package/src/hooks/lock.js +34 -0
  750. package/src/hooks/margin.js +1 -1
  751. package/src/hooks/padding.js +1 -1
  752. package/src/hooks/style.js +15 -11
  753. package/src/hooks/text-decoration.js +34 -6
  754. package/src/hooks/text-transform.js +34 -6
  755. package/src/hooks/typography.js +165 -15
  756. package/src/hooks/typography.scss +16 -0
  757. package/src/hooks/use-cached-truthy.js +20 -0
  758. package/src/index.js +1 -0
  759. package/src/layouts/flex.js +179 -50
  760. package/src/layouts/flow.js +54 -8
  761. package/src/store/actions.js +239 -377
  762. package/src/store/defaults.native.js +12 -0
  763. package/src/store/index.js +1 -2
  764. package/src/store/reducer.js +54 -18
  765. package/src/store/selectors.js +173 -47
  766. package/src/store/test/actions.js +407 -705
  767. package/src/store/test/reducer.js +22 -54
  768. package/src/store/test/selectors.js +79 -21
  769. package/src/style.scss +2 -1
  770. package/src/utils/index.js +1 -0
  771. package/src/utils/parse-css-unit-to-px.js +43 -1
  772. package/src/utils/test/parse-css-unit-to-px.js +148 -165
  773. package/src/utils/transform-styles/transforms/test/wrap.js +1 -1
  774. package/src/utils/transform-styles/transforms/wrap.js +16 -0
  775. package/tsconfig.tsbuildinfo +1 -1
  776. package/build/components/duotone-control/duotone-picker-popover.js +0 -44
  777. package/build/components/duotone-control/duotone-picker-popover.js.map +0 -1
  778. package/build/components/list-view/block-slot.js +0 -121
  779. package/build/components/list-view/block-slot.js.map +0 -1
  780. package/build/components/list-view/editor.js +0 -35
  781. package/build/components/list-view/editor.js.map +0 -1
  782. package/build/components/text-decoration-and-transform/index.js +0 -39
  783. package/build/components/text-decoration-and-transform/index.js.map +0 -1
  784. package/build/store/controls.js +0 -44
  785. package/build/store/controls.js.map +0 -1
  786. package/build-module/components/duotone-control/duotone-picker-popover.js +0 -35
  787. package/build-module/components/duotone-control/duotone-picker-popover.js.map +0 -1
  788. package/build-module/components/list-view/block-slot.js +0 -96
  789. package/build-module/components/list-view/block-slot.js.map +0 -1
  790. package/build-module/components/list-view/editor.js +0 -25
  791. package/build-module/components/list-view/editor.js.map +0 -1
  792. package/build-module/components/text-decoration-and-transform/index.js +0 -30
  793. package/build-module/components/text-decoration-and-transform/index.js.map +0 -1
  794. package/build-module/store/controls.js +0 -32
  795. package/build-module/store/controls.js.map +0 -1
  796. package/src/components/duotone-control/duotone-picker-popover.js +0 -36
  797. package/src/components/list-view/block-slot.js +0 -120
  798. package/src/components/list-view/editor.js +0 -29
  799. package/src/components/text-decoration-and-transform/index.js +0 -36
  800. package/src/components/text-decoration-and-transform/style.scss +0 -3
  801. package/src/store/controls.js +0 -39
@@ -788,6 +788,28 @@ describe( 'state', () => {
788
788
  } );
789
789
  } );
790
790
 
791
+ it( 'Replacing the block with an empty list should remove it', () => {
792
+ const original = blocks( undefined, {
793
+ type: 'RESET_BLOCKS',
794
+ blocks: [
795
+ {
796
+ clientId: 'chicken',
797
+ name: 'core/test-block',
798
+ attributes: {},
799
+ innerBlocks: [],
800
+ },
801
+ ],
802
+ } );
803
+ const state = blocks( original, {
804
+ type: 'REPLACE_BLOCKS',
805
+ clientIds: [ 'chicken' ],
806
+ blocks: [],
807
+ } );
808
+
809
+ expect( Object.keys( state.byClientId ) ).toHaveLength( 0 );
810
+ expect( state.tree[ '' ].innerBlocks ).toHaveLength( 0 );
811
+ } );
812
+
791
813
  it( 'should replace the block and remove references to its inner blocks', () => {
792
814
  const original = blocks( undefined, {
793
815
  type: 'RESET_BLOCKS',
@@ -1696,60 +1718,6 @@ describe( 'state', () => {
1696
1718
  } );
1697
1719
 
1698
1720
  describe( 'blocks', () => {
1699
- it( 'should not reset any blocks that are not in the post', () => {
1700
- const actions = [
1701
- {
1702
- type: 'RESET_BLOCKS',
1703
- blocks: [
1704
- {
1705
- clientId: 'block1',
1706
- innerBlocks: [
1707
- { clientId: 'block11', innerBlocks: [] },
1708
- { clientId: 'block12', innerBlocks: [] },
1709
- ],
1710
- },
1711
- ],
1712
- },
1713
- {
1714
- type: 'RECEIVE_BLOCKS',
1715
- blocks: [
1716
- {
1717
- clientId: 'block2',
1718
- innerBlocks: [
1719
- { clientId: 'block21', innerBlocks: [] },
1720
- { clientId: 'block22', innerBlocks: [] },
1721
- ],
1722
- },
1723
- ],
1724
- },
1725
- ];
1726
- const original = deepFreeze(
1727
- actions.reduce( blocks, undefined )
1728
- );
1729
-
1730
- const state = blocks( original, {
1731
- type: 'RESET_BLOCKS',
1732
- blocks: [
1733
- {
1734
- clientId: 'block3',
1735
- innerBlocks: [
1736
- { clientId: 'block31', innerBlocks: [] },
1737
- { clientId: 'block32', innerBlocks: [] },
1738
- ],
1739
- },
1740
- ],
1741
- } );
1742
-
1743
- expect( state.byClientId ).toEqual( {
1744
- block2: { clientId: 'block2' },
1745
- block21: { clientId: 'block21' },
1746
- block22: { clientId: 'block22' },
1747
- block3: { clientId: 'block3' },
1748
- block31: { clientId: 'block31' },
1749
- block32: { clientId: 'block32' },
1750
- } );
1751
- } );
1752
-
1753
1721
  describe( 'byClientId', () => {
1754
1722
  it( 'should ignore updates to non-existent block', () => {
1755
1723
  const original = deepFreeze(
@@ -70,8 +70,8 @@ const {
70
70
  __experimentalGetLastBlockAttributeChanges,
71
71
  getLowestCommonAncestorWithSelectedBlock,
72
72
  __experimentalGetActiveBlockIdByBlockNames: getActiveBlockIdByBlockNames,
73
- __experimentalGetParsedReusableBlock,
74
73
  __experimentalGetAllowedPatterns,
74
+ __experimentalGetParsedPattern,
75
75
  __experimentalGetPatternsByBlockTypes,
76
76
  __unstableGetClientIdWithClientIdsTree,
77
77
  __unstableGetClientIdsTree,
@@ -3331,6 +3331,13 @@ describe( 'selectors', () => {
3331
3331
  content:
3332
3332
  '<!-- wp:test-block-b --><!-- /wp:test-block-b -->',
3333
3333
  },
3334
+ {
3335
+ name: 'pattern-c',
3336
+ title: 'pattern hidden from UI',
3337
+ inserter: false,
3338
+ content:
3339
+ '<!-- wp:test-block-a --><!-- /wp:test-block-a -->',
3340
+ },
3334
3341
  ],
3335
3342
  },
3336
3343
  };
@@ -3350,6 +3357,77 @@ describe( 'selectors', () => {
3350
3357
  __experimentalGetAllowedPatterns( state, 'block2' )
3351
3358
  ).toHaveLength( 0 );
3352
3359
  } );
3360
+ it( 'should return empty array if only patterns hidden from UI exist', () => {
3361
+ expect(
3362
+ __experimentalGetAllowedPatterns( {
3363
+ blocks: { byClientId: {} },
3364
+ blockListSettings: {},
3365
+ settings: {
3366
+ __experimentalBlockPatterns: [
3367
+ {
3368
+ name: 'pattern-c',
3369
+ title: 'pattern hidden from UI',
3370
+ inserter: false,
3371
+ content:
3372
+ '<!-- wp:test-block-a --><!-- /wp:test-block-a -->',
3373
+ },
3374
+ ],
3375
+ },
3376
+ } )
3377
+ ).toHaveLength( 0 );
3378
+ } );
3379
+ } );
3380
+ describe( '__experimentalGetParsedPattern', () => {
3381
+ const state = {
3382
+ settings: {
3383
+ __experimentalBlockPatterns: [
3384
+ {
3385
+ name: 'pattern-a',
3386
+ title: 'pattern with a',
3387
+ content: `<!-- wp:test-block-a --><!-- /wp:test-block-a -->`,
3388
+ },
3389
+ {
3390
+ name: 'pattern-hidden-from-ui',
3391
+ title: 'pattern hidden from UI',
3392
+ inserter: false,
3393
+ content:
3394
+ '<!-- wp:test-block-a --><!-- /wp:test-block-a --><!-- wp:test-block-b --><!-- /wp:test-block-b -->',
3395
+ },
3396
+ ],
3397
+ },
3398
+ };
3399
+ it( 'should return proper results when pattern does not exist', () => {
3400
+ expect(
3401
+ __experimentalGetParsedPattern( state, 'not there' )
3402
+ ).toBeNull();
3403
+ } );
3404
+ it( 'should return existing pattern properly parsed', () => {
3405
+ const { name, blocks } = __experimentalGetParsedPattern(
3406
+ state,
3407
+ 'pattern-a'
3408
+ );
3409
+ expect( name ).toEqual( 'pattern-a' );
3410
+ expect( blocks ).toHaveLength( 1 );
3411
+ expect( blocks[ 0 ] ).toEqual(
3412
+ expect.objectContaining( {
3413
+ name: 'core/test-block-a',
3414
+ } )
3415
+ );
3416
+ } );
3417
+ it( 'should return hidden from UI pattern when requested', () => {
3418
+ const { name, blocks, inserter } = __experimentalGetParsedPattern(
3419
+ state,
3420
+ 'pattern-hidden-from-ui'
3421
+ );
3422
+ expect( name ).toEqual( 'pattern-hidden-from-ui' );
3423
+ expect( inserter ).toBeFalsy();
3424
+ expect( blocks ).toHaveLength( 2 );
3425
+ expect( blocks[ 0 ] ).toEqual(
3426
+ expect.objectContaining( {
3427
+ name: 'core/test-block-a',
3428
+ } )
3429
+ );
3430
+ } );
3353
3431
  } );
3354
3432
  describe( '__experimentalGetPatternsByBlockTypes', () => {
3355
3433
  const state = {
@@ -3625,26 +3703,6 @@ describe( 'selectors', () => {
3625
3703
  } );
3626
3704
  } );
3627
3705
 
3628
- describe( '__experimentalGetParsedReusableBlock', () => {
3629
- const state = {
3630
- settings: {
3631
- __experimentalReusableBlocks: [
3632
- {
3633
- id: 1,
3634
- content: { raw: '' },
3635
- },
3636
- ],
3637
- },
3638
- };
3639
-
3640
- // Regression test for https://github.com/WordPress/gutenberg/issues/26485. See https://github.com/WordPress/gutenberg/issues/26548.
3641
- it( "Should return an empty array if reusable block's content.raw is an empty string", () => {
3642
- expect( __experimentalGetParsedReusableBlock( state, 1 ) ).toEqual(
3643
- []
3644
- );
3645
- } );
3646
- } );
3647
-
3648
3706
  describe( 'getInserterItems with core blocks prioritization', () => {
3649
3707
  // This test is in a seperate `describe` because all other tests register
3650
3708
  // some test `core` blocks and interfere with the purpose of the specific test.
package/src/style.scss CHANGED
@@ -1,4 +1,5 @@
1
1
  @import "./autocompleters/style.scss";
2
+ @import "./components/block-alignment-control/style.scss";
2
3
  @import "./components/block-alignment-matrix-control/style.scss";
3
4
  @import "./components/block-icon/style.scss";
4
5
  @import "./components/block-inspector/style.scss";
@@ -45,7 +46,6 @@
45
46
  @import "./components/responsive-block-control/style.scss";
46
47
  @import "./components/rich-text/style.scss";
47
48
  @import "./components/skip-to-selected-block/style.scss";
48
- @import "./components/text-decoration-and-transform/style.scss";
49
49
  @import "./components/text-transform-control/style.scss";
50
50
  @import "./components/text-decoration-control/style.scss";
51
51
  @import "./components/tool-selector/style.scss";
@@ -55,6 +55,7 @@
55
55
  @import "./hooks/anchor.scss";
56
56
  @import "./hooks/layout.scss";
57
57
  @import "./hooks/border.scss";
58
+ @import "./hooks/typography.scss";
58
59
 
59
60
  @import "./components/block-toolbar/style.scss";
60
61
  @import "./components/inserter/style.scss";
@@ -1,3 +1,4 @@
1
1
  export { default as transformStyles } from './transform-styles';
2
2
  export * from './theme';
3
3
  export * from './block-variation-transforms';
4
+ export { default as getPxFromCssUnit } from './parse-css-unit-to-px';
@@ -131,6 +131,7 @@ function evalMathExpression( cssUnit ) {
131
131
 
132
132
  return errorFound ? null : calculate( cssUnit ).toFixed( 0 ) + 'px';
133
133
  }
134
+
134
135
  /**
135
136
  * Convert a parsedUnit object to px value.
136
137
  *
@@ -202,11 +203,12 @@ function convertParsedUnitToPx( parsedUnit, options ) {
202
203
 
203
204
  return null;
204
205
  }
206
+
205
207
  /**
206
208
  * Returns the px value of a cssUnit.
207
209
  *
208
210
  * @param {string} cssUnit
209
- * @param {string} options
211
+ * @param {Object} options
210
212
  * @return {string} returns the cssUnit value in a simple px format.
211
213
  */
212
214
  export function getPxFromCssUnit( cssUnit, options = {} ) {
@@ -228,3 +230,43 @@ export function getPxFromCssUnit( cssUnit, options = {} ) {
228
230
 
229
231
  return convertParsedUnitToPx( parsedUnit, options );
230
232
  }
233
+
234
+ // Use simple cache.
235
+ const cache = {};
236
+ /**
237
+ * Returns the px value of a cssUnit. The memoized version of getPxFromCssUnit;
238
+ *
239
+ * @param {string} cssUnit
240
+ * @param {Object} options
241
+ * @return {string} returns the cssUnit value in a simple px format.
242
+ */
243
+ function memoizedGetPxFromCssUnit( cssUnit, options = {} ) {
244
+ const hash = cssUnit + hashOptions( options );
245
+
246
+ if ( ! cache[ hash ] ) {
247
+ cache[ hash ] = getPxFromCssUnit( cssUnit, options );
248
+ }
249
+ return cache[ hash ];
250
+ }
251
+
252
+ function hashOptions( options ) {
253
+ let hash = '';
254
+ if ( options.hasOwnProperty( 'fontSize' ) ) {
255
+ hash = ':' + options.width;
256
+ }
257
+ if ( options.hasOwnProperty( 'lineHeight' ) ) {
258
+ hash = ':' + options.lineHeight;
259
+ }
260
+ if ( options.hasOwnProperty( 'width' ) ) {
261
+ hash = ':' + options.width;
262
+ }
263
+ if ( options.hasOwnProperty( 'height' ) ) {
264
+ hash = ':' + options.height;
265
+ }
266
+ if ( options.hasOwnProperty( 'type' ) ) {
267
+ hash = ':' + options.type;
268
+ }
269
+ return hash;
270
+ }
271
+
272
+ export default memoizedGetPxFromCssUnit;
@@ -1,183 +1,166 @@
1
1
  /**
2
2
  * Internal dependencies
3
3
  */
4
- import { getPxFromCssUnit } from '../parse-css-unit-to-px';
4
+ import {
5
+ default as memoizedGetPxFromCssUnit,
6
+ getPxFromCssUnit,
7
+ } from '../parse-css-unit-to-px';
5
8
 
6
9
  describe( 'getPxFromCssUnit', () => {
7
10
  // Absolute units
8
- it( 'test px return px unit', () => {
9
- expect( getPxFromCssUnit( '25px' ) ).toBe( '25px' );
10
- } );
11
-
12
- it( 'test numeric float return px unit', () => {
13
- expect( getPxFromCssUnit( '25.5' ) ).toBe( '26px' );
14
- } );
15
-
16
- it( 'test cm return px unit', () => {
17
- expect( getPxFromCssUnit( '1cm' ) ).toBe( '38px' );
18
- } );
19
-
20
- it( 'test mm return px unit', () => {
21
- expect( getPxFromCssUnit( '10mm' ) ).toBe( '38px' );
22
- } );
23
-
24
- it( 'test in return px unit', () => {
25
- expect( getPxFromCssUnit( '1in' ) ).toBe( '96px' );
26
- } );
27
-
28
- it( 'test pt return px unit', () => {
29
- expect( getPxFromCssUnit( '12pt' ) ).toBe( '16px' );
30
- } );
31
-
32
- it( 'test pc return px unit', () => {
33
- expect( getPxFromCssUnit( '1pc' ) ).toBe( '16px' );
34
- } );
35
-
36
- it( 'test Q return px unit', () => {
37
- expect( getPxFromCssUnit( '40Q' ) ).toBe( '38px' ); // 40 Q should be 1 cm
38
- } );
39
-
40
- // Relative units
41
- it( 'test em return px unit', () => {
42
- expect( getPxFromCssUnit( '2em', { fontSize: 10 } ) ).toBe( '20px' );
43
- } );
44
-
45
- it( 'test rem return px unit', () => {
46
- expect( getPxFromCssUnit( '2rem', { fontSize: 10 } ) ).toBe( '20px' );
47
- } );
48
-
49
- it( 'test vw return px unit', () => {
50
- expect( getPxFromCssUnit( '20vw', { width: 100 } ) ).toBe( '20px' );
51
- } );
52
-
53
- it( 'test vh return px unit', () => {
54
- expect( getPxFromCssUnit( '20vh', { height: 200 } ) ).toBe( '40px' );
55
- } );
56
-
57
- it( 'test vmin return px unit', () => {
58
- expect(
59
- getPxFromCssUnit( '20vmin', { height: 200, width: 100 } )
60
- ).toBe( '20px' );
61
- } );
62
-
63
- it( 'test vmax return px unit', () => {
64
- expect(
65
- getPxFromCssUnit( '20vmax', { height: 200, width: 100 } )
66
- ).toBe( '40px' );
67
- } );
68
-
69
- it( 'test lh return px unit', () => {
70
- expect( getPxFromCssUnit( '20lh', { lineHeight: 2 } ) ).toBe( '40px' );
71
- } );
72
-
73
- it( 'test % return px unit', () => {
74
- expect(
75
- getPxFromCssUnit( '120%', {
76
- height: 200,
77
- width: 100,
78
- fontSize: 10,
79
- type: 'font',
80
- } )
81
- ).toBe( '12px' );
82
- } );
83
-
84
- // Function units
85
- it( 'test min() return px unit', () => {
86
- expect( getPxFromCssUnit( 'min(20px, 25px)' ) ).toBe( '20px' );
87
- } );
88
-
89
- it( 'test min() function with many arguments return px unit', () => {
90
- expect( getPxFromCssUnit( 'min(20px, 9px, 12pt, 25px)' ) ).toBe(
91
- '9px'
11
+ describe( 'absolute unites should return px values', () => {
12
+ const testData = [
13
+ [ '25px', '25px' ],
14
+ [ '25.5', '26px' ],
15
+ [ '1cm', '38px' ],
16
+ [ '10mm', '38px' ],
17
+ [ '1in', '96px' ],
18
+ [ '12pt', '16px' ],
19
+ [ '1pc', '16px' ],
20
+ [ '40Q', '38px' ], // 40 Q should be 1 cm
21
+ ];
22
+
23
+ test.each( testData )(
24
+ 'test getPxFromCssUnit( %s )',
25
+ ( unit, expected ) => {
26
+ expect( getPxFromCssUnit( unit ) ).toBe( expected );
27
+ }
92
28
  );
93
- } );
94
-
95
- it( 'test max() return px unit', () => {
96
- expect( getPxFromCssUnit( 'max(20px, 25px)' ) ).toBe( '25px' );
97
- } );
98
-
99
- it( 'test clamp() lower return px unit', () => {
100
- expect( getPxFromCssUnit( 'clamp(10px, 9px, 25px)' ) ).toBe( '10px' );
101
- } );
102
-
103
- it( 'test clamp() upper return px unit', () => {
104
- expect( getPxFromCssUnit( 'clamp(10px, 35px, 25px)' ) ).toBe( '25px' );
105
- } );
106
-
107
- it( 'test clamp() middle return px unit', () => {
108
- expect( getPxFromCssUnit( 'clamp(10px, 15px, 25px)' ) ).toBe( '15px' );
109
- } );
110
-
111
- it( 'test nested max min function return px unit', () => {
112
- expect( getPxFromCssUnit( 'min(max(20px,25px), 35px)' ) ).toBe(
113
- '25px'
29
+ test.each( testData )(
30
+ 'test memoizedGetPxFromCssUnit( %s )',
31
+ ( unit, expected ) => {
32
+ expect( memoizedGetPxFromCssUnit( unit ) ).toBe( expected );
33
+ }
114
34
  );
115
- } );
116
-
117
- it( 'test nested min max function return px unit', () => {
118
- expect( getPxFromCssUnit( 'max(min(20px,25px), 35px)' ) ).toBe(
119
- '35px'
35
+ test.each( testData )(
36
+ 'test cached memoizedGetPxFromCssUnit( %s )',
37
+ ( unit, expected ) => {
38
+ expect( memoizedGetPxFromCssUnit( unit ) ).toBe( expected );
39
+ }
120
40
  );
121
41
  } );
122
42
 
123
- it( 'test calculate function return px unit', () => {
124
- expect( getPxFromCssUnit( '10px + 25px' ) ).toBe( '35px' );
125
- } );
126
-
127
- it( 'test calc(10px + 25px) function return px unit', () => {
128
- expect( getPxFromCssUnit( 'calc(10px + 25px)' ) ).toBe( '35px' );
129
- } );
130
-
131
- it( 'test calc( number * cssUnit ) return px unit', () => {
132
- expect( getPxFromCssUnit( 'calc( 2 * 20px)' ) ).toBe( '40px' );
133
- } );
134
-
135
- it( 'test calc(25px - 10px) function return px unit', () => {
136
- expect( getPxFromCssUnit( 'calc(25px - 10px)' ) ).toBe( '15px' );
137
- } );
138
-
139
- it( 'test min(10px + 25px, 55pt) function return px unit', () => {
140
- expect( getPxFromCssUnit( 'min(10px + 25px, 55pt)' ) ).toBe( '35px' );
141
- } );
142
-
143
- it( 'test calc(12vw * 10px) function return px unit', () => {
144
- expect( getPxFromCssUnit( 'calc(12vw * 10px)' ) ).toBe( '450px' );
145
- } );
146
-
147
- it( 'test calc(42vw / 10px) function return px unit', () => {
148
- expect( getPxFromCssUnit( 'calc(45vw / 10px)' ) ).toBe( '17px' );
149
- } );
150
-
151
- it( 'test empty string', () => {
152
- expect( getPxFromCssUnit( '' ) ).toBe( null );
153
- } );
154
-
155
- it( 'test undefined string', () => {
156
- expect( getPxFromCssUnit( undefined ) ).toBe( null );
157
- } );
158
- it( 'test integer string', () => {
159
- expect( getPxFromCssUnit( 123 ) ).toBe( '123px' );
160
- } );
161
-
162
- it( 'test float string', () => {
163
- expect( getPxFromCssUnit( 123.456 ) ).toBe( '123px' );
164
- } );
165
-
166
- it( 'test text string', () => {
167
- expect( getPxFromCssUnit( 'abc' ) ).toBe( null );
43
+ describe( 'relative unites should return px values', () => {
44
+ const settings = {
45
+ fontSize: 10,
46
+ width: 100,
47
+ height: 200,
48
+ lineHeight: 2,
49
+ type: 'font',
50
+ };
51
+
52
+ const testData = [
53
+ [ '2em', '20px' ],
54
+ [ '2rem', '20px' ],
55
+ [ '20vw', '20px' ],
56
+ [ '20vh', '40px' ],
57
+ [ '20vmin', '20px' ],
58
+ [ '20vmax', '40px' ],
59
+ [ '20lh', '40px' ],
60
+ [ '120%', '12px' ],
61
+ ];
62
+
63
+ test.each( testData )(
64
+ 'test getPxFromCssUnit( %s )',
65
+ ( unit, expected ) => {
66
+ expect( getPxFromCssUnit( unit, settings ) ).toBe( expected );
67
+ }
68
+ );
69
+ test.each( testData )(
70
+ 'test memoizedGetPxFromCssUnit( %s )',
71
+ ( unit, expected ) => {
72
+ expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
73
+ expected
74
+ );
75
+ }
76
+ );
77
+ test.each( testData )(
78
+ 'test cached memoizedGetPxFromCssUnit( %s )',
79
+ ( unit, expected ) => {
80
+ expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
81
+ expected
82
+ );
83
+ }
84
+ );
168
85
  } );
169
86
 
170
- it( 'test not non function return null', () => {
171
- expect( getPxFromCssUnit( 'abc + num' ) ).toBe( null );
172
- } );
87
+ // Function units
173
88
 
174
- it( 'test not a fishy function return null', () => {
175
- expect( getPxFromCssUnit( 'console.log("howdy"); + 10px' ) ).toBe(
176
- null
89
+ describe( 'function unites should return px values', () => {
90
+ const settings = {
91
+ fontSize: 10,
92
+ width: 100,
93
+ height: 200,
94
+ lineHeight: 2,
95
+ type: 'font',
96
+ };
97
+
98
+ const testData = [
99
+ [ 'min(20px, 25px)', '20px' ],
100
+ [ 'min(20px, 9px, 12pt, 25px)', '9px' ],
101
+ [ 'max(20px, 25px)', '25px' ],
102
+ [ 'clamp(10px, 9px, 25px)', '10px' ],
103
+ [ 'clamp(10px, 35px, 25px)', '25px' ],
104
+ [ 'clamp(10px, 15px, 25px)', '15px' ],
105
+ [ 'min(max(20px,25px), 35px)', '25px' ],
106
+ [ 'max(min(20px,25px), 35px)', '35px' ],
107
+ [ '10px + 25px', '35px' ],
108
+ [ 'calc(10px + 25px)', '35px' ],
109
+ [ 'calc( 2 * 20px)', '40px' ],
110
+ [ 'calc(25px - 10px)', '15px' ],
111
+ [ 'min(10px + 25px, 55pt)', '35px' ],
112
+ [ 'calc(12vw * 10px)', '450px' ],
113
+ [ 'calc(45vw / 10px)', '17px' ],
114
+ [ '', null ],
115
+ [ undefined, null ],
116
+ [ 123, '123px' ],
117
+ [ 123.456, '123px' ],
118
+ [ 'abc', null ],
119
+ [ 'console.log("howdy"); + 10px', null ],
120
+ [ 'calc(12vw * 10px', null ], // missing closing bracket
121
+ ];
122
+
123
+ test.each( testData )(
124
+ 'test getPxFromCssUnit( %s )',
125
+ ( unit, expected ) => {
126
+ expect( getPxFromCssUnit( unit, settings ) ).toBe( expected );
127
+ }
128
+ );
129
+ test.each( testData )(
130
+ 'test memoizedGetPxFromCssUnit( %s )',
131
+ ( unit, expected ) => {
132
+ expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
133
+ expected
134
+ );
135
+ }
136
+ );
137
+ test.each( testData )(
138
+ 'test cached memoizedGetPxFromCssUnit( %s )',
139
+ ( unit, expected ) => {
140
+ expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
141
+ expected
142
+ );
143
+ }
177
144
  );
178
145
  } );
179
-
180
- it( 'test not a typo function return null', () => {
181
- expect( getPxFromCssUnit( 'calc(12vw * 10px' ) ).toBe( null );
146
+ // Skip this test it might be useful in dev.
147
+ it.skip( 'test performance of memoizedGetPxFromCssUnit function', () => {
148
+ const start = Date.now();
149
+ let i = 0;
150
+ const intervals = 1000;
151
+ while ( i < intervals ) {
152
+ getPxFromCssUnit( 'max(25px, 35px)', { width: 200 } );
153
+ i++;
154
+ }
155
+ const rawDuration = Date.now() - start;
156
+
157
+ const startM = Date.now();
158
+ i = 0;
159
+ // the memoized Version should be at 10X better then the non default one.
160
+ while ( i < intervals * 10 ) {
161
+ memoizedGetPxFromCssUnit( 'max(25px, 35px)', { width: 201 } );
162
+ i++;
163
+ }
164
+ expect( rawDuration > Date.now() - startM ).toBe( true );
182
165
  } );
183
166
  } );
@@ -22,7 +22,7 @@ describe( 'CSS selector wrap', () => {
22
22
  } );
23
23
 
24
24
  it( 'should ignore selectors', () => {
25
- const callback = wrap( '.my-namespace', 'body' );
25
+ const callback = wrap( '.my-namespace', [ 'body' ] );
26
26
  const input = `h1, body { color: red; }`;
27
27
  const output = traverse( input, callback );
28
28
 
@@ -3,7 +3,23 @@
3
3
  */
4
4
  const IS_ROOT_TAG = /^(body|html|:root).*$/;
5
5
 
6
+ /**
7
+ * Creates a callback to modify selectors so they only apply within a certain
8
+ * namespace.
9
+ *
10
+ * @param {string} namespace Namespace to prefix selectors with.
11
+ * @param {string[]} ignore Selectors to not prefix.
12
+ *
13
+ * @return {(node: Object) => Object} Callback to wrap selectors.
14
+ */
6
15
  const wrap = ( namespace, ignore = [] ) => ( node ) => {
16
+ /**
17
+ * Updates selector if necessary.
18
+ *
19
+ * @param {string} selector Selector to modify.
20
+ *
21
+ * @return {string} Updated selector.
22
+ */
7
23
  const updateSelector = ( selector ) => {
8
24
  if ( ignore.includes( selector.trim() ) ) {
9
25
  return selector;