@wordpress/block-editor 15.19.1-next.v.202605131032.0 → 15.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -1
- package/build/components/block-card/index.cjs +51 -41
- package/build/components/block-card/index.cjs.map +3 -3
- package/build/components/block-heading-level-dropdown/heading-level-icon.cjs.map +3 -3
- package/build/components/block-icon/index.cjs +7 -1
- package/build/components/block-icon/index.cjs.map +3 -3
- package/build/components/block-inspector/index.cjs +156 -11
- package/build/components/block-inspector/index.cjs.map +3 -3
- package/build/components/block-inspector/inspector-pre-tabs-slot-fill.cjs +38 -0
- package/build/components/block-inspector/inspector-pre-tabs-slot-fill.cjs.map +7 -0
- package/build/components/block-list/use-block-props/use-focus-handler.cjs +3 -4
- package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +3 -3
- package/build/components/block-list/use-block-props/use-is-hovered.cjs +24 -14
- package/build/components/block-list/use-block-props/use-is-hovered.cjs.map +3 -3
- package/build/components/block-lock/modal.cjs.map +3 -3
- package/build/components/block-patterns-list/index.cjs +13 -2
- package/build/components/block-patterns-list/index.cjs.map +2 -2
- package/build/components/block-popover/index.cjs +13 -3
- package/build/components/block-popover/index.cjs.map +2 -2
- package/build/components/block-toolbar/switch-section-style.cjs.map +3 -3
- package/build/components/block-visibility/modal.cjs.map +3 -3
- package/build/components/block-visibility/viewport-visibility-info.cjs.map +3 -3
- package/build/components/child-layout-control/index.cjs +10 -5
- package/build/components/child-layout-control/index.cjs.map +2 -2
- package/build/components/colors-gradients/control.cjs +7 -4
- package/build/components/colors-gradients/control.cjs.map +2 -2
- package/build/components/global-styles/advanced-panel.cjs +24 -22
- package/build/components/global-styles/advanced-panel.cjs.map +3 -3
- package/build/components/global-styles/color-panel.cjs +95 -58
- package/build/components/global-styles/color-panel.cjs.map +2 -2
- package/build/components/global-styles/dimensions-panel.cjs +15 -8
- package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
- package/build/components/global-styles/index.cjs +3 -0
- package/build/components/global-styles/index.cjs.map +2 -2
- package/build/components/global-styles/shadow-panel-components.cjs +38 -26
- package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
- package/build/components/global-styles/state-control-badges.cjs +69 -0
- package/build/components/global-styles/state-control-badges.cjs.map +7 -0
- package/build/components/global-styles/state-control.cjs +54 -63
- package/build/components/global-styles/state-control.cjs.map +3 -3
- package/build/components/iframe/use-scale-canvas.cjs +4 -1
- package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
- package/build/components/inserter/hooks/use-patterns-state.cjs +4 -6
- package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
- package/build/components/inserter/index.cjs +1 -0
- package/build/components/inserter/index.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-preview.cjs +27 -18
- package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
- package/build/components/inserter/panel.cjs.map +3 -3
- package/build/components/inspector-controls/block-support-tools-panel.cjs +10 -2
- package/build/components/inspector-controls/block-support-tools-panel.cjs.map +2 -2
- package/build/components/inspector-controls/fill.cjs +14 -4
- package/build/components/inspector-controls/fill.cjs.map +2 -2
- package/build/components/inspector-controls/groups.cjs +2 -0
- package/build/components/inspector-controls/groups.cjs.map +2 -2
- package/build/components/inspector-controls-tabs/index.cjs +13 -8
- package/build/components/inspector-controls-tabs/index.cjs.map +3 -3
- package/build/components/inspector-controls-tabs/settings-tab.cjs +1 -4
- package/build/components/inspector-controls-tabs/settings-tab.cjs.map +3 -3
- package/build/components/inspector-controls-tabs/styles-tab.cjs +9 -0
- package/build/components/inspector-controls-tabs/styles-tab.cjs.map +3 -3
- package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs +11 -5
- package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs.map +2 -2
- package/build/components/list-view/block-select-button.cjs +20 -8
- package/build/components/list-view/block-select-button.cjs.map +2 -2
- package/build/components/list-view/block.cjs +2 -1
- package/build/components/list-view/block.cjs.map +2 -2
- package/build/components/preset-input-control/custom-value-controls.cjs +10 -1
- package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
- package/build/components/preset-input-control/index.cjs.map +3 -3
- package/build/components/provider/use-media-upload-settings.cjs +1 -0
- package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
- package/build/components/rich-text/event-listeners/enter.cjs +9 -2
- package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/paste-handler.cjs +4 -4
- package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
- package/build/hooks/background.cjs +13 -3
- package/build/hooks/background.cjs.map +2 -2
- package/build/hooks/block-fields/link/index.cjs.map +3 -3
- package/build/hooks/block-fields/media/index.cjs.map +3 -3
- package/build/hooks/block-style-state.cjs +112 -0
- package/build/hooks/block-style-state.cjs.map +7 -0
- package/build/hooks/border.cjs +13 -3
- package/build/hooks/border.cjs.map +2 -2
- package/build/hooks/color.cjs +28 -9
- package/build/hooks/color.cjs.map +2 -2
- package/build/hooks/dimensions.cjs +15 -6
- package/build/hooks/dimensions.cjs.map +2 -2
- package/build/hooks/layout-child.cjs +147 -61
- package/build/hooks/layout-child.cjs.map +2 -2
- package/build/hooks/layout.cjs +263 -56
- package/build/hooks/layout.cjs.map +3 -3
- package/build/hooks/state-utils.cjs +94 -0
- package/build/hooks/state-utils.cjs.map +7 -0
- package/build/hooks/states.cjs +124 -0
- package/build/hooks/states.cjs.map +7 -0
- package/build/hooks/style.cjs +304 -17
- package/build/hooks/style.cjs.map +3 -3
- package/build/hooks/typography.cjs +14 -5
- package/build/hooks/typography.cjs.map +2 -2
- package/build/layouts/constrained.cjs +128 -55
- package/build/layouts/constrained.cjs.map +3 -3
- package/build/layouts/flex.cjs +119 -31
- package/build/layouts/flex.cjs.map +3 -3
- package/build/layouts/grid.cjs +103 -40
- package/build/layouts/grid.cjs.map +3 -3
- package/build/private-apis.cjs +2 -0
- package/build/private-apis.cjs.map +2 -2
- package/build/store/private-actions.cjs +18 -0
- package/build/store/private-actions.cjs.map +2 -2
- package/build/store/private-keys.cjs +10 -2
- package/build/store/private-keys.cjs.map +2 -2
- package/build/store/private-selectors.cjs +32 -2
- package/build/store/private-selectors.cjs.map +2 -2
- package/build/store/reducer.cjs +70 -1
- package/build/store/reducer.cjs.map +2 -2
- package/build/store/utils.cjs +1 -1
- package/build/store/utils.cjs.map +2 -2
- package/build/utils/color-values.cjs +44 -0
- package/build/utils/color-values.cjs.map +7 -0
- package/build-module/components/block-card/index.mjs +52 -45
- package/build-module/components/block-card/index.mjs.map +2 -2
- package/build-module/components/block-heading-level-dropdown/heading-level-icon.mjs +2 -2
- package/build-module/components/block-heading-level-dropdown/heading-level-icon.mjs.map +2 -2
- package/build-module/components/block-icon/index.mjs +8 -2
- package/build-module/components/block-icon/index.mjs.map +2 -2
- package/build-module/components/block-inspector/index.mjs +166 -13
- package/build-module/components/block-inspector/index.mjs.map +2 -2
- package/build-module/components/block-inspector/inspector-pre-tabs-slot-fill.mjs +12 -0
- package/build-module/components/block-inspector/inspector-pre-tabs-slot-fill.mjs.map +7 -0
- package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +7 -5
- package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/use-is-hovered.mjs +28 -15
- package/build-module/components/block-list/use-block-props/use-is-hovered.mjs.map +2 -2
- package/build-module/components/block-lock/modal.mjs +4 -4
- package/build-module/components/block-lock/modal.mjs.map +2 -2
- package/build-module/components/block-patterns-list/index.mjs +14 -4
- package/build-module/components/block-patterns-list/index.mjs.map +2 -2
- package/build-module/components/block-popover/index.mjs +13 -3
- package/build-module/components/block-popover/index.mjs.map +2 -2
- package/build-module/components/block-toolbar/switch-section-style.mjs +2 -2
- package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
- package/build-module/components/block-visibility/modal.mjs +2 -2
- package/build-module/components/block-visibility/modal.mjs.map +2 -2
- package/build-module/components/block-visibility/viewport-visibility-info.mjs +2 -2
- package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
- package/build-module/components/child-layout-control/index.mjs +10 -5
- package/build-module/components/child-layout-control/index.mjs.map +2 -2
- package/build-module/components/colors-gradients/control.mjs +7 -4
- package/build-module/components/colors-gradients/control.mjs.map +2 -2
- package/build-module/components/global-styles/advanced-panel.mjs +25 -27
- package/build-module/components/global-styles/advanced-panel.mjs.map +2 -2
- package/build-module/components/global-styles/color-panel.mjs +96 -59
- package/build-module/components/global-styles/color-panel.mjs.map +2 -2
- package/build-module/components/global-styles/dimensions-panel.mjs +20 -8
- package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
- package/build-module/components/global-styles/index.mjs +2 -0
- package/build-module/components/global-styles/index.mjs.map +2 -2
- package/build-module/components/global-styles/shadow-panel-components.mjs +39 -28
- package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
- package/build-module/components/global-styles/state-control-badges.mjs +48 -0
- package/build-module/components/global-styles/state-control-badges.mjs.map +7 -0
- package/build-module/components/global-styles/state-control.mjs +57 -71
- package/build-module/components/global-styles/state-control.mjs.map +2 -2
- package/build-module/components/iframe/use-scale-canvas.mjs +4 -1
- package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
- package/build-module/components/inserter/hooks/use-patterns-state.mjs +8 -7
- package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
- package/build-module/components/inserter/index.mjs +1 -0
- package/build-module/components/inserter/index.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-preview.mjs +27 -19
- package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
- package/build-module/components/inserter/panel.mjs +2 -2
- package/build-module/components/inserter/panel.mjs.map +2 -2
- package/build-module/components/inspector-controls/block-support-tools-panel.mjs +10 -2
- package/build-module/components/inspector-controls/block-support-tools-panel.mjs.map +2 -2
- package/build-module/components/inspector-controls/fill.mjs +18 -5
- package/build-module/components/inspector-controls/fill.mjs.map +2 -2
- package/build-module/components/inspector-controls/groups.mjs +2 -0
- package/build-module/components/inspector-controls/groups.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/index.mjs +14 -10
- package/build-module/components/inspector-controls-tabs/index.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/settings-tab.mjs +1 -4
- package/build-module/components/inspector-controls-tabs/settings-tab.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/styles-tab.mjs +9 -0
- package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
- package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs +11 -5
- package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs.map +2 -2
- package/build-module/components/list-view/block-select-button.mjs +20 -9
- package/build-module/components/list-view/block-select-button.mjs.map +2 -2
- package/build-module/components/list-view/block.mjs +2 -1
- package/build-module/components/list-view/block.mjs.map +2 -2
- package/build-module/components/preset-input-control/custom-value-controls.mjs +10 -2
- package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
- package/build-module/components/preset-input-control/index.mjs +2 -2
- package/build-module/components/preset-input-control/index.mjs.map +2 -2
- package/build-module/components/provider/use-media-upload-settings.mjs +1 -0
- package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/enter.mjs +9 -2
- package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/paste-handler.mjs +4 -4
- package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
- package/build-module/hooks/background.mjs +18 -3
- package/build-module/hooks/background.mjs.map +2 -2
- package/build-module/hooks/block-fields/link/index.mjs +3 -3
- package/build-module/hooks/block-fields/link/index.mjs.map +2 -2
- package/build-module/hooks/block-fields/media/index.mjs +3 -3
- package/build-module/hooks/block-fields/media/index.mjs.map +2 -2
- package/build-module/hooks/block-style-state.mjs +79 -0
- package/build-module/hooks/block-style-state.mjs.map +7 -0
- package/build-module/hooks/border.mjs +18 -3
- package/build-module/hooks/border.mjs.map +2 -2
- package/build-module/hooks/color.mjs +33 -9
- package/build-module/hooks/color.mjs.map +2 -2
- package/build-module/hooks/dimensions.mjs +20 -6
- package/build-module/hooks/dimensions.mjs.map +2 -2
- package/build-module/hooks/layout-child.mjs +141 -61
- package/build-module/hooks/layout-child.mjs.map +2 -2
- package/build-module/hooks/layout.mjs +270 -58
- package/build-module/hooks/layout.mjs.map +2 -2
- package/build-module/hooks/state-utils.mjs +64 -0
- package/build-module/hooks/state-utils.mjs.map +7 -0
- package/build-module/hooks/states.mjs +85 -0
- package/build-module/hooks/states.mjs.map +7 -0
- package/build-module/hooks/style.mjs +309 -18
- package/build-module/hooks/style.mjs.map +2 -2
- package/build-module/hooks/typography.mjs +19 -5
- package/build-module/hooks/typography.mjs.map +2 -2
- package/build-module/layouts/constrained.mjs +130 -57
- package/build-module/layouts/constrained.mjs.map +2 -2
- package/build-module/layouts/flex.mjs +123 -35
- package/build-module/layouts/flex.mjs.map +2 -2
- package/build-module/layouts/grid.mjs +105 -42
- package/build-module/layouts/grid.mjs.map +2 -2
- package/build-module/private-apis.mjs +4 -0
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/store/private-actions.mjs +16 -0
- package/build-module/store/private-actions.mjs.map +2 -2
- package/build-module/store/private-keys.mjs +7 -1
- package/build-module/store/private-keys.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +30 -2
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs +69 -1
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/store/utils.mjs +5 -2
- package/build-module/store/utils.mjs.map +2 -2
- package/build-module/utils/color-values.mjs +19 -0
- package/build-module/utils/color-values.mjs.map +7 -0
- package/build-style/content-rtl.css +18 -3
- package/build-style/content.css +18 -3
- package/build-style/style-rtl.css +14 -17
- package/build-style/style.css +14 -17
- package/package.json +39 -39
- package/src/components/audio-player/index.native.js +7 -3
- package/src/components/block-card/index.js +67 -60
- package/src/components/block-heading-level-dropdown/heading-level-icon.js +2 -2
- package/src/components/block-icon/index.js +5 -2
- package/src/components/block-icon/index.native.js +2 -2
- package/src/components/block-inspector/index.js +153 -7
- package/src/components/block-inspector/inspector-pre-tabs-slot-fill.js +11 -0
- package/src/components/block-list/block-selection-button.native.js +3 -3
- package/src/components/block-list/content.scss +0 -6
- package/src/components/block-list/use-block-props/use-focus-handler.js +8 -6
- package/src/components/block-list/use-block-props/use-is-hovered.js +32 -15
- package/src/components/block-lock/modal.js +4 -4
- package/src/components/block-patterns-list/index.js +14 -5
- package/src/components/block-patterns-list/stories/index.story.jsx +2 -0
- package/src/components/block-patterns-list/style.scss +0 -1
- package/src/components/block-popover/index.js +20 -10
- package/src/components/block-toolbar/switch-section-style.js +2 -2
- package/src/components/block-visibility/modal.js +2 -2
- package/src/components/block-visibility/viewport-visibility-info.js +2 -2
- package/src/components/child-layout-control/index.js +15 -8
- package/src/components/child-layout-control/test/index.js +126 -0
- package/src/components/colors-gradients/control.js +10 -8
- package/src/components/colors-gradients/test/control.js +98 -1
- package/src/components/global-styles/advanced-panel.js +44 -39
- package/src/components/global-styles/color-panel.js +133 -60
- package/src/components/global-styles/dimensions-panel.js +29 -8
- package/src/components/global-styles/index.js +1 -0
- package/src/components/global-styles/shadow-panel-components.js +29 -19
- package/src/components/global-styles/state-control-badges.js +58 -0
- package/src/components/global-styles/state-control.js +28 -36
- package/src/components/global-styles/test/color-panel.js +135 -0
- package/src/components/iframe/use-scale-canvas.js +8 -2
- package/src/components/inserter/hooks/use-patterns-state.js +12 -7
- package/src/components/inserter/index.js +1 -0
- package/src/components/inserter/media-tab/media-preview.js +29 -20
- package/src/components/inserter/panel.js +2 -2
- package/src/components/inserter/style.scss +1 -0
- package/src/components/inserter-button/index.native.js +5 -2
- package/src/components/inspector-controls/block-support-tools-panel.js +10 -2
- package/src/components/inspector-controls/fill.js +18 -5
- package/src/components/inspector-controls/groups.js +2 -0
- package/src/components/inspector-controls-tabs/index.js +9 -5
- package/src/components/inspector-controls-tabs/settings-tab.js +1 -7
- package/src/components/inspector-controls-tabs/styles-tab.js +6 -0
- package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +13 -7
- package/src/components/list-view/block-select-button.js +19 -9
- package/src/components/list-view/block.js +6 -1
- package/src/components/media-replace-flow/style.scss +0 -18
- package/src/components/preset-input-control/custom-value-controls.js +13 -6
- package/src/components/preset-input-control/index.js +2 -2
- package/src/components/provider/use-media-upload-settings.js +1 -0
- package/src/components/rich-text/event-listeners/enter.js +14 -2
- package/src/components/rich-text/event-listeners/paste-handler.js +5 -4
- package/src/components/unsupported-block-details/index.native.js +6 -2
- package/src/components/video-player/index.native.js +2 -2
- package/src/components/warning/index.native.js +2 -2
- package/src/hooks/background.js +59 -37
- package/src/hooks/block-fields/link/index.js +3 -3
- package/src/hooks/block-fields/media/index.js +3 -3
- package/src/hooks/block-style-state.js +127 -0
- package/src/hooks/border.js +25 -6
- package/src/hooks/color.js +40 -18
- package/src/hooks/dimensions.js +32 -11
- package/src/hooks/layout-child.js +179 -62
- package/src/hooks/layout.js +349 -75
- package/src/hooks/layout.scss +6 -0
- package/src/hooks/state-utils.js +158 -0
- package/src/hooks/states.js +109 -0
- package/src/hooks/style.js +456 -19
- package/src/hooks/test/block-style-state.js +270 -0
- package/src/hooks/test/layout.js +185 -0
- package/src/hooks/test/state-utils.js +193 -0
- package/src/hooks/test/style.js +301 -1
- package/src/hooks/typography.js +33 -14
- package/src/layouts/constrained.js +182 -95
- package/src/layouts/flex.js +141 -36
- package/src/layouts/grid.js +122 -32
- package/src/layouts/test/flex.js +57 -20
- package/src/private-apis.js +4 -0
- package/src/store/private-actions.js +32 -0
- package/src/store/private-keys.js +4 -0
- package/src/store/private-selectors.js +61 -2
- package/src/store/reducer.js +105 -1
- package/src/store/test/private-actions.js +26 -0
- package/src/store/test/private-selectors.js +143 -0
- package/src/store/test/reducer.js +363 -0
- package/src/store/utils.js +6 -2
- package/src/utils/color-values.js +28 -0
- package/src/utils/test/color-values.js +78 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/state-utils.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { splitSelectorList } from '@wordpress/global-styles-engine';\n\n/**\n * Given a block's `selectors.root` value, returns the part of the selector\n * that is relative to the block wrapper \u2014 i.e., everything after the first\n * compound selector segment.\n *\n * Examples:\n * \".wp-block-button .wp-block-button__link\" \u2192 \".wp-block-button__link\"\n * \".wp-block-foo > .inner\" \u2192 \"> .inner\"\n * \".wp-block-foo\" \u2192 null (no descendant)\n *\n * @param {string} rootSelector The block's `selectors.root` value.\n * @return {string|null} Relative selector, or null if rootSelector targets the wrapper itself.\n */\nexport function getRelativeRootSelector( rootSelector ) {\n\t// Match everything after the first compound selector (up to the first\n\t// whitespace or combinator character).\n\t// Require at least one combinator character (space, >, +, ~) between the\n\t// first compound selector and the rest. Without this anchor, a greedy\n\t// quantifier would backtrack into the first token and produce false matches.\n\tconst match = rootSelector.trim().match( /^[^ >+~]+[ >+~](.*)$/ );\n\tif ( ! match ) {\n\t\treturn null;\n\t}\n\tconst rest = match[ 1 ].trim();\n\treturn rest || null;\n}\n\n/**\n * Builds a scoped selector from a block selector and optional suffix.\n *\n * If the block selector targets a descendant, the descendant portion is scoped\n * under the provided base selector. Otherwise the base selector itself is used.\n *\n * @param {string} baseSelector The block-instance scoping selector.\n * @param {string} blockSelector The block or feature selector from block metadata.\n * @param {string} suffix Optional selector suffix, e.g. \":hover\".\n * @return {string} The scoped CSS selector.\n */\nexport function buildScopedBlockSelector(\n\tbaseSelector,\n\tblockSelector,\n\tsuffix = ''\n) {\n\tif ( typeof blockSelector !== 'string' || ! blockSelector ) {\n\t\treturn splitSelectorList( baseSelector )\n\t\t\t.map( ( selector ) => `${ selector.trim() }${ suffix }` )\n\t\t\t.join( ', ' );\n\t}\n\n\tconst baseSelectors = splitSelectorList( baseSelector ).filter(\n\t\t( selector ) => selector.trim()\n\t);\n\tconst selectors = splitSelectorList( blockSelector ).filter( ( selector ) =>\n\t\tselector.trim()\n\t);\n\n\tif ( ! selectors.length ) {\n\t\treturn baseSelectors\n\t\t\t.map( ( selector ) => `${ selector.trim() }${ suffix }` )\n\t\t\t.join( ', ' );\n\t}\n\n\treturn selectors\n\t\t.map( ( selector ) => {\n\t\t\tselector = selector.trim();\n\n\t\t\t/*\n\t\t\t * Replace only the leading block selector part (e.g. class name,\n\t\t\t * attribute selector, ID, or tag name) with the block instance selector.\n\t\t\t * Preserve anything after that prefix, including modifier classes on the\n\t\t\t * same element and combinators without spaces.\n\t\t\t */\n\t\t\tconst match = selector.match( /^([.#]?[-_a-zA-Z0-9]+|\\[[^\\]]+\\])/ );\n\t\t\tif ( match ) {\n\t\t\t\treturn baseSelectors\n\t\t\t\t\t.map(\n\t\t\t\t\t\t( base ) =>\n\t\t\t\t\t\t\t`${ base.trim() }${ selector.slice(\n\t\t\t\t\t\t\t\tmatch[ 0 ].length\n\t\t\t\t\t\t\t) }${ suffix }`\n\t\t\t\t\t)\n\t\t\t\t\t.join( ', ' );\n\t\t\t}\n\n\t\t\treturn baseSelectors\n\t\t\t\t.map( ( base ) => `${ base.trim() }${ suffix }` )\n\t\t\t\t.join( ', ' );\n\t\t} )\n\t\t.join( ', ' );\n}\n\n/**\n * Builds the scoped selector for root block style state styles.\n *\n * Uses the block's `selectors.root` to determine which element should receive\n * root-level state styles. If `selectors.root` describes a descendant element\n * (e.g. `.wp-block-button .wp-block-button__link`), the relative portion is\n * scoped under `baseSelector`. If no descendant is present, falls back to the\n * base selector.\n *\n * @param {string} baseSelector The block-instance scoping class selector.\n * @param {string} name The block name, used to look up selectors.\n * @return {string} The fully-scoped CSS selector for root state styles.\n */\nexport function buildRootStyleStateSelector( baseSelector, name ) {\n\tconst rootSelector = getBlockType( name )?.selectors?.root;\n\treturn buildScopedBlockSelector( baseSelector, rootSelector );\n}\n\n/**\n * Builds the scoped CSS selector for a block state (e.g. :hover, :focus).\n *\n * Uses the block's `selectors.root` to determine which element the state\n * pseudo-class should apply to. If `selectors.root` describes a descendant\n * element (e.g. \".wp-block-button .wp-block-button__link\"), the relative\n * portion (\".wp-block-button__link\") is scoped under `baseSelector`. If no\n * descendant is present, falls back to appending the state to `baseSelector`.\n *\n * @param {string} baseSelector The block-instance scoping class selector.\n * @param {string} name The block name, used to look up selectors.\n * @param {string} state The pseudo-class string, e.g. \":hover\".\n * @return {string} The fully-scoped CSS selector for this state.\n */\nexport function buildPseudoStyleStateSelector( baseSelector, name, state ) {\n\treturn `${ buildRootStyleStateSelector( baseSelector, name ) }${ state }`;\n}\n\nexport function buildStateSelector( baseSelector, name, state ) {\n\tconst rootSelector = getBlockType( name )?.selectors?.root;\n\treturn buildScopedBlockSelector( baseSelector, rootSelector, state );\n}\n\n/**\n * Builds the CSS selector used to preview a state on the editor canvas,\n * scoped to a specific block instance via its `data-block` attribute.\n *\n * For blocks whose `selectors.root` targets a descendant element\n * (e.g. \".wp-block-button .wp-block-button__link\"), the selector targets\n * that descendant inside the block wrapper. Otherwise it targets the wrapper\n * itself.\n *\n * @param {string} clientId The block's clientId.\n * @param {string} name The block name, used to look up selectors.\n * @return {string} CSS selector scoped to this block instance.\n */\nexport function buildCanvasStateSelector( clientId, name ) {\n\tconst rootSelector = getBlockType( name )?.selectors?.root;\n\treturn buildScopedBlockSelector(\n\t\t`[data-block=\"${ clientId }\"]`,\n\t\trootSelector\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAA6B;AAC7B,kCAAkC;AAe3B,SAAS,wBAAyB,cAAe;AAMvD,QAAM,QAAQ,aAAa,KAAK,EAAE,MAAO,sBAAuB;AAChE,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AACA,QAAM,OAAO,MAAO,CAAE,EAAE,KAAK;AAC7B,SAAO,QAAQ;AAChB;AAaO,SAAS,yBACf,cACA,eACA,SAAS,IACR;AACD,MAAK,OAAO,kBAAkB,YAAY,CAAE,eAAgB;AAC3D,eAAO,+CAAmB,YAAa,EACrC,IAAK,CAAE,aAAc,GAAI,SAAS,KAAK,CAAE,GAAI,MAAO,EAAG,EACvD,KAAM,IAAK;AAAA,EACd;AAEA,QAAM,oBAAgB,+CAAmB,YAAa,EAAE;AAAA,IACvD,CAAE,aAAc,SAAS,KAAK;AAAA,EAC/B;AACA,QAAM,gBAAY,+CAAmB,aAAc,EAAE;AAAA,IAAQ,CAAE,aAC9D,SAAS,KAAK;AAAA,EACf;AAEA,MAAK,CAAE,UAAU,QAAS;AACzB,WAAO,cACL,IAAK,CAAE,aAAc,GAAI,SAAS,KAAK,CAAE,GAAI,MAAO,EAAG,EACvD,KAAM,IAAK;AAAA,EACd;AAEA,SAAO,UACL,IAAK,CAAE,aAAc;AACrB,eAAW,SAAS,KAAK;AAQzB,UAAM,QAAQ,SAAS,MAAO,mCAAoC;AAClE,QAAK,OAAQ;AACZ,aAAO,cACL;AAAA,QACA,CAAE,SACD,GAAI,KAAK,KAAK,CAAE,GAAI,SAAS;AAAA,UAC5B,MAAO,CAAE,EAAE;AAAA,QACZ,CAAE,GAAI,MAAO;AAAA,MACf,EACC,KAAM,IAAK;AAAA,IACd;AAEA,WAAO,cACL,IAAK,CAAE,SAAU,GAAI,KAAK,KAAK,CAAE,GAAI,MAAO,EAAG,EAC/C,KAAM,IAAK;AAAA,EACd,CAAE,EACD,KAAM,IAAK;AACd;AAeO,SAAS,4BAA6B,cAAc,MAAO;AACjE,QAAM,mBAAe,4BAAc,IAAK,GAAG,WAAW;AACtD,SAAO,yBAA0B,cAAc,YAAa;AAC7D;AAgBO,SAAS,8BAA+B,cAAc,MAAM,OAAQ;AAC1E,SAAO,GAAI,4BAA6B,cAAc,IAAK,CAAE,GAAI,KAAM;AACxE;AAEO,SAAS,mBAAoB,cAAc,MAAM,OAAQ;AAC/D,QAAM,mBAAe,4BAAc,IAAK,GAAG,WAAW;AACtD,SAAO,yBAA0B,cAAc,cAAc,KAAM;AACpE;AAeO,SAAS,yBAA0B,UAAU,MAAO;AAC1D,QAAM,mBAAe,4BAAc,IAAK,GAAG,WAAW;AACtD,SAAO;AAAA,IACN,gBAAiB,QAAS;AAAA,IAC1B;AAAA,EACD;AACD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// packages/block-editor/src/hooks/states.js
|
|
31
|
+
var states_exports = {};
|
|
32
|
+
__export(states_exports, {
|
|
33
|
+
BlockStateBadges: () => BlockStateBadges,
|
|
34
|
+
BlockStatesControl: () => BlockStatesControl,
|
|
35
|
+
PSEUDO_STATE_LABELS: () => PSEUDO_STATE_LABELS,
|
|
36
|
+
RESPONSIVE_STATE_LABELS: () => RESPONSIVE_STATE_LABELS,
|
|
37
|
+
VALID_BLOCK_PSEUDO_STATES: () => VALID_BLOCK_PSEUDO_STATES
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(states_exports);
|
|
40
|
+
var import_blocks = require("@wordpress/blocks");
|
|
41
|
+
var import_i18n = require("@wordpress/i18n");
|
|
42
|
+
var import_state_control = __toESM(require("../components/global-styles/state-control.cjs"));
|
|
43
|
+
var import_state_control_badges = __toESM(require("../components/global-styles/state-control-badges.cjs"));
|
|
44
|
+
var import_utils = require("../components/global-styles/utils.cjs");
|
|
45
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
46
|
+
var PSEUDO_STATE_LABELS = {
|
|
47
|
+
":hover": (0, import_i18n.__)("Hover"),
|
|
48
|
+
":focus": (0, import_i18n.__)("Focus"),
|
|
49
|
+
":focus-visible": (0, import_i18n.__)("Focus-visible"),
|
|
50
|
+
":active": (0, import_i18n.__)("Active")
|
|
51
|
+
};
|
|
52
|
+
var RESPONSIVE_STATE_LABELS = {
|
|
53
|
+
tablet: (0, import_i18n.__)("Tablet"),
|
|
54
|
+
mobile: (0, import_i18n.__)("Mobile")
|
|
55
|
+
};
|
|
56
|
+
var VALID_BLOCK_PSEUDO_STATES = {
|
|
57
|
+
"core/button": [":hover", ":focus", ":focus-visible", ":active"],
|
|
58
|
+
"core/navigation-link": [":hover", ":focus", ":focus-visible", ":active"]
|
|
59
|
+
};
|
|
60
|
+
function getPseudoStateOptions(name) {
|
|
61
|
+
const validStates = VALID_BLOCK_PSEUDO_STATES[name] ?? [];
|
|
62
|
+
return validStates.filter((state) => PSEUDO_STATE_LABELS[state]).map((state) => ({
|
|
63
|
+
value: state,
|
|
64
|
+
label: PSEUDO_STATE_LABELS[state]
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
var DEFAULT_STATE_VALUE = "default";
|
|
68
|
+
function getViewportStateOptions(name) {
|
|
69
|
+
if (!(0, import_blocks.getBlockType)(name)?.attributes?.style) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
return Object.entries(RESPONSIVE_STATE_LABELS).map(
|
|
73
|
+
([value, label]) => ({
|
|
74
|
+
value,
|
|
75
|
+
label
|
|
76
|
+
})
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
function BlockStatesControl({ name, value, onChange }) {
|
|
80
|
+
const viewportStateOptions = getViewportStateOptions(name);
|
|
81
|
+
const pseudoStateOptions = getPseudoStateOptions(name);
|
|
82
|
+
const dropdownMenuProps = (0, import_utils.useToolsPanelDropdownMenuProps)();
|
|
83
|
+
if (!viewportStateOptions.length && !pseudoStateOptions.length) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
87
|
+
import_state_control.default,
|
|
88
|
+
{
|
|
89
|
+
viewportStates: viewportStateOptions,
|
|
90
|
+
pseudoStates: pseudoStateOptions,
|
|
91
|
+
viewportValue: value?.viewport ?? DEFAULT_STATE_VALUE,
|
|
92
|
+
pseudoStateValue: value?.pseudo ?? DEFAULT_STATE_VALUE,
|
|
93
|
+
onChangeViewport: (viewport) => onChange({ viewport }),
|
|
94
|
+
onChangePseudoState: (pseudo) => onChange({ pseudo }),
|
|
95
|
+
popoverProps: dropdownMenuProps.popoverProps,
|
|
96
|
+
showText: false
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
function BlockStateBadges({ name, value }) {
|
|
101
|
+
const viewportStateOptions = getViewportStateOptions(name);
|
|
102
|
+
const pseudoStateOptions = getPseudoStateOptions(name);
|
|
103
|
+
if (!viewportStateOptions.length && !pseudoStateOptions.length) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
107
|
+
import_state_control_badges.default,
|
|
108
|
+
{
|
|
109
|
+
viewportStates: viewportStateOptions,
|
|
110
|
+
pseudoStates: pseudoStateOptions,
|
|
111
|
+
viewportValue: value?.viewport ?? DEFAULT_STATE_VALUE,
|
|
112
|
+
pseudoStateValue: value?.pseudo ?? DEFAULT_STATE_VALUE
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
117
|
+
0 && (module.exports = {
|
|
118
|
+
BlockStateBadges,
|
|
119
|
+
BlockStatesControl,
|
|
120
|
+
PSEUDO_STATE_LABELS,
|
|
121
|
+
RESPONSIVE_STATE_LABELS,
|
|
122
|
+
VALID_BLOCK_PSEUDO_STATES
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=states.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/states.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport StateControl from '../components/global-styles/state-control';\nimport StateControlBadges from '../components/global-styles/state-control-badges';\nimport { useToolsPanelDropdownMenuProps } from '../components/global-styles/utils';\n\nexport const PSEUDO_STATE_LABELS = {\n\t':hover': __( 'Hover' ),\n\t':focus': __( 'Focus' ),\n\t':focus-visible': __( 'Focus-visible' ),\n\t':active': __( 'Active' ),\n};\n\nexport const RESPONSIVE_STATE_LABELS = {\n\ttablet: __( 'Tablet' ),\n\tmobile: __( 'Mobile' ),\n};\n\n// Keep in sync with WP_Theme_JSON_Gutenberg::VALID_BLOCK_PSEUDO_SELECTORS\n// and packages/global-styles-engine/src/core/render.tsx.\nexport const VALID_BLOCK_PSEUDO_STATES = {\n\t'core/button': [ ':hover', ':focus', ':focus-visible', ':active' ],\n\t'core/navigation-link': [ ':hover', ':focus', ':focus-visible', ':active' ],\n};\n\nfunction getPseudoStateOptions( name ) {\n\tconst validStates = VALID_BLOCK_PSEUDO_STATES[ name ] ?? [];\n\n\treturn validStates\n\t\t.filter( ( state ) => PSEUDO_STATE_LABELS[ state ] )\n\t\t.map( ( state ) => ( {\n\t\t\tvalue: state,\n\t\t\tlabel: PSEUDO_STATE_LABELS[ state ],\n\t\t} ) );\n}\n\nconst DEFAULT_STATE_VALUE = 'default';\n\nfunction getViewportStateOptions( name ) {\n\tif ( ! getBlockType( name )?.attributes?.style ) {\n\t\treturn [];\n\t}\n\n\treturn Object.entries( RESPONSIVE_STATE_LABELS ).map(\n\t\t( [ value, label ] ) => ( {\n\t\t\tvalue,\n\t\t\tlabel,\n\t\t} )\n\t);\n}\n\n/**\n * Renders a style-state selector in the block card header.\n * Viewport states are shown for blocks with a style attribute, while\n * pseudo-states are shown for blocks with configured pseudo-state support.\n *\n * @param {Object} props Component props.\n * @param {string} props.name Block name.\n * @param {Object} props.value Currently selected style-state value.\n * @param {Function} props.onChange Callback when style-state selection changes.\n * @return {Element|null} State control component, or null if not applicable.\n */\nexport function BlockStatesControl( { name, value, onChange } ) {\n\tconst viewportStateOptions = getViewportStateOptions( name );\n\tconst pseudoStateOptions = getPseudoStateOptions( name );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! viewportStateOptions.length && ! pseudoStateOptions.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<StateControl\n\t\t\tviewportStates={ viewportStateOptions }\n\t\t\tpseudoStates={ pseudoStateOptions }\n\t\t\tviewportValue={ value?.viewport ?? DEFAULT_STATE_VALUE }\n\t\t\tpseudoStateValue={ value?.pseudo ?? DEFAULT_STATE_VALUE }\n\t\t\tonChangeViewport={ ( viewport ) => onChange( { viewport } ) }\n\t\t\tonChangePseudoState={ ( pseudo ) => onChange( { pseudo } ) }\n\t\t\tpopoverProps={ dropdownMenuProps.popoverProps }\n\t\t\tshowText={ false }\n\t\t/>\n\t);\n}\n\nexport function BlockStateBadges( { name, value } ) {\n\tconst viewportStateOptions = getViewportStateOptions( name );\n\tconst pseudoStateOptions = getPseudoStateOptions( name );\n\n\tif ( ! viewportStateOptions.length && ! pseudoStateOptions.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<StateControlBadges\n\t\t\tviewportStates={ viewportStateOptions }\n\t\t\tpseudoStates={ pseudoStateOptions }\n\t\t\tviewportValue={ value?.viewport ?? DEFAULT_STATE_VALUE }\n\t\t\tpseudoStateValue={ value?.pseudo ?? DEFAULT_STATE_VALUE }\n\t\t/>\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAA6B;AAC7B,kBAAmB;AAKnB,2BAAyB;AACzB,kCAA+B;AAC/B,mBAA+C;AAoE7C;AAlEK,IAAM,sBAAsB;AAAA,EAClC,cAAU,gBAAI,OAAQ;AAAA,EACtB,cAAU,gBAAI,OAAQ;AAAA,EACtB,sBAAkB,gBAAI,eAAgB;AAAA,EACtC,eAAW,gBAAI,QAAS;AACzB;AAEO,IAAM,0BAA0B;AAAA,EACtC,YAAQ,gBAAI,QAAS;AAAA,EACrB,YAAQ,gBAAI,QAAS;AACtB;AAIO,IAAM,4BAA4B;AAAA,EACxC,eAAe,CAAE,UAAU,UAAU,kBAAkB,SAAU;AAAA,EACjE,wBAAwB,CAAE,UAAU,UAAU,kBAAkB,SAAU;AAC3E;AAEA,SAAS,sBAAuB,MAAO;AACtC,QAAM,cAAc,0BAA2B,IAAK,KAAK,CAAC;AAE1D,SAAO,YACL,OAAQ,CAAE,UAAW,oBAAqB,KAAM,CAAE,EAClD,IAAK,CAAE,WAAa;AAAA,IACpB,OAAO;AAAA,IACP,OAAO,oBAAqB,KAAM;AAAA,EACnC,EAAI;AACN;AAEA,IAAM,sBAAsB;AAE5B,SAAS,wBAAyB,MAAO;AACxC,MAAK,KAAE,4BAAc,IAAK,GAAG,YAAY,OAAQ;AAChD,WAAO,CAAC;AAAA,EACT;AAEA,SAAO,OAAO,QAAS,uBAAwB,EAAE;AAAA,IAChD,CAAE,CAAE,OAAO,KAAM,OAAS;AAAA,MACzB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;AAaO,SAAS,mBAAoB,EAAE,MAAM,OAAO,SAAS,GAAI;AAC/D,QAAM,uBAAuB,wBAAyB,IAAK;AAC3D,QAAM,qBAAqB,sBAAuB,IAAK;AACvD,QAAM,wBAAoB,6CAA+B;AAEzD,MAAK,CAAE,qBAAqB,UAAU,CAAE,mBAAmB,QAAS;AACnE,WAAO;AAAA,EACR;AAEA,SACC;AAAA,IAAC,qBAAAA;AAAA,IAAA;AAAA,MACA,gBAAiB;AAAA,MACjB,cAAe;AAAA,MACf,eAAgB,OAAO,YAAY;AAAA,MACnC,kBAAmB,OAAO,UAAU;AAAA,MACpC,kBAAmB,CAAE,aAAc,SAAU,EAAE,SAAS,CAAE;AAAA,MAC1D,qBAAsB,CAAE,WAAY,SAAU,EAAE,OAAO,CAAE;AAAA,MACzD,cAAe,kBAAkB;AAAA,MACjC,UAAW;AAAA;AAAA,EACZ;AAEF;AAEO,SAAS,iBAAkB,EAAE,MAAM,MAAM,GAAI;AACnD,QAAM,uBAAuB,wBAAyB,IAAK;AAC3D,QAAM,qBAAqB,sBAAuB,IAAK;AAEvD,MAAK,CAAE,qBAAqB,UAAU,CAAE,mBAAmB,QAAS;AACnE,WAAO;AAAA,EACR;AAEA,SACC;AAAA,IAAC,4BAAAC;AAAA,IAAA;AAAA,MACA,gBAAiB;AAAA,MACjB,cAAe;AAAA,MACf,eAAgB,OAAO,YAAY;AAAA,MACnC,kBAAmB,OAAO,UAAU;AAAA;AAAA,EACrC;AAEF;",
|
|
6
|
+
"names": ["StateControl", "StateControlBadges"]
|
|
7
|
+
}
|
package/build/hooks/style.cjs
CHANGED
|
@@ -22,12 +22,18 @@ var style_exports = {};
|
|
|
22
22
|
__export(style_exports, {
|
|
23
23
|
addSaveProps: () => addSaveProps,
|
|
24
24
|
default: () => style_default,
|
|
25
|
+
getBlockStateStylesCSS: () => getBlockStateStylesCSS,
|
|
26
|
+
getCanvasStateStyleValue: () => getCanvasStateStyleValue,
|
|
25
27
|
getInlineStyles: () => getInlineStyles,
|
|
28
|
+
getResponsiveStateCSSRules: () => getResponsiveStateCSSRules,
|
|
29
|
+
getStateStylesCSS: () => getStateStylesCSS,
|
|
26
30
|
omitStyle: () => omitStyle
|
|
27
31
|
});
|
|
28
32
|
module.exports = __toCommonJS(style_exports);
|
|
29
33
|
var import_element = require("@wordpress/element");
|
|
30
34
|
var import_hooks = require("@wordpress/hooks");
|
|
35
|
+
var import_data = require("@wordpress/data");
|
|
36
|
+
var import_global_styles_engine = require("@wordpress/global-styles-engine");
|
|
31
37
|
var import_blocks = require("@wordpress/blocks");
|
|
32
38
|
var import_compose = require("@wordpress/compose");
|
|
33
39
|
var import_style_engine = require("@wordpress/style-engine");
|
|
@@ -37,9 +43,20 @@ var import_color = require("./color.cjs");
|
|
|
37
43
|
var import_typography = require("./typography.cjs");
|
|
38
44
|
var import_dimensions = require("./dimensions.cjs");
|
|
39
45
|
var import_utils = require("./utils.cjs");
|
|
46
|
+
var import_block_style_state = require("./block-style-state.cjs");
|
|
47
|
+
var import_states = require("./states.cjs");
|
|
48
|
+
var import_state_utils = require("./state-utils.cjs");
|
|
40
49
|
var import_utils2 = require("../components/global-styles/utils.cjs");
|
|
41
50
|
var import_block_editing_mode = require("../components/block-editing-mode/index.cjs");
|
|
51
|
+
var import_store = require("../store/index.cjs");
|
|
52
|
+
var import_private_keys = require("../store/private-keys.cjs");
|
|
53
|
+
var import_lock_unlock = require("../lock-unlock.cjs");
|
|
42
54
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
55
|
+
var BORDER_SIDES = ["Top", "Right", "Bottom", "Left"];
|
|
56
|
+
var RESPONSIVE_BREAKPOINTS = {
|
|
57
|
+
mobile: "@media (width <= 480px)",
|
|
58
|
+
tablet: "@media (480px < width <= 782px)"
|
|
59
|
+
};
|
|
43
60
|
var styleSupportKeys = [
|
|
44
61
|
...import_typography.TYPOGRAPHY_SUPPORT_KEYS,
|
|
45
62
|
import_border.BORDER_SUPPORT_KEY,
|
|
@@ -57,6 +74,200 @@ function getInlineStyles(styles = {}) {
|
|
|
57
74
|
});
|
|
58
75
|
return output;
|
|
59
76
|
}
|
|
77
|
+
function getStateFallbackBorderStyles(stateStyles) {
|
|
78
|
+
const border = stateStyles?.border;
|
|
79
|
+
if (!border) {
|
|
80
|
+
return void 0;
|
|
81
|
+
}
|
|
82
|
+
const hasBorderStyle = !!border.style;
|
|
83
|
+
const hasBorderColor = !!border.color;
|
|
84
|
+
const hasBorderWidth = !!border.width;
|
|
85
|
+
const fallbackBorder = {};
|
|
86
|
+
if (!hasBorderStyle && (hasBorderColor || hasBorderWidth)) {
|
|
87
|
+
fallbackBorder.style = "solid";
|
|
88
|
+
}
|
|
89
|
+
BORDER_SIDES.forEach((side) => {
|
|
90
|
+
const sideKey = side.toLowerCase();
|
|
91
|
+
const sideBorder = border[sideKey];
|
|
92
|
+
const hasSideStyle = !!sideBorder?.style;
|
|
93
|
+
const hasSideColor = !!sideBorder?.color;
|
|
94
|
+
const hasSideWidth = !!sideBorder?.width;
|
|
95
|
+
if (!hasBorderStyle && !hasSideStyle && (hasSideColor || hasSideWidth)) {
|
|
96
|
+
fallbackBorder[sideKey] = { style: "solid" };
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return (0, import_utils.cleanEmptyObject)({ border: (0, import_utils.cleanEmptyObject)(fallbackBorder) });
|
|
100
|
+
}
|
|
101
|
+
function getStateStylesCSS(stateStyles, selector) {
|
|
102
|
+
const css = (0, import_style_engine.compileCSS)(stateStyles, { selector });
|
|
103
|
+
const importantCSS = css ? css.replace(/;/g, " !important;") : void 0;
|
|
104
|
+
const fallbackBorderStyles = getStateFallbackBorderStyles(stateStyles);
|
|
105
|
+
const fallbackCSS = fallbackBorderStyles ? (0, import_style_engine.compileCSS)(fallbackBorderStyles, { selector }) : void 0;
|
|
106
|
+
return [importantCSS, fallbackCSS].filter(Boolean).join("\n");
|
|
107
|
+
}
|
|
108
|
+
function isPlainObject(value) {
|
|
109
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
110
|
+
}
|
|
111
|
+
function mergeStyleObjects(target = {}, source = {}) {
|
|
112
|
+
const merged = { ...target };
|
|
113
|
+
Object.entries(source).forEach(([key, value]) => {
|
|
114
|
+
merged[key] = isPlainObject(value) && isPlainObject(merged[key]) ? mergeStyleObjects(merged[key], value) : value;
|
|
115
|
+
});
|
|
116
|
+
return merged;
|
|
117
|
+
}
|
|
118
|
+
function addStyleGroup(groups, selector, style) {
|
|
119
|
+
const key = selector || "";
|
|
120
|
+
const existing = groups.get(key) || { selector, style: {} };
|
|
121
|
+
groups.set(key, {
|
|
122
|
+
selector,
|
|
123
|
+
style: mergeStyleObjects(existing.style, style)
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function getStateStyleGroups(stateStyles, name) {
|
|
127
|
+
const blockSelectors = (0, import_blocks.getBlockType)(name)?.selectors || {};
|
|
128
|
+
const groups = /* @__PURE__ */ new Map();
|
|
129
|
+
Object.entries(stateStyles || {}).forEach(
|
|
130
|
+
([feature, featureStyles]) => {
|
|
131
|
+
const featureSelectors = blockSelectors[feature];
|
|
132
|
+
if (typeof featureSelectors === "string") {
|
|
133
|
+
addStyleGroup(groups, featureSelectors, {
|
|
134
|
+
[feature]: featureStyles
|
|
135
|
+
});
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (isPlainObject(featureSelectors) && isPlainObject(featureStyles)) {
|
|
139
|
+
const remainingStyles = { ...featureStyles };
|
|
140
|
+
Object.entries(featureSelectors).forEach(
|
|
141
|
+
([subfeature, subfeatureSelector]) => {
|
|
142
|
+
if (subfeature === "root" || typeof subfeatureSelector !== "string" || !Object.hasOwn(featureStyles, subfeature)) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
addStyleGroup(groups, subfeatureSelector, {
|
|
146
|
+
[feature]: {
|
|
147
|
+
[subfeature]: featureStyles[subfeature]
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
delete remainingStyles[subfeature];
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
if (Object.keys(remainingStyles).length) {
|
|
154
|
+
addStyleGroup(
|
|
155
|
+
groups,
|
|
156
|
+
featureSelectors.root || blockSelectors.root,
|
|
157
|
+
{
|
|
158
|
+
[feature]: remainingStyles
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
addStyleGroup(groups, blockSelectors.root, {
|
|
165
|
+
[feature]: featureStyles
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
return Array.from(groups.values());
|
|
170
|
+
}
|
|
171
|
+
function getBlockStateStylesCSS(stateStyles, options) {
|
|
172
|
+
const { name, baseSelector, state = "" } = options;
|
|
173
|
+
const rules = getStateStyleGroups(stateStyles, name).map(
|
|
174
|
+
({ selector: blockSelector, style }) => getStateStylesCSS(
|
|
175
|
+
style,
|
|
176
|
+
(0, import_state_utils.buildScopedBlockSelector)(baseSelector, blockSelector, state)
|
|
177
|
+
)
|
|
178
|
+
).filter(Boolean);
|
|
179
|
+
return rules.length ? rules.join("\n") : void 0;
|
|
180
|
+
}
|
|
181
|
+
function getRootStateStyles(stateStyles, nestedKeys) {
|
|
182
|
+
if (!stateStyles) {
|
|
183
|
+
return stateStyles;
|
|
184
|
+
}
|
|
185
|
+
const rootStyles = { ...stateStyles };
|
|
186
|
+
nestedKeys.forEach((key) => {
|
|
187
|
+
delete rootStyles[key];
|
|
188
|
+
});
|
|
189
|
+
return rootStyles;
|
|
190
|
+
}
|
|
191
|
+
function getPseudoStateCSSRules(style, name, baseSelector) {
|
|
192
|
+
const validPseudoStates = import_states.VALID_BLOCK_PSEUDO_STATES[name];
|
|
193
|
+
if (!validPseudoStates) {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
const cssRules = [];
|
|
197
|
+
validPseudoStates.forEach((pseudoState) => {
|
|
198
|
+
const stateStyles = style?.[pseudoState];
|
|
199
|
+
if (stateStyles) {
|
|
200
|
+
const css = getBlockStateStylesCSS(stateStyles, {
|
|
201
|
+
name,
|
|
202
|
+
baseSelector,
|
|
203
|
+
state: pseudoState
|
|
204
|
+
});
|
|
205
|
+
if (css) {
|
|
206
|
+
cssRules.push(css);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
return cssRules;
|
|
211
|
+
}
|
|
212
|
+
function getResponsiveStateCSSRules(style, name, baseSelector) {
|
|
213
|
+
const cssRules = [];
|
|
214
|
+
const validPseudoStates = import_states.VALID_BLOCK_PSEUDO_STATES[name] ?? [];
|
|
215
|
+
const nestedStateKeys = ["elements", ...validPseudoStates];
|
|
216
|
+
Object.entries(RESPONSIVE_BREAKPOINTS).forEach(
|
|
217
|
+
([viewport, mediaQuery]) => {
|
|
218
|
+
const viewportStyles = style?.[viewport];
|
|
219
|
+
if (!viewportStyles) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const viewportCSSRules = [];
|
|
223
|
+
const rootCSS = getBlockStateStylesCSS(
|
|
224
|
+
getRootStateStyles(viewportStyles, nestedStateKeys),
|
|
225
|
+
{
|
|
226
|
+
name,
|
|
227
|
+
baseSelector
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
if (rootCSS) {
|
|
231
|
+
viewportCSSRules.push(rootCSS);
|
|
232
|
+
}
|
|
233
|
+
const elementCSS = getElementCSSRules(
|
|
234
|
+
viewportStyles.elements,
|
|
235
|
+
name,
|
|
236
|
+
baseSelector
|
|
237
|
+
);
|
|
238
|
+
if (elementCSS) {
|
|
239
|
+
viewportCSSRules.push(elementCSS);
|
|
240
|
+
}
|
|
241
|
+
viewportCSSRules.push(
|
|
242
|
+
...getPseudoStateCSSRules(viewportStyles, name, baseSelector)
|
|
243
|
+
);
|
|
244
|
+
if (viewportCSSRules.length) {
|
|
245
|
+
cssRules.push(
|
|
246
|
+
`${mediaQuery}{${viewportCSSRules.join("")}}`
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
);
|
|
251
|
+
return cssRules;
|
|
252
|
+
}
|
|
253
|
+
function getCanvasStateStyleValue(style, selectedState) {
|
|
254
|
+
const stateValue = (0, import_block_style_state.getStyleForState)(style, selectedState);
|
|
255
|
+
if (!(0, import_block_style_state.hasViewportBlockStyleState)(selectedState)) {
|
|
256
|
+
return stateValue;
|
|
257
|
+
}
|
|
258
|
+
const defaultViewportState = {
|
|
259
|
+
...selectedState,
|
|
260
|
+
viewport: import_block_style_state.DEFAULT_BLOCK_STYLE_STATE.viewport
|
|
261
|
+
};
|
|
262
|
+
const defaultViewportStateValue = (0, import_block_style_state.getStyleForState)(
|
|
263
|
+
style,
|
|
264
|
+
defaultViewportState
|
|
265
|
+
);
|
|
266
|
+
if (defaultViewportStateValue && stateValue) {
|
|
267
|
+
return (0, import_global_styles_engine.mergeGlobalStyles)(defaultViewportStateValue, stateValue);
|
|
268
|
+
}
|
|
269
|
+
return stateValue || defaultViewportStateValue;
|
|
270
|
+
}
|
|
60
271
|
function addAttribute(settings) {
|
|
61
272
|
if (!hasStyleSupport(settings) && !(0, import_blocks.hasBlockSupport)(settings, "customCSS", true)) {
|
|
62
273
|
return settings;
|
|
@@ -153,28 +364,86 @@ function BlockStyleControls({
|
|
|
153
364
|
clientId,
|
|
154
365
|
name,
|
|
155
366
|
setAttributes,
|
|
367
|
+
style,
|
|
156
368
|
__unstableParentLayout
|
|
157
369
|
}) {
|
|
158
370
|
const settings = (0, import_utils.useBlockSettings)(name, __unstableParentLayout);
|
|
159
371
|
const blockEditingMode = (0, import_block_editing_mode.useBlockEditingMode)();
|
|
372
|
+
const { globalBlockStyles, selectedState, showStateOnCanvas } = (0, import_data.useSelect)(
|
|
373
|
+
(select) => {
|
|
374
|
+
const blockEditorSelect = select(import_store.store);
|
|
375
|
+
const {
|
|
376
|
+
getSelectedBlockStyleState,
|
|
377
|
+
isSelectedBlockStyleStateShownOnCanvas
|
|
378
|
+
} = (0, import_lock_unlock.unlock)(blockEditorSelect);
|
|
379
|
+
const editorSettings = blockEditorSelect.getSettings();
|
|
380
|
+
return {
|
|
381
|
+
globalBlockStyles: editorSettings?.[import_private_keys.globalStylesDataKey]?.blocks?.[name],
|
|
382
|
+
selectedState: getSelectedBlockStyleState(clientId),
|
|
383
|
+
showStateOnCanvas: isSelectedBlockStyleStateShownOnCanvas(clientId)
|
|
384
|
+
};
|
|
385
|
+
},
|
|
386
|
+
[clientId, name]
|
|
387
|
+
);
|
|
388
|
+
const isPseudoSelectorState = (0, import_block_style_state.hasPseudoBlockStyleState)(selectedState);
|
|
389
|
+
const canvasStateCSS = (0, import_element.useMemo)(() => {
|
|
390
|
+
if (!showStateOnCanvas || !isPseudoSelectorState) {
|
|
391
|
+
return void 0;
|
|
392
|
+
}
|
|
393
|
+
const globalStateValue = getCanvasStateStyleValue(
|
|
394
|
+
globalBlockStyles,
|
|
395
|
+
selectedState
|
|
396
|
+
);
|
|
397
|
+
const instanceStateValue = getCanvasStateStyleValue(
|
|
398
|
+
style,
|
|
399
|
+
selectedState
|
|
400
|
+
);
|
|
401
|
+
let stateValue;
|
|
402
|
+
if (globalStateValue && instanceStateValue) {
|
|
403
|
+
stateValue = (0, import_global_styles_engine.mergeGlobalStyles)(
|
|
404
|
+
globalStateValue,
|
|
405
|
+
instanceStateValue
|
|
406
|
+
);
|
|
407
|
+
} else if (instanceStateValue) {
|
|
408
|
+
stateValue = instanceStateValue;
|
|
409
|
+
} else if (globalStateValue) {
|
|
410
|
+
stateValue = globalStateValue;
|
|
411
|
+
} else {
|
|
412
|
+
return void 0;
|
|
413
|
+
}
|
|
414
|
+
return getBlockStateStylesCSS(stateValue, {
|
|
415
|
+
name,
|
|
416
|
+
baseSelector: `[data-block="${clientId}"]`
|
|
417
|
+
});
|
|
418
|
+
}, [
|
|
419
|
+
showStateOnCanvas,
|
|
420
|
+
isPseudoSelectorState,
|
|
421
|
+
globalBlockStyles,
|
|
422
|
+
style,
|
|
423
|
+
selectedState,
|
|
424
|
+
clientId,
|
|
425
|
+
name
|
|
426
|
+
]);
|
|
427
|
+
(0, import_utils.useStyleOverride)({ css: canvasStateCSS });
|
|
428
|
+
if (blockEditingMode !== "default") {
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
const panelSettings = {
|
|
432
|
+
...settings,
|
|
433
|
+
typography: {
|
|
434
|
+
...settings.typography,
|
|
435
|
+
// The text alignment UI for individual blocks is rendered in
|
|
436
|
+
// the block toolbar, so disable it here.
|
|
437
|
+
textAlign: false
|
|
438
|
+
}
|
|
439
|
+
};
|
|
160
440
|
const passedProps = {
|
|
161
441
|
clientId,
|
|
162
442
|
name,
|
|
163
443
|
setAttributes,
|
|
164
|
-
settings:
|
|
165
|
-
...settings,
|
|
166
|
-
typography: {
|
|
167
|
-
...settings.typography,
|
|
168
|
-
// The text alignment UI for individual blocks is rendered in
|
|
169
|
-
// the block toolbar, so disable it here.
|
|
170
|
-
textAlign: false
|
|
171
|
-
}
|
|
172
|
-
}
|
|
444
|
+
settings: panelSettings
|
|
173
445
|
};
|
|
174
|
-
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
446
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_block_style_state.BlockStyleStateProvider, { value: selectedState, children: [
|
|
178
447
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_color.ColorEdit, { ...passedProps }),
|
|
179
448
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_background.BackgroundImagePanel, { ...passedProps }),
|
|
180
449
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_typography.TypographyPanel, { ...passedProps }),
|
|
@@ -258,10 +527,24 @@ function useBlockProps({ name, style }) {
|
|
|
258
527
|
);
|
|
259
528
|
const baseElementSelector = `.${blockElementsContainerIdentifier}`;
|
|
260
529
|
const blockElementStyles = style?.elements;
|
|
261
|
-
const styles = (0, import_element.useMemo)(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
530
|
+
const styles = (0, import_element.useMemo)(() => {
|
|
531
|
+
const cssRules = [];
|
|
532
|
+
const elementCSS = getElementCSSRules(
|
|
533
|
+
blockElementStyles,
|
|
534
|
+
name,
|
|
535
|
+
baseElementSelector
|
|
536
|
+
);
|
|
537
|
+
if (elementCSS) {
|
|
538
|
+
cssRules.push(elementCSS);
|
|
539
|
+
}
|
|
540
|
+
cssRules.push(
|
|
541
|
+
...getPseudoStateCSSRules(style, name, baseElementSelector)
|
|
542
|
+
);
|
|
543
|
+
cssRules.push(
|
|
544
|
+
...getResponsiveStateCSSRules(style, name, baseElementSelector)
|
|
545
|
+
);
|
|
546
|
+
return cssRules.length > 0 ? cssRules.join("") : void 0;
|
|
547
|
+
}, [baseElementSelector, blockElementStyles, name, style]);
|
|
265
548
|
(0, import_utils.useStyleOverride)({ css: styles });
|
|
266
549
|
return addSaveProps(
|
|
267
550
|
{ className: blockElementsContainerIdentifier },
|
|
@@ -278,7 +561,11 @@ function useBlockProps({ name, style }) {
|
|
|
278
561
|
// Annotate the CommonJS export names for ESM import in node:
|
|
279
562
|
0 && (module.exports = {
|
|
280
563
|
addSaveProps,
|
|
564
|
+
getBlockStateStylesCSS,
|
|
565
|
+
getCanvasStateStyleValue,
|
|
281
566
|
getInlineStyles,
|
|
567
|
+
getResponsiveStateCSSRules,
|
|
568
|
+
getStateStylesCSS,
|
|
282
569
|
omitStyle
|
|
283
570
|
});
|
|
284
571
|
//# sourceMappingURL=style.cjs.map
|