@wordpress/block-editor 15.19.1-next.v.202605131032.0 → 15.20.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 +15 -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/index.cjs +1 -1
- package/build/components/block-list/use-block-props/index.cjs.map +2 -2
- 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/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 +11 -5
- 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/index.cjs +0 -3
- package/build/components/iframe/index.cjs.map +2 -2
- 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/media-tab/utils.cjs +1 -1
- package/build/components/inserter/media-tab/utils.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 +26 -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/index.mjs +1 -1
- package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
- 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/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 +14 -5
- 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/index.mjs +0 -3
- package/build-module/components/iframe/index.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/media-tab/utils.mjs +1 -1
- package/build-module/components/inserter/media-tab/utils.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 +25 -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 +41 -41
- 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/index.js +1 -1
- 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/colors/test/with-colors.js +1 -1
- 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 +17 -4
- 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/index.js +0 -3
- 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/media-tab/utils.js +1 -1
- 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 +44 -2
- package/src/store/reducer.js +105 -1
- package/src/store/test/private-actions.js +26 -0
- package/src/store/test/private-selectors.js +90 -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
|
@@ -24,6 +24,8 @@ import {
|
|
|
24
24
|
getViewportModalClientIds,
|
|
25
25
|
isSectionBlock,
|
|
26
26
|
getParentSectionBlock,
|
|
27
|
+
getSelectedBlockStyleState,
|
|
28
|
+
isSelectedBlockStyleStateShownOnCanvas,
|
|
27
29
|
} from '../private-selectors';
|
|
28
30
|
import { getBlockEditingMode } from '../selectors';
|
|
29
31
|
import { deviceTypeKey } from '../private-keys';
|
|
@@ -72,6 +74,94 @@ describe( 'private selectors', () => {
|
|
|
72
74
|
} );
|
|
73
75
|
} );
|
|
74
76
|
|
|
77
|
+
describe( 'getSelectedBlockStyleState', () => {
|
|
78
|
+
it( 'returns default when the block has no selected state', () => {
|
|
79
|
+
const state = {};
|
|
80
|
+
|
|
81
|
+
expect( getSelectedBlockStyleState( state, 'client-1' ) ).toEqual( {
|
|
82
|
+
viewport: 'default',
|
|
83
|
+
pseudo: 'default',
|
|
84
|
+
} );
|
|
85
|
+
} );
|
|
86
|
+
|
|
87
|
+
it( 'returns the selected state for the block', () => {
|
|
88
|
+
const state = {
|
|
89
|
+
selectedBlockStyleState: {
|
|
90
|
+
clientId: 'client-1',
|
|
91
|
+
value: { viewport: 'mobile', pseudo: ':hover' },
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
expect( getSelectedBlockStyleState( state, 'client-1' ) ).toEqual( {
|
|
96
|
+
viewport: 'mobile',
|
|
97
|
+
pseudo: ':hover',
|
|
98
|
+
} );
|
|
99
|
+
} );
|
|
100
|
+
|
|
101
|
+
it( 'returns default when the selected state has no value', () => {
|
|
102
|
+
const state = {
|
|
103
|
+
selectedBlockStyleState: {
|
|
104
|
+
clientId: 'client-1',
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
expect( getSelectedBlockStyleState( state, 'client-1' ) ).toEqual( {
|
|
109
|
+
viewport: 'default',
|
|
110
|
+
pseudo: 'default',
|
|
111
|
+
} );
|
|
112
|
+
} );
|
|
113
|
+
|
|
114
|
+
it( 'returns default when another block has the selected state', () => {
|
|
115
|
+
const state = {
|
|
116
|
+
selectedBlockStyleState: {
|
|
117
|
+
clientId: 'client-2',
|
|
118
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
expect( getSelectedBlockStyleState( state, 'client-1' ) ).toEqual( {
|
|
123
|
+
viewport: 'default',
|
|
124
|
+
pseudo: 'default',
|
|
125
|
+
} );
|
|
126
|
+
} );
|
|
127
|
+
} );
|
|
128
|
+
|
|
129
|
+
describe( 'isSelectedBlockStyleStateShownOnCanvas', () => {
|
|
130
|
+
it( 'returns true when the block has no canvas preview state', () => {
|
|
131
|
+
const state = {};
|
|
132
|
+
|
|
133
|
+
expect(
|
|
134
|
+
isSelectedBlockStyleStateShownOnCanvas( state, 'client-1' )
|
|
135
|
+
).toBe( true );
|
|
136
|
+
} );
|
|
137
|
+
|
|
138
|
+
it( 'returns the canvas preview state for the block', () => {
|
|
139
|
+
const state = {
|
|
140
|
+
selectedBlockStyleState: {
|
|
141
|
+
clientId: 'client-1',
|
|
142
|
+
showStateOnCanvas: false,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
expect(
|
|
147
|
+
isSelectedBlockStyleStateShownOnCanvas( state, 'client-1' )
|
|
148
|
+
).toBe( false );
|
|
149
|
+
} );
|
|
150
|
+
|
|
151
|
+
it( 'returns true when another block has canvas preview state', () => {
|
|
152
|
+
const state = {
|
|
153
|
+
selectedBlockStyleState: {
|
|
154
|
+
clientId: 'client-2',
|
|
155
|
+
showStateOnCanvas: false,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
expect(
|
|
160
|
+
isSelectedBlockStyleStateShownOnCanvas( state, 'client-1' )
|
|
161
|
+
).toBe( true );
|
|
162
|
+
} );
|
|
163
|
+
} );
|
|
164
|
+
|
|
75
165
|
describe( 'isBlockSubtreeDisabled', () => {
|
|
76
166
|
const baseState = {
|
|
77
167
|
settings: {},
|
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
editedContentOnlySection,
|
|
43
43
|
withDerivedBlockEditingModes,
|
|
44
44
|
viewportModalClientIds,
|
|
45
|
+
selectedBlockStyleState,
|
|
45
46
|
} from '../reducer';
|
|
46
47
|
import { getBlockOrder, getBlocks } from '../selectors';
|
|
47
48
|
import { unlock } from '../../lock-unlock';
|
|
@@ -5815,6 +5816,368 @@ describe( 'state', () => {
|
|
|
5815
5816
|
} );
|
|
5816
5817
|
} );
|
|
5817
5818
|
|
|
5819
|
+
describe( 'selectedBlockStyleState', () => {
|
|
5820
|
+
it( 'defaults to undefined', () => {
|
|
5821
|
+
const state = selectedBlockStyleState( undefined, {} );
|
|
5822
|
+
|
|
5823
|
+
expect( state ).toBeUndefined();
|
|
5824
|
+
} );
|
|
5825
|
+
|
|
5826
|
+
it( 'stores a selected viewport state for a block', () => {
|
|
5827
|
+
const state = selectedBlockStyleState( undefined, {
|
|
5828
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5829
|
+
clientId: 'client-1',
|
|
5830
|
+
value: { viewport: 'mobile' },
|
|
5831
|
+
} );
|
|
5832
|
+
|
|
5833
|
+
expect( state ).toEqual( {
|
|
5834
|
+
clientId: 'client-1',
|
|
5835
|
+
showStateOnCanvas: true,
|
|
5836
|
+
value: {
|
|
5837
|
+
viewport: 'mobile',
|
|
5838
|
+
pseudo: 'default',
|
|
5839
|
+
},
|
|
5840
|
+
} );
|
|
5841
|
+
} );
|
|
5842
|
+
|
|
5843
|
+
it( 'stores a selected pseudo state for a block', () => {
|
|
5844
|
+
const state = selectedBlockStyleState( undefined, {
|
|
5845
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5846
|
+
clientId: 'client-1',
|
|
5847
|
+
value: { pseudo: ':hover' },
|
|
5848
|
+
} );
|
|
5849
|
+
|
|
5850
|
+
expect( state ).toEqual( {
|
|
5851
|
+
clientId: 'client-1',
|
|
5852
|
+
showStateOnCanvas: true,
|
|
5853
|
+
value: {
|
|
5854
|
+
viewport: 'default',
|
|
5855
|
+
pseudo: ':hover',
|
|
5856
|
+
},
|
|
5857
|
+
} );
|
|
5858
|
+
} );
|
|
5859
|
+
|
|
5860
|
+
it( 'updates only the selected state type for the same block', () => {
|
|
5861
|
+
const state = selectedBlockStyleState(
|
|
5862
|
+
{
|
|
5863
|
+
clientId: 'client-1',
|
|
5864
|
+
value: { viewport: 'mobile', pseudo: 'default' },
|
|
5865
|
+
},
|
|
5866
|
+
{
|
|
5867
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5868
|
+
clientId: 'client-1',
|
|
5869
|
+
value: { pseudo: ':hover' },
|
|
5870
|
+
}
|
|
5871
|
+
);
|
|
5872
|
+
|
|
5873
|
+
expect( state ).toEqual( {
|
|
5874
|
+
clientId: 'client-1',
|
|
5875
|
+
showStateOnCanvas: true,
|
|
5876
|
+
value: {
|
|
5877
|
+
viewport: 'mobile',
|
|
5878
|
+
pseudo: ':hover',
|
|
5879
|
+
},
|
|
5880
|
+
} );
|
|
5881
|
+
} );
|
|
5882
|
+
|
|
5883
|
+
it( 'replaces the selected state when another block is selected', () => {
|
|
5884
|
+
const state = selectedBlockStyleState(
|
|
5885
|
+
{
|
|
5886
|
+
clientId: 'client-1',
|
|
5887
|
+
value: { viewport: 'mobile', pseudo: ':hover' },
|
|
5888
|
+
},
|
|
5889
|
+
{
|
|
5890
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5891
|
+
clientId: 'client-2',
|
|
5892
|
+
value: { pseudo: ':focus' },
|
|
5893
|
+
}
|
|
5894
|
+
);
|
|
5895
|
+
|
|
5896
|
+
expect( state ).toEqual( {
|
|
5897
|
+
clientId: 'client-2',
|
|
5898
|
+
showStateOnCanvas: true,
|
|
5899
|
+
value: {
|
|
5900
|
+
viewport: 'default',
|
|
5901
|
+
pseudo: ':focus',
|
|
5902
|
+
},
|
|
5903
|
+
} );
|
|
5904
|
+
} );
|
|
5905
|
+
|
|
5906
|
+
it( 'stores explicit defaults when both state types are default', () => {
|
|
5907
|
+
const state = selectedBlockStyleState(
|
|
5908
|
+
{
|
|
5909
|
+
clientId: 'client-1',
|
|
5910
|
+
value: { viewport: 'mobile', pseudo: ':hover' },
|
|
5911
|
+
},
|
|
5912
|
+
{
|
|
5913
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5914
|
+
clientId: 'client-1',
|
|
5915
|
+
value: { viewport: 'default', pseudo: 'default' },
|
|
5916
|
+
}
|
|
5917
|
+
);
|
|
5918
|
+
|
|
5919
|
+
expect( state ).toEqual( {
|
|
5920
|
+
clientId: 'client-1',
|
|
5921
|
+
showStateOnCanvas: true,
|
|
5922
|
+
value: {
|
|
5923
|
+
viewport: 'default',
|
|
5924
|
+
pseudo: 'default',
|
|
5925
|
+
},
|
|
5926
|
+
} );
|
|
5927
|
+
} );
|
|
5928
|
+
|
|
5929
|
+
it( 'clears the selected state when clientId is missing', () => {
|
|
5930
|
+
const state = selectedBlockStyleState(
|
|
5931
|
+
{
|
|
5932
|
+
clientId: 'client-1',
|
|
5933
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
5934
|
+
},
|
|
5935
|
+
{
|
|
5936
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5937
|
+
value: { pseudo: ':focus' },
|
|
5938
|
+
}
|
|
5939
|
+
);
|
|
5940
|
+
|
|
5941
|
+
expect( state ).toBeUndefined();
|
|
5942
|
+
} );
|
|
5943
|
+
|
|
5944
|
+
it( 'clears the selected state when value is missing', () => {
|
|
5945
|
+
const state = selectedBlockStyleState(
|
|
5946
|
+
{
|
|
5947
|
+
clientId: 'client-1',
|
|
5948
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
5949
|
+
},
|
|
5950
|
+
{
|
|
5951
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
5952
|
+
clientId: 'client-1',
|
|
5953
|
+
}
|
|
5954
|
+
);
|
|
5955
|
+
|
|
5956
|
+
expect( state ).toBeUndefined();
|
|
5957
|
+
} );
|
|
5958
|
+
|
|
5959
|
+
it( 'keeps the selected state when the same block is selected', () => {
|
|
5960
|
+
const originalState = {
|
|
5961
|
+
clientId: 'client-1',
|
|
5962
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
5963
|
+
};
|
|
5964
|
+
const state = selectedBlockStyleState( originalState, {
|
|
5965
|
+
type: 'SELECT_BLOCK',
|
|
5966
|
+
clientId: 'client-1',
|
|
5967
|
+
} );
|
|
5968
|
+
|
|
5969
|
+
expect( state ).toBe( originalState );
|
|
5970
|
+
} );
|
|
5971
|
+
|
|
5972
|
+
it( 'clears the selected state when another block is selected', () => {
|
|
5973
|
+
const state = selectedBlockStyleState(
|
|
5974
|
+
{
|
|
5975
|
+
clientId: 'client-1',
|
|
5976
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
5977
|
+
},
|
|
5978
|
+
{
|
|
5979
|
+
type: 'SELECT_BLOCK',
|
|
5980
|
+
clientId: 'client-2',
|
|
5981
|
+
}
|
|
5982
|
+
);
|
|
5983
|
+
|
|
5984
|
+
expect( state ).toBeUndefined();
|
|
5985
|
+
} );
|
|
5986
|
+
|
|
5987
|
+
it( 'keeps the selected state for selection changes in the same block', () => {
|
|
5988
|
+
const originalState = {
|
|
5989
|
+
clientId: 'client-1',
|
|
5990
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
5991
|
+
};
|
|
5992
|
+
const state = selectedBlockStyleState( originalState, {
|
|
5993
|
+
type: 'SELECTION_CHANGE',
|
|
5994
|
+
clientId: 'client-1',
|
|
5995
|
+
} );
|
|
5996
|
+
|
|
5997
|
+
expect( state ).toBe( originalState );
|
|
5998
|
+
} );
|
|
5999
|
+
|
|
6000
|
+
it( 'clears the selected state for selection changes in another block', () => {
|
|
6001
|
+
const state = selectedBlockStyleState(
|
|
6002
|
+
{
|
|
6003
|
+
clientId: 'client-1',
|
|
6004
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6005
|
+
},
|
|
6006
|
+
{
|
|
6007
|
+
type: 'SELECTION_CHANGE',
|
|
6008
|
+
clientId: 'client-2',
|
|
6009
|
+
}
|
|
6010
|
+
);
|
|
6011
|
+
|
|
6012
|
+
expect( state ).toBeUndefined();
|
|
6013
|
+
} );
|
|
6014
|
+
|
|
6015
|
+
it( 'keeps the selected state when selection resets to the same block', () => {
|
|
6016
|
+
const originalState = {
|
|
6017
|
+
clientId: 'client-1',
|
|
6018
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6019
|
+
};
|
|
6020
|
+
const state = selectedBlockStyleState( originalState, {
|
|
6021
|
+
type: 'RESET_SELECTION',
|
|
6022
|
+
selectionStart: { clientId: 'client-1' },
|
|
6023
|
+
} );
|
|
6024
|
+
|
|
6025
|
+
expect( state ).toBe( originalState );
|
|
6026
|
+
} );
|
|
6027
|
+
|
|
6028
|
+
it( 'clears the selected state when selection resets to another block', () => {
|
|
6029
|
+
const state = selectedBlockStyleState(
|
|
6030
|
+
{
|
|
6031
|
+
clientId: 'client-1',
|
|
6032
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6033
|
+
},
|
|
6034
|
+
{
|
|
6035
|
+
type: 'RESET_SELECTION',
|
|
6036
|
+
selectionStart: { clientId: 'client-2' },
|
|
6037
|
+
}
|
|
6038
|
+
);
|
|
6039
|
+
|
|
6040
|
+
expect( state ).toBeUndefined();
|
|
6041
|
+
} );
|
|
6042
|
+
|
|
6043
|
+
it( 'clears the selected state when the selection is cleared', () => {
|
|
6044
|
+
const state = selectedBlockStyleState(
|
|
6045
|
+
{
|
|
6046
|
+
clientId: 'client-1',
|
|
6047
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6048
|
+
},
|
|
6049
|
+
{
|
|
6050
|
+
type: 'CLEAR_SELECTED_BLOCK',
|
|
6051
|
+
}
|
|
6052
|
+
);
|
|
6053
|
+
|
|
6054
|
+
expect( state ).toBeUndefined();
|
|
6055
|
+
} );
|
|
6056
|
+
|
|
6057
|
+
it( 'clears the selected state when multiple blocks are selected', () => {
|
|
6058
|
+
const state = selectedBlockStyleState(
|
|
6059
|
+
{
|
|
6060
|
+
clientId: 'client-1',
|
|
6061
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6062
|
+
},
|
|
6063
|
+
{
|
|
6064
|
+
type: 'MULTI_SELECT',
|
|
6065
|
+
}
|
|
6066
|
+
);
|
|
6067
|
+
|
|
6068
|
+
expect( state ).toBeUndefined();
|
|
6069
|
+
} );
|
|
6070
|
+
|
|
6071
|
+
it( 'clears the selected state when the block is removed', () => {
|
|
6072
|
+
const state = selectedBlockStyleState(
|
|
6073
|
+
{
|
|
6074
|
+
clientId: 'client-1',
|
|
6075
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6076
|
+
},
|
|
6077
|
+
{
|
|
6078
|
+
type: 'REMOVE_BLOCKS',
|
|
6079
|
+
clientIds: [ 'client-1' ],
|
|
6080
|
+
}
|
|
6081
|
+
);
|
|
6082
|
+
|
|
6083
|
+
expect( state ).toBeUndefined();
|
|
6084
|
+
} );
|
|
6085
|
+
|
|
6086
|
+
it( 'clears the selected state when the block is replaced', () => {
|
|
6087
|
+
const state = selectedBlockStyleState(
|
|
6088
|
+
{
|
|
6089
|
+
clientId: 'client-2',
|
|
6090
|
+
value: { viewport: 'default', pseudo: ':focus' },
|
|
6091
|
+
},
|
|
6092
|
+
{
|
|
6093
|
+
type: 'REPLACE_BLOCKS',
|
|
6094
|
+
clientIds: [ 'client-2' ],
|
|
6095
|
+
}
|
|
6096
|
+
);
|
|
6097
|
+
|
|
6098
|
+
expect( state ).toBeUndefined();
|
|
6099
|
+
} );
|
|
6100
|
+
|
|
6101
|
+
it( 'clears the selected state when the block is missing after reset', () => {
|
|
6102
|
+
const state = selectedBlockStyleState(
|
|
6103
|
+
{
|
|
6104
|
+
clientId: 'client-1',
|
|
6105
|
+
value: { viewport: 'default', pseudo: ':hover' },
|
|
6106
|
+
},
|
|
6107
|
+
{
|
|
6108
|
+
type: 'RESET_BLOCKS',
|
|
6109
|
+
blocks: [
|
|
6110
|
+
{
|
|
6111
|
+
clientId: 'client-2',
|
|
6112
|
+
innerBlocks: [],
|
|
6113
|
+
},
|
|
6114
|
+
],
|
|
6115
|
+
}
|
|
6116
|
+
);
|
|
6117
|
+
|
|
6118
|
+
expect( state ).toBeUndefined();
|
|
6119
|
+
} );
|
|
6120
|
+
|
|
6121
|
+
it( 'keeps the selected state when the block exists after reset', () => {
|
|
6122
|
+
const originalState = {
|
|
6123
|
+
clientId: 'client-2',
|
|
6124
|
+
value: { viewport: 'default', pseudo: ':focus' },
|
|
6125
|
+
};
|
|
6126
|
+
const state = selectedBlockStyleState( originalState, {
|
|
6127
|
+
type: 'RESET_BLOCKS',
|
|
6128
|
+
blocks: [
|
|
6129
|
+
{
|
|
6130
|
+
clientId: 'client-2',
|
|
6131
|
+
innerBlocks: [],
|
|
6132
|
+
},
|
|
6133
|
+
],
|
|
6134
|
+
} );
|
|
6135
|
+
|
|
6136
|
+
expect( state ).toBe( originalState );
|
|
6137
|
+
} );
|
|
6138
|
+
|
|
6139
|
+
it( 'stores whether canvas preview is enabled for the selected state', () => {
|
|
6140
|
+
const state = selectedBlockStyleState(
|
|
6141
|
+
{
|
|
6142
|
+
clientId: 'client-1',
|
|
6143
|
+
value: { viewport: 'mobile', pseudo: ':hover' },
|
|
6144
|
+
},
|
|
6145
|
+
{
|
|
6146
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE_CANVAS_PREVIEW',
|
|
6147
|
+
clientId: 'client-1',
|
|
6148
|
+
value: false,
|
|
6149
|
+
}
|
|
6150
|
+
);
|
|
6151
|
+
|
|
6152
|
+
expect( state ).toEqual( {
|
|
6153
|
+
clientId: 'client-1',
|
|
6154
|
+
showStateOnCanvas: false,
|
|
6155
|
+
value: { viewport: 'mobile', pseudo: ':hover' },
|
|
6156
|
+
} );
|
|
6157
|
+
} );
|
|
6158
|
+
|
|
6159
|
+
it( 'keeps canvas preview when updating the selected state for the same block', () => {
|
|
6160
|
+
const state = selectedBlockStyleState(
|
|
6161
|
+
{
|
|
6162
|
+
clientId: 'client-1',
|
|
6163
|
+
showStateOnCanvas: false,
|
|
6164
|
+
value: { viewport: 'mobile', pseudo: 'default' },
|
|
6165
|
+
},
|
|
6166
|
+
{
|
|
6167
|
+
type: 'SET_SELECTED_BLOCK_STYLE_STATE',
|
|
6168
|
+
clientId: 'client-1',
|
|
6169
|
+
value: { pseudo: ':hover' },
|
|
6170
|
+
}
|
|
6171
|
+
);
|
|
6172
|
+
|
|
6173
|
+
expect( state ).toEqual( {
|
|
6174
|
+
clientId: 'client-1',
|
|
6175
|
+
showStateOnCanvas: false,
|
|
6176
|
+
value: { viewport: 'mobile', pseudo: ':hover' },
|
|
6177
|
+
} );
|
|
6178
|
+
} );
|
|
6179
|
+
} );
|
|
6180
|
+
|
|
5818
6181
|
describe( 'viewportModalClientIds', () => {
|
|
5819
6182
|
it( 'should default to null', () => {
|
|
5820
6183
|
const state = viewportModalClientIds( undefined, {} );
|
package/src/store/utils.js
CHANGED
|
@@ -7,7 +7,10 @@ import { parse as grammarParse } from '@wordpress/block-serialization-default-pa
|
|
|
7
7
|
/**
|
|
8
8
|
* Internal dependencies
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
selectBlockPatternsKey,
|
|
12
|
+
userPatternCategoriesSelectKey,
|
|
13
|
+
} from './private-keys';
|
|
11
14
|
import { unlock } from '../lock-unlock';
|
|
12
15
|
import { STORE_NAME } from './constants';
|
|
13
16
|
import {
|
|
@@ -128,7 +131,8 @@ export const checkAllowListRecursive = ( blocks, allowedBlockTypes ) => {
|
|
|
128
131
|
export const getAllPatternsDependants = ( select ) => ( state ) => {
|
|
129
132
|
return [
|
|
130
133
|
state.settings.__experimentalBlockPatterns,
|
|
131
|
-
state.settings
|
|
134
|
+
state.settings[ userPatternCategoriesSelectKey ]?.( select ) ??
|
|
135
|
+
state.settings.__experimentalUserPatternCategories,
|
|
132
136
|
state.settings.__experimentalReusableBlocks,
|
|
133
137
|
state.settings[ selectBlockPatternsKey ]?.( select ),
|
|
134
138
|
state.blockPatterns,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts the palette slug from a style value for any preset type, supporting
|
|
3
|
+
* both the user preset format and the theme CSS-variable format:
|
|
4
|
+
*
|
|
5
|
+
* - User format: `var:preset|<type>|slug`
|
|
6
|
+
* - Theme format: `var(--wp--preset--<type>--slug)`
|
|
7
|
+
*
|
|
8
|
+
* Returns `undefined` for plain values, non-strings, or any other
|
|
9
|
+
* unrecognised format.
|
|
10
|
+
*
|
|
11
|
+
* @param {*} rawValue Raw style value stored in the style object.
|
|
12
|
+
* @param {'color'|'gradient'} type Preset type, e.g. `'color'` or `'gradient'`.
|
|
13
|
+
* @return {string|undefined} The palette slug, or undefined.
|
|
14
|
+
*/
|
|
15
|
+
export function extractPresetSlug( rawValue, type ) {
|
|
16
|
+
if ( typeof rawValue !== 'string' ) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const userPrefix = `var:preset|${ type }|`;
|
|
20
|
+
if ( rawValue.startsWith( userPrefix ) ) {
|
|
21
|
+
return rawValue.slice( userPrefix.length );
|
|
22
|
+
}
|
|
23
|
+
const cssVarPrefix = `--wp--preset--${ type }--`;
|
|
24
|
+
const themeFormatMatch = rawValue.match(
|
|
25
|
+
new RegExp( `^var\\(${ cssVarPrefix }([^)]+)\\)$` )
|
|
26
|
+
);
|
|
27
|
+
return themeFormatMatch?.[ 1 ];
|
|
28
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { extractPresetSlug } from '../color-values';
|
|
5
|
+
|
|
6
|
+
describe( 'extractPresetSlug', () => {
|
|
7
|
+
it( 'extracts the slug for a color from the user preset format', () => {
|
|
8
|
+
expect(
|
|
9
|
+
extractPresetSlug( 'var:preset|color|dark-text', 'color' )
|
|
10
|
+
).toBe( 'dark-text' );
|
|
11
|
+
} );
|
|
12
|
+
|
|
13
|
+
it( 'extracts the slug for a color from the theme CSS-var format', () => {
|
|
14
|
+
expect(
|
|
15
|
+
extractPresetSlug(
|
|
16
|
+
'var(--wp--preset--color--vivid-purple)',
|
|
17
|
+
'color'
|
|
18
|
+
)
|
|
19
|
+
).toBe( 'vivid-purple' );
|
|
20
|
+
} );
|
|
21
|
+
|
|
22
|
+
it( 'extracts the slug for a gradient from the user preset format', () => {
|
|
23
|
+
expect(
|
|
24
|
+
extractPresetSlug(
|
|
25
|
+
'var:preset|gradient|blush-bordeaux',
|
|
26
|
+
'gradient'
|
|
27
|
+
)
|
|
28
|
+
).toBe( 'blush-bordeaux' );
|
|
29
|
+
} );
|
|
30
|
+
|
|
31
|
+
it( 'extracts the slug for a gradient from the theme CSS-var format', () => {
|
|
32
|
+
expect(
|
|
33
|
+
extractPresetSlug(
|
|
34
|
+
'var(--wp--preset--gradient--blush-bordeaux)',
|
|
35
|
+
'gradient'
|
|
36
|
+
)
|
|
37
|
+
).toBe( 'blush-bordeaux' );
|
|
38
|
+
} );
|
|
39
|
+
|
|
40
|
+
it( 'handles slugs that contain hyphens for any type', () => {
|
|
41
|
+
expect(
|
|
42
|
+
extractPresetSlug(
|
|
43
|
+
'var:preset|gradient|my-custom-gradient-100',
|
|
44
|
+
'gradient'
|
|
45
|
+
)
|
|
46
|
+
).toBe( 'my-custom-gradient-100' );
|
|
47
|
+
expect(
|
|
48
|
+
extractPresetSlug(
|
|
49
|
+
'var(--wp--preset--gradient--my-custom-gradient-100)',
|
|
50
|
+
'gradient'
|
|
51
|
+
)
|
|
52
|
+
).toBe( 'my-custom-gradient-100' );
|
|
53
|
+
} );
|
|
54
|
+
|
|
55
|
+
it( 'returns undefined for a non-matching type', () => {
|
|
56
|
+
expect(
|
|
57
|
+
extractPresetSlug( 'var:preset|color|dark-text', 'gradient' )
|
|
58
|
+
).toBeUndefined();
|
|
59
|
+
expect(
|
|
60
|
+
extractPresetSlug(
|
|
61
|
+
'var(--wp--preset--color--vivid-purple)',
|
|
62
|
+
'gradient'
|
|
63
|
+
)
|
|
64
|
+
).toBeUndefined();
|
|
65
|
+
} );
|
|
66
|
+
|
|
67
|
+
it( 'returns undefined for non-string values', () => {
|
|
68
|
+
expect( extractPresetSlug( undefined, 'gradient' ) ).toBeUndefined();
|
|
69
|
+
expect( extractPresetSlug( null, 'gradient' ) ).toBeUndefined();
|
|
70
|
+
expect( extractPresetSlug( 42, 'gradient' ) ).toBeUndefined();
|
|
71
|
+
} );
|
|
72
|
+
|
|
73
|
+
it( 'returns undefined for a theme var missing its closing parenthesis', () => {
|
|
74
|
+
expect(
|
|
75
|
+
extractPresetSlug( 'var(--wp--preset--gradient--oops', 'gradient' )
|
|
76
|
+
).toBeUndefined();
|
|
77
|
+
} );
|
|
78
|
+
} );
|