@wordpress/block-editor 6.1.12 → 6.1.15

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 (55) hide show
  1. package/README.md +100 -98
  2. package/build/components/block-list/head.js +27 -0
  3. package/build/components/block-list/head.js.map +1 -0
  4. package/build/components/block-list/index.js +4 -2
  5. package/build/components/block-list/index.js.map +1 -1
  6. package/build/components/iframe/index.js +34 -5
  7. package/build/components/iframe/index.js.map +1 -1
  8. package/build/components/rich-text/use-input-rules.js +5 -2
  9. package/build/components/rich-text/use-input-rules.js.map +1 -1
  10. package/build/components/use-setting/index.js +1 -1
  11. package/build/components/use-setting/index.js.map +1 -1
  12. package/build/components/writing-flow/index.js +27 -14
  13. package/build/components/writing-flow/index.js.map +1 -1
  14. package/build/components/writing-flow/use-select-all.js +36 -34
  15. package/build/components/writing-flow/use-select-all.js.map +1 -1
  16. package/build/components/writing-flow/use-tab-nav.js +8 -0
  17. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  18. package/build/hooks/duotone.js +5 -2
  19. package/build/hooks/duotone.js.map +1 -1
  20. package/build/hooks/layout.js +5 -2
  21. package/build/hooks/layout.js.map +1 -1
  22. package/build-module/components/block-list/head.js +19 -0
  23. package/build-module/components/block-list/head.js.map +1 -0
  24. package/build-module/components/block-list/index.js +3 -2
  25. package/build-module/components/block-list/index.js.map +1 -1
  26. package/build-module/components/iframe/index.js +34 -5
  27. package/build-module/components/iframe/index.js.map +1 -1
  28. package/build-module/components/rich-text/use-input-rules.js +5 -2
  29. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  30. package/build-module/components/use-setting/index.js +1 -1
  31. package/build-module/components/use-setting/index.js.map +1 -1
  32. package/build-module/components/writing-flow/index.js +23 -12
  33. package/build-module/components/writing-flow/index.js.map +1 -1
  34. package/build-module/components/writing-flow/use-select-all.js +30 -28
  35. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  36. package/build-module/components/writing-flow/use-tab-nav.js +8 -0
  37. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  38. package/build-module/hooks/duotone.js +5 -2
  39. package/build-module/hooks/duotone.js.map +1 -1
  40. package/build-module/hooks/layout.js +5 -2
  41. package/build-module/hooks/layout.js.map +1 -1
  42. package/build-style/style-rtl.css +1 -1
  43. package/build-style/style.css +1 -1
  44. package/package.json +23 -23
  45. package/src/components/block-list/head.js +18 -0
  46. package/src/components/block-list/index.js +21 -18
  47. package/src/components/block-list-appender/style.scss +3 -4
  48. package/src/components/iframe/index.js +39 -7
  49. package/src/components/rich-text/use-input-rules.js +4 -2
  50. package/src/components/use-setting/index.js +1 -1
  51. package/src/components/writing-flow/index.js +23 -10
  52. package/src/components/writing-flow/use-select-all.js +33 -35
  53. package/src/components/writing-flow/use-tab-nav.js +8 -0
  54. package/src/hooks/duotone.js +13 -5
  55. package/src/hooks/layout.js +12 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/use-setting/index.js"],"names":["get","useSelect","useBlockEditContext","store","blockEditorStore","deprecatedFlags","settings","colors","undefined","gradients","disableCustomColors","disableCustomGradients","fontSizes","disableCustomFontSizes","enableCustomLineHeight","enableCustomUnits","enableCustomSpacing","PATHS_WITH_MERGE","useSetting","path","name","blockName","setting","select","getSettings","defaultsPath","blockPath","experimentalFeaturesResult","user","theme","core","deprecatedSettingsValue"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { store as blockEditorStore } from '../../store';\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) =>\n\t\tsettings.colors === undefined ? undefined : settings.colors,\n\t'color.gradients': ( settings ) =>\n\t\tsettings.gradients === undefined ? undefined : settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) =>\n\t\tsettings.fontSizes === undefined ? undefined : settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.customLineHeight': ( settings ) =>\n\t\tsettings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.customPadding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst PATHS_WITH_MERGE = {\n\t'color.gradients': true,\n\t'color.palette': true,\n\t'typography.fontFamilies': true,\n\t'typography.fontSizes': true,\n};\n\n/**\n * Hook that retrieves the editor setting.\n * It works with nested objects using by finding the value at path.\n *\n * @param {string} path The path to the setting.\n *\n * @return {any} Returns the value defined for the setting.\n *\n * @example\n * ```js\n * const isEnabled = useSetting( 'typography.dropCap' );\n * ```\n */\nexport default function useSetting( path ) {\n\tconst { name: blockName } = useBlockEditContext();\n\n\tconst setting = useSelect(\n\t\t( select ) => {\n\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\n\t\t\t// 1 - Use __experimental features, if available.\n\t\t\t// We cascade to the all value if the block one is not available.\n\t\t\tconst defaultsPath = `__experimentalFeatures.${ path }`;\n\t\t\tconst blockPath = `__experimentalFeatures.blocks.${ blockName }.${ path }`;\n\t\t\tconst experimentalFeaturesResult =\n\t\t\t\tget( settings, blockPath ) ?? get( settings, defaultsPath );\n\t\t\tif ( experimentalFeaturesResult !== undefined ) {\n\t\t\t\tif ( PATHS_WITH_MERGE[ path ] ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\texperimentalFeaturesResult.user ??\n\t\t\t\t\t\texperimentalFeaturesResult.theme ??\n\t\t\t\t\t\texperimentalFeaturesResult.core\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn experimentalFeaturesResult;\n\t\t\t}\n\n\t\t\t// 2 - Use deprecated settings, otherwise.\n\t\t\tconst deprecatedSettingsValue = deprecatedFlags[ path ]\n\t\t\t\t? deprecatedFlags[ path ]( settings )\n\t\t\t\t: undefined;\n\t\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\t\treturn deprecatedSettingsValue;\n\t\t\t}\n\n\t\t\t// 3 - Fall back for typography.dropCap:\n\t\t\t// This is only necessary to support typography.dropCap.\n\t\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t\t// To remove when __experimentalFeatures are ported to core.\n\t\t\treturn path === 'typography.dropCap' ? true : undefined;\n\t\t},\n\t\t[ blockName, path ]\n\t);\n\n\treturn setting;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/use-setting/index.js"],"names":["get","useSelect","useBlockEditContext","store","blockEditorStore","deprecatedFlags","settings","colors","undefined","gradients","disableCustomColors","disableCustomGradients","fontSizes","disableCustomFontSizes","enableCustomLineHeight","enableCustomUnits","enableCustomSpacing","PATHS_WITH_MERGE","useSetting","path","name","blockName","setting","select","getSettings","defaultsPath","blockPath","experimentalFeaturesResult","user","theme","core","deprecatedSettingsValue"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { store as blockEditorStore } from '../../store';\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) =>\n\t\tsettings.colors === undefined ? undefined : settings.colors,\n\t'color.gradients': ( settings ) =>\n\t\tsettings.gradients === undefined ? undefined : settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) =>\n\t\tsettings.fontSizes === undefined ? undefined : settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.customLineHeight': ( settings ) =>\n\t\tsettings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw', '%' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.customPadding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst PATHS_WITH_MERGE = {\n\t'color.gradients': true,\n\t'color.palette': true,\n\t'typography.fontFamilies': true,\n\t'typography.fontSizes': true,\n};\n\n/**\n * Hook that retrieves the editor setting.\n * It works with nested objects using by finding the value at path.\n *\n * @param {string} path The path to the setting.\n *\n * @return {any} Returns the value defined for the setting.\n *\n * @example\n * ```js\n * const isEnabled = useSetting( 'typography.dropCap' );\n * ```\n */\nexport default function useSetting( path ) {\n\tconst { name: blockName } = useBlockEditContext();\n\n\tconst setting = useSelect(\n\t\t( select ) => {\n\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\n\t\t\t// 1 - Use __experimental features, if available.\n\t\t\t// We cascade to the all value if the block one is not available.\n\t\t\tconst defaultsPath = `__experimentalFeatures.${ path }`;\n\t\t\tconst blockPath = `__experimentalFeatures.blocks.${ blockName }.${ path }`;\n\t\t\tconst experimentalFeaturesResult =\n\t\t\t\tget( settings, blockPath ) ?? get( settings, defaultsPath );\n\t\t\tif ( experimentalFeaturesResult !== undefined ) {\n\t\t\t\tif ( PATHS_WITH_MERGE[ path ] ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\texperimentalFeaturesResult.user ??\n\t\t\t\t\t\texperimentalFeaturesResult.theme ??\n\t\t\t\t\t\texperimentalFeaturesResult.core\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn experimentalFeaturesResult;\n\t\t\t}\n\n\t\t\t// 2 - Use deprecated settings, otherwise.\n\t\t\tconst deprecatedSettingsValue = deprecatedFlags[ path ]\n\t\t\t\t? deprecatedFlags[ path ]( settings )\n\t\t\t\t: undefined;\n\t\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\t\treturn deprecatedSettingsValue;\n\t\t\t}\n\n\t\t\t// 3 - Fall back for typography.dropCap:\n\t\t\t// This is only necessary to support typography.dropCap.\n\t\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t\t// To remove when __experimentalFeatures are ported to core.\n\t\t\treturn path === 'typography.dropCap' ? true : undefined;\n\t\t},\n\t\t[ blockName, path ]\n\t);\n\n\treturn setting;\n}\n"]}
@@ -1,11 +1,18 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import { createElement, Fragment } from "@wordpress/element";
2
3
 
4
+ /**
5
+ * External dependencies
6
+ */
7
+ import classNames from 'classnames';
3
8
  /**
4
9
  * WordPress dependencies
5
10
  */
11
+
6
12
  import { useSelect } from '@wordpress/data';
7
13
  import { __ } from '@wordpress/i18n';
8
14
  import { useMergeRefs } from '@wordpress/compose';
15
+ import { forwardRef } from '@wordpress/element';
9
16
  /**
10
17
  * Internal dependencies
11
18
  */
@@ -15,6 +22,20 @@ import useTabNav from './use-tab-nav';
15
22
  import useArrowNav from './use-arrow-nav';
16
23
  import useSelectAll from './use-select-all';
17
24
  import { store as blockEditorStore } from '../../store';
25
+
26
+ function WritingFlow({
27
+ children,
28
+ ...props
29
+ }, forwardedRef) {
30
+ const [before, ref, after] = useTabNav();
31
+ const hasMultiSelection = useSelect(select => select(blockEditorStore).hasMultiSelection(), []);
32
+ return createElement(Fragment, null, before, createElement("div", _extends({}, props, {
33
+ ref: useMergeRefs([forwardedRef, ref, useMultiSelection(), useSelectAll(), useArrowNav()]),
34
+ className: classNames(props.className, 'block-editor-writing-flow'),
35
+ tabIndex: -1,
36
+ "aria-label": hasMultiSelection ? __('Multiple selected blocks') : undefined
37
+ }), children), after);
38
+ }
18
39
  /**
19
40
  * Handles selection and navigation across blocks. This component should be
20
41
  * wrapped around BlockList.
@@ -23,16 +44,6 @@ import { store as blockEditorStore } from '../../store';
23
44
  * @param {WPElement} props.children Children to be rendered.
24
45
  */
25
46
 
26
- export default function WritingFlow({
27
- children
28
- }) {
29
- const [before, ref, after] = useTabNav();
30
- const hasMultiSelection = useSelect(select => select(blockEditorStore).hasMultiSelection(), []);
31
- return createElement(Fragment, null, before, createElement("div", {
32
- ref: useMergeRefs([ref, useMultiSelection(), useSelectAll(), useArrowNav()]),
33
- className: "block-editor-writing-flow",
34
- tabIndex: hasMultiSelection ? '0' : undefined,
35
- "aria-label": hasMultiSelection ? __('Multiple selected blocks') : undefined
36
- }, children), after);
37
- }
47
+
48
+ export default forwardRef(WritingFlow);
38
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/index.js"],"names":["useSelect","__","useMergeRefs","useMultiSelection","useTabNav","useArrowNav","useSelectAll","store","blockEditorStore","WritingFlow","children","before","ref","after","hasMultiSelection","select","undefined"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,iBAA1B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,YAAT,QAA6B,oBAA7B;AAEA;AACA;AACA;;AACA,OAAOC,iBAAP,MAA8B,uBAA9B;AACA,OAAOC,SAAP,MAAsB,eAAtB;AACA,OAAOC,WAAP,MAAwB,iBAAxB;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,WAAT,CAAsB;AAAEC,EAAAA;AAAF,CAAtB,EAAqC;AACnD,QAAM,CAAEC,MAAF,EAAUC,GAAV,EAAeC,KAAf,IAAyBT,SAAS,EAAxC;AACA,QAAMU,iBAAiB,GAAGd,SAAS,CAChCe,MAAF,IAAcA,MAAM,CAAEP,gBAAF,CAAN,CAA2BM,iBAA3B,EADoB,EAElC,EAFkC,CAAnC;AAIA,SACC,8BACGH,MADH,EAEC;AACC,IAAA,GAAG,EAAGT,YAAY,CAAE,CACnBU,GADmB,EAEnBT,iBAAiB,EAFE,EAGnBG,YAAY,EAHO,EAInBD,WAAW,EAJQ,CAAF,CADnB;AAOC,IAAA,SAAS,EAAC,2BAPX;AAQC,IAAA,QAAQ,EAAGS,iBAAiB,GAAG,GAAH,GAASE,SARtC;AASC,kBACCF,iBAAiB,GACdb,EAAE,CAAE,0BAAF,CADY,GAEde;AAZL,KAeGN,QAfH,CAFD,EAmBGG,KAnBH,CADD;AAuBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useMultiSelection from './use-multi-selection';\nimport useTabNav from './use-tab-nav';\nimport useArrowNav from './use-arrow-nav';\nimport useSelectAll from './use-select-all';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Handles selection and navigation across blocks. This component should be\n * wrapped around BlockList.\n *\n * @param {Object} props Component properties.\n * @param {WPElement} props.children Children to be rendered.\n */\nexport default function WritingFlow( { children } ) {\n\tconst [ before, ref, after ] = useTabNav();\n\tconst hasMultiSelection = useSelect(\n\t\t( select ) => select( blockEditorStore ).hasMultiSelection(),\n\t\t[]\n\t);\n\treturn (\n\t\t<>\n\t\t\t{ before }\n\t\t\t<div\n\t\t\t\tref={ useMergeRefs( [\n\t\t\t\t\tref,\n\t\t\t\t\tuseMultiSelection(),\n\t\t\t\t\tuseSelectAll(),\n\t\t\t\t\tuseArrowNav(),\n\t\t\t\t] ) }\n\t\t\t\tclassName=\"block-editor-writing-flow\"\n\t\t\t\ttabIndex={ hasMultiSelection ? '0' : undefined }\n\t\t\t\taria-label={\n\t\t\t\t\thasMultiSelection\n\t\t\t\t\t\t? __( 'Multiple selected blocks' )\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</div>\n\t\t\t{ after }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/index.js"],"names":["classNames","useSelect","__","useMergeRefs","forwardRef","useMultiSelection","useTabNav","useArrowNav","useSelectAll","store","blockEditorStore","WritingFlow","children","props","forwardedRef","before","ref","after","hasMultiSelection","select","className","undefined"],"mappings":";;;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,YAAT,QAA6B,oBAA7B;AACA,SAASC,UAAT,QAA2B,oBAA3B;AAEA;AACA;AACA;;AACA,OAAOC,iBAAP,MAA8B,uBAA9B;AACA,OAAOC,SAAP,MAAsB,eAAtB;AACA,OAAOC,WAAP,MAAwB,iBAAxB;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;;AAEA,SAASC,WAAT,CAAsB;AAAEC,EAAAA,QAAF;AAAY,KAAGC;AAAf,CAAtB,EAA8CC,YAA9C,EAA6D;AAC5D,QAAM,CAAEC,MAAF,EAAUC,GAAV,EAAeC,KAAf,IAAyBX,SAAS,EAAxC;AACA,QAAMY,iBAAiB,GAAGjB,SAAS,CAChCkB,MAAF,IAAcA,MAAM,CAAET,gBAAF,CAAN,CAA2BQ,iBAA3B,EADoB,EAElC,EAFkC,CAAnC;AAIA,SACC,8BACGH,MADH,EAEC,kCACMF,KADN;AAEC,IAAA,GAAG,EAAGV,YAAY,CAAE,CACnBW,YADmB,EAEnBE,GAFmB,EAGnBX,iBAAiB,EAHE,EAInBG,YAAY,EAJO,EAKnBD,WAAW,EALQ,CAAF,CAFnB;AASC,IAAA,SAAS,EAAGP,UAAU,CACrBa,KAAK,CAACO,SADe,EAErB,2BAFqB,CATvB;AAaC,IAAA,QAAQ,EAAG,CAAC,CAbb;AAcC,kBACCF,iBAAiB,GACdhB,EAAE,CAAE,0BAAF,CADY,GAEdmB;AAjBL,MAoBGT,QApBH,CAFD,EAwBGK,KAxBH,CADD;AA4BA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAeb,UAAU,CAAEO,WAAF,CAAzB","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMultiSelection from './use-multi-selection';\nimport useTabNav from './use-tab-nav';\nimport useArrowNav from './use-arrow-nav';\nimport useSelectAll from './use-select-all';\nimport { store as blockEditorStore } from '../../store';\n\nfunction WritingFlow( { children, ...props }, forwardedRef ) {\n\tconst [ before, ref, after ] = useTabNav();\n\tconst hasMultiSelection = useSelect(\n\t\t( select ) => select( blockEditorStore ).hasMultiSelection(),\n\t\t[]\n\t);\n\treturn (\n\t\t<>\n\t\t\t{ before }\n\t\t\t<div\n\t\t\t\t{ ...props }\n\t\t\t\tref={ useMergeRefs( [\n\t\t\t\t\tforwardedRef,\n\t\t\t\t\tref,\n\t\t\t\t\tuseMultiSelection(),\n\t\t\t\t\tuseSelectAll(),\n\t\t\t\t\tuseArrowNav(),\n\t\t\t\t] ) }\n\t\t\t\tclassName={ classNames(\n\t\t\t\t\tprops.className,\n\t\t\t\t\t'block-editor-writing-flow'\n\t\t\t\t) }\n\t\t\t\ttabIndex={ -1 }\n\t\t\t\taria-label={\n\t\t\t\t\thasMultiSelection\n\t\t\t\t\t\t? __( 'Multiple selected blocks' )\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</div>\n\t\t\t{ after }\n\t\t</>\n\t);\n}\n\n/**\n * Handles selection and navigation across blocks. This component should be\n * wrapped around BlockList.\n *\n * @param {Object} props Component properties.\n * @param {WPElement} props.children Children to be rendered.\n */\nexport default forwardRef( WritingFlow );\n"]}
@@ -7,16 +7,15 @@ import { first, last } from 'lodash';
7
7
  */
8
8
 
9
9
  import { isEntirelySelected } from '@wordpress/dom';
10
- import { useRef, useCallback } from '@wordpress/element';
11
10
  import { useSelect, useDispatch } from '@wordpress/data';
12
- import { useShortcut } from '@wordpress/keyboard-shortcuts';
11
+ import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';
12
+ import { useRefEffect } from '@wordpress/compose';
13
13
  /**
14
14
  * Internal dependencies
15
15
  */
16
16
 
17
17
  import { store as blockEditorStore } from '../../store';
18
18
  export default function useSelectAll() {
19
- const ref = useRef();
20
19
  const {
21
20
  getBlockOrder,
22
21
  getSelectedBlockClientIds,
@@ -25,39 +24,42 @@ export default function useSelectAll() {
25
24
  const {
26
25
  multiSelect
27
26
  } = useDispatch(blockEditorStore);
28
- const callback = useCallback(event => {
29
- const selectedClientIds = getSelectedBlockClientIds();
27
+ const isMatch = useShortcutEventMatch();
28
+ return useRefEffect(node => {
29
+ function onKeyDown(event) {
30
+ if (!isMatch('core/block-editor/select-all', event)) {
31
+ return;
32
+ }
30
33
 
31
- if (!selectedClientIds.length) {
32
- return;
33
- }
34
+ if (!isEntirelySelected(event.target)) {
35
+ return;
36
+ }
34
37
 
35
- if (selectedClientIds.length === 1 && !isEntirelySelected(event.target)) {
36
- return;
37
- }
38
+ const selectedClientIds = getSelectedBlockClientIds();
39
+ const [firstSelectedClientId] = selectedClientIds;
40
+ const rootClientId = getBlockRootClientId(firstSelectedClientId);
41
+ let blockClientIds = getBlockOrder(rootClientId); // If we have selected all sibling nested blocks, try selecting up a
42
+ // level. See: https://github.com/WordPress/gutenberg/pull/31859/
38
43
 
39
- const [firstSelectedClientId] = selectedClientIds;
40
- const rootClientId = getBlockRootClientId(firstSelectedClientId);
41
- let blockClientIds = getBlockOrder(rootClientId); // If we have selected all sibling nested blocks, try selecting up a
42
- // level. See: https://github.com/WordPress/gutenberg/pull/31859/
44
+ if (selectedClientIds.length === blockClientIds.length) {
45
+ blockClientIds = getBlockOrder(getBlockRootClientId(rootClientId));
46
+ }
43
47
 
44
- if (selectedClientIds.length === blockClientIds.length) {
45
- blockClientIds = getBlockOrder(getBlockRootClientId(rootClientId));
46
- }
48
+ const firstClientId = first(blockClientIds);
49
+ const lastClientId = last(blockClientIds);
47
50
 
48
- const firstClientId = first(blockClientIds);
49
- const lastClientId = last(blockClientIds);
51
+ if (firstClientId === lastClientId) {
52
+ return;
53
+ }
50
54
 
51
- if (firstClientId === lastClientId) {
52
- return;
55
+ multiSelect(firstClientId, lastClientId);
56
+ event.preventDefault();
53
57
  }
54
58
 
55
- multiSelect(firstClientId, lastClientId);
56
- event.preventDefault();
57
- }, []);
58
- useShortcut('core/block-editor/select-all', callback, {
59
- target: ref
59
+ node.addEventListener('keydown', onKeyDown);
60
+ return () => {
61
+ node.removeEventListener('keydown', onKeyDown);
62
+ };
60
63
  });
61
- return ref;
62
64
  }
63
65
  //# sourceMappingURL=use-select-all.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/use-select-all.js"],"names":["first","last","isEntirelySelected","useRef","useCallback","useSelect","useDispatch","useShortcut","store","blockEditorStore","useSelectAll","ref","getBlockOrder","getSelectedBlockClientIds","getBlockRootClientId","multiSelect","callback","event","selectedClientIds","length","target","firstSelectedClientId","rootClientId","blockClientIds","firstClientId","lastClientId","preventDefault"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAT,EAAgBC,IAAhB,QAA4B,QAA5B;AAEA;AACA;AACA;;AACA,SAASC,kBAAT,QAAmC,gBAAnC;AACA,SAASC,MAAT,EAAiBC,WAAjB,QAAoC,oBAApC;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,WAAT,QAA4B,+BAA5B;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,YAAT,GAAwB;AACtC,QAAMC,GAAG,GAAGR,MAAM,EAAlB;AACA,QAAM;AACLS,IAAAA,aADK;AAELC,IAAAA,yBAFK;AAGLC,IAAAA;AAHK,MAIFT,SAAS,CAAEI,gBAAF,CAJb;AAKA,QAAM;AAAEM,IAAAA;AAAF,MAAkBT,WAAW,CAAEG,gBAAF,CAAnC;AAEA,QAAMO,QAAQ,GAAGZ,WAAW,CAAIa,KAAF,IAAa;AAC1C,UAAMC,iBAAiB,GAAGL,yBAAyB,EAAnD;;AAEA,QAAK,CAAEK,iBAAiB,CAACC,MAAzB,EAAkC;AACjC;AACA;;AAED,QACCD,iBAAiB,CAACC,MAAlB,KAA6B,CAA7B,IACA,CAAEjB,kBAAkB,CAAEe,KAAK,CAACG,MAAR,CAFrB,EAGE;AACD;AACA;;AAED,UAAM,CAAEC,qBAAF,IAA4BH,iBAAlC;AACA,UAAMI,YAAY,GAAGR,oBAAoB,CAAEO,qBAAF,CAAzC;AACA,QAAIE,cAAc,GAAGX,aAAa,CAAEU,YAAF,CAAlC,CAhB0C,CAkB1C;AACA;;AACA,QAAKJ,iBAAiB,CAACC,MAAlB,KAA6BI,cAAc,CAACJ,MAAjD,EAA0D;AACzDI,MAAAA,cAAc,GAAGX,aAAa,CAC7BE,oBAAoB,CAAEQ,YAAF,CADS,CAA9B;AAGA;;AAED,UAAME,aAAa,GAAGxB,KAAK,CAAEuB,cAAF,CAA3B;AACA,UAAME,YAAY,GAAGxB,IAAI,CAAEsB,cAAF,CAAzB;;AAEA,QAAKC,aAAa,KAAKC,YAAvB,EAAsC;AACrC;AACA;;AAEDV,IAAAA,WAAW,CAAES,aAAF,EAAiBC,YAAjB,CAAX;AACAR,IAAAA,KAAK,CAACS,cAAN;AACA,GAnC2B,EAmCzB,EAnCyB,CAA5B;AAqCAnB,EAAAA,WAAW,CAAE,8BAAF,EAAkCS,QAAlC,EAA4C;AACtDI,IAAAA,MAAM,EAAET;AAD8C,GAA5C,CAAX;AAIA,SAAOA,GAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { first, last } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isEntirelySelected } from '@wordpress/dom';\nimport { useRef, useCallback } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useShortcut } from '@wordpress/keyboard-shortcuts';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useSelectAll() {\n\tconst ref = useRef();\n\tconst {\n\t\tgetBlockOrder,\n\t\tgetSelectedBlockClientIds,\n\t\tgetBlockRootClientId,\n\t} = useSelect( blockEditorStore );\n\tconst { multiSelect } = useDispatch( blockEditorStore );\n\n\tconst callback = useCallback( ( event ) => {\n\t\tconst selectedClientIds = getSelectedBlockClientIds();\n\n\t\tif ( ! selectedClientIds.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tselectedClientIds.length === 1 &&\n\t\t\t! isEntirelySelected( event.target )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [ firstSelectedClientId ] = selectedClientIds;\n\t\tconst rootClientId = getBlockRootClientId( firstSelectedClientId );\n\t\tlet blockClientIds = getBlockOrder( rootClientId );\n\n\t\t// If we have selected all sibling nested blocks, try selecting up a\n\t\t// level. See: https://github.com/WordPress/gutenberg/pull/31859/\n\t\tif ( selectedClientIds.length === blockClientIds.length ) {\n\t\t\tblockClientIds = getBlockOrder(\n\t\t\t\tgetBlockRootClientId( rootClientId )\n\t\t\t);\n\t\t}\n\n\t\tconst firstClientId = first( blockClientIds );\n\t\tconst lastClientId = last( blockClientIds );\n\n\t\tif ( firstClientId === lastClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmultiSelect( firstClientId, lastClientId );\n\t\tevent.preventDefault();\n\t}, [] );\n\n\tuseShortcut( 'core/block-editor/select-all', callback, {\n\t\ttarget: ref,\n\t} );\n\n\treturn ref;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/use-select-all.js"],"names":["first","last","isEntirelySelected","useSelect","useDispatch","__unstableUseShortcutEventMatch","useShortcutEventMatch","useRefEffect","store","blockEditorStore","useSelectAll","getBlockOrder","getSelectedBlockClientIds","getBlockRootClientId","multiSelect","isMatch","node","onKeyDown","event","target","selectedClientIds","firstSelectedClientId","rootClientId","blockClientIds","length","firstClientId","lastClientId","preventDefault","addEventListener","removeEventListener"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAT,EAAgBC,IAAhB,QAA4B,QAA5B;AAEA;AACA;AACA;;AACA,SAASC,kBAAT,QAAmC,gBAAnC;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,+BAA+B,IAAIC,qBAA5C,QAAyE,+BAAzE;AACA,SAASC,YAAT,QAA6B,oBAA7B;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,YAAT,GAAwB;AACtC,QAAM;AACLC,IAAAA,aADK;AAELC,IAAAA,yBAFK;AAGLC,IAAAA;AAHK,MAIFV,SAAS,CAAEM,gBAAF,CAJb;AAKA,QAAM;AAAEK,IAAAA;AAAF,MAAkBV,WAAW,CAAEK,gBAAF,CAAnC;AACA,QAAMM,OAAO,GAAGT,qBAAqB,EAArC;AAEA,SAAOC,YAAY,CAAIS,IAAF,IAAY;AAChC,aAASC,SAAT,CAAoBC,KAApB,EAA4B;AAC3B,UAAK,CAAEH,OAAO,CAAE,8BAAF,EAAkCG,KAAlC,CAAd,EAA0D;AACzD;AACA;;AAED,UAAK,CAAEhB,kBAAkB,CAAEgB,KAAK,CAACC,MAAR,CAAzB,EAA4C;AAC3C;AACA;;AAED,YAAMC,iBAAiB,GAAGR,yBAAyB,EAAnD;AACA,YAAM,CAAES,qBAAF,IAA4BD,iBAAlC;AACA,YAAME,YAAY,GAAGT,oBAAoB,CAAEQ,qBAAF,CAAzC;AACA,UAAIE,cAAc,GAAGZ,aAAa,CAAEW,YAAF,CAAlC,CAZ2B,CAc3B;AACA;;AACA,UAAKF,iBAAiB,CAACI,MAAlB,KAA6BD,cAAc,CAACC,MAAjD,EAA0D;AACzDD,QAAAA,cAAc,GAAGZ,aAAa,CAC7BE,oBAAoB,CAAES,YAAF,CADS,CAA9B;AAGA;;AAED,YAAMG,aAAa,GAAGzB,KAAK,CAAEuB,cAAF,CAA3B;AACA,YAAMG,YAAY,GAAGzB,IAAI,CAAEsB,cAAF,CAAzB;;AAEA,UAAKE,aAAa,KAAKC,YAAvB,EAAsC;AACrC;AACA;;AAEDZ,MAAAA,WAAW,CAAEW,aAAF,EAAiBC,YAAjB,CAAX;AACAR,MAAAA,KAAK,CAACS,cAAN;AACA;;AAEDX,IAAAA,IAAI,CAACY,gBAAL,CAAuB,SAAvB,EAAkCX,SAAlC;AAEA,WAAO,MAAM;AACZD,MAAAA,IAAI,CAACa,mBAAL,CAA0B,SAA1B,EAAqCZ,SAArC;AACA,KAFD;AAGA,GAvCkB,CAAnB;AAwCA","sourcesContent":["/**\n * External dependencies\n */\nimport { first, last } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isEntirelySelected } from '@wordpress/dom';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useSelectAll() {\n\tconst {\n\t\tgetBlockOrder,\n\t\tgetSelectedBlockClientIds,\n\t\tgetBlockRootClientId,\n\t} = useSelect( blockEditorStore );\n\tconst { multiSelect } = useDispatch( blockEditorStore );\n\tconst isMatch = useShortcutEventMatch();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( ! isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! isEntirelySelected( event.target ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedClientIds = getSelectedBlockClientIds();\n\t\t\tconst [ firstSelectedClientId ] = selectedClientIds;\n\t\t\tconst rootClientId = getBlockRootClientId( firstSelectedClientId );\n\t\t\tlet blockClientIds = getBlockOrder( rootClientId );\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a\n\t\t\t// level. See: https://github.com/WordPress/gutenberg/pull/31859/\n\t\t\tif ( selectedClientIds.length === blockClientIds.length ) {\n\t\t\t\tblockClientIds = getBlockOrder(\n\t\t\t\t\tgetBlockRootClientId( rootClientId )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst firstClientId = first( blockClientIds );\n\t\t\tconst lastClientId = last( blockClientIds );\n\n\t\t\tif ( firstClientId === lastClientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmultiSelect( firstClientId, lastClientId );\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t};\n\t} );\n}\n"]}
@@ -71,6 +71,7 @@ export default function useTabNav() {
71
71
  function onKeyDown(event) {
72
72
  if (event.keyCode === ESCAPE && !hasMultiSelection()) {
73
73
  event.stopPropagation();
74
+ event.preventDefault();
74
75
  setNavigationMode(true);
75
76
  return;
76
77
  } // In Edit mode, Tab should focus the first tabbable element after
@@ -89,6 +90,13 @@ export default function useTabNav() {
89
90
  const direction = isShift ? 'findPrevious' : 'findNext';
90
91
 
91
92
  if (!hasMultiSelection() && !getSelectedBlockClientId()) {
93
+ // Preserve the behaviour of entering navigation mode when
94
+ // tabbing into the content without a block selection.
95
+ // `onFocusCapture` already did this previously, but we need to
96
+ // do it again here because after clearing block selection,
97
+ // focus land on the writing flow container and pressing Tab
98
+ // will no longer send focus through the focus capture element.
99
+ if (event.target === node) setNavigationMode(true);
92
100
  return;
93
101
  } // Allow tabbing between form elements rendered in a block,
94
102
  // such as inside a placeholder. Form elements are generally
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/use-tab-nav.js"],"names":["focus","TAB","ESCAPE","useSelect","useDispatch","useRefEffect","useMergeRefs","useRef","store","blockEditorStore","isFormElement","element","tagName","useTabNav","container","focusCaptureBeforeRef","focusCaptureAfterRef","lastFocus","hasMultiSelection","getSelectedBlockClientId","setNavigationMode","isNavigationMode","select","focusCaptureTabIndex","undefined","noCapture","onFocusCapture","event","current","isBefore","target","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","action","tabbable","before","after","ref","node","onKeyDown","keyCode","stopPropagation","isShift","shiftKey","direction","next","preventScroll","onFocusOut","preventScrollOnTab","getAttribute","preventDefault","ownerDocument","defaultView","addEventListener","removeEventListener","mergedRefs"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,KAAT,QAAsB,gBAAtB;AACA,SAASC,GAAT,EAAcC,MAAd,QAA4B,qBAA5B;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,YAAT,EAAuBC,YAAvB,QAA2C,oBAA3C;AACA,SAASC,MAAT,QAAuB,oBAAvB;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;;AAEA,SAASC,aAAT,CAAwBC,OAAxB,EAAkC;AACjC,QAAM;AAAEC,IAAAA;AAAF,MAAcD,OAApB;AACA,SACCC,OAAO,KAAK,OAAZ,IACAA,OAAO,KAAK,QADZ,IAEAA,OAAO,KAAK,QAFZ,IAGAA,OAAO,KAAK,UAJb;AAMA;;AAED,eAAe,SAASC,SAAT,GAAqB;AACnC,QAAMC,SAAS,GAAGP,MAAM,EAAxB;AACA,QAAMQ,qBAAqB,GAAGR,MAAM,EAApC;AACA,QAAMS,oBAAoB,GAAGT,MAAM,EAAnC;AACA,QAAMU,SAAS,GAAGV,MAAM,EAAxB;AACA,QAAM;AAAEW,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkDhB,SAAS,CAChEM,gBADgE,CAAjE;AAGA,QAAM;AAAEW,IAAAA;AAAF,MAAwBhB,WAAW,CAAEK,gBAAF,CAAzC;AACA,QAAMY,gBAAgB,GAAGlB,SAAS,CAC/BmB,MAAF,IAAcA,MAAM,CAAEb,gBAAF,CAAN,CAA2BY,gBAA3B,EADmB,EAEjC,EAFiC,CAAlC,CATmC,CAcnC;;AACA,QAAME,oBAAoB,GAAG,CAAEF,gBAAF,GAAqB,GAArB,GAA2BG,SAAxD,CAfmC,CAiBnC;AACA;;AACA,QAAMC,SAAS,GAAGlB,MAAM,EAAxB;;AAEA,WAASmB,cAAT,CAAyBC,KAAzB,EAAiC;AAChC;AACA,QAAKF,SAAS,CAACG,OAAf,EAAyB;AACxBH,MAAAA,SAAS,CAACG,OAAV,GAAoB,IAApB;AACA,KAFD,MAEO,IAAKV,iBAAiB,EAAtB,EAA2B;AACjCJ,MAAAA,SAAS,CAACc,OAAV,CAAkB5B,KAAlB;AACA,KAFM,MAEA,IAAKmB,wBAAwB,EAA7B,EAAkC;AACxCF,MAAAA,SAAS,CAACW,OAAV,CAAkB5B,KAAlB;AACA,KAFM,MAEA;AACNoB,MAAAA,iBAAiB,CAAE,IAAF,CAAjB;AAEA,YAAMS,QAAQ,GACb;AACAF,MAAAA,KAAK,CAACG,MAAN,CAAaC,uBAAb,CAAsCjB,SAAS,CAACc,OAAhD,IACAD,KAAK,CAACG,MAAN,CAAaE,2BAHd;AAIA,YAAMC,MAAM,GAAGJ,QAAQ,GAAG,UAAH,GAAgB,cAAvC;AAEA7B,MAAAA,KAAK,CAACkC,QAAN,CAAgBD,MAAhB,EAA0BN,KAAK,CAACG,MAAhC,EAAyC9B,KAAzC;AACA;AACD;;AAED,QAAMmC,MAAM,GACX;AACC,IAAA,GAAG,EAAGpB,qBADP;AAEC,IAAA,QAAQ,EAAGQ,oBAFZ;AAGC,IAAA,OAAO,EAAGG;AAHX,IADD;AAQA,QAAMU,KAAK,GACV;AACC,IAAA,GAAG,EAAGpB,oBADP;AAEC,IAAA,QAAQ,EAAGO,oBAFZ;AAGC,IAAA,OAAO,EAAGG;AAHX,IADD;AAQA,QAAMW,GAAG,GAAGhC,YAAY,CAAIiC,IAAF,IAAY;AACrC,aAASC,SAAT,CAAoBZ,KAApB,EAA4B;AAC3B,UAAKA,KAAK,CAACa,OAAN,KAAkBtC,MAAlB,IAA4B,CAAEgB,iBAAiB,EAApD,EAAyD;AACxDS,QAAAA,KAAK,CAACc,eAAN;AACArB,QAAAA,iBAAiB,CAAE,IAAF,CAAjB;AACA;AACA,OAL0B,CAO3B;AACA;AACA;AACA;AACA;AACA;;;AACA,UAAKO,KAAK,CAACa,OAAN,KAAkBvC,GAAvB,EAA6B;AAC5B;AACA;;AAED,YAAMyC,OAAO,GAAGf,KAAK,CAACgB,QAAtB;AACA,YAAMC,SAAS,GAAGF,OAAO,GAAG,cAAH,GAAoB,UAA7C;;AAEA,UAAK,CAAExB,iBAAiB,EAAnB,IAAyB,CAAEC,wBAAwB,EAAxD,EAA6D;AAC5D;AACA,OAtB0B,CAwB3B;AACA;AACA;AACA;AACA;;;AACA,UACCT,aAAa,CAAEiB,KAAK,CAACG,MAAR,CAAb,IACApB,aAAa,CAAEV,KAAK,CAACkC,QAAN,CAAgBU,SAAhB,EAA6BjB,KAAK,CAACG,MAAnC,CAAF,CAFd,EAGE;AACD;AACA;;AAED,YAAMe,IAAI,GAAGH,OAAO,GAAG3B,qBAAH,GAA2BC,oBAA/C,CApC2B,CAsC3B;AACA;AACA;;AACAS,MAAAA,SAAS,CAACG,OAAV,GAAoB,IAApB,CAzC2B,CA2C3B;AACA;AACA;;AACAiB,MAAAA,IAAI,CAACjB,OAAL,CAAa5B,KAAb,CAAoB;AAAE8C,QAAAA,aAAa,EAAE;AAAjB,OAApB;AACA;;AAED,aAASC,UAAT,CAAqBpB,KAArB,EAA6B;AAC5BV,MAAAA,SAAS,CAACW,OAAV,GAAoBD,KAAK,CAACG,MAA1B;AACA,KApDoC,CAsDrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,aAASkB,kBAAT,CAA6BrB,KAA7B,EAAqC;AAAA;;AACpC,UAAKA,KAAK,CAACa,OAAN,KAAkBvC,GAAvB,EAA6B;AAC5B;AACA;;AAED,UAAK,kBAAA0B,KAAK,CAACG,MAAN,gEAAcmB,YAAd,CAA4B,MAA5B,OAAyC,QAA9C,EAAyD;AACxD;AACA;;AAED,UAAKnC,SAAS,CAACc,OAAV,KAAsBD,KAAK,CAACG,MAAjC,EAA0C;AACzC;AACA;;AAED,YAAMY,OAAO,GAAGf,KAAK,CAACgB,QAAtB;AACA,YAAMC,SAAS,GAAGF,OAAO,GAAG,cAAH,GAAoB,UAA7C;AACA,YAAMZ,MAAM,GAAG9B,KAAK,CAACkC,QAAN,CAAgBU,SAAhB,EAA6BjB,KAAK,CAACG,MAAnC,CAAf,CAfoC,CAgBpC;;AACA,UACCA,MAAM,KAAKf,qBAAqB,CAACa,OAAjC,IACAE,MAAM,KAAKd,oBAAoB,CAACY,OAFjC,EAGE;AACDD,QAAAA,KAAK,CAACuB,cAAN;AACApB,QAAAA,MAAM,CAAC9B,KAAP,CAAc;AAAE8C,UAAAA,aAAa,EAAE;AAAjB,SAAd;AACA;AACD;;AAEDR,IAAAA,IAAI,CAACa,aAAL,CAAmBC,WAAnB,CAA+BC,gBAA/B,CACC,SADD,EAECL,kBAFD;AAIAV,IAAAA,IAAI,CAACe,gBAAL,CAAuB,SAAvB,EAAkCd,SAAlC;AACAD,IAAAA,IAAI,CAACe,gBAAL,CAAuB,UAAvB,EAAmCN,UAAnC;AACA,WAAO,MAAM;AACZT,MAAAA,IAAI,CAACa,aAAL,CAAmBC,WAAnB,CAA+BE,mBAA/B,CACC,SADD,EAECN,kBAFD;AAIAV,MAAAA,IAAI,CAACgB,mBAAL,CAA0B,SAA1B,EAAqCf,SAArC;AACAD,MAAAA,IAAI,CAACgB,mBAAL,CAA0B,UAA1B,EAAsCP,UAAtC;AACA,KAPD;AAQA,GAtGuB,EAsGrB,EAtGqB,CAAxB;AAwGA,QAAMQ,UAAU,GAAGjD,YAAY,CAAE,CAAEQ,SAAF,EAAauB,GAAb,CAAF,CAA/B;AAEA,SAAO,CAAEF,MAAF,EAAUoB,UAAV,EAAsBnB,KAAtB,CAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { focus } from '@wordpress/dom';\nimport { TAB, ESCAPE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction isFormElement( element ) {\n\tconst { tagName } = element;\n\treturn (\n\t\ttagName === 'INPUT' ||\n\t\ttagName === 'BUTTON' ||\n\t\ttagName === 'SELECT' ||\n\t\ttagName === 'TEXTAREA'\n\t);\n}\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\tconst lastFocus = useRef();\n\tconst { hasMultiSelection, getSelectedBlockClientId } = useSelect(\n\t\tblockEditorStore\n\t);\n\tconst { setNavigationMode } = useDispatch( blockEditorStore );\n\tconst isNavigationMode = useSelect(\n\t\t( select ) => select( blockEditorStore ).isNavigationMode(),\n\t\t[]\n\t);\n\n\t// Don't allow tabbing to this element in Navigation mode.\n\tconst focusCaptureTabIndex = ! isNavigationMode ? '0' : undefined;\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCapture = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCapture.current ) {\n\t\t\tnoCapture.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tlastFocus.current.focus();\n\t\t} else {\n\t\t\tsetNavigationMode( true );\n\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( container.current ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst action = isBefore ? 'findNext' : 'findPrevious';\n\n\t\t\tfocus.tabbable[ action ]( event.target ).focus();\n\t\t}\n\t}\n\n\tconst before = (\n\t\t<div\n\t\t\tref={ focusCaptureBeforeRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst after = (\n\t\t<div\n\t\t\tref={ focusCaptureAfterRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.keyCode === ESCAPE && ! hasMultiSelection() ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow tabbing between form elements rendered in a block,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( event.target ) &&\n\t\t\t\tisFormElement( focus.tabbable[ direction ]( event.target ) )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCapture.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tlastFocus.current = event.target;\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.defaultView.addEventListener(\n\t\t\t'keydown',\n\t\t\tpreventScrollOnTab\n\t\t);\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tnode.ownerDocument.defaultView.removeEventListener(\n\t\t\t\t'keydown',\n\t\t\t\tpreventScrollOnTab\n\t\t\t);\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/use-tab-nav.js"],"names":["focus","TAB","ESCAPE","useSelect","useDispatch","useRefEffect","useMergeRefs","useRef","store","blockEditorStore","isFormElement","element","tagName","useTabNav","container","focusCaptureBeforeRef","focusCaptureAfterRef","lastFocus","hasMultiSelection","getSelectedBlockClientId","setNavigationMode","isNavigationMode","select","focusCaptureTabIndex","undefined","noCapture","onFocusCapture","event","current","isBefore","target","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","action","tabbable","before","after","ref","node","onKeyDown","keyCode","stopPropagation","preventDefault","isShift","shiftKey","direction","next","preventScroll","onFocusOut","preventScrollOnTab","getAttribute","ownerDocument","defaultView","addEventListener","removeEventListener","mergedRefs"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { focus } from '@wordpress/dom';\nimport { TAB, ESCAPE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction isFormElement( element ) {\n\tconst { tagName } = element;\n\treturn (\n\t\ttagName === 'INPUT' ||\n\t\ttagName === 'BUTTON' ||\n\t\ttagName === 'SELECT' ||\n\t\ttagName === 'TEXTAREA'\n\t);\n}\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\tconst lastFocus = useRef();\n\tconst { hasMultiSelection, getSelectedBlockClientId } = useSelect(\n\t\tblockEditorStore\n\t);\n\tconst { setNavigationMode } = useDispatch( blockEditorStore );\n\tconst isNavigationMode = useSelect(\n\t\t( select ) => select( blockEditorStore ).isNavigationMode(),\n\t\t[]\n\t);\n\n\t// Don't allow tabbing to this element in Navigation mode.\n\tconst focusCaptureTabIndex = ! isNavigationMode ? '0' : undefined;\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCapture = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCapture.current ) {\n\t\t\tnoCapture.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tlastFocus.current.focus();\n\t\t} else {\n\t\t\tsetNavigationMode( true );\n\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( container.current ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst action = isBefore ? 'findNext' : 'findPrevious';\n\n\t\t\tfocus.tabbable[ action ]( event.target ).focus();\n\t\t}\n\t}\n\n\tconst before = (\n\t\t<div\n\t\t\tref={ focusCaptureBeforeRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst after = (\n\t\t<div\n\t\t\tref={ focusCaptureAfterRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.keyCode === ESCAPE && ! hasMultiSelection() ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\t// Preserve the behaviour of entering navigation mode when\n\t\t\t\t// tabbing into the content without a block selection.\n\t\t\t\t// `onFocusCapture` already did this previously, but we need to\n\t\t\t\t// do it again here because after clearing block selection,\n\t\t\t\t// focus land on the writing flow container and pressing Tab\n\t\t\t\t// will no longer send focus through the focus capture element.\n\t\t\t\tif ( event.target === node ) setNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow tabbing between form elements rendered in a block,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( event.target ) &&\n\t\t\t\tisFormElement( focus.tabbable[ direction ]( event.target ) )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCapture.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tlastFocus.current = event.target;\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.defaultView.addEventListener(\n\t\t\t'keydown',\n\t\t\tpreventScrollOnTab\n\t\t);\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tnode.ownerDocument.defaultView.removeEventListener(\n\t\t\t\t'keydown',\n\t\t\t\tpreventScrollOnTab\n\t\t\t);\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n"]}
@@ -14,11 +14,13 @@ import { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';
14
14
  import { SVG } from '@wordpress/components';
15
15
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
16
16
  import { addFilter } from '@wordpress/hooks';
17
+ import { useContext, createPortal } from '@wordpress/element';
17
18
  /**
18
19
  * Internal dependencies
19
20
  */
20
21
 
21
22
  import { BlockControls, __experimentalDuotoneControl as DuotoneControl, useSetting } from '../components';
23
+ import { Head } from '../components/block-list/head';
22
24
  const EMPTY_ARRAY = [];
23
25
  /**
24
26
  * Convert a list of colors to an object of R, G, and B values.
@@ -209,11 +211,12 @@ const withDuotoneStyles = createHigherOrderComponent(BlockListBlock => props =>
209
211
  const selectorsScoped = selectors.map(selector => `.${id} ${selector.trim()}`);
210
212
  const selectorsGroup = selectorsScoped.join(', ');
211
213
  const className = classnames(props === null || props === void 0 ? void 0 : props.className, id);
212
- return createElement(Fragment, null, createElement(DuotoneFilter, {
214
+ const element = useContext(Head.context);
215
+ return createElement(Fragment, null, element && createPortal(createElement(DuotoneFilter, {
213
216
  selector: selectorsGroup,
214
217
  id: id,
215
218
  values: getValuesFromColors(values)
216
- }), createElement(BlockListBlock, _extends({}, props, {
219
+ }), element), createElement(BlockListBlock, _extends({}, props, {
217
220
  className: className
218
221
  })));
219
222
  }, 'withDuotoneStyles');
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","tinycolor","getBlockSupport","hasBlockSupport","SVG","createHigherOrderComponent","useInstanceId","addFilter","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","EMPTY_ARRAY","getValuesFromColors","colors","values","r","g","b","forEach","color","tcolor","push","_r","_g","_b","DuotoneFilter","selector","id","stylesheet","visibility","position","left","overflow","join","__html","DuotonePanel","attributes","setAttributes","style","duotone","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","withDuotoneStyles","BlockListBlock","duotoneSupport","selectors","split","selectorsScoped","map","trim","selectorsGroup","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport tinycolor from 'tinycolor2';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { SVG } from '@wordpress/components';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\n\nconst EMPTY_ARRAY = [];\n\n/**\n * Convert a list of colors to an object of R, G, and B values.\n *\n * @param {string[]} colors Array of RBG color strings.\n *\n * @return {Object} R, G, and B values.\n */\nexport function getValuesFromColors( colors = [] ) {\n\tconst values = { r: [], g: [], b: [] };\n\n\tcolors.forEach( ( color ) => {\n\t\t// Access values directly to skip extra rounding that tinycolor.toRgb() does.\n\t\tconst tcolor = tinycolor( color );\n\t\tvalues.r.push( tcolor._r / 255 );\n\t\tvalues.g.push( tcolor._g / 255 );\n\t\tvalues.b.push( tcolor._b / 255 );\n\t} );\n\n\treturn values;\n}\n\n/**\n * Values for the SVG `feComponentTransfer`.\n *\n * @typedef Values {Object}\n * @property {number[]} r Red values.\n * @property {number[]} g Green values.\n * @property {number[]} b Blue values.\n */\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {Values} props.values R, G, and B values to filter with.\n * @return {WPElement} Duotone element.\n */\nfunction DuotoneFilter( { selector, id, values } ) {\n\tconst stylesheet = `\n${ selector } {\n\tfilter: url( #${ id } );\n}\n`;\n\n\treturn (\n\t\t<>\n\t\t\t<SVG\n\t\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\tviewBox=\"0 0 0 0\"\n\t\t\t\twidth=\"0\"\n\t\t\t\theight=\"0\"\n\t\t\t\tfocusable=\"false\"\n\t\t\t\trole=\"none\"\n\t\t\t\tstyle={ {\n\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tleft: '-9999px',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<filter id={ id }>\n\t\t\t\t\t\t<feColorMatrix\n\t\t\t\t\t\t\ttype=\"matrix\"\n\t\t\t\t\t\t\t// Use perceptual brightness to convert to grayscale.\n\t\t\t\t\t\t\t// prettier-ignore\n\t\t\t\t\t\t\tvalues=\".299 .587 .114 0 0\n\t\t\t\t\t\t\t .299 .587 .114 0 0\n\t\t\t\t\t\t\t .299 .587 .114 0 0\n\t\t\t\t\t\t\t 0 0 0 1 0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<feComponentTransfer\n\t\t\t\t\t\t\t// Use sRGB instead of linearRGB to be consistent with how CSS gradients work.\n\t\t\t\t\t\t\tcolorInterpolationFilters=\"sRGB\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<feFuncR\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.r.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncG\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.g.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncB\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.b.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</feComponentTransfer>\n\t\t\t\t\t</filter>\n\t\t\t\t</defs>\n\t\t\t</SVG>\n\t\t\t<style dangerouslySetInnerHTML={ { __html: stylesheet } } />\n\t\t</>\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useSetting( 'color.duotone' ) || EMPTY_ARRAY;\n\tconst colorPalette = useSetting( 'color.palette' ) || EMPTY_ARRAY;\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\">\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings\n * @return {Object} Filtered block settings\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component\n * @return {Function} Wrapped component\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && <DuotonePanel { ...props } /> }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst values = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! values ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-filter-${ useInstanceId( BlockListBlock ) }`;\n\n\t\tconst selectors = duotoneSupport.split( ',' );\n\t\tconst selectorsScoped = selectors.map(\n\t\t\t( selector ) => `.${ id } ${ selector.trim() }`\n\t\t);\n\t\tconst selectorsGroup = selectorsScoped.join( ', ' );\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<DuotoneFilter\n\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\tid={ id }\n\t\t\t\t\tvalues={ getValuesFromColors( values ) }\n\t\t\t\t/>\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","tinycolor","getBlockSupport","hasBlockSupport","SVG","createHigherOrderComponent","useInstanceId","addFilter","useContext","createPortal","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","Head","EMPTY_ARRAY","getValuesFromColors","colors","values","r","g","b","forEach","color","tcolor","push","_r","_g","_b","DuotoneFilter","selector","id","stylesheet","visibility","position","left","overflow","join","__html","DuotonePanel","attributes","setAttributes","style","duotone","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","withDuotoneStyles","BlockListBlock","duotoneSupport","selectors","split","selectorsScoped","map","trim","selectorsGroup","className","element","context"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport tinycolor from 'tinycolor2';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { SVG } from '@wordpress/components';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport { Head } from '../components/block-list/head';\n\nconst EMPTY_ARRAY = [];\n\n/**\n * Convert a list of colors to an object of R, G, and B values.\n *\n * @param {string[]} colors Array of RBG color strings.\n *\n * @return {Object} R, G, and B values.\n */\nexport function getValuesFromColors( colors = [] ) {\n\tconst values = { r: [], g: [], b: [] };\n\n\tcolors.forEach( ( color ) => {\n\t\t// Access values directly to skip extra rounding that tinycolor.toRgb() does.\n\t\tconst tcolor = tinycolor( color );\n\t\tvalues.r.push( tcolor._r / 255 );\n\t\tvalues.g.push( tcolor._g / 255 );\n\t\tvalues.b.push( tcolor._b / 255 );\n\t} );\n\n\treturn values;\n}\n\n/**\n * Values for the SVG `feComponentTransfer`.\n *\n * @typedef Values {Object}\n * @property {number[]} r Red values.\n * @property {number[]} g Green values.\n * @property {number[]} b Blue values.\n */\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {Values} props.values R, G, and B values to filter with.\n * @return {WPElement} Duotone element.\n */\nfunction DuotoneFilter( { selector, id, values } ) {\n\tconst stylesheet = `\n${ selector } {\n\tfilter: url( #${ id } );\n}\n`;\n\n\treturn (\n\t\t<>\n\t\t\t<SVG\n\t\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\tviewBox=\"0 0 0 0\"\n\t\t\t\twidth=\"0\"\n\t\t\t\theight=\"0\"\n\t\t\t\tfocusable=\"false\"\n\t\t\t\trole=\"none\"\n\t\t\t\tstyle={ {\n\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tleft: '-9999px',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<filter id={ id }>\n\t\t\t\t\t\t<feColorMatrix\n\t\t\t\t\t\t\ttype=\"matrix\"\n\t\t\t\t\t\t\t// Use perceptual brightness to convert to grayscale.\n\t\t\t\t\t\t\t// prettier-ignore\n\t\t\t\t\t\t\tvalues=\".299 .587 .114 0 0\n\t\t\t\t\t\t\t .299 .587 .114 0 0\n\t\t\t\t\t\t\t .299 .587 .114 0 0\n\t\t\t\t\t\t\t 0 0 0 1 0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<feComponentTransfer\n\t\t\t\t\t\t\t// Use sRGB instead of linearRGB to be consistent with how CSS gradients work.\n\t\t\t\t\t\t\tcolorInterpolationFilters=\"sRGB\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<feFuncR\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.r.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncG\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.g.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<feFuncB\n\t\t\t\t\t\t\t\ttype=\"table\"\n\t\t\t\t\t\t\t\ttableValues={ values.b.join( ' ' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</feComponentTransfer>\n\t\t\t\t\t</filter>\n\t\t\t\t</defs>\n\t\t\t</SVG>\n\t\t\t<style dangerouslySetInnerHTML={ { __html: stylesheet } } />\n\t\t</>\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useSetting( 'color.duotone' ) || EMPTY_ARRAY;\n\tconst colorPalette = useSetting( 'color.palette' ) || EMPTY_ARRAY;\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\">\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings\n * @return {Object} Filtered block settings\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component\n * @return {Function} Wrapped component\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && <DuotonePanel { ...props } /> }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst values = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! values ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-filter-${ useInstanceId( BlockListBlock ) }`;\n\n\t\tconst selectors = duotoneSupport.split( ',' );\n\t\tconst selectorsScoped = selectors.map(\n\t\t\t( selector ) => `.${ id } ${ selector.trim() }`\n\t\t);\n\t\tconst selectorsGroup = selectorsScoped.join( ', ' );\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\tconst element = useContext( Head.context );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<DuotoneFilter\n\t\t\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tvalues={ getValuesFromColors( values ) }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
@@ -17,6 +17,7 @@ import { useSelect } from '@wordpress/data';
17
17
  import { Button, ToggleControl, PanelBody, __experimentalUseCustomUnits as useCustomUnits, __experimentalUnitControl as UnitControl } from '@wordpress/components';
18
18
  import { __ } from '@wordpress/i18n';
19
19
  import { Icon, positionCenter, stretchWide } from '@wordpress/icons';
20
+ import { useContext, createPortal } from '@wordpress/element';
20
21
  /**
21
22
  * Internal dependencies
22
23
  */
@@ -25,6 +26,7 @@ import { store as blockEditorStore } from '../store';
25
26
  import { InspectorControls } from '../components';
26
27
  import useSetting from '../components/use-setting';
27
28
  import { LayoutStyle } from '../components/block-list/layout';
29
+ import { Head } from '../components/block-list/head';
28
30
 
29
31
  function LayoutPanel({
30
32
  setAttributes,
@@ -184,10 +186,11 @@ export const withLayoutStyles = createHigherOrderComponent(BlockListBlock => pro
184
186
  } = attributes;
185
187
  const usedLayout = !!layout && layout.inherit ? defaultLayout : layout;
186
188
  const className = classnames(props === null || props === void 0 ? void 0 : props.className, `wp-container-${id}`);
187
- return createElement(Fragment, null, createElement(LayoutStyle, {
189
+ const element = useContext(Head.context);
190
+ return createElement(Fragment, null, element && createPortal(createElement(LayoutStyle, {
188
191
  selector: `.wp-container-${id}`,
189
192
  layout: usedLayout
190
- }), createElement(BlockListBlock, _extends({}, props, {
193
+ }), element), createElement(BlockListBlock, _extends({}, props, {
191
194
  className: className
192
195
  })));
193
196
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/layout.js"],"names":["classnames","has","createHigherOrderComponent","useInstanceId","addFilter","hasBlockSupport","useSelect","Button","ToggleControl","PanelBody","__experimentalUseCustomUnits","useCustomUnits","__experimentalUnitControl","UnitControl","__","Icon","positionCenter","stretchWide","store","blockEditorStore","InspectorControls","useSetting","LayoutStyle","LayoutPanel","setAttributes","attributes","layout","wideSize","contentSize","inherit","defaultLayout","themeSupportsLayout","select","getSettings","supportsLayout","units","availableUnits","nextWidth","parseFloat","undefined","addAttribute","settings","type","withInspectorControls","BlockEdit","props","name","blockName","supportLayout","withLayoutStyles","BlockListBlock","id","usedLayout","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { has } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tToggleControl,\n\tPanelBody,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { Icon, positionCenter, stretchWide } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport useSetting from '../components/use-setting';\nimport { LayoutStyle } from '../components/block-list/layout';\n\nfunction LayoutPanel( { setAttributes, attributes } ) {\n\tconst { layout = {} } = attributes;\n\tconst { wideSize, contentSize, inherit = false } = layout;\n\tconst defaultLayout = useSetting( 'layout' );\n\tconst themeSupportsLayout = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().supportsLayout;\n\t}, [] );\n\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vw',\n\t\t],\n\t} );\n\n\tif ( ! themeSupportsLayout ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody title={ __( 'Layout' ) }>\n\t\t\t\t{ !! defaultLayout && (\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Inherit default layout' ) }\n\t\t\t\t\t\tchecked={ !! inherit }\n\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\tsetAttributes( { layout: { inherit: ! inherit } } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! inherit && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls\">\n\t\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-unit\">\n\t\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Content' ) }\n\t\t\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\t\t\t\tvalue={ contentSize || wideSize || '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( nextWidth ) => {\n\t\t\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\t\t\tcontentSize: nextWidth,\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\tunits={ units }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Icon icon={ positionCenter } />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-unit\">\n\t\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Wide' ) }\n\t\t\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\t\t\t\tvalue={ wideSize || contentSize || '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( nextWidth ) => {\n\t\t\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\t\t\twideSize: nextWidth,\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\tunits={ units }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Icon icon={ stretchWide } />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-reset\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tisSecondary\n\t\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\t\tdisabled={ ! contentSize && ! wideSize }\n\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\tcontentSize: undefined,\n\t\t\t\t\t\t\t\t\t\t\twideSize: undefined,\n\t\t\t\t\t\t\t\t\t\t\tinherit: false,\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\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<p className=\"block-editor-hooks__layout-controls-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Customize the width for all elements that are assigned to the center or wide columns.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings\n * @return {Object} Filtered block settings\n */\nexport function addAttribute( settings ) {\n\tif ( has( settings.attributes, [ 'layout', 'type' ] ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, '__experimentalLayout' ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include layout controls\n *\n * @param {Function} BlockEdit Original component\n * @return {Function} Wrapped component\n */\nexport const withInspectorControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst { name: blockName } = props;\n\t\tconst supportLayout = hasBlockSupport(\n\t\t\tblockName,\n\t\t\t'__experimentalLayout'\n\t\t);\n\n\t\treturn [\n\t\t\tsupportLayout && <LayoutPanel key=\"layout\" { ...props } />,\n\t\t\t<BlockEdit key=\"edit\" { ...props } />,\n\t\t];\n\t},\n\t'withInspectorControls'\n);\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { name, attributes } = props;\n\t\tconst supportLayout = hasBlockSupport( name, '__experimentalLayout' );\n\t\tconst id = useInstanceId( BlockListBlock );\n\t\tconst defaultLayout = useSetting( 'layout' ) || {};\n\t\tif ( ! supportLayout ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\t\tconst { layout = {} } = attributes;\n\t\tconst usedLayout = !! layout && layout.inherit ? defaultLayout : layout;\n\t\tconst className = classnames(\n\t\t\tprops?.className,\n\t\t\t`wp-container-${ id }`\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<LayoutStyle\n\t\t\t\t\tselector={ `.wp-container-${ id }` }\n\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t/>\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t}\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/layout/with-inspector-controls',\n\twithInspectorControls\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/layout.js"],"names":["classnames","has","createHigherOrderComponent","useInstanceId","addFilter","hasBlockSupport","useSelect","Button","ToggleControl","PanelBody","__experimentalUseCustomUnits","useCustomUnits","__experimentalUnitControl","UnitControl","__","Icon","positionCenter","stretchWide","useContext","createPortal","store","blockEditorStore","InspectorControls","useSetting","LayoutStyle","Head","LayoutPanel","setAttributes","attributes","layout","wideSize","contentSize","inherit","defaultLayout","themeSupportsLayout","select","getSettings","supportsLayout","units","availableUnits","nextWidth","parseFloat","undefined","addAttribute","settings","type","withInspectorControls","BlockEdit","props","name","blockName","supportLayout","withLayoutStyles","BlockListBlock","id","usedLayout","className","element","context"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { has } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tToggleControl,\n\tPanelBody,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { Icon, positionCenter, stretchWide } from '@wordpress/icons';\nimport { useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport useSetting from '../components/use-setting';\nimport { LayoutStyle } from '../components/block-list/layout';\nimport { Head } from '../components/block-list/head';\n\nfunction LayoutPanel( { setAttributes, attributes } ) {\n\tconst { layout = {} } = attributes;\n\tconst { wideSize, contentSize, inherit = false } = layout;\n\tconst defaultLayout = useSetting( 'layout' );\n\tconst themeSupportsLayout = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().supportsLayout;\n\t}, [] );\n\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vw',\n\t\t],\n\t} );\n\n\tif ( ! themeSupportsLayout ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody title={ __( 'Layout' ) }>\n\t\t\t\t{ !! defaultLayout && (\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Inherit default layout' ) }\n\t\t\t\t\t\tchecked={ !! inherit }\n\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\tsetAttributes( { layout: { inherit: ! inherit } } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! inherit && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls\">\n\t\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-unit\">\n\t\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Content' ) }\n\t\t\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\t\t\t\tvalue={ contentSize || wideSize || '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( nextWidth ) => {\n\t\t\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\t\t\tcontentSize: nextWidth,\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\tunits={ units }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Icon icon={ positionCenter } />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-unit\">\n\t\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Wide' ) }\n\t\t\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\t\t\t\tvalue={ wideSize || contentSize || '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( nextWidth ) => {\n\t\t\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\t\t\twideSize: nextWidth,\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\tunits={ units }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Icon icon={ stretchWide } />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-reset\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tisSecondary\n\t\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\t\tdisabled={ ! contentSize && ! wideSize }\n\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\tcontentSize: undefined,\n\t\t\t\t\t\t\t\t\t\t\twideSize: undefined,\n\t\t\t\t\t\t\t\t\t\t\tinherit: false,\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\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<p className=\"block-editor-hooks__layout-controls-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Customize the width for all elements that are assigned to the center or wide columns.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings\n * @return {Object} Filtered block settings\n */\nexport function addAttribute( settings ) {\n\tif ( has( settings.attributes, [ 'layout', 'type' ] ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, '__experimentalLayout' ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include layout controls\n *\n * @param {Function} BlockEdit Original component\n * @return {Function} Wrapped component\n */\nexport const withInspectorControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst { name: blockName } = props;\n\t\tconst supportLayout = hasBlockSupport(\n\t\t\tblockName,\n\t\t\t'__experimentalLayout'\n\t\t);\n\n\t\treturn [\n\t\t\tsupportLayout && <LayoutPanel key=\"layout\" { ...props } />,\n\t\t\t<BlockEdit key=\"edit\" { ...props } />,\n\t\t];\n\t},\n\t'withInspectorControls'\n);\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { name, attributes } = props;\n\t\tconst supportLayout = hasBlockSupport( name, '__experimentalLayout' );\n\t\tconst id = useInstanceId( BlockListBlock );\n\t\tconst defaultLayout = useSetting( 'layout' ) || {};\n\t\tif ( ! supportLayout ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\t\tconst { layout = {} } = attributes;\n\t\tconst usedLayout = !! layout && layout.inherit ? defaultLayout : layout;\n\t\tconst className = classnames(\n\t\t\tprops?.className,\n\t\t\t`wp-container-${ id }`\n\t\t);\n\n\t\tconst element = useContext( Head.context );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\tselector={ `.wp-container-${ id }` }\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t}\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/layout/with-inspector-controls',\n\twithInspectorControls\n);\n"]}
@@ -737,7 +737,7 @@
737
737
  align-self: center;
738
738
  padding: 0;
739
739
  list-style: none;
740
- margin: 0 0 0 auto;
740
+ margin: 8px;
741
741
  }
742
742
  .block-editor-block-list__block .block-list-appender.wp-block {
743
743
  max-width: none;
@@ -737,7 +737,7 @@
737
737
  align-self: center;
738
738
  padding: 0;
739
739
  list-style: none;
740
- margin: 0 auto 0 0;
740
+ margin: 8px;
741
741
  }
742
742
  .block-editor-block-list__block .block-list-appender.wp-block {
743
743
  max-width: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-editor",
3
- "version": "6.1.12",
3
+ "version": "6.1.15",
4
4
  "description": "Generic block editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -32,30 +32,30 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "@babel/runtime": "^7.13.10",
35
- "@wordpress/a11y": "^3.1.1",
36
- "@wordpress/blob": "^3.1.1",
37
- "@wordpress/block-serialization-default-parser": "^4.1.1",
38
- "@wordpress/blocks": "^9.1.7",
39
- "@wordpress/components": "^14.1.9",
40
- "@wordpress/compose": "^4.1.5",
41
- "@wordpress/data": "^5.1.5",
42
- "@wordpress/data-controls": "^2.1.5",
43
- "@wordpress/deprecated": "^3.1.1",
44
- "@wordpress/dom": "^3.1.4",
45
- "@wordpress/element": "^3.1.1",
35
+ "@wordpress/a11y": "^3.1.2",
36
+ "@wordpress/blob": "^3.1.2",
37
+ "@wordpress/block-serialization-default-parser": "^4.1.2",
38
+ "@wordpress/blocks": "^9.1.8",
39
+ "@wordpress/components": "^14.1.11",
40
+ "@wordpress/compose": "^4.1.6",
41
+ "@wordpress/data": "^5.1.6",
42
+ "@wordpress/data-controls": "^2.1.7",
43
+ "@wordpress/deprecated": "^3.1.2",
44
+ "@wordpress/dom": "^3.1.5",
45
+ "@wordpress/element": "^3.1.2",
46
46
  "@wordpress/hooks": "^3.1.1",
47
- "@wordpress/html-entities": "^3.1.1",
48
- "@wordpress/i18n": "^4.1.1",
49
- "@wordpress/icons": "^4.0.2",
47
+ "@wordpress/html-entities": "^3.1.2",
48
+ "@wordpress/i18n": "^4.1.2",
49
+ "@wordpress/icons": "^4.0.3",
50
50
  "@wordpress/is-shallow-equal": "^4.1.1",
51
- "@wordpress/keyboard-shortcuts": "^2.1.5",
52
- "@wordpress/keycodes": "^3.1.1",
53
- "@wordpress/notices": "^3.1.5",
54
- "@wordpress/rich-text": "^4.1.5",
55
- "@wordpress/shortcode": "^3.1.1",
51
+ "@wordpress/keyboard-shortcuts": "^2.1.7",
52
+ "@wordpress/keycodes": "^3.1.2",
53
+ "@wordpress/notices": "^3.1.6",
54
+ "@wordpress/rich-text": "^4.1.6",
55
+ "@wordpress/shortcode": "^3.1.2",
56
56
  "@wordpress/token-list": "^2.1.1",
57
- "@wordpress/url": "^3.1.1",
58
- "@wordpress/wordcount": "^3.1.1",
57
+ "@wordpress/url": "^3.1.3",
58
+ "@wordpress/wordcount": "^3.1.2",
59
59
  "classnames": "^2.2.5",
60
60
  "css-mediaquery": "^0.1.2",
61
61
  "diff": "^4.0.2",
@@ -73,5 +73,5 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "gitHead": "42a6dbdbf9c981e71ea4752c94e5642d6f6cac1d"
76
+ "gitHead": "6464883c6c546233543a1ee01428059dee3560fc"
77
77
  }