@wordpress/block-editor 12.9.1-next.5a1d1283.0 → 12.10.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 (453) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +33 -3
  3. package/build/components/block-canvas/index.js +107 -0
  4. package/build/components/block-canvas/index.js.map +1 -0
  5. package/build/components/block-inspector/index.js +4 -1
  6. package/build/components/block-inspector/index.js.map +1 -1
  7. package/build/components/block-patterns-list/index.js +19 -4
  8. package/build/components/block-patterns-list/index.js.map +1 -1
  9. package/build/components/block-patterns-paging/index.js +66 -0
  10. package/build/components/block-patterns-paging/index.js.map +1 -0
  11. package/build/components/block-settings-menu/block-settings-dropdown.js +28 -0
  12. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  13. package/build/components/block-settings-menu-controls/index.js +4 -7
  14. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  15. package/build/components/block-styles/index.js +1 -0
  16. package/build/components/block-styles/index.js.map +1 -1
  17. package/build/components/block-toolbar/block-toolbar-menu.native.js +3 -7
  18. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  19. package/build/components/block-tools/block-contextual-toolbar.js +18 -7
  20. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  21. package/build/components/block-tools/block-selection-button.js +5 -1
  22. package/build/components/block-tools/block-selection-button.js.map +1 -1
  23. package/build/components/border-radius-control/input-controls.js +1 -1
  24. package/build/components/border-radius-control/input-controls.js.map +1 -1
  25. package/build/components/border-radius-control/linked-button.js +2 -4
  26. package/build/components/border-radius-control/linked-button.js.map +1 -1
  27. package/build/components/colors/with-colors.js.map +1 -1
  28. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -21
  29. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  30. package/build/components/default-block-appender/index.native.js +20 -1
  31. package/build/components/default-block-appender/index.native.js.map +1 -1
  32. package/build/components/duotone/utils.js +68 -0
  33. package/build/components/duotone/utils.js.map +1 -1
  34. package/build/components/editor-styles/index.js +28 -9
  35. package/build/components/editor-styles/index.js.map +1 -1
  36. package/build/components/global-styles/hooks.js +2 -101
  37. package/build/components/global-styles/hooks.js.map +1 -1
  38. package/build/components/global-styles/image-settings-panel.js +61 -0
  39. package/build/components/global-styles/image-settings-panel.js.map +1 -0
  40. package/build/components/global-styles/index.js +11 -17
  41. package/build/components/global-styles/index.js.map +1 -1
  42. package/build/components/global-styles/use-global-styles-output.js +19 -15
  43. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  44. package/build/components/global-styles/utils.js +1 -1
  45. package/build/components/global-styles/utils.js.map +1 -1
  46. package/build/components/iframe/index.js +67 -33
  47. package/build/components/iframe/index.js.map +1 -1
  48. package/build/components/image-editor/use-save-image.js +2 -5
  49. package/build/components/image-editor/use-save-image.js.map +1 -1
  50. package/build/components/image-editor/use-transform-image.js +9 -9
  51. package/build/components/image-editor/use-transform-image.js.map +1 -1
  52. package/build/components/index.js +8 -12
  53. package/build/components/index.js.map +1 -1
  54. package/build/components/index.native.js +6 -5
  55. package/build/components/index.native.js.map +1 -1
  56. package/build/components/inner-blocks/use-nested-settings-update.js +13 -7
  57. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  58. package/build/components/inserter/block-patterns-explorer/explorer.js +12 -6
  59. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  60. package/build/components/inserter/block-patterns-explorer/patterns-list.js +57 -23
  61. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  62. package/build/components/inserter/block-patterns-explorer/sidebar.js +24 -9
  63. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  64. package/build/components/inserter/block-patterns-source-filter.js +54 -0
  65. package/build/components/inserter/block-patterns-source-filter.js.map +1 -0
  66. package/build/components/inserter/block-patterns-sync-filter.js +46 -0
  67. package/build/components/inserter/block-patterns-sync-filter.js.map +1 -0
  68. package/build/components/inserter/block-patterns-tab.js +91 -45
  69. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  70. package/build/components/inserter/hooks/use-patterns-paging.js +57 -0
  71. package/build/components/inserter/hooks/use-patterns-paging.js.map +1 -0
  72. package/build/components/inserter/hooks/use-patterns-state.js +21 -10
  73. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  74. package/build/components/inserter/menu.js +13 -11
  75. package/build/components/inserter/menu.js.map +1 -1
  76. package/build/components/inserter/search-results.js +4 -3
  77. package/build/components/inserter/search-results.js.map +1 -1
  78. package/build/components/inserter/tabs.js +1 -12
  79. package/build/components/inserter/tabs.js.map +1 -1
  80. package/build/components/inspector-controls/block-support-slot-container.js +12 -1
  81. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -1
  82. package/build/components/inspector-controls/fill.js +24 -13
  83. package/build/components/inspector-controls/fill.js.map +1 -1
  84. package/build/components/inspector-controls/groups.js +5 -3
  85. package/build/components/inspector-controls/groups.js.map +1 -1
  86. package/build/components/inspector-controls/slot.js +13 -0
  87. package/build/components/inspector-controls/slot.js.map +1 -1
  88. package/build/components/inspector-controls-tabs/styles-tab.js +3 -0
  89. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  90. package/build/components/link-control/index.js +12 -2
  91. package/build/components/link-control/index.js.map +1 -1
  92. package/build/components/list-view/block-select-button.js +1 -3
  93. package/build/components/list-view/block-select-button.js.map +1 -1
  94. package/build/components/list-view/block.js +13 -1
  95. package/build/components/list-view/block.js.map +1 -1
  96. package/build/components/list-view/use-block-selection.js +29 -24
  97. package/build/components/list-view/use-block-selection.js.map +1 -1
  98. package/build/components/media-placeholder/index.js +2 -2
  99. package/build/components/media-placeholder/index.js.map +1 -1
  100. package/build/components/media-placeholder/index.native.js +11 -11
  101. package/build/components/media-placeholder/index.native.js.map +1 -1
  102. package/build/components/media-replace-flow/index.js +2 -3
  103. package/build/components/media-replace-flow/index.js.map +1 -1
  104. package/build/components/media-upload/constants.js +30 -0
  105. package/build/components/media-upload/constants.js.map +1 -0
  106. package/build/components/media-upload/index.native.js +63 -53
  107. package/build/components/media-upload/index.native.js.map +1 -1
  108. package/build/components/preview-options/index.js +1 -1
  109. package/build/components/preview-options/index.js.map +1 -1
  110. package/build/components/rich-text/index.js +34 -35
  111. package/build/components/rich-text/index.js.map +1 -1
  112. package/build/components/rich-text/index.native.js +14 -32
  113. package/build/components/rich-text/index.native.js.map +1 -1
  114. package/build/components/rich-text/multiline.js +95 -0
  115. package/build/components/rich-text/multiline.js.map +1 -0
  116. package/build/components/rich-text/split-value.js +10 -16
  117. package/build/components/rich-text/split-value.js.map +1 -1
  118. package/build/components/rich-text/use-enter.js +31 -40
  119. package/build/components/rich-text/use-enter.js.map +1 -1
  120. package/build/components/rich-text/use-paste-handler.js +18 -33
  121. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  122. package/build/components/spacing-sizes-control/utils.js +1 -1
  123. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  124. package/build/components/use-block-commands/index.js +30 -18
  125. package/build/components/use-block-commands/index.js.map +1 -1
  126. package/build/components/use-block-display-information/index.js +5 -2
  127. package/build/components/use-block-display-information/index.js.map +1 -1
  128. package/build/hooks/background.js +258 -0
  129. package/build/hooks/background.js.map +1 -0
  130. package/build/hooks/block-hooks.js +188 -0
  131. package/build/hooks/block-hooks.js.map +1 -0
  132. package/build/hooks/block-rename-ui.js +160 -0
  133. package/build/hooks/block-rename-ui.js.map +1 -0
  134. package/build/hooks/duotone.js +29 -42
  135. package/build/hooks/duotone.js.map +1 -1
  136. package/build/hooks/index.js +2 -2
  137. package/build/hooks/index.js.map +1 -1
  138. package/build/hooks/layout.js +31 -14
  139. package/build/hooks/layout.js.map +1 -1
  140. package/build/hooks/position.js +4 -2
  141. package/build/hooks/position.js.map +1 -1
  142. package/build/hooks/style.js +10 -3
  143. package/build/hooks/style.js.map +1 -1
  144. package/build/private-apis.js +2 -0
  145. package/build/private-apis.js.map +1 -1
  146. package/build/store/actions.js +33 -10
  147. package/build/store/actions.js.map +1 -1
  148. package/build/store/private-actions.js +42 -8
  149. package/build/store/private-actions.js.map +1 -1
  150. package/build/store/private-selectors.js +23 -0
  151. package/build/store/private-selectors.js.map +1 -1
  152. package/build/store/reducer.js +43 -1
  153. package/build/store/reducer.js.map +1 -1
  154. package/build/store/selectors.js +84 -23
  155. package/build/store/selectors.js.map +1 -1
  156. package/build/store/utils.js +0 -4
  157. package/build/store/utils.js.map +1 -1
  158. package/build-module/components/block-canvas/index.js +97 -0
  159. package/build-module/components/block-canvas/index.js.map +1 -0
  160. package/build-module/components/block-inspector/index.js +4 -1
  161. package/build-module/components/block-inspector/index.js.map +1 -1
  162. package/build-module/components/block-patterns-list/index.js +20 -5
  163. package/build-module/components/block-patterns-list/index.js.map +1 -1
  164. package/build-module/components/block-patterns-paging/index.js +59 -0
  165. package/build-module/components/block-patterns-paging/index.js.map +1 -0
  166. package/build-module/components/block-settings-menu/block-settings-dropdown.js +28 -0
  167. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  168. package/build-module/components/block-settings-menu-controls/index.js +4 -7
  169. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  170. package/build-module/components/block-styles/index.js +1 -0
  171. package/build-module/components/block-styles/index.js.map +1 -1
  172. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +3 -7
  173. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  174. package/build-module/components/block-tools/block-contextual-toolbar.js +18 -7
  175. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  176. package/build-module/components/block-tools/block-selection-button.js +5 -1
  177. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  178. package/build-module/components/border-radius-control/input-controls.js +1 -1
  179. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  180. package/build-module/components/border-radius-control/linked-button.js +2 -4
  181. package/build-module/components/border-radius-control/linked-button.js.map +1 -1
  182. package/build-module/components/colors/with-colors.js.map +1 -1
  183. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -21
  184. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  185. package/build-module/components/default-block-appender/index.native.js +20 -1
  186. package/build-module/components/default-block-appender/index.native.js.map +1 -1
  187. package/build-module/components/duotone/utils.js +65 -0
  188. package/build-module/components/duotone/utils.js.map +1 -1
  189. package/build-module/components/editor-styles/index.js +28 -9
  190. package/build-module/components/editor-styles/index.js.map +1 -1
  191. package/build-module/components/global-styles/hooks.js +3 -100
  192. package/build-module/components/global-styles/hooks.js.map +1 -1
  193. package/build-module/components/global-styles/image-settings-panel.js +53 -0
  194. package/build-module/components/global-styles/image-settings-panel.js.map +1 -0
  195. package/build-module/components/global-styles/index.js +2 -2
  196. package/build-module/components/global-styles/index.js.map +1 -1
  197. package/build-module/components/global-styles/use-global-styles-output.js +18 -16
  198. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  199. package/build-module/components/global-styles/utils.js +1 -1
  200. package/build-module/components/global-styles/utils.js.map +1 -1
  201. package/build-module/components/iframe/index.js +66 -33
  202. package/build-module/components/iframe/index.js.map +1 -1
  203. package/build-module/components/image-editor/use-save-image.js +2 -5
  204. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  205. package/build-module/components/image-editor/use-transform-image.js +9 -9
  206. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  207. package/build-module/components/index.js +1 -1
  208. package/build-module/components/index.js.map +1 -1
  209. package/build-module/components/index.native.js +2 -1
  210. package/build-module/components/index.native.js.map +1 -1
  211. package/build-module/components/inner-blocks/use-nested-settings-update.js +14 -8
  212. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  213. package/build-module/components/inserter/block-patterns-explorer/explorer.js +12 -6
  214. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  215. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +59 -25
  216. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  217. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +23 -9
  218. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  219. package/build-module/components/inserter/block-patterns-source-filter.js +44 -0
  220. package/build-module/components/inserter/block-patterns-source-filter.js.map +1 -0
  221. package/build-module/components/inserter/block-patterns-sync-filter.js +38 -0
  222. package/build-module/components/inserter/block-patterns-sync-filter.js.map +1 -0
  223. package/build-module/components/inserter/block-patterns-tab.js +87 -46
  224. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  225. package/build-module/components/inserter/hooks/use-patterns-paging.js +50 -0
  226. package/build-module/components/inserter/hooks/use-patterns-paging.js.map +1 -0
  227. package/build-module/components/inserter/hooks/use-patterns-state.js +22 -10
  228. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  229. package/build-module/components/inserter/menu.js +13 -11
  230. package/build-module/components/inserter/menu.js.map +1 -1
  231. package/build-module/components/inserter/search-results.js +4 -3
  232. package/build-module/components/inserter/search-results.js.map +1 -1
  233. package/build-module/components/inserter/tabs.js +1 -12
  234. package/build-module/components/inserter/tabs.js.map +1 -1
  235. package/build-module/components/inspector-controls/block-support-slot-container.js +13 -2
  236. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -1
  237. package/build-module/components/inspector-controls/fill.js +25 -14
  238. package/build-module/components/inspector-controls/fill.js.map +1 -1
  239. package/build-module/components/inspector-controls/groups.js +5 -3
  240. package/build-module/components/inspector-controls/groups.js.map +1 -1
  241. package/build-module/components/inspector-controls/slot.js +15 -1
  242. package/build-module/components/inspector-controls/slot.js.map +1 -1
  243. package/build-module/components/inspector-controls-tabs/styles-tab.js +3 -0
  244. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  245. package/build-module/components/link-control/index.js +12 -2
  246. package/build-module/components/link-control/index.js.map +1 -1
  247. package/build-module/components/list-view/block-select-button.js +1 -3
  248. package/build-module/components/list-view/block-select-button.js.map +1 -1
  249. package/build-module/components/list-view/block.js +13 -1
  250. package/build-module/components/list-view/block.js.map +1 -1
  251. package/build-module/components/list-view/use-block-selection.js +30 -25
  252. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  253. package/build-module/components/media-placeholder/index.js +2 -2
  254. package/build-module/components/media-placeholder/index.js.map +1 -1
  255. package/build-module/components/media-placeholder/index.native.js +7 -7
  256. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  257. package/build-module/components/media-replace-flow/index.js +2 -3
  258. package/build-module/components/media-replace-flow/index.js.map +1 -1
  259. package/build-module/components/media-upload/constants.js +14 -0
  260. package/build-module/components/media-upload/constants.js.map +1 -0
  261. package/build-module/components/media-upload/index.native.js +53 -34
  262. package/build-module/components/media-upload/index.native.js.map +1 -1
  263. package/build-module/components/preview-options/index.js +1 -1
  264. package/build-module/components/preview-options/index.js.map +1 -1
  265. package/build-module/components/rich-text/index.js +35 -37
  266. package/build-module/components/rich-text/index.js.map +1 -1
  267. package/build-module/components/rich-text/index.native.js +15 -33
  268. package/build-module/components/rich-text/index.native.js.map +1 -1
  269. package/build-module/components/rich-text/multiline.js +87 -0
  270. package/build-module/components/rich-text/multiline.js.map +1 -0
  271. package/build-module/components/rich-text/split-value.js +10 -16
  272. package/build-module/components/rich-text/split-value.js.map +1 -1
  273. package/build-module/components/rich-text/use-enter.js +33 -42
  274. package/build-module/components/rich-text/use-enter.js.map +1 -1
  275. package/build-module/components/rich-text/use-paste-handler.js +19 -34
  276. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  277. package/build-module/components/spacing-sizes-control/utils.js +2 -2
  278. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  279. package/build-module/components/use-block-commands/index.js +28 -16
  280. package/build-module/components/use-block-commands/index.js.map +1 -1
  281. package/build-module/components/use-block-display-information/index.js +5 -2
  282. package/build-module/components/use-block-display-information/index.js.map +1 -1
  283. package/build-module/hooks/background.js +244 -0
  284. package/build-module/hooks/background.js.map +1 -0
  285. package/build-module/hooks/block-hooks.js +181 -0
  286. package/build-module/hooks/block-hooks.js.map +1 -0
  287. package/build-module/hooks/block-rename-ui.js +153 -0
  288. package/build-module/hooks/block-rename-ui.js.map +1 -0
  289. package/build-module/hooks/duotone.js +26 -39
  290. package/build-module/hooks/duotone.js.map +1 -1
  291. package/build-module/hooks/index.js +2 -2
  292. package/build-module/hooks/index.js.map +1 -1
  293. package/build-module/hooks/layout.js +33 -16
  294. package/build-module/hooks/layout.js.map +1 -1
  295. package/build-module/hooks/position.js +4 -2
  296. package/build-module/hooks/position.js.map +1 -1
  297. package/build-module/hooks/style.js +10 -3
  298. package/build-module/hooks/style.js.map +1 -1
  299. package/build-module/private-apis.js +2 -0
  300. package/build-module/private-apis.js.map +1 -1
  301. package/build-module/store/actions.js +33 -10
  302. package/build-module/store/actions.js.map +1 -1
  303. package/build-module/store/private-actions.js +39 -8
  304. package/build-module/store/private-actions.js.map +1 -1
  305. package/build-module/store/private-selectors.js +21 -0
  306. package/build-module/store/private-selectors.js.map +1 -1
  307. package/build-module/store/reducer.js +41 -1
  308. package/build-module/store/reducer.js.map +1 -1
  309. package/build-module/store/selectors.js +78 -22
  310. package/build-module/store/selectors.js.map +1 -1
  311. package/build-module/store/utils.js +0 -4
  312. package/build-module/store/utils.js.map +1 -1
  313. package/build-style/content-rtl.css +0 -1
  314. package/build-style/content.css +0 -1
  315. package/build-style/style-rtl.css +170 -127
  316. package/build-style/style.css +170 -127
  317. package/package.json +32 -32
  318. package/src/components/block-canvas/index.js +108 -0
  319. package/src/components/block-inspector/index.js +5 -1
  320. package/src/components/block-list/content.scss +0 -1
  321. package/src/components/block-patterns-list/index.js +32 -7
  322. package/src/components/block-patterns-list/style.scss +26 -9
  323. package/src/components/block-patterns-paging/index.js +92 -0
  324. package/src/components/block-patterns-paging/style.scss +42 -0
  325. package/src/components/block-settings-menu/block-settings-dropdown.js +44 -0
  326. package/src/components/block-settings-menu-controls/index.js +4 -9
  327. package/src/components/block-styles/index.js +1 -0
  328. package/src/components/block-styles/style.scss +3 -3
  329. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -6
  330. package/src/components/block-tools/block-contextual-toolbar.js +16 -5
  331. package/src/components/block-tools/block-selection-button.js +9 -1
  332. package/src/components/block-tools/style.scss +0 -98
  333. package/src/components/border-radius-control/input-controls.js +1 -1
  334. package/src/components/border-radius-control/linked-button.js +8 -11
  335. package/src/components/color-palette/test/__snapshots__/control.js.snap +34 -21
  336. package/src/components/colors/with-colors.js +3 -2
  337. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -35
  338. package/src/components/default-block-appender/index.native.js +26 -3
  339. package/src/components/duotone/utils.js +65 -0
  340. package/src/components/editor-styles/index.js +32 -23
  341. package/src/components/global-styles/hooks.js +4 -112
  342. package/src/components/global-styles/image-settings-panel.js +71 -0
  343. package/src/components/global-styles/index.js +4 -3
  344. package/src/components/global-styles/use-global-styles-output.js +25 -16
  345. package/src/components/global-styles/utils.js +1 -2
  346. package/src/components/iframe/index.js +72 -33
  347. package/src/components/image-editor/use-save-image.js +2 -9
  348. package/src/components/image-editor/use-transform-image.js +9 -9
  349. package/src/components/index.js +1 -1
  350. package/src/components/index.native.js +2 -2
  351. package/src/components/inner-blocks/use-nested-settings-update.js +15 -10
  352. package/src/components/inserter/block-patterns-explorer/explorer.js +17 -5
  353. package/src/components/inserter/block-patterns-explorer/patterns-list.js +109 -40
  354. package/src/components/inserter/block-patterns-explorer/sidebar.js +23 -8
  355. package/src/components/inserter/block-patterns-source-filter.js +40 -0
  356. package/src/components/inserter/block-patterns-sync-filter.js +35 -0
  357. package/src/components/inserter/block-patterns-tab.js +168 -57
  358. package/src/components/inserter/hooks/use-patterns-paging.js +65 -0
  359. package/src/components/inserter/hooks/use-patterns-state.js +27 -16
  360. package/src/components/inserter/menu.js +15 -17
  361. package/src/components/inserter/search-results.js +6 -4
  362. package/src/components/inserter/style.scss +23 -2
  363. package/src/components/inserter/tabs.js +2 -12
  364. package/src/components/inserter/test/index.native.js +8 -12
  365. package/src/components/inspector-controls/block-support-slot-container.js +19 -3
  366. package/src/components/inspector-controls/fill.js +28 -14
  367. package/src/components/inspector-controls/groups.js +6 -2
  368. package/src/components/inspector-controls/slot.js +28 -3
  369. package/src/components/inspector-controls-tabs/styles-tab.js +4 -0
  370. package/src/components/link-control/index.js +13 -0
  371. package/src/components/link-control/style.scss +23 -2
  372. package/src/components/link-control/test/index.js +88 -6
  373. package/src/components/list-view/block-select-button.js +1 -3
  374. package/src/components/list-view/block.js +19 -1
  375. package/src/components/list-view/style.scss +1 -2
  376. package/src/components/list-view/use-block-selection.js +38 -32
  377. package/src/components/media-placeholder/README.md +2 -2
  378. package/src/components/media-placeholder/index.js +2 -2
  379. package/src/components/media-placeholder/index.native.js +11 -12
  380. package/src/components/media-replace-flow/index.js +2 -2
  381. package/src/components/media-replace-flow/test/index.js +5 -23
  382. package/src/components/media-upload/README.md +3 -2
  383. package/src/components/media-upload/constants.js +15 -0
  384. package/src/components/media-upload/index.native.js +66 -40
  385. package/src/components/media-upload/style.native.scss +4 -0
  386. package/src/components/media-upload/test/index.native.js +2 -2
  387. package/src/components/preview-options/README.md +7 -0
  388. package/src/components/preview-options/index.js +1 -1
  389. package/src/components/rich-text/index.js +48 -44
  390. package/src/components/rich-text/index.native.js +14 -42
  391. package/src/components/rich-text/multiline.js +121 -0
  392. package/src/components/rich-text/split-value.js +10 -35
  393. package/src/components/rich-text/use-enter.js +32 -42
  394. package/src/components/rich-text/use-paste-handler.js +16 -40
  395. package/src/components/spacing-sizes-control/style.scss +5 -7
  396. package/src/components/spacing-sizes-control/utils.js +1 -2
  397. package/src/components/use-block-commands/index.js +28 -20
  398. package/src/components/use-block-display-information/index.js +3 -0
  399. package/src/hooks/background.js +288 -0
  400. package/src/hooks/background.scss +57 -0
  401. package/src/hooks/block-hooks.js +257 -0
  402. package/src/hooks/block-hooks.scss +16 -0
  403. package/src/hooks/block-rename-ui.js +230 -0
  404. package/src/hooks/block-rename-ui.scss +3 -0
  405. package/src/hooks/duotone.js +42 -43
  406. package/src/hooks/index.js +2 -2
  407. package/src/hooks/layout.js +31 -33
  408. package/src/hooks/position.js +4 -3
  409. package/src/hooks/style.js +11 -2
  410. package/src/hooks/test/align.native.js +4 -3
  411. package/src/private-apis.js +2 -0
  412. package/src/store/actions.js +52 -10
  413. package/src/store/private-actions.js +37 -6
  414. package/src/store/private-selectors.js +21 -0
  415. package/src/store/reducer.js +38 -0
  416. package/src/store/selectors.js +107 -26
  417. package/src/store/test/actions.js +19 -8
  418. package/src/store/test/private-actions.js +17 -0
  419. package/src/store/test/reducer.js +25 -0
  420. package/src/store/test/selectors.js +130 -123
  421. package/src/store/utils.js +3 -10
  422. package/src/style.scss +4 -0
  423. package/build/components/duotone/components.js +0 -135
  424. package/build/components/duotone/components.js.map +0 -1
  425. package/build/components/duotone/index.js +0 -38
  426. package/build/components/duotone/index.js.map +0 -1
  427. package/build/components/global-styles/behaviors-panel.js +0 -64
  428. package/build/components/global-styles/behaviors-panel.js.map +0 -1
  429. package/build/components/inserter/reusable-blocks-tab.js +0 -85
  430. package/build/components/inserter/reusable-blocks-tab.js.map +0 -1
  431. package/build/hooks/auto-inserting-blocks.js +0 -174
  432. package/build/hooks/auto-inserting-blocks.js.map +0 -1
  433. package/build/hooks/behaviors.js +0 -173
  434. package/build/hooks/behaviors.js.map +0 -1
  435. package/build-module/components/duotone/components.js +0 -126
  436. package/build-module/components/duotone/components.js.map +0 -1
  437. package/build-module/components/duotone/index.js +0 -3
  438. package/build-module/components/duotone/index.js.map +0 -1
  439. package/build-module/components/global-styles/behaviors-panel.js +0 -57
  440. package/build-module/components/global-styles/behaviors-panel.js.map +0 -1
  441. package/build-module/components/inserter/reusable-blocks-tab.js +0 -76
  442. package/build-module/components/inserter/reusable-blocks-tab.js.map +0 -1
  443. package/build-module/hooks/auto-inserting-blocks.js +0 -167
  444. package/build-module/hooks/auto-inserting-blocks.js.map +0 -1
  445. package/build-module/hooks/behaviors.js +0 -166
  446. package/build-module/hooks/behaviors.js.map +0 -1
  447. package/src/components/duotone/components.js +0 -133
  448. package/src/components/duotone/index.js +0 -7
  449. package/src/components/global-styles/behaviors-panel.js +0 -71
  450. package/src/components/inserter/reusable-blocks-tab.js +0 -84
  451. package/src/components/inserter/test/reusable-blocks-tab.js +0 -73
  452. package/src/hooks/auto-inserting-blocks.js +0 -232
  453. package/src/hooks/behaviors.js +0 -206
@@ -1,76 +0,0 @@
1
- import { createElement, Fragment } from "@wordpress/element";
2
- /**
3
- * WordPress dependencies
4
- */
5
- import { useMemo } from '@wordpress/element';
6
- import { __ } from '@wordpress/i18n';
7
- import { addQueryArgs } from '@wordpress/url';
8
- import { Button } from '@wordpress/components';
9
-
10
- /**
11
- * Internal dependencies
12
- */
13
- import BlockTypesList from '../block-types-list';
14
- import InserterPanel from './panel';
15
- import InserterNoResults from './no-results';
16
- import useBlockTypesState from './hooks/use-block-types-state';
17
- import ReusableBlocksRenameHint from './reusable-block-rename-hint';
18
- function ReusableBlocksList({
19
- onHover,
20
- onInsert,
21
- rootClientId
22
- }) {
23
- const [items,,, onSelectItem] = useBlockTypesState(rootClientId, onInsert);
24
- const filteredItems = useMemo(() => {
25
- return items.filter(({
26
- category,
27
- syncStatus
28
- }) => category === 'reusable' && syncStatus !== 'unsynced');
29
- }, [items]);
30
- if (filteredItems.length === 0) {
31
- return createElement(InserterNoResults, null);
32
- }
33
- return createElement(InserterPanel, {
34
- title: __('Synced patterns')
35
- }, createElement(BlockTypesList, {
36
- items: filteredItems,
37
- onSelect: onSelectItem,
38
- onHover: onHover,
39
- label: __('Synced patterns')
40
- }));
41
- }
42
-
43
- // The unwrapped component is only exported for use by unit tests.
44
- /**
45
- * List of reusable blocks shown in the "Reusable" tab of the inserter.
46
- *
47
- * @param {Object} props Component props.
48
- * @param {?string} props.rootClientId Client id of block to insert into.
49
- * @param {Function} props.onInsert Callback to run when item is inserted.
50
- * @param {Function} props.onHover Callback to run when item is hovered.
51
- *
52
- * @return {WPComponent} The component.
53
- */
54
- export function ReusableBlocksTab({
55
- rootClientId,
56
- onInsert,
57
- onHover
58
- }) {
59
- return createElement(Fragment, null, createElement("div", {
60
- className: "block-editor-inserter__hint"
61
- }, createElement(ReusableBlocksRenameHint, null)), createElement(ReusableBlocksList, {
62
- onHover: onHover,
63
- onInsert: onInsert,
64
- rootClientId: rootClientId
65
- }), createElement("div", {
66
- className: "block-editor-inserter__manage-reusable-blocks-container"
67
- }, createElement(Button, {
68
- className: "block-editor-inserter__manage-reusable-blocks",
69
- variant: "secondary",
70
- href: addQueryArgs('edit.php', {
71
- post_type: 'wp_block'
72
- })
73
- }, __('Manage my patterns'))));
74
- }
75
- export default ReusableBlocksTab;
76
- //# sourceMappingURL=reusable-blocks-tab.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useMemo","__","addQueryArgs","Button","BlockTypesList","InserterPanel","InserterNoResults","useBlockTypesState","ReusableBlocksRenameHint","ReusableBlocksList","onHover","onInsert","rootClientId","items","onSelectItem","filteredItems","filter","category","syncStatus","length","createElement","title","onSelect","label","ReusableBlocksTab","Fragment","className","variant","href","post_type"],"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Button } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport ReusableBlocksRenameHint from './reusable-block-rename-hint';\n\nfunction ReusableBlocksList( { onHover, onInsert, rootClientId } ) {\n\tconst [ items, , , onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tconst filteredItems = useMemo( () => {\n\t\treturn items.filter(\n\t\t\t( { category, syncStatus } ) =>\n\t\t\t\tcategory === 'reusable' && syncStatus !== 'unsynced'\n\t\t);\n\t}, [ items ] );\n\n\tif ( filteredItems.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\treturn (\n\t\t<InserterPanel title={ __( 'Synced patterns' ) }>\n\t\t\t<BlockTypesList\n\t\t\t\titems={ filteredItems }\n\t\t\t\tonSelect={ onSelectItem }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ __( 'Synced patterns' ) }\n\t\t\t/>\n\t\t</InserterPanel>\n\t);\n}\n\n// The unwrapped component is only exported for use by unit tests.\n/**\n * List of reusable blocks shown in the \"Reusable\" tab of the inserter.\n *\n * @param {Object} props Component props.\n * @param {?string} props.rootClientId Client id of block to insert into.\n * @param {Function} props.onInsert Callback to run when item is inserted.\n * @param {Function} props.onHover Callback to run when item is hovered.\n *\n * @return {WPComponent} The component.\n */\nexport function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {\n\treturn (\n\t\t<>\n\t\t\t<div className=\"block-editor-inserter__hint\">\n\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t</div>\n\t\t\t<ReusableBlocksList\n\t\t\t\tonHover={ onHover }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t<div className=\"block-editor-inserter__manage-reusable-blocks-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"block-editor-inserter__manage-reusable-blocks\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\thref={ addQueryArgs( 'edit.php', {\n\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Manage my patterns' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,MAAM,QAAQ,uBAAuB;;AAE9C;AACA;AACA;AACA,OAAOC,cAAc,MAAM,qBAAqB;AAChD,OAAOC,aAAa,MAAM,SAAS;AACnC,OAAOC,iBAAiB,MAAM,cAAc;AAC5C,OAAOC,kBAAkB,MAAM,+BAA+B;AAC9D,OAAOC,wBAAwB,MAAM,8BAA8B;AAEnE,SAASC,kBAAkBA,CAAE;EAAEC,OAAO;EAAEC,QAAQ;EAAEC;AAAa,CAAC,EAAG;EAClE,MAAM,CAAEC,KAAK,IAAMC,YAAY,CAAE,GAAGP,kBAAkB,CACrDK,YAAY,EACZD,QACD,CAAC;EAED,MAAMI,aAAa,GAAGf,OAAO,CAAE,MAAM;IACpC,OAAOa,KAAK,CAACG,MAAM,CAClB,CAAE;MAAEC,QAAQ;MAAEC;IAAW,CAAC,KACzBD,QAAQ,KAAK,UAAU,IAAIC,UAAU,KAAK,UAC5C,CAAC;EACF,CAAC,EAAE,CAAEL,KAAK,CAAG,CAAC;EAEd,IAAKE,aAAa,CAACI,MAAM,KAAK,CAAC,EAAG;IACjC,OAAOC,aAAA,CAACd,iBAAiB,MAAE,CAAC;EAC7B;EAEA,OACCc,aAAA,CAACf,aAAa;IAACgB,KAAK,EAAGpB,EAAE,CAAE,iBAAkB;EAAG,GAC/CmB,aAAA,CAAChB,cAAc;IACdS,KAAK,EAAGE,aAAe;IACvBO,QAAQ,EAAGR,YAAc;IACzBJ,OAAO,EAAGA,OAAS;IACnBa,KAAK,EAAGtB,EAAE,CAAE,iBAAkB;EAAG,CACjC,CACa,CAAC;AAElB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASuB,iBAAiBA,CAAE;EAAEZ,YAAY;EAAED,QAAQ;EAAED;AAAQ,CAAC,EAAG;EACxE,OACCU,aAAA,CAAAK,QAAA,QACCL,aAAA;IAAKM,SAAS,EAAC;EAA6B,GAC3CN,aAAA,CAACZ,wBAAwB,MAAE,CACvB,CAAC,EACNY,aAAA,CAACX,kBAAkB;IAClBC,OAAO,EAAGA,OAAS;IACnBC,QAAQ,EAAGA,QAAU;IACrBC,YAAY,EAAGA;EAAc,CAC7B,CAAC,EACFQ,aAAA;IAAKM,SAAS,EAAC;EAAyD,GACvEN,aAAA,CAACjB,MAAM;IACNuB,SAAS,EAAC,+CAA+C;IACzDC,OAAO,EAAC,WAAW;IACnBC,IAAI,EAAG1B,YAAY,CAAE,UAAU,EAAE;MAChC2B,SAAS,EAAE;IACZ,CAAE;EAAG,GAEH5B,EAAE,CAAE,oBAAqB,CACpB,CACJ,CACJ,CAAC;AAEL;AAEA,eAAeuB,iBAAiB"}
@@ -1,167 +0,0 @@
1
- import { createElement } from "@wordpress/element";
2
- /**
3
- * WordPress dependencies
4
- */
5
- import { __ } from '@wordpress/i18n';
6
- import { addFilter } from '@wordpress/hooks';
7
- import { Fragment } from '@wordpress/element';
8
- import { PanelBody, ToggleControl } from '@wordpress/components';
9
- import { createHigherOrderComponent } from '@wordpress/compose';
10
- import { createBlock, store as blocksStore } from '@wordpress/blocks';
11
- import { useDispatch, useSelect } from '@wordpress/data';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { InspectorControls } from '../components';
17
- import { store as blockEditorStore } from '../store';
18
- function AutoInsertingBlocksControl(props) {
19
- const {
20
- autoInsertedBlocksForCurrentBlock,
21
- groupedAutoInsertedBlocks
22
- } = useSelect(select => {
23
- const {
24
- getBlockTypes
25
- } = select(blocksStore);
26
- const _autoInsertedBlocksForCurrentBlock = getBlockTypes()?.filter(({
27
- autoInsert
28
- }) => autoInsert && props.blockName in autoInsert);
29
-
30
- // Group by block namespace (i.e. prefix before the slash).
31
- const _groupedAutoInsertedBlocks = _autoInsertedBlocksForCurrentBlock?.reduce((groups, block) => {
32
- const [namespace] = block.name.split('/');
33
- if (!groups[namespace]) {
34
- groups[namespace] = [];
35
- }
36
- groups[namespace].push(block);
37
- return groups;
38
- }, {});
39
- return {
40
- autoInsertedBlocksForCurrentBlock: _autoInsertedBlocksForCurrentBlock,
41
- groupedAutoInsertedBlocks: _groupedAutoInsertedBlocks
42
- };
43
- }, [props.blockName]);
44
- const {
45
- autoInsertedBlockClientIds,
46
- blockIndex,
47
- rootClientId,
48
- innerBlocksLength
49
- } = useSelect(select => {
50
- const {
51
- getBlock,
52
- getBlockIndex,
53
- getBlockRootClientId
54
- } = select(blockEditorStore);
55
- const _rootClientId = getBlockRootClientId(props.clientId);
56
- const _autoInsertedBlockClientIds = autoInsertedBlocksForCurrentBlock.reduce((clientIds, block) => {
57
- const relativePosition = block?.autoInsert?.[props.blockName];
58
- let candidates;
59
- switch (relativePosition) {
60
- case 'before':
61
- case 'after':
62
- // Any of the current block's siblings (with the right block type) qualifies
63
- // as an auto-inserted block (inserted `before` or `after` the current one),
64
- // as the block might've been auto-inserted and then moved around a bit by the user.
65
- candidates = getBlock(_rootClientId)?.innerBlocks;
66
- break;
67
- case 'first_child':
68
- case 'last_child':
69
- // Any of the current block's child blocks (with the right block type) qualifies
70
- // as an auto-inserted first or last child block, as the block might've been
71
- // auto-inserted and then moved around a bit by the user.
72
- candidates = getBlock(props.clientId).innerBlocks;
73
- break;
74
- }
75
- const autoInsertedBlock = candidates?.find(({
76
- name
77
- }) => name === block.name);
78
- if (autoInsertedBlock) {
79
- clientIds[block.name] = autoInsertedBlock.clientId;
80
- }
81
-
82
- // TOOD: If no auto-inserted block was found in any of its designated locations,
83
- // we want to check if it's present elsewhere in the block tree.
84
- // If it is, we'd consider it manually inserted and would want to remove the
85
- // corresponding toggle from the block inspector panel.
86
-
87
- return clientIds;
88
- }, {});
89
- return {
90
- blockIndex: getBlockIndex(props.clientId),
91
- innerBlocksLength: getBlock(props.clientId)?.innerBlocks?.length,
92
- rootClientId: _rootClientId,
93
- autoInsertedBlockClientIds: _autoInsertedBlockClientIds
94
- };
95
- }, [autoInsertedBlocksForCurrentBlock, props.blockName, props.clientId]);
96
- const {
97
- insertBlock,
98
- removeBlock
99
- } = useDispatch(blockEditorStore);
100
- if (!autoInsertedBlocksForCurrentBlock.length) {
101
- return null;
102
- }
103
- const insertBlockIntoDesignatedLocation = (block, relativePosition) => {
104
- switch (relativePosition) {
105
- case 'before':
106
- case 'after':
107
- insertBlock(block, relativePosition === 'after' ? blockIndex + 1 : blockIndex, rootClientId,
108
- // Insert as a child of the current block's parent
109
- false);
110
- break;
111
- case 'first_child':
112
- case 'last_child':
113
- insertBlock(block,
114
- // TODO: It'd be great if insertBlock() would accept negative indices for insertion.
115
- relativePosition === 'first_child' ? 0 : innerBlocksLength, props.clientId,
116
- // Insert as a child of the current block.
117
- false);
118
- break;
119
- }
120
- };
121
- return createElement(InspectorControls, null, createElement(PanelBody, {
122
- title: __('Plugins'),
123
- initialOpen: true
124
- }, Object.keys(groupedAutoInsertedBlocks).map(vendor => {
125
- return createElement(Fragment, {
126
- key: vendor
127
- }, createElement("h3", null, vendor), groupedAutoInsertedBlocks[vendor].map(block => {
128
- // TODO: Display block icon.
129
- // <BlockIcon icon={ block.icon } />
130
-
131
- const checked = (block.name in autoInsertedBlockClientIds);
132
- return createElement(ToggleControl, {
133
- checked: checked,
134
- key: block.title,
135
- label: block.title,
136
- onChange: () => {
137
- if (!checked) {
138
- // Create and insert block.
139
- const relativePosition = block.autoInsert[props.blockName];
140
- insertBlockIntoDesignatedLocation(createBlock(block.name), relativePosition);
141
- return;
142
- }
143
-
144
- // Remove block.
145
- const clientId = autoInsertedBlockClientIds[block.name];
146
- removeBlock(clientId, false);
147
- }
148
- });
149
- }));
150
- })));
151
- }
152
- export const withAutoInsertingBlocks = createHigherOrderComponent(BlockEdit => {
153
- return props => {
154
- const blockEdit = createElement(BlockEdit, {
155
- key: "edit",
156
- ...props
157
- });
158
- return createElement(Fragment, null, blockEdit, createElement(AutoInsertingBlocksControl, {
159
- blockName: props.name,
160
- clientId: props.clientId
161
- }));
162
- };
163
- }, 'withAutoInsertingBlocks');
164
- if (window?.__experimentalAutoInsertingBlocks) {
165
- addFilter('editor.BlockEdit', 'core/auto-inserting-blocks/with-inspector-control', withAutoInsertingBlocks);
166
- }
167
- //# sourceMappingURL=auto-inserting-blocks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["__","addFilter","Fragment","PanelBody","ToggleControl","createHigherOrderComponent","createBlock","store","blocksStore","useDispatch","useSelect","InspectorControls","blockEditorStore","AutoInsertingBlocksControl","props","autoInsertedBlocksForCurrentBlock","groupedAutoInsertedBlocks","select","getBlockTypes","_autoInsertedBlocksForCurrentBlock","filter","autoInsert","blockName","_groupedAutoInsertedBlocks","reduce","groups","block","namespace","name","split","push","autoInsertedBlockClientIds","blockIndex","rootClientId","innerBlocksLength","getBlock","getBlockIndex","getBlockRootClientId","_rootClientId","clientId","_autoInsertedBlockClientIds","clientIds","relativePosition","candidates","innerBlocks","autoInsertedBlock","find","length","insertBlock","removeBlock","insertBlockIntoDesignatedLocation","createElement","title","initialOpen","Object","keys","map","vendor","key","checked","label","onChange","withAutoInsertingBlocks","BlockEdit","blockEdit","window","__experimentalAutoInsertingBlocks"],"sources":["@wordpress/block-editor/src/hooks/auto-inserting-blocks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { addFilter } from '@wordpress/hooks';\nimport { Fragment } from '@wordpress/element';\nimport { PanelBody, ToggleControl } from '@wordpress/components';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nfunction AutoInsertingBlocksControl( props ) {\n\tconst { autoInsertedBlocksForCurrentBlock, groupedAutoInsertedBlocks } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getBlockTypes } = select( blocksStore );\n\t\t\t\tconst _autoInsertedBlocksForCurrentBlock =\n\t\t\t\t\tgetBlockTypes()?.filter(\n\t\t\t\t\t\t( { autoInsert } ) =>\n\t\t\t\t\t\t\tautoInsert && props.blockName in autoInsert\n\t\t\t\t\t);\n\n\t\t\t\t// Group by block namespace (i.e. prefix before the slash).\n\t\t\t\tconst _groupedAutoInsertedBlocks =\n\t\t\t\t\t_autoInsertedBlocksForCurrentBlock?.reduce(\n\t\t\t\t\t\t( groups, block ) => {\n\t\t\t\t\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\t\t\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\t\t\t\t\tgroups[ namespace ] = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tgroups[ namespace ].push( block );\n\t\t\t\t\t\t\treturn groups;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tautoInsertedBlocksForCurrentBlock:\n\t\t\t\t\t\t_autoInsertedBlocksForCurrentBlock,\n\t\t\t\t\tgroupedAutoInsertedBlocks: _groupedAutoInsertedBlocks,\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ props.blockName ]\n\t\t);\n\n\tconst {\n\t\tautoInsertedBlockClientIds,\n\t\tblockIndex,\n\t\trootClientId,\n\t\tinnerBlocksLength,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockIndex, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst _rootClientId = getBlockRootClientId( props.clientId );\n\n\t\t\tconst _autoInsertedBlockClientIds =\n\t\t\t\tautoInsertedBlocksForCurrentBlock.reduce(\n\t\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\tblock?.autoInsert?.[ props.blockName ];\n\t\t\t\t\t\tlet candidates;\n\n\t\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t\t// as an auto-inserted block (inserted `before` or `after` the current one),\n\t\t\t\t\t\t\t\t// as the block might've been auto-inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\t\tcandidates =\n\t\t\t\t\t\t\t\t\tgetBlock( _rootClientId )?.innerBlocks;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t\t// as an auto-inserted first or last child block, as the block might've been\n\t\t\t\t\t\t\t\t// auto-inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\t\tcandidates = getBlock(\n\t\t\t\t\t\t\t\t\tprops.clientId\n\t\t\t\t\t\t\t\t).innerBlocks;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst autoInsertedBlock = candidates?.find(\n\t\t\t\t\t\t\t( { name } ) => name === block.name\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( autoInsertedBlock ) {\n\t\t\t\t\t\t\tclientIds[ block.name ] =\n\t\t\t\t\t\t\t\tautoInsertedBlock.clientId;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TOOD: If no auto-inserted block was found in any of its designated locations,\n\t\t\t\t\t\t// we want to check if it's present elsewhere in the block tree.\n\t\t\t\t\t\t// If it is, we'd consider it manually inserted and would want to remove the\n\t\t\t\t\t\t// corresponding toggle from the block inspector panel.\n\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t},\n\t\t\t\t\t{}\n\t\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( props.clientId ),\n\t\t\t\tinnerBlocksLength: getBlock( props.clientId )?.innerBlocks\n\t\t\t\t\t?.length,\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t\tautoInsertedBlockClientIds: _autoInsertedBlockClientIds,\n\t\t\t};\n\t\t},\n\t\t[ autoInsertedBlocksForCurrentBlock, props.blockName, props.clientId ]\n\t);\n\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! autoInsertedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tprops.clientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody title={ __( 'Plugins' ) } initialOpen={ true }>\n\t\t\t\t{ Object.keys( groupedAutoInsertedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedAutoInsertedBlocks[ vendor ].map(\n\t\t\t\t\t\t\t\t( block ) => {\n\t\t\t\t\t\t\t\t\t// TODO: Display block icon.\n\t\t\t\t\t\t\t\t\t// <BlockIcon icon={ block.icon } />\n\n\t\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\t\tblock.name in\n\t\t\t\t\t\t\t\t\t\tautoInsertedBlockClientIds;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\t\tlabel={ block.title }\n\t\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tblock.autoInsert[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprops.blockName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst clientId =\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoInsertedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t\t\tremoveBlock( clientId, false );\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport const withAutoInsertingBlocks = createHigherOrderComponent(\n\t( BlockEdit ) => {\n\t\treturn ( props ) => {\n\t\t\tconst blockEdit = <BlockEdit key=\"edit\" { ...props } />;\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t{ blockEdit }\n\t\t\t\t\t<AutoInsertingBlocksControl\n\t\t\t\t\t\tblockName={ props.name }\n\t\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t);\n\t\t};\n\t},\n\t'withAutoInsertingBlocks'\n);\n\nif ( window?.__experimentalAutoInsertingBlocks ) {\n\taddFilter(\n\t\t'editor.BlockEdit',\n\t\t'core/auto-inserting-blocks/with-inspector-control',\n\t\twithAutoInsertingBlocks\n\t);\n}\n"],"mappings":"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"}
@@ -1,166 +0,0 @@
1
- import { createElement, Fragment } from "@wordpress/element";
2
- /**
3
- * WordPress dependencies
4
- */
5
- import { addFilter } from '@wordpress/hooks';
6
- import { SelectControl } from '@wordpress/components';
7
- import { __ } from '@wordpress/i18n';
8
- import { hasBlockSupport } from '@wordpress/blocks';
9
- import { createHigherOrderComponent } from '@wordpress/compose';
10
- import { useSelect } from '@wordpress/data';
11
- import { useMemo } from '@wordpress/element';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { store as blockEditorStore } from '../store';
17
- import { InspectorControls } from '../components';
18
- function BehaviorsControl({
19
- blockName,
20
- blockBehaviors,
21
- onChangeBehavior,
22
- onChangeAnimation,
23
- disabled = false
24
- }) {
25
- const {
26
- settings
27
- } = useSelect(select => {
28
- const {
29
- getSettings
30
- } = select(blockEditorStore);
31
- return {
32
- settings: getSettings()?.__experimentalFeatures?.blocks?.[blockName]?.behaviors || {}
33
- };
34
- }, [blockName]);
35
- const defaultBehaviors = {
36
- default: {
37
- value: 'default',
38
- label: __('Default')
39
- },
40
- noBehaviors: {
41
- value: '',
42
- label: __('No behaviors')
43
- }
44
- };
45
- const behaviorsOptions = Object.entries(settings).filter(([behaviorName, behaviorValue]) => hasBlockSupport(blockName, `behaviors.${behaviorName}`) && behaviorValue) // Filter out behaviors that are disabled.
46
- .map(([behaviorName]) => ({
47
- value: behaviorName,
48
- // Capitalize the first letter of the behavior name.
49
- label: `${behaviorName.charAt(0).toUpperCase()}${behaviorName.slice(1).toLowerCase()}`
50
- }));
51
- const options = [...Object.values(defaultBehaviors), ...behaviorsOptions];
52
- const {
53
- behaviors,
54
- behaviorsValue
55
- } = useMemo(() => {
56
- const mergedBehaviors = {
57
- ...(blockBehaviors || {})
58
- };
59
- let value = '';
60
- if (blockBehaviors === undefined) {
61
- value = 'default';
62
- }
63
- if (blockBehaviors?.lightbox.enabled) {
64
- value = 'lightbox';
65
- }
66
- return {
67
- behaviors: mergedBehaviors,
68
- behaviorsValue: value
69
- };
70
- }, [blockBehaviors]);
71
-
72
- // If every behavior is disabled, do not show the behaviors inspector control.
73
- if (behaviorsOptions.length === 0) {
74
- return null;
75
- }
76
- const helpText = disabled ? __('The lightbox behavior is disabled for linked images.') : '';
77
- return createElement(InspectorControls, {
78
- group: "advanced"
79
- }, createElement("div", null, createElement(SelectControl, {
80
- label: __('Behaviors')
81
- // At the moment we are only supporting one behavior (Lightbox)
82
- ,
83
- value: behaviorsValue,
84
- options: options,
85
- onChange: onChangeBehavior,
86
- hideCancelButton: true,
87
- help: helpText,
88
- size: "__unstable-large",
89
- disabled: disabled
90
- }), behaviorsValue === 'lightbox' && createElement(SelectControl, {
91
- label: __('Animation')
92
- // At the moment we are only supporting one behavior (Lightbox)
93
- ,
94
- value: behaviors?.lightbox.animation ? behaviors?.lightbox.animation : '',
95
- options: [{
96
- value: 'zoom',
97
- label: __('Zoom')
98
- }, {
99
- value: 'fade',
100
- label: __('Fade')
101
- }],
102
- onChange: onChangeAnimation,
103
- hideCancelButton: false,
104
- size: "__unstable-large",
105
- disabled: disabled
106
- })));
107
- }
108
-
109
- /**
110
- * Override the default edit UI to include a new block inspector control for
111
- * assigning behaviors to blocks if behaviors are enabled in the theme.json.
112
- *
113
- * Currently, only the `core/image` block is supported.
114
- *
115
- * @param {WPComponent} BlockEdit Original component.
116
- *
117
- * @return {WPComponent} Wrapped component.
118
- */
119
- export const withBehaviors = createHigherOrderComponent(BlockEdit => {
120
- return props => {
121
- const blockEdit = createElement(BlockEdit, {
122
- key: "edit",
123
- ...props
124
- });
125
- // Only add behaviors to blocks with support.
126
- if (!hasBlockSupport(props.name, 'behaviors')) {
127
- return blockEdit;
128
- }
129
- const blockHasLink = typeof props.attributes?.linkDestination !== 'undefined' && props.attributes?.linkDestination !== 'none';
130
- return createElement(Fragment, null, blockEdit, createElement(BehaviorsControl, {
131
- blockName: props.name,
132
- blockBehaviors: props.attributes.behaviors,
133
- onChangeBehavior: nextValue => {
134
- if (nextValue === 'default') {
135
- props.setAttributes({
136
- behaviors: undefined
137
- });
138
- } else {
139
- // If the user selects something, it means that they want to
140
- // change the default value (true) so we save it in the attributes.
141
- props.setAttributes({
142
- behaviors: {
143
- lightbox: {
144
- enabled: nextValue === 'lightbox',
145
- animation: nextValue === 'lightbox' ? 'zoom' : ''
146
- }
147
- }
148
- });
149
- }
150
- },
151
- onChangeAnimation: nextValue => {
152
- props.setAttributes({
153
- behaviors: {
154
- lightbox: {
155
- enabled: props.attributes.behaviors.lightbox.enabled,
156
- animation: nextValue
157
- }
158
- }
159
- });
160
- },
161
- disabled: blockHasLink
162
- }));
163
- };
164
- }, 'withBehaviors');
165
- addFilter('editor.BlockEdit', 'core/behaviors/with-inspector-control', withBehaviors);
166
- //# sourceMappingURL=behaviors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["addFilter","SelectControl","__","hasBlockSupport","createHigherOrderComponent","useSelect","useMemo","store","blockEditorStore","InspectorControls","BehaviorsControl","blockName","blockBehaviors","onChangeBehavior","onChangeAnimation","disabled","settings","select","getSettings","__experimentalFeatures","blocks","behaviors","defaultBehaviors","default","value","label","noBehaviors","behaviorsOptions","Object","entries","filter","behaviorName","behaviorValue","map","charAt","toUpperCase","slice","toLowerCase","options","values","behaviorsValue","mergedBehaviors","undefined","lightbox","enabled","length","helpText","createElement","group","onChange","hideCancelButton","help","size","animation","withBehaviors","BlockEdit","props","blockEdit","key","name","blockHasLink","attributes","linkDestination","Fragment","nextValue","setAttributes"],"sources":["@wordpress/block-editor/src/hooks/behaviors.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { SelectControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\n\nfunction BehaviorsControl( {\n\tblockName,\n\tblockBehaviors,\n\tonChangeBehavior,\n\tonChangeAnimation,\n\tdisabled = false,\n} ) {\n\tconst { settings } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tsettings:\n\t\t\t\t\tgetSettings()?.__experimentalFeatures?.blocks?.[ blockName ]\n\t\t\t\t\t\t?.behaviors || {},\n\t\t\t};\n\t\t},\n\t\t[ blockName ]\n\t);\n\n\tconst defaultBehaviors = {\n\t\tdefault: {\n\t\t\tvalue: 'default',\n\t\t\tlabel: __( 'Default' ),\n\t\t},\n\t\tnoBehaviors: {\n\t\t\tvalue: '',\n\t\t\tlabel: __( 'No behaviors' ),\n\t\t},\n\t};\n\tconst behaviorsOptions = Object.entries( settings )\n\t\t.filter(\n\t\t\t( [ behaviorName, behaviorValue ] ) =>\n\t\t\t\thasBlockSupport( blockName, `behaviors.${ behaviorName }` ) &&\n\t\t\t\tbehaviorValue\n\t\t) // Filter out behaviors that are disabled.\n\t\t.map( ( [ behaviorName ] ) => ( {\n\t\t\tvalue: behaviorName,\n\t\t\t// Capitalize the first letter of the behavior name.\n\t\t\tlabel: `${ behaviorName.charAt( 0 ).toUpperCase() }${ behaviorName\n\t\t\t\t.slice( 1 )\n\t\t\t\t.toLowerCase() }`,\n\t\t} ) );\n\tconst options = [\n\t\t...Object.values( defaultBehaviors ),\n\t\t...behaviorsOptions,\n\t];\n\n\tconst { behaviors, behaviorsValue } = useMemo( () => {\n\t\tconst mergedBehaviors = {\n\t\t\t...( blockBehaviors || {} ),\n\t\t};\n\n\t\tlet value = '';\n\t\tif ( blockBehaviors === undefined ) {\n\t\t\tvalue = 'default';\n\t\t}\n\t\tif ( blockBehaviors?.lightbox.enabled ) {\n\t\t\tvalue = 'lightbox';\n\t\t}\n\t\treturn {\n\t\t\tbehaviors: mergedBehaviors,\n\t\t\tbehaviorsValue: value,\n\t\t};\n\t}, [ blockBehaviors ] );\n\n\t// If every behavior is disabled, do not show the behaviors inspector control.\n\tif ( behaviorsOptions.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst helpText = disabled\n\t\t? __( 'The lightbox behavior is disabled for linked images.' )\n\t\t: '';\n\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<div>\n\t\t\t\t<SelectControl\n\t\t\t\t\tlabel={ __( 'Behaviors' ) }\n\t\t\t\t\t// At the moment we are only supporting one behavior (Lightbox)\n\t\t\t\t\tvalue={ behaviorsValue }\n\t\t\t\t\toptions={ options }\n\t\t\t\t\tonChange={ onChangeBehavior }\n\t\t\t\t\thideCancelButton={ true }\n\t\t\t\t\thelp={ helpText }\n\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t/>\n\t\t\t\t{ behaviorsValue === 'lightbox' && (\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\tlabel={ __( 'Animation' ) }\n\t\t\t\t\t\t// At the moment we are only supporting one behavior (Lightbox)\n\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\tbehaviors?.lightbox.animation\n\t\t\t\t\t\t\t\t? behaviors?.lightbox.animation\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue: 'zoom',\n\t\t\t\t\t\t\t\tlabel: __( 'Zoom' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue: 'fade',\n\t\t\t\t\t\t\t\tlabel: __( 'Fade' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t] }\n\t\t\t\t\t\tonChange={ onChangeAnimation }\n\t\t\t\t\t\thideCancelButton={ false }\n\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Override the default edit UI to include a new block inspector control for\n * assigning behaviors to blocks if behaviors are enabled in the theme.json.\n *\n * Currently, only the `core/image` block is supported.\n *\n * @param {WPComponent} BlockEdit Original component.\n *\n * @return {WPComponent} Wrapped component.\n */\nexport const withBehaviors = createHigherOrderComponent( ( BlockEdit ) => {\n\treturn ( props ) => {\n\t\tconst blockEdit = <BlockEdit key=\"edit\" { ...props } />;\n\t\t// Only add behaviors to blocks with support.\n\t\tif ( ! hasBlockSupport( props.name, 'behaviors' ) ) {\n\t\t\treturn blockEdit;\n\t\t}\n\t\tconst blockHasLink =\n\t\t\ttypeof props.attributes?.linkDestination !== 'undefined' &&\n\t\t\tprops.attributes?.linkDestination !== 'none';\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ blockEdit }\n\t\t\t\t<BehaviorsControl\n\t\t\t\t\tblockName={ props.name }\n\t\t\t\t\tblockBehaviors={ props.attributes.behaviors }\n\t\t\t\t\tonChangeBehavior={ ( nextValue ) => {\n\t\t\t\t\t\tif ( nextValue === 'default' ) {\n\t\t\t\t\t\t\tprops.setAttributes( {\n\t\t\t\t\t\t\t\tbehaviors: undefined,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// If the user selects something, it means that they want to\n\t\t\t\t\t\t\t// change the default value (true) so we save it in the attributes.\n\t\t\t\t\t\t\tprops.setAttributes( {\n\t\t\t\t\t\t\t\tbehaviors: {\n\t\t\t\t\t\t\t\t\tlightbox: {\n\t\t\t\t\t\t\t\t\t\tenabled: nextValue === 'lightbox',\n\t\t\t\t\t\t\t\t\t\tanimation:\n\t\t\t\t\t\t\t\t\t\t\tnextValue === 'lightbox'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'zoom'\n\t\t\t\t\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tonChangeAnimation={ ( nextValue ) => {\n\t\t\t\t\t\tprops.setAttributes( {\n\t\t\t\t\t\t\tbehaviors: {\n\t\t\t\t\t\t\t\tlightbox: {\n\t\t\t\t\t\t\t\t\tenabled:\n\t\t\t\t\t\t\t\t\t\tprops.attributes.behaviors.lightbox\n\t\t\t\t\t\t\t\t\t\t\t.enabled,\n\t\t\t\t\t\t\t\t\tanimation: nextValue,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdisabled={ blockHasLink }\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t};\n}, 'withBehaviors' );\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/behaviors/with-inspector-control',\n\twithBehaviors\n);\n"],"mappings":"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"}
@@ -1,133 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { SVG } from '@wordpress/components';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import { __unstableGetValuesFromColors as getValuesFromColors } from './index';
10
-
11
- /**
12
- * SVG and stylesheet needed for rendering the duotone filter.
13
- *
14
- * @param {Object} props Duotone props.
15
- * @param {string} props.selector Selector to apply the filter to.
16
- * @param {string} props.id Unique id for this duotone filter.
17
- *
18
- * @return {WPElement} Duotone element.
19
- */
20
- export function DuotoneStylesheet( { selector, id } ) {
21
- const css = `
22
- ${ selector } {
23
- filter: url( #${ id } );
24
- }
25
- `;
26
- return <style>{ css }</style>;
27
- }
28
-
29
- /**
30
- * Stylesheet for disabling a global styles duotone filter.
31
- *
32
- * @param {Object} props Duotone props.
33
- * @param {string} props.selector Selector to disable the filter for.
34
- *
35
- * @return {WPElement} Filter none style element.
36
- */
37
- export function DuotoneUnsetStylesheet( { selector } ) {
38
- const css = `
39
- ${ selector } {
40
- filter: none;
41
- }
42
- `;
43
- return <style>{ css }</style>;
44
- }
45
-
46
- /**
47
- * The SVG part of the duotone filter.
48
- *
49
- * @param {Object} props Duotone props.
50
- * @param {string} props.id Unique id for this duotone filter.
51
- * @param {string[]} props.colors Color strings from dark to light.
52
- *
53
- * @return {WPElement} Duotone SVG.
54
- */
55
- export function DuotoneFilter( { id, colors } ) {
56
- const values = getValuesFromColors( colors );
57
- return (
58
- <SVG
59
- xmlnsXlink="http://www.w3.org/1999/xlink"
60
- viewBox="0 0 0 0"
61
- width="0"
62
- height="0"
63
- focusable="false"
64
- role="none"
65
- style={ {
66
- visibility: 'hidden',
67
- position: 'absolute',
68
- left: '-9999px',
69
- overflow: 'hidden',
70
- } }
71
- >
72
- <defs>
73
- <filter id={ id }>
74
- <feColorMatrix
75
- // Use sRGB instead of linearRGB so transparency looks correct.
76
- colorInterpolationFilters="sRGB"
77
- type="matrix"
78
- // Use perceptual brightness to convert to grayscale.
79
- values="
80
- .299 .587 .114 0 0
81
- .299 .587 .114 0 0
82
- .299 .587 .114 0 0
83
- .299 .587 .114 0 0
84
- "
85
- />
86
- <feComponentTransfer
87
- // Use sRGB instead of linearRGB to be consistent with how CSS gradients work.
88
- colorInterpolationFilters="sRGB"
89
- >
90
- <feFuncR
91
- type="table"
92
- tableValues={ values.r.join( ' ' ) }
93
- />
94
- <feFuncG
95
- type="table"
96
- tableValues={ values.g.join( ' ' ) }
97
- />
98
- <feFuncB
99
- type="table"
100
- tableValues={ values.b.join( ' ' ) }
101
- />
102
- <feFuncA
103
- type="table"
104
- tableValues={ values.a.join( ' ' ) }
105
- />
106
- </feComponentTransfer>
107
- <feComposite
108
- // Re-mask the image with the original transparency since the feColorMatrix above loses that information.
109
- in2="SourceGraphic"
110
- operator="in"
111
- />
112
- </filter>
113
- </defs>
114
- </SVG>
115
- );
116
- }
117
-
118
- /**
119
- * SVG from a duotone preset
120
- *
121
- * @param {Object} props Duotone props.
122
- * @param {Object} props.preset Duotone preset settings.
123
- *
124
- * @return {WPElement} Duotone element.
125
- */
126
- export function PresetDuotoneFilter( { preset } ) {
127
- return (
128
- <DuotoneFilter
129
- id={ `wp-duotone-${ preset.slug }` }
130
- colors={ preset.colors }
131
- />
132
- );
133
- }
@@ -1,7 +0,0 @@
1
- export { getValuesFromColors as __unstableGetValuesFromColors } from './utils';
2
- export {
3
- DuotoneFilter as __unstableDuotoneFilter,
4
- PresetDuotoneFilter as __unstablePresetDuotoneFilter,
5
- DuotoneStylesheet as __unstableDuotoneStylesheet,
6
- DuotoneUnsetStylesheet as __unstableDuotoneUnsetStylesheet,
7
- } from './components';