@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.
- package/README.md +100 -98
- package/build/components/block-list/head.js +27 -0
- package/build/components/block-list/head.js.map +1 -0
- package/build/components/block-list/index.js +4 -2
- package/build/components/block-list/index.js.map +1 -1
- package/build/components/iframe/index.js +34 -5
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/rich-text/use-input-rules.js +5 -2
- package/build/components/rich-text/use-input-rules.js.map +1 -1
- package/build/components/use-setting/index.js +1 -1
- package/build/components/use-setting/index.js.map +1 -1
- package/build/components/writing-flow/index.js +27 -14
- package/build/components/writing-flow/index.js.map +1 -1
- package/build/components/writing-flow/use-select-all.js +36 -34
- package/build/components/writing-flow/use-select-all.js.map +1 -1
- package/build/components/writing-flow/use-tab-nav.js +8 -0
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build/hooks/duotone.js +5 -2
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/layout.js +5 -2
- package/build/hooks/layout.js.map +1 -1
- package/build-module/components/block-list/head.js +19 -0
- package/build-module/components/block-list/head.js.map +1 -0
- package/build-module/components/block-list/index.js +3 -2
- package/build-module/components/block-list/index.js.map +1 -1
- package/build-module/components/iframe/index.js +34 -5
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/rich-text/use-input-rules.js +5 -2
- package/build-module/components/rich-text/use-input-rules.js.map +1 -1
- package/build-module/components/use-setting/index.js +1 -1
- package/build-module/components/use-setting/index.js.map +1 -1
- package/build-module/components/writing-flow/index.js +23 -12
- package/build-module/components/writing-flow/index.js.map +1 -1
- package/build-module/components/writing-flow/use-select-all.js +30 -28
- package/build-module/components/writing-flow/use-select-all.js.map +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js +8 -0
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/hooks/duotone.js +5 -2
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/layout.js +5 -2
- package/build-module/hooks/layout.js.map +1 -1
- package/build-style/style-rtl.css +1 -1
- package/build-style/style.css +1 -1
- package/package.json +23 -23
- package/src/components/block-list/head.js +18 -0
- package/src/components/block-list/index.js +21 -18
- package/src/components/block-list-appender/style.scss +3 -4
- package/src/components/iframe/index.js +39 -7
- package/src/components/rich-text/use-input-rules.js +4 -2
- package/src/components/use-setting/index.js +1 -1
- package/src/components/writing-flow/index.js +23 -10
- package/src/components/writing-flow/use-select-all.js +33 -35
- package/src/components/writing-flow/use-tab-nav.js +8 -0
- package/src/hooks/duotone.js +13 -5
- 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
|
-
|
|
27
|
-
|
|
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":"
|
|
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 {
|
|
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
|
|
29
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
if (!isEntirelySelected(event.target)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
48
|
+
const firstClientId = first(blockClientIds);
|
|
49
|
+
const lastClientId = last(blockClientIds);
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
if (firstClientId === lastClientId) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
multiSelect(firstClientId, lastClientId);
|
|
56
|
+
event.preventDefault();
|
|
53
57
|
}
|
|
54
58
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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","
|
|
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":"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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\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
|
-
|
|
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
|
-
|
|
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":";;;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,GAAT,QAAoB,QAApB;AAEA;AACA;AACA;;AACA,SAASC,0BAAT,EAAqCC,aAArC,QAA0D,oBAA1D;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SACCC,MADD,EAECC,aAFD,EAGCC,SAHD,EAICC,4BAA4B,IAAIC,cAJjC,EAKCC,yBAAyB,IAAIC,WAL9B,QAMO,uBANP;AAOA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,IAAT,EAAeC,cAAf,EAA+BC,WAA/B,QAAkD,kBAAlD;AACA,SAASC,UAAT,EAAqBC,YAArB,QAAyC,oBAAzC;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,UAA1C;AACA,SAASC,iBAAT,QAAkC,eAAlC;AACA,OAAOC,UAAP,MAAuB,2BAAvB;AACA,SAASC,WAAT,QAA4B,iCAA5B;AACA,SAASC,IAAT,QAAqB,+BAArB;;AAEA,SAASC,WAAT,CAAsB;AAAEC,EAAAA,aAAF;AAAiBC,EAAAA;AAAjB,CAAtB,EAAsD;AACrD,QAAM;AAAEC,IAAAA,MAAM,GAAG;AAAX,MAAkBD,UAAxB;AACA,QAAM;AAAEE,IAAAA,QAAF;AAAYC,IAAAA,WAAZ;AAAyBC,IAAAA,OAAO,GAAG;AAAnC,MAA6CH,MAAnD;AACA,QAAMI,aAAa,GAAGV,UAAU,CAAE,QAAF,CAAhC;AACA,QAAMW,mBAAmB,GAAG5B,SAAS,CAAI6B,MAAF,IAAc;AACpD,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAM,CAAEd,gBAAF,CAA9B;AACA,WAAOe,WAAW,GAAGC,cAArB;AACA,GAHoC,EAGlC,EAHkC,CAArC;AAKA,QAAMC,KAAK,GAAG3B,cAAc,CAAE;AAC7B4B,IAAAA,cAAc,EAAEhB,UAAU,CAAE,eAAF,CAAV,IAAiC,CAChD,GADgD,EAEhD,IAFgD,EAGhD,IAHgD,EAIhD,KAJgD,EAKhD,IALgD;AADpB,GAAF,CAA5B;;AAUA,MAAK,CAAEW,mBAAP,EAA6B;AAC5B,WAAO,IAAP;AACA;;AACD,SACC,cAAC,iBAAD,QACC,cAAC,SAAD;AAAW,IAAA,KAAK,EAAGpB,EAAE,CAAE,QAAF;AAArB,KACG,CAAC,CAAEmB,aAAH,IACD,cAAC,aAAD;AACC,IAAA,KAAK,EAAGnB,EAAE,CAAE,wBAAF,CADX;AAEC,IAAA,OAAO,EAAG,CAAC,CAAEkB,OAFd;AAGC,IAAA,QAAQ,EAAG,MACVL,aAAa,CAAE;AAAEE,MAAAA,MAAM,EAAE;AAAEG,QAAAA,OAAO,EAAE,CAAEA;AAAb;AAAV,KAAF;AAJf,IAFF,EAUG,CAAEA,OAAF,IACD,8BACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,WAAD;AACC,IAAA,KAAK,EAAGlB,EAAE,CAAE,SAAF,CADX;AAEC,IAAA,aAAa,EAAC,KAFf;AAGC,IAAA,oBAAoB,EAAC,MAHtB;AAIC,IAAA,KAAK,EAAGiB,WAAW,IAAID,QAAf,IAA2B,EAJpC;AAKC,IAAA,QAAQ,EAAKU,SAAF,IAAiB;AAC3BA,MAAAA,SAAS,GACR,IAAIC,UAAU,CAAED,SAAF,CAAd,GACG,GADH,GAEGA,SAHJ;AAIAb,MAAAA,aAAa,CAAE;AACdE,QAAAA,MAAM,EAAE,EACP,GAAGA,MADI;AAEPE,UAAAA,WAAW,EAAES;AAFN;AADM,OAAF,CAAb;AAMA,KAhBF;AAiBC,IAAA,KAAK,EAAGF;AAjBT,IADD,EAoBC,cAAC,IAAD;AAAM,IAAA,IAAI,EAAGtB;AAAb,IApBD,CADD,EAuBC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,WAAD;AACC,IAAA,KAAK,EAAGF,EAAE,CAAE,MAAF,CADX;AAEC,IAAA,aAAa,EAAC,KAFf;AAGC,IAAA,oBAAoB,EAAC,MAHtB;AAIC,IAAA,KAAK,EAAGgB,QAAQ,IAAIC,WAAZ,IAA2B,EAJpC;AAKC,IAAA,QAAQ,EAAKS,SAAF,IAAiB;AAC3BA,MAAAA,SAAS,GACR,IAAIC,UAAU,CAAED,SAAF,CAAd,GACG,GADH,GAEGA,SAHJ;AAIAb,MAAAA,aAAa,CAAE;AACdE,QAAAA,MAAM,EAAE,EACP,GAAGA,MADI;AAEPC,UAAAA,QAAQ,EAAEU;AAFH;AADM,OAAF,CAAb;AAMA,KAhBF;AAiBC,IAAA,KAAK,EAAGF;AAjBT,IADD,EAoBC,cAAC,IAAD;AAAM,IAAA,IAAI,EAAGrB;AAAb,IApBD,CAvBD,CADD,EA+CC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,MAAD;AACC,IAAA,WAAW,MADZ;AAEC,IAAA,OAAO,MAFR;AAGC,IAAA,QAAQ,EAAG,CAAEc,WAAF,IAAiB,CAAED,QAH/B;AAIC,IAAA,OAAO,EAAG,MACTH,aAAa,CAAE;AACdE,MAAAA,MAAM,EAAE;AACPE,QAAAA,WAAW,EAAEW,SADN;AAEPZ,QAAAA,QAAQ,EAAEY,SAFH;AAGPV,QAAAA,OAAO,EAAE;AAHF;AADM,KAAF;AALf,KAcGlB,EAAE,CAAE,OAAF,CAdL,CADD,CA/CD,CAXF,EA8EC;AAAG,IAAA,SAAS,EAAC;AAAb,KACGA,EAAE,CACH,uFADG,CADL,CA9ED,CADD,CADD;AAwFA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAAS6B,YAAT,CAAuBC,QAAvB,EAAkC;AACxC,MAAK3C,GAAG,CAAE2C,QAAQ,CAAChB,UAAX,EAAuB,CAAE,QAAF,EAAY,MAAZ,CAAvB,CAAR,EAAwD;AACvD,WAAOgB,QAAP;AACA;;AACD,MAAKvC,eAAe,CAAEuC,QAAF,EAAY,sBAAZ,CAApB,EAA2D;AAC1DA,IAAAA,QAAQ,CAAChB,UAAT,GAAsB,EACrB,GAAGgB,QAAQ,CAAChB,UADS;AAErBC,MAAAA,MAAM,EAAE;AACPgB,QAAAA,IAAI,EAAE;AADC;AAFa,KAAtB;AAMA;;AAED,SAAOD,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAME,qBAAqB,GAAG5C,0BAA0B,CAC5D6C,SAAF,IAAmBC,KAAF,IAAa;AAC7B,QAAM;AAAEC,IAAAA,IAAI,EAAEC;AAAR,MAAsBF,KAA5B;AACA,QAAMG,aAAa,GAAG9C,eAAe,CACpC6C,SADoC,EAEpC,sBAFoC,CAArC;AAKA,SAAO,CACNC,aAAa,IAAI,cAAC,WAAD;AAAa,IAAA,GAAG,EAAC;AAAjB,KAA+BH,KAA/B,EADX,EAEN,cAAC,SAAD;AAAW,IAAA,GAAG,EAAC;AAAf,KAA2BA,KAA3B,EAFM,CAAP;AAIA,CAZ6D,EAa9D,uBAb8D,CAAxD;AAgBP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMI,gBAAgB,GAAGlD,0BAA0B,CACvDmD,cAAF,IAAwBL,KAAF,IAAa;AAClC,QAAM;AAAEC,IAAAA,IAAF;AAAQrB,IAAAA;AAAR,MAAuBoB,KAA7B;AACA,QAAMG,aAAa,GAAG9C,eAAe,CAAE4C,IAAF,EAAQ,sBAAR,CAArC;AACA,QAAMK,EAAE,GAAGnD,aAAa,CAAEkD,cAAF,CAAxB;AACA,QAAMpB,aAAa,GAAGV,UAAU,CAAE,QAAF,CAAV,IAA0B,EAAhD;;AACA,MAAK,CAAE4B,aAAP,EAAuB;AACtB,WAAO,cAAC,cAAD,EAAqBH,KAArB,CAAP;AACA;;AACD,QAAM;AAAEnB,IAAAA,MAAM,GAAG;AAAX,MAAkBD,UAAxB;AACA,QAAM2B,UAAU,GAAG,CAAC,CAAE1B,MAAH,IAAaA,MAAM,CAACG,OAApB,GAA8BC,aAA9B,GAA8CJ,MAAjE;AACA,QAAM2B,SAAS,GAAGxD,UAAU,CAC3BgD,KAD2B,aAC3BA,KAD2B,uBAC3BA,KAAK,CAAEQ,SADoB,EAE1B,gBAAgBF,EAAI,EAFM,CAA5B;AAKA,QAAMG,OAAO,GAAGvC,UAAU,CAAEO,IAAI,CAACiC,OAAP,CAA1B;AAEA,SACC,8BACGD,OAAO,IACRtC,YAAY,CACX,cAAC,WAAD;AACC,IAAA,QAAQ,EAAI,iBAAiBmC,EAAI,EADlC;AAEC,IAAA,MAAM,EAAGC;AAFV,IADW,EAKXE,OALW,CAFd,EASC,cAAC,cAAD,eAAqBT,KAArB;AAA6B,IAAA,SAAS,EAAGQ;AAAzC,KATD,CADD;AAaA,CA/BwD,CAAnD;AAkCPpD,SAAS,CACR,0BADQ,EAER,0BAFQ,EAGRuC,YAHQ,CAAT;AAKAvC,SAAS,CACR,uBADQ,EAER,uCAFQ,EAGRgD,gBAHQ,CAAT;AAKAhD,SAAS,CACR,kBADQ,EAER,4CAFQ,EAGR0C,qBAHQ,CAAT","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"]}
|
package/build-style/style.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/block-editor",
|
|
3
|
-
"version": "6.1.
|
|
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.
|
|
36
|
-
"@wordpress/blob": "^3.1.
|
|
37
|
-
"@wordpress/block-serialization-default-parser": "^4.1.
|
|
38
|
-
"@wordpress/blocks": "^9.1.
|
|
39
|
-
"@wordpress/components": "^14.1.
|
|
40
|
-
"@wordpress/compose": "^4.1.
|
|
41
|
-
"@wordpress/data": "^5.1.
|
|
42
|
-
"@wordpress/data-controls": "^2.1.
|
|
43
|
-
"@wordpress/deprecated": "^3.1.
|
|
44
|
-
"@wordpress/dom": "^3.1.
|
|
45
|
-
"@wordpress/element": "^3.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.
|
|
48
|
-
"@wordpress/i18n": "^4.1.
|
|
49
|
-
"@wordpress/icons": "^4.0.
|
|
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.
|
|
52
|
-
"@wordpress/keycodes": "^3.1.
|
|
53
|
-
"@wordpress/notices": "^3.1.
|
|
54
|
-
"@wordpress/rich-text": "^4.1.
|
|
55
|
-
"@wordpress/shortcode": "^3.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.
|
|
58
|
-
"@wordpress/wordcount": "^3.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": "
|
|
76
|
+
"gitHead": "6464883c6c546233543a1ee01428059dee3560fc"
|
|
77
77
|
}
|