@wordpress/block-editor 17.1.0 → 17.2.1-next.v.202609171837.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 +32 -0
- package/README.md +214 -214
- package/build/autocompleters/block.cjs.map +2 -2
- package/build/components/alignment-control/ui.cjs.map +2 -2
- package/build/components/background-image-control/index.cjs +1 -1
- package/build/components/background-image-control/index.cjs.map +2 -2
- package/build/components/block-alignment-control/ui.cjs +21 -7
- package/build/components/block-alignment-control/ui.cjs.map +3 -3
- package/build/components/block-alignment-control/use-available-alignments.cjs +60 -13
- package/build/components/block-alignment-control/use-available-alignments.cjs.map +2 -2
- package/build/components/block-allowed-blocks/allowed-blocks-control.cjs.map +2 -2
- package/build/components/block-bindings/attribute-control.cjs +30 -30
- package/build/components/block-bindings/attribute-control.cjs.map +3 -3
- package/build/components/block-bindings/source-fields-list.cjs +27 -32
- package/build/components/block-bindings/source-fields-list.cjs.map +3 -3
- package/build/components/block-canvas/index.cjs.map +2 -2
- package/build/components/block-card/index.cjs +1 -2
- package/build/components/block-card/index.cjs.map +3 -3
- package/build/components/block-edit/edit.cjs.map +2 -2
- package/build/components/block-heading-level-dropdown/index.cjs.map +2 -2
- package/build/components/block-icon/index.cjs.map +2 -2
- package/build/components/block-inspector/edit-contents.cjs.map +2 -2
- package/build/components/block-inspector/index.cjs +27 -8
- package/build/components/block-inspector/index.cjs.map +3 -3
- package/build/components/block-keyboard-shortcuts/index.cjs.map +2 -2
- package/build/components/block-list/block-html.cjs +1 -12
- package/build/components/block-list/block-html.cjs.map +3 -3
- package/build/components/block-list/block.cjs +2 -4
- package/build/components/block-list/block.cjs.map +2 -2
- package/build/components/block-list/layout.cjs +1 -1
- package/build/components/block-list/layout.cjs.map +2 -2
- package/build/components/block-list/use-block-props/index.cjs.map +2 -2
- package/build/components/block-lock/modal.cjs +1 -3
- package/build/components/block-lock/modal.cjs.map +2 -2
- package/build/components/block-parent-selector/index.cjs +8 -5
- package/build/components/block-parent-selector/index.cjs.map +2 -2
- package/build/components/block-popover/index.cjs.map +2 -2
- package/build/components/block-rename/modal.cjs.map +2 -2
- package/build/components/block-settings-menu/block-settings-dropdown.cjs.map +2 -2
- package/build/components/block-styles/utils.cjs.map +2 -2
- package/build/components/block-switcher/index.cjs.map +2 -2
- package/build/components/block-toolbar/edit-section-button.cjs.map +2 -2
- package/build/components/block-toolbar/index.cjs +6 -4
- package/build/components/block-toolbar/index.cjs.map +2 -2
- package/build/components/block-toolbar/switch-section-style.cjs.map +2 -2
- package/build/components/block-variation-transforms/index.cjs +28 -18
- package/build/components/block-variation-transforms/index.cjs.map +3 -3
- package/build/components/block-visibility/modal.cjs.map +2 -2
- package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
- package/build/components/border-radius-control/index.cjs.map +2 -2
- package/build/components/color-palette/with-color-context.cjs.map +2 -2
- package/build/components/colors/with-colors.cjs.map +2 -2
- package/build/components/colors-gradients/control.cjs.map +2 -2
- package/build/components/contrast-checker/index.cjs.map +2 -2
- package/build/components/date-format-picker/index.cjs.map +2 -2
- package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
- package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
- package/build/components/font-sizes/with-font-sizes.cjs.map +2 -2
- package/build/components/global-styles/background-panel.cjs +1 -1
- package/build/components/global-styles/background-panel.cjs.map +2 -2
- package/build/components/global-styles/border-panel.cjs +1 -1
- package/build/components/global-styles/border-panel.cjs.map +2 -2
- package/build/components/global-styles/color-gradient-dropdown-item.cjs +1 -1
- package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +2 -2
- package/build/components/global-styles/color-panel.cjs +1 -1
- package/build/components/global-styles/color-panel.cjs.map +2 -2
- package/build/components/global-styles/dimensions-panel.cjs +1 -1
- package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
- package/build/components/global-styles/filters-panel.cjs +1 -1
- package/build/components/global-styles/filters-panel.cjs.map +2 -2
- package/build/components/global-styles/hooks.cjs +1 -0
- package/build/components/global-styles/hooks.cjs.map +2 -2
- package/build/components/global-styles/inheritance/index.cjs +3 -3
- package/build/components/global-styles/inheritance/index.cjs.map +2 -2
- package/build/components/global-styles/inherited-value-context.cjs +0 -5
- package/build/components/global-styles/inherited-value-context.cjs.map +2 -2
- package/build/components/global-styles/state-control-badges.cjs +0 -1
- package/build/components/global-styles/state-control-badges.cjs.map +2 -2
- package/build/components/global-styles/state-control.cjs +6 -4
- package/build/components/global-styles/state-control.cjs.map +2 -2
- package/build/components/global-styles/text-shadow-panel.cjs +254 -0
- package/build/components/global-styles/text-shadow-panel.cjs.map +7 -0
- package/build/components/global-styles/typography-panel.cjs +46 -5
- package/build/components/global-styles/typography-panel.cjs.map +2 -2
- package/build/components/global-styles/typography-utils.cjs.map +2 -2
- package/build/components/global-styles/utils.cjs.map +2 -2
- package/build/components/html-element-control/index.cjs.map +3 -3
- package/build/components/iframe/index.cjs.map +2 -2
- package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
- package/build/components/image-size-control/index.cjs.map +3 -3
- package/build/components/inner-blocks/index.cjs +6 -1
- package/build/components/inner-blocks/index.cjs.map +2 -2
- package/build/components/inner-content/index.cjs.map +2 -2
- package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs +4 -23
- package/build/components/inserter/block-patterns-tab/use-pattern-categories.cjs.map +2 -2
- package/build/components/inserter/block-patterns-tab/utils.cjs +26 -0
- package/build/components/inserter/block-patterns-tab/utils.cjs.map +2 -2
- package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
- package/build/components/inserter/hooks/use-insertion-point.cjs.map +2 -2
- package/build/components/inserter/hooks/use-patterns-state.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-panel.cjs.map +2 -2
- package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
- package/build/components/inserter-list-item/index.cjs.map +2 -2
- package/build/components/inspector-controls/list-view-content-popover.cjs.map +2 -2
- package/build/components/link-control/search-results.cjs.map +2 -2
- package/build/components/link-control/use-search-handler.cjs +3 -0
- package/build/components/link-control/use-search-handler.cjs.map +2 -2
- package/build/components/list-view/branch.cjs.map +2 -2
- package/build/components/list-view/drop-indicator.cjs.map +2 -2
- package/build/components/list-view/index.cjs.map +2 -2
- package/build/components/list-view/use-list-view-drop-zone.cjs.map +2 -2
- package/build/components/list-view/utils.cjs.map +2 -2
- package/build/components/media-replace-flow/index.cjs +4 -1
- package/build/components/media-replace-flow/index.cjs.map +2 -2
- package/build/components/plain-text/index.cjs +1 -2
- package/build/components/plain-text/index.cjs.map +3 -3
- package/build/components/preset-input-control/index.cjs.map +2 -2
- package/build/components/provider/index.cjs +3 -1
- package/build/components/provider/index.cjs.map +2 -2
- package/build/components/provider/use-block-sync.cjs.map +2 -2
- package/build/components/publish-date-time-picker/index.cjs.map +2 -2
- package/build/components/resizable-box-popover/index.cjs +1 -1
- package/build/components/resizable-box-popover/index.cjs.map +1 -1
- package/build/components/resolution-tool/index.cjs.map +3 -3
- package/build/components/rich-text/event-listeners/enter.cjs +8 -22
- package/build/components/rich-text/event-listeners/enter.cjs.map +2 -2
- package/build/components/rich-text/format-edit.cjs.map +2 -2
- package/build/components/rich-text/index.cjs +20 -0
- package/build/components/rich-text/index.cjs.map +2 -2
- package/build/components/rich-text/multiline.cjs +10 -2
- package/build/components/rich-text/multiline.cjs.map +2 -2
- package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.cjs.map +2 -2
- package/build/components/typewriter/index.cjs.map +2 -2
- package/build/components/use-block-commands/index.cjs.map +2 -2
- package/build/components/writing-flow/index.cjs +3 -0
- package/build/components/writing-flow/index.cjs.map +2 -2
- package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
- package/build/components/writing-flow/use-selection-observer.cjs +5 -3
- package/build/components/writing-flow/use-selection-observer.cjs.map +2 -2
- package/build/hooks/align.cjs +3 -5
- package/build/hooks/align.cjs.map +2 -2
- package/build/hooks/background.cjs.map +2 -2
- package/build/hooks/block-bindings.cjs.map +2 -2
- package/build/hooks/border.cjs.map +2 -2
- package/build/hooks/contrast-checker.cjs.map +2 -2
- package/build/hooks/dimensions.cjs.map +2 -2
- package/build/hooks/duotone.cjs.map +2 -2
- package/build/hooks/elements.cjs.map +2 -2
- package/build/hooks/fit-text.cjs.map +2 -2
- package/build/hooks/gap.cjs +2 -1
- package/build/hooks/gap.cjs.map +3 -3
- package/build/hooks/index.cjs +4 -2
- package/build/hooks/index.cjs.map +3 -3
- package/build/hooks/layout-child.cjs.map +2 -2
- package/build/hooks/layout.cjs +15 -14
- package/build/hooks/layout.cjs.map +3 -3
- package/build/hooks/position.cjs +3 -31
- package/build/hooks/position.cjs.map +2 -2
- package/build/hooks/states.cjs +3 -2
- package/build/hooks/states.cjs.map +2 -2
- package/build/hooks/text-shadow.cjs +100 -0
- package/build/hooks/text-shadow.cjs.map +7 -0
- package/build/hooks/typography.cjs +30 -6
- package/build/hooks/typography.cjs.map +2 -2
- package/build/hooks/utils.cjs +24 -2
- package/build/hooks/utils.cjs.map +2 -2
- package/build/layouts/grid.cjs.map +2 -2
- package/build/layouts/utils.cjs +7 -2
- package/build/layouts/utils.cjs.map +2 -2
- package/build/private-apis.cjs +9 -6
- package/build/private-apis.cjs.map +2 -2
- package/build/store/actions.cjs +26 -4
- package/build/store/actions.cjs.map +3 -3
- package/build/store/private-selectors.cjs.map +2 -2
- package/build/store/reducer.cjs.map +2 -2
- package/build/store/selectors.cjs.map +2 -2
- package/build/utils/get-font-styles-and-weights.cjs.map +2 -2
- package/build/utils/transform-styles/index.cjs.map +1 -1
- package/build-module/autocompleters/block.mjs.map +2 -2
- package/build-module/components/alignment-control/ui.mjs.map +2 -2
- package/build-module/components/background-image-control/index.mjs +2 -2
- package/build-module/components/background-image-control/index.mjs.map +2 -2
- package/build-module/components/block-alignment-control/ui.mjs +21 -7
- package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
- package/build-module/components/block-alignment-control/use-available-alignments.mjs +56 -13
- package/build-module/components/block-alignment-control/use-available-alignments.mjs.map +2 -2
- package/build-module/components/block-allowed-blocks/allowed-blocks-control.mjs.map +2 -2
- package/build-module/components/block-bindings/attribute-control.mjs +31 -32
- package/build-module/components/block-bindings/attribute-control.mjs.map +2 -2
- package/build-module/components/block-bindings/source-fields-list.mjs +25 -30
- package/build-module/components/block-bindings/source-fields-list.mjs.map +2 -2
- package/build-module/components/block-canvas/index.mjs.map +2 -2
- package/build-module/components/block-card/index.mjs +3 -8
- package/build-module/components/block-card/index.mjs.map +2 -2
- package/build-module/components/block-edit/edit.mjs.map +2 -2
- package/build-module/components/block-heading-level-dropdown/index.mjs.map +2 -2
- package/build-module/components/block-icon/index.mjs.map +2 -2
- package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
- package/build-module/components/block-inspector/index.mjs +29 -10
- package/build-module/components/block-inspector/index.mjs.map +2 -2
- package/build-module/components/block-keyboard-shortcuts/index.mjs.map +2 -2
- package/build-module/components/block-list/block-html.mjs +1 -2
- package/build-module/components/block-list/block-html.mjs.map +2 -2
- package/build-module/components/block-list/block.mjs +2 -4
- package/build-module/components/block-list/block.mjs.map +2 -2
- package/build-module/components/block-list/layout.mjs +1 -1
- package/build-module/components/block-list/layout.mjs.map +2 -2
- package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
- package/build-module/components/block-lock/modal.mjs +1 -3
- package/build-module/components/block-lock/modal.mjs.map +2 -2
- package/build-module/components/block-parent-selector/index.mjs +8 -5
- package/build-module/components/block-parent-selector/index.mjs.map +2 -2
- package/build-module/components/block-popover/index.mjs.map +2 -2
- package/build-module/components/block-rename/modal.mjs.map +2 -2
- package/build-module/components/block-settings-menu/block-settings-dropdown.mjs.map +2 -2
- package/build-module/components/block-styles/utils.mjs.map +2 -2
- package/build-module/components/block-switcher/index.mjs.map +2 -2
- package/build-module/components/block-toolbar/edit-section-button.mjs.map +2 -2
- package/build-module/components/block-toolbar/index.mjs +6 -4
- package/build-module/components/block-toolbar/index.mjs.map +2 -2
- package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
- package/build-module/components/block-variation-transforms/index.mjs +30 -21
- package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
- package/build-module/components/block-visibility/modal.mjs.map +2 -2
- package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
- package/build-module/components/border-radius-control/index.mjs.map +2 -2
- package/build-module/components/color-palette/with-color-context.mjs.map +2 -2
- package/build-module/components/colors/with-colors.mjs.map +2 -2
- package/build-module/components/colors-gradients/control.mjs.map +2 -2
- package/build-module/components/contrast-checker/index.mjs.map +2 -2
- package/build-module/components/date-format-picker/index.mjs.map +2 -2
- package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +2 -2
- package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
- package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
- package/build-module/components/font-sizes/with-font-sizes.mjs.map +2 -2
- package/build-module/components/global-styles/background-panel.mjs +2 -2
- package/build-module/components/global-styles/background-panel.mjs.map +2 -2
- package/build-module/components/global-styles/border-panel.mjs +2 -2
- package/build-module/components/global-styles/border-panel.mjs.map +2 -2
- package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +2 -2
- package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
- package/build-module/components/global-styles/color-panel.mjs +2 -2
- package/build-module/components/global-styles/color-panel.mjs.map +2 -2
- package/build-module/components/global-styles/dimensions-panel.mjs +2 -2
- package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
- package/build-module/components/global-styles/filters-panel.mjs +2 -2
- package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
- package/build-module/components/global-styles/hooks.mjs +1 -0
- package/build-module/components/global-styles/hooks.mjs.map +2 -2
- package/build-module/components/global-styles/inheritance/index.mjs +2 -2
- package/build-module/components/global-styles/inheritance/index.mjs.map +2 -2
- package/build-module/components/global-styles/inherited-value-context.mjs +0 -5
- package/build-module/components/global-styles/inherited-value-context.mjs.map +2 -2
- package/build-module/components/global-styles/state-control-badges.mjs +0 -1
- package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
- package/build-module/components/global-styles/state-control.mjs +6 -4
- package/build-module/components/global-styles/state-control.mjs.map +2 -2
- package/build-module/components/global-styles/text-shadow-panel.mjs +224 -0
- package/build-module/components/global-styles/text-shadow-panel.mjs.map +7 -0
- package/build-module/components/global-styles/typography-panel.mjs +47 -6
- package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
- package/build-module/components/global-styles/typography-utils.mjs.map +2 -2
- package/build-module/components/global-styles/utils.mjs.map +2 -2
- package/build-module/components/html-element-control/index.mjs +2 -2
- package/build-module/components/html-element-control/index.mjs.map +2 -2
- package/build-module/components/iframe/index.mjs.map +2 -2
- package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
- package/build-module/components/image-size-control/index.mjs +2 -2
- package/build-module/components/image-size-control/index.mjs.map +2 -2
- package/build-module/components/inner-blocks/index.mjs +6 -1
- package/build-module/components/inner-blocks/index.mjs.map +2 -2
- package/build-module/components/inner-content/index.mjs.map +2 -2
- package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs +6 -24
- package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.mjs.map +2 -2
- package/build-module/components/inserter/block-patterns-tab/utils.mjs +25 -0
- package/build-module/components/inserter/block-patterns-tab/utils.mjs.map +2 -2
- package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
- package/build-module/components/inserter/hooks/use-insertion-point.mjs.map +2 -2
- package/build-module/components/inserter/hooks/use-patterns-state.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
- package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
- package/build-module/components/inserter-list-item/index.mjs.map +2 -2
- package/build-module/components/inspector-controls/list-view-content-popover.mjs.map +2 -2
- package/build-module/components/link-control/search-results.mjs.map +2 -2
- package/build-module/components/link-control/use-search-handler.mjs +3 -0
- package/build-module/components/link-control/use-search-handler.mjs.map +2 -2
- package/build-module/components/list-view/branch.mjs.map +2 -2
- package/build-module/components/list-view/drop-indicator.mjs.map +2 -2
- package/build-module/components/list-view/index.mjs.map +2 -2
- package/build-module/components/list-view/use-list-view-drop-zone.mjs.map +2 -2
- package/build-module/components/list-view/utils.mjs.map +2 -2
- package/build-module/components/media-replace-flow/index.mjs +4 -1
- package/build-module/components/media-replace-flow/index.mjs.map +2 -2
- package/build-module/components/plain-text/index.mjs +1 -2
- package/build-module/components/plain-text/index.mjs.map +2 -2
- package/build-module/components/preset-input-control/index.mjs.map +2 -2
- package/build-module/components/provider/index.mjs +3 -1
- package/build-module/components/provider/index.mjs.map +2 -2
- package/build-module/components/provider/use-block-sync.mjs.map +2 -2
- package/build-module/components/publish-date-time-picker/index.mjs.map +2 -2
- package/build-module/components/resizable-box-popover/index.mjs +1 -1
- package/build-module/components/resizable-box-popover/index.mjs.map +1 -1
- package/build-module/components/resolution-tool/index.mjs +2 -2
- package/build-module/components/resolution-tool/index.mjs.map +2 -2
- package/build-module/components/rich-text/event-listeners/enter.mjs +8 -22
- package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
- package/build-module/components/rich-text/format-edit.mjs.map +2 -2
- package/build-module/components/rich-text/index.mjs +21 -0
- package/build-module/components/rich-text/index.mjs.map +2 -2
- package/build-module/components/rich-text/multiline.mjs +11 -3
- package/build-module/components/rich-text/multiline.mjs.map +2 -2
- package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.mjs.map +2 -2
- package/build-module/components/typewriter/index.mjs.map +2 -2
- package/build-module/components/use-block-commands/index.mjs.map +2 -2
- package/build-module/components/writing-flow/index.mjs +3 -0
- package/build-module/components/writing-flow/index.mjs.map +2 -2
- package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
- package/build-module/components/writing-flow/use-selection-observer.mjs +5 -3
- package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
- package/build-module/hooks/align.mjs +6 -6
- package/build-module/hooks/align.mjs.map +2 -2
- package/build-module/hooks/background.mjs.map +2 -2
- package/build-module/hooks/block-bindings.mjs.map +2 -2
- package/build-module/hooks/border.mjs.map +2 -2
- package/build-module/hooks/contrast-checker.mjs.map +2 -2
- package/build-module/hooks/dimensions.mjs.map +2 -2
- package/build-module/hooks/duotone.mjs.map +2 -2
- package/build-module/hooks/elements.mjs.map +2 -2
- package/build-module/hooks/fit-text.mjs.map +2 -2
- package/build-module/hooks/gap.mjs +2 -1
- package/build-module/hooks/gap.mjs.map +2 -2
- package/build-module/hooks/index.mjs +4 -2
- package/build-module/hooks/index.mjs.map +2 -2
- package/build-module/hooks/layout-child.mjs.map +2 -2
- package/build-module/hooks/layout.mjs +6 -5
- package/build-module/hooks/layout.mjs.map +2 -2
- package/build-module/hooks/position.mjs +5 -33
- package/build-module/hooks/position.mjs.map +2 -2
- package/build-module/hooks/states.mjs +3 -2
- package/build-module/hooks/states.mjs.map +2 -2
- package/build-module/hooks/text-shadow.mjs +65 -0
- package/build-module/hooks/text-shadow.mjs.map +7 -0
- package/build-module/hooks/typography.mjs +30 -6
- package/build-module/hooks/typography.mjs.map +2 -2
- package/build-module/hooks/utils.mjs +24 -2
- package/build-module/hooks/utils.mjs.map +2 -2
- package/build-module/layouts/grid.mjs.map +2 -2
- package/build-module/layouts/utils.mjs +5 -1
- package/build-module/layouts/utils.mjs.map +2 -2
- package/build-module/private-apis.mjs +6 -2
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/store/actions.mjs +28 -5
- package/build-module/store/actions.mjs.map +3 -3
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/store/selectors.mjs.map +2 -2
- package/build-module/utils/get-font-styles-and-weights.mjs.map +2 -2
- package/build-module/utils/transform-styles/index.mjs.map +1 -1
- package/build-style/content-rtl.css +7 -2
- package/build-style/content.css +7 -2
- package/build-style/style-rtl.css +90 -25
- package/build-style/style.css +92 -25
- package/package.json +42 -43
- package/src/autocompleters/block.jsx +4 -4
- package/src/components/alignment-control/ui.jsx +1 -1
- package/src/components/background-image-control/index.jsx +3 -3
- package/src/components/block-alignment-control/test/index.jsdom.test.jsx +267 -0
- package/src/components/block-alignment-control/ui.jsx +47 -9
- package/src/components/block-alignment-control/use-available-alignments.js +106 -20
- package/src/components/block-allowed-blocks/allowed-blocks-control.jsx +1 -1
- package/src/components/block-bindings/attribute-control.jsx +27 -29
- package/src/components/block-bindings/source-fields-list.jsx +22 -32
- package/src/components/block-bindings/test/attribute-control.jsdom.test.jsx +115 -0
- package/src/components/block-canvas/index.jsx +1 -1
- package/src/components/block-card/index.jsx +5 -11
- package/src/components/block-card/style.scss +1 -0
- package/src/components/block-edit/edit.jsx +1 -1
- package/src/components/block-heading-level-dropdown/index.jsx +1 -1
- package/src/components/block-icon/index.jsx +1 -1
- package/src/components/block-icon/test/index.browser.test.jsx +74 -0
- package/src/components/block-inspector/edit-contents.jsx +2 -2
- package/src/components/block-inspector/index.jsx +46 -15
- package/src/components/block-inspector/style.scss +16 -0
- package/src/components/block-keyboard-shortcuts/index.jsx +2 -2
- package/src/components/block-list/block-html.jsx +2 -3
- package/src/components/block-list/block.jsx +7 -5
- package/src/components/block-list/content.scss +3 -2
- package/src/components/block-list/layout.jsx +4 -1
- package/src/components/block-list/test/layout.jsdom.test.js +40 -0
- package/src/components/block-list/use-block-props/index.js +1 -1
- package/src/components/block-lock/modal.jsx +2 -3
- package/src/components/block-lock/style.scss +1 -1
- package/src/components/block-mover/style.scss +0 -13
- package/src/components/block-parent-selector/index.jsx +12 -6
- package/src/components/block-patterns-list/style.scss +1 -1
- package/src/components/block-popover/index.jsx +1 -1
- package/src/components/block-rename/modal.jsx +3 -3
- package/src/components/block-settings-menu/block-settings-dropdown.jsx +1 -1
- package/src/components/block-styles/utils.js +1 -1
- package/src/components/block-switcher/index.jsx +3 -3
- package/src/components/block-toolbar/edit-section-button.jsx +2 -2
- package/src/components/block-toolbar/index.jsx +8 -4
- package/src/components/block-toolbar/switch-section-style.jsx +1 -1
- package/src/components/block-variation-transforms/index.jsx +24 -23
- package/src/components/block-variation-transforms/test/index.jsdom.test.jsx +93 -0
- package/src/components/block-visibility/modal.jsx +7 -7
- package/src/components/block-visibility/style.scss +1 -1
- package/src/components/block-visibility/viewport-visibility-info.jsx +5 -7
- package/src/components/border-radius-control/index.jsx +2 -2
- package/src/components/border-radius-control/test/index.jsdom.test.jsx +0 -22
- package/src/components/border-radius-control/test/select.browser.test.js +30 -0
- package/src/components/color-palette/with-color-context.jsx +1 -1
- package/src/components/colors/with-colors.jsx +1 -1
- package/src/components/colors-gradients/control.jsx +2 -2
- package/src/components/colors-gradients/test/{control.jsdom.test.jsx → control.browser.test.jsx} +6 -9
- package/src/components/contrast-checker/index.jsx +2 -2
- package/src/components/date-format-picker/index.jsx +2 -2
- package/src/components/dimensions-tool/aspect-ratio-tool.jsx +4 -4
- package/src/components/dimensions-tool/test/index.jsdom.test.jsx +17 -11
- package/src/components/dimensions-tool/width-height-tool.jsx +2 -2
- package/src/components/font-sizes/with-font-sizes.jsx +2 -3
- package/src/components/global-styles/background-panel.jsx +2 -2
- package/src/components/global-styles/border-panel.jsx +2 -2
- package/src/components/global-styles/color-gradient-dropdown-item.jsx +3 -3
- package/src/components/global-styles/color-panel.jsx +3 -3
- package/src/components/global-styles/dimensions-panel.jsx +6 -6
- package/src/components/global-styles/filters-panel.jsx +2 -2
- package/src/components/global-styles/hooks.js +1 -0
- package/src/components/global-styles/inheritance/index.jsx +9 -6
- package/src/components/global-styles/inheritance/test/{index.jsdom.test.jsx → index.browser.test.jsx} +34 -28
- package/src/components/global-styles/inherited-value-context.js +1 -9
- package/src/components/global-styles/state-control-badges.jsx +0 -1
- package/src/components/global-styles/state-control.jsx +12 -3
- package/src/components/global-styles/style.scss +68 -0
- package/src/components/global-styles/test/{color-panel.jsdom.test.jsx → color-panel.browser.test.jsx} +53 -54
- package/src/components/global-styles/test/inherited-value-context-core.jsdom.test.js +17 -26
- package/src/components/global-styles/test/{typography-panel-core.jsdom.test.jsx → typography-panel-core.browser.test.jsx} +84 -39
- package/src/components/global-styles/test/{typography-panel.jsdom.test.jsx → typography-panel.browser.test.jsx} +80 -122
- package/src/components/global-styles/text-shadow-panel.tsx +257 -0
- package/src/components/global-styles/typography-panel.jsx +52 -13
- package/src/components/global-styles/typography-utils.js +2 -2
- package/src/components/global-styles/utils.js +1 -1
- package/src/components/html-element-control/index.jsx +2 -2
- package/src/components/iframe/index.jsx +1 -1
- package/src/components/iframe/use-scale-canvas.js +1 -1
- package/src/components/image-size-control/index.jsx +2 -2
- package/src/components/inner-blocks/index.jsx +9 -1
- package/src/components/inner-content/index.jsx +1 -1
- package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +7 -33
- package/src/components/inserter/block-patterns-tab/utils.js +44 -0
- package/src/components/inserter/hooks/use-block-types-state.js +2 -2
- package/src/components/inserter/hooks/use-insertion-point.js +1 -1
- package/src/components/inserter/hooks/use-patterns-state.js +1 -1
- package/src/components/inserter/media-tab/media-panel.jsx +9 -9
- package/src/components/inserter/media-tab/media-preview.jsx +1 -1
- package/src/components/inserter-list-item/index.jsx +1 -1
- package/src/components/inserter-list-item/style.scss +2 -2
- package/src/components/inspector-controls/list-view-content-popover.jsx +1 -1
- package/src/components/link-control/search-results.jsx +1 -1
- package/src/components/link-control/style.scss +1 -1
- package/src/components/link-control/test/index.jsdom.test.jsx +38 -110
- package/src/components/link-control/test/keyboard-selection.browser.test.js +110 -0
- package/src/components/link-control/use-search-handler.js +8 -3
- package/src/components/list-view/branch.jsx +1 -1
- package/src/components/list-view/drop-indicator.jsx +3 -3
- package/src/components/list-view/index.jsx +1 -1
- package/src/components/list-view/style.scss +1 -9
- package/src/components/list-view/use-list-view-drop-zone.js +1 -1
- package/src/components/list-view/utils.js +1 -1
- package/src/components/media-replace-flow/index.jsx +4 -1
- package/src/components/navigable-toolbar/test/index.browser.test.js +6 -7
- package/src/components/plain-text/README.md +3 -2
- package/src/components/plain-text/content.scss +0 -1
- package/src/components/plain-text/index.jsx +2 -3
- package/src/components/plain-text/style.scss +4 -0
- package/src/components/preset-input-control/index.jsx +2 -2
- package/src/components/preset-input-control/test/index.jsdom.test.jsx +0 -56
- package/src/components/preset-input-control/test/interaction.browser.test.js +63 -0
- package/src/components/provider/index.jsx +5 -3
- package/src/components/provider/use-block-sync.js +5 -5
- package/src/components/publish-date-time-picker/index.jsx +1 -1
- package/src/components/resizable-box-popover/index.jsx +1 -1
- package/src/components/resolution-tool/index.jsx +2 -2
- package/src/components/responsive-block-control/style.scss +1 -2
- package/src/components/responsive-block-control/test/index.jsdom.test.jsx +2 -2
- package/src/components/rich-text/event-listeners/enter.js +16 -23
- package/src/components/rich-text/format-edit.jsx +1 -1
- package/src/components/rich-text/index.jsx +39 -2
- package/src/components/rich-text/multiline.jsx +11 -3
- package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
- package/src/components/spacing-sizes-control/test/index.jsdom.test.jsx +0 -21
- package/src/components/spacing-sizes-control/test/select.browser.test.js +58 -0
- package/src/components/typewriter/index.jsx +1 -1
- package/src/components/url-input/test/fixtures/validated-input-control-deprecation.js +1 -1
- package/src/components/use-block-commands/index.js +1 -1
- package/src/components/use-block-drop-zone/test/index.js +2 -2
- package/src/components/writing-flow/index.jsx +8 -0
- package/src/components/writing-flow/use-clipboard-handler.js +1 -1
- package/src/components/writing-flow/use-selection-observer.js +15 -6
- package/src/content.scss +1 -0
- package/src/hooks/align.jsx +22 -6
- package/src/hooks/background.jsx +1 -1
- package/src/hooks/block-bindings.jsx +1 -1
- package/src/hooks/block-hooks.scss +0 -6
- package/src/hooks/border.jsx +2 -2
- package/src/hooks/contrast-checker.js +1 -1
- package/src/hooks/dimensions.jsx +2 -2
- package/src/hooks/duotone.jsx +3 -3
- package/src/hooks/elements.jsx +3 -3
- package/src/hooks/fit-text.jsx +1 -1
- package/src/hooks/gap.js +2 -4
- package/src/hooks/index.js +3 -1
- package/src/hooks/layout-child.jsx +3 -4
- package/src/hooks/layout.jsx +17 -18
- package/src/hooks/position.jsx +5 -36
- package/src/hooks/states.jsx +6 -2
- package/src/hooks/test/layout.jsdom.test.js +44 -1
- package/src/hooks/text-shadow.ts +105 -0
- package/src/hooks/typography.jsx +58 -30
- package/src/hooks/utils.jsx +23 -1
- package/src/layouts/grid.jsx +2 -2
- package/src/layouts/test/flex.jsdom.test.jsx +4 -3
- package/src/layouts/test/utils.js +48 -1
- package/src/layouts/utils.js +19 -0
- package/src/private-apis.js +4 -0
- package/src/store/actions.js +50 -10
- package/src/store/private-selectors.js +5 -5
- package/src/store/reducer.js +6 -6
- package/src/store/selectors.js +3 -3
- package/src/store/test/actions.jsdom.test.js +60 -0
- package/src/style.scss +1 -0
- package/src/utils/get-font-styles-and-weights.ts +1 -1
- package/src/utils/transform-styles/index.ts +1 -1
- package/build/hooks/cross-origin-isolation.cjs +0 -56
- package/build/hooks/cross-origin-isolation.cjs.map +0 -7
- package/build-module/hooks/cross-origin-isolation.mjs +0 -54
- package/build-module/hooks/cross-origin-isolation.mjs.map +0 -7
- package/src/components/block-icon/test/__snapshots__/index.jsdom.test.jsx.snap +0 -27
- package/src/components/block-icon/test/index.jsdom.test.jsx +0 -67
- package/src/hooks/cross-origin-isolation.js +0 -73
- package/src/hooks/test/cross-origin-isolation.jsdom.test.js +0 -173
|
@@ -8,11 +8,14 @@ import { reset as resetIcon } from '@wordpress/icons';
|
|
|
8
8
|
import { __ } from '@wordpress/i18n';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Whether the inspector
|
|
11
|
+
* Whether the inspector marks up which controls are showing an inherited
|
|
12
|
+
* Global Styles value.
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* This gates the indicators only: the dotted underline on an inherited label
|
|
15
|
+
* and the blue dot that resets a local override. The inherited values
|
|
16
|
+
* themselves reach the controls either way. Behind the
|
|
17
|
+
* `gutenberg-global-styles-inheritance-ui` Gutenberg experiment, so the
|
|
18
|
+
* indicators are off unless someone opts in on the Experiments screen.
|
|
16
19
|
*
|
|
17
20
|
* Evaluated per call rather than once at module scope, so tests can toggle
|
|
18
21
|
* the experiment and so a later move to a store-backed setting only has to
|
|
@@ -20,9 +23,9 @@ import { __ } from '@wordpress/i18n';
|
|
|
20
23
|
* down as a prop, and `undefined` would trigger a receiving component's own
|
|
21
24
|
* default parameter.
|
|
22
25
|
*
|
|
23
|
-
* @return {boolean} Whether the
|
|
26
|
+
* @return {boolean} Whether the indicator treatment is enabled.
|
|
24
27
|
*/
|
|
25
|
-
export const
|
|
28
|
+
export const isGlobalStylesInheritanceIndicatorUIEnabled = () =>
|
|
26
29
|
!! window.__experimentalGlobalStylesInheritanceUI;
|
|
27
30
|
|
|
28
31
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test, vi } from 'vitest';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { userEvent } from 'vitest/browser';
|
|
3
|
+
import { screen } from '@testing-library/react';
|
|
4
|
+
import { render } from 'vitest-browser-react';
|
|
4
5
|
import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';
|
|
5
6
|
import {
|
|
6
7
|
getInheritanceProps,
|
|
@@ -8,11 +9,11 @@ import {
|
|
|
8
9
|
InheritanceToolsPanelItem,
|
|
9
10
|
} from '../';
|
|
10
11
|
|
|
11
|
-
globalThis.wpVitest.mockMatchMedia();
|
|
12
|
-
|
|
13
12
|
describe( 'InheritanceResetButton', () => {
|
|
14
|
-
test( 'renders an always-visible reset button labelled for the inherited value', () => {
|
|
15
|
-
render(
|
|
13
|
+
test( 'renders an always-visible reset button labelled for the inherited value', async () => {
|
|
14
|
+
await render(
|
|
15
|
+
<InheritanceResetButton onResetToInherited={ () => {} } />
|
|
16
|
+
);
|
|
16
17
|
expect(
|
|
17
18
|
screen.getByRole( 'button', {
|
|
18
19
|
name: 'Reset to inherited value',
|
|
@@ -22,17 +23,19 @@ describe( 'InheritanceResetButton', () => {
|
|
|
22
23
|
|
|
23
24
|
test( 'invokes the reset handler when activated', async () => {
|
|
24
25
|
const onResetToInherited = vi.fn();
|
|
25
|
-
render(
|
|
26
|
+
await render(
|
|
26
27
|
<InheritanceResetButton onResetToInherited={ onResetToInherited } />
|
|
27
28
|
);
|
|
28
|
-
await click(
|
|
29
|
+
await userEvent.click(
|
|
29
30
|
screen.getByRole( 'button', { name: 'Reset to inherited value' } )
|
|
30
31
|
);
|
|
31
32
|
expect( onResetToInherited ).toHaveBeenCalledTimes( 1 );
|
|
32
33
|
} );
|
|
33
34
|
|
|
34
|
-
test( 'does not expose a menu or a push-to-Global-Styles action', () => {
|
|
35
|
-
render(
|
|
35
|
+
test( 'does not expose a menu or a push-to-Global-Styles action', async () => {
|
|
36
|
+
await render(
|
|
37
|
+
<InheritanceResetButton onResetToInherited={ () => {} } />
|
|
38
|
+
);
|
|
36
39
|
expect( screen.queryByRole( 'menu' ) ).not.toBeInTheDocument();
|
|
37
40
|
expect(
|
|
38
41
|
screen.queryByRole( 'menuitem', { name: /Make default/ } )
|
|
@@ -135,8 +138,8 @@ describe( 'getInheritanceProps', () => {
|
|
|
135
138
|
} );
|
|
136
139
|
|
|
137
140
|
describe( 'InheritanceToolsPanelItem inherited state', () => {
|
|
138
|
-
function renderInheritedItem( label, labelClassName ) {
|
|
139
|
-
return render(
|
|
141
|
+
async function renderInheritedItem( label, labelClassName ) {
|
|
142
|
+
return await render(
|
|
140
143
|
<ToolsPanel label="Panel" panelId="panel">
|
|
141
144
|
<InheritanceToolsPanelItem
|
|
142
145
|
{ ...getInheritanceProps( true, false ) }
|
|
@@ -159,8 +162,8 @@ describe( 'InheritanceToolsPanelItem inherited state', () => {
|
|
|
159
162
|
[ 'input-control', 'components-input-control__label' ],
|
|
160
163
|
] )(
|
|
161
164
|
'nests the %s label inside the inherited-from-global-styles item',
|
|
162
|
-
( _name, labelClassName ) => {
|
|
163
|
-
renderInheritedItem( 'Line height', labelClassName );
|
|
165
|
+
async ( _name, labelClassName ) => {
|
|
166
|
+
await renderInheritedItem( 'Line height', labelClassName );
|
|
164
167
|
const label = screen.getByText( 'Line height' );
|
|
165
168
|
expect( label ).toHaveClass( labelClassName );
|
|
166
169
|
expect(
|
|
@@ -170,8 +173,11 @@ describe( 'InheritanceToolsPanelItem inherited state', () => {
|
|
|
170
173
|
}
|
|
171
174
|
);
|
|
172
175
|
|
|
173
|
-
test( 'does not render a reset dot in the inherited state', () => {
|
|
174
|
-
renderInheritedItem(
|
|
176
|
+
test( 'does not render a reset dot in the inherited state', async () => {
|
|
177
|
+
await renderInheritedItem(
|
|
178
|
+
'Line height',
|
|
179
|
+
'components-base-control__label'
|
|
180
|
+
);
|
|
175
181
|
expect(
|
|
176
182
|
screen.queryByRole( 'button', {
|
|
177
183
|
name: 'Reset to inherited value',
|
|
@@ -181,8 +187,8 @@ describe( 'InheritanceToolsPanelItem inherited state', () => {
|
|
|
181
187
|
} );
|
|
182
188
|
|
|
183
189
|
describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
|
|
184
|
-
function renderItem( props ) {
|
|
185
|
-
return render(
|
|
190
|
+
async function renderItem( props ) {
|
|
191
|
+
return await render(
|
|
186
192
|
<ToolsPanel label="Panel" panelId="panel">
|
|
187
193
|
<InheritanceToolsPanelItem
|
|
188
194
|
label="Line height"
|
|
@@ -199,8 +205,8 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
|
|
|
199
205
|
);
|
|
200
206
|
}
|
|
201
207
|
|
|
202
|
-
test( 'renders the reset dot as a sibling of the control, not inside the label', () => {
|
|
203
|
-
renderItem( {
|
|
208
|
+
test( 'renders the reset dot as a sibling of the control, not inside the label', async () => {
|
|
209
|
+
await renderItem( {
|
|
204
210
|
hasLocalOverride: true,
|
|
205
211
|
onDeselect: () => {},
|
|
206
212
|
} );
|
|
@@ -217,10 +223,10 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
|
|
|
217
223
|
).toBeNull();
|
|
218
224
|
} );
|
|
219
225
|
|
|
220
|
-
test( 'does not render the item reset dot when showLocalOverrideActionsInLabel is false', () => {
|
|
226
|
+
test( 'does not render the item reset dot when showLocalOverrideActionsInLabel is false', async () => {
|
|
221
227
|
// Color/background render their own reset control next to a custom
|
|
222
228
|
// toggle, so the item must not render a second one.
|
|
223
|
-
renderItem( {
|
|
229
|
+
await renderItem( {
|
|
224
230
|
hasLocalOverride: true,
|
|
225
231
|
showLocalOverrideActionsInLabel: false,
|
|
226
232
|
onDeselect: () => {},
|
|
@@ -234,15 +240,15 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
|
|
|
234
240
|
|
|
235
241
|
test( 'the reset dot invokes the deselect handler', async () => {
|
|
236
242
|
const onDeselect = vi.fn();
|
|
237
|
-
renderItem( { hasLocalOverride: true, onDeselect } );
|
|
238
|
-
await click(
|
|
243
|
+
await renderItem( { hasLocalOverride: true, onDeselect } );
|
|
244
|
+
await userEvent.click(
|
|
239
245
|
screen.getByRole( 'button', { name: 'Reset to inherited value' } )
|
|
240
246
|
);
|
|
241
247
|
expect( onDeselect ).toHaveBeenCalled();
|
|
242
248
|
} );
|
|
243
249
|
|
|
244
|
-
test( 'does not offset the reset dot by default', () => {
|
|
245
|
-
renderItem( { hasLocalOverride: true, onDeselect: () => {} } );
|
|
250
|
+
test( 'does not offset the reset dot by default', async () => {
|
|
251
|
+
await renderItem( { hasLocalOverride: true, onDeselect: () => {} } );
|
|
246
252
|
const resetButton = screen.getByRole( 'button', {
|
|
247
253
|
name: 'Reset to inherited value',
|
|
248
254
|
} );
|
|
@@ -254,8 +260,8 @@ describe( 'InheritanceToolsPanelItem local-override reset dot', () => {
|
|
|
254
260
|
);
|
|
255
261
|
} );
|
|
256
262
|
|
|
257
|
-
test( 'offsets the reset dot when the control has an inline-end toggle', () => {
|
|
258
|
-
renderItem( {
|
|
263
|
+
test( 'offsets the reset dot when the control has an inline-end toggle', async () => {
|
|
264
|
+
await renderItem( {
|
|
259
265
|
hasLocalOverride: true,
|
|
260
266
|
hasInlineEndToggle: true,
|
|
261
267
|
onDeselect: () => {},
|
|
@@ -11,13 +11,9 @@ import { getVariationNameFromClass } from '../../hooks/block-style-variation';
|
|
|
11
11
|
import { useBlockEditContext } from '../block-edit/context';
|
|
12
12
|
import BlockContext from '../block-context';
|
|
13
13
|
import { unlock } from '../../lock-unlock';
|
|
14
|
-
import { isGlobalStylesInheritanceEnabled } from './inheritance';
|
|
15
14
|
|
|
16
15
|
const { resolveStyle } = unlock( globalStylesEnginePrivateApis );
|
|
17
16
|
|
|
18
|
-
// Undefined so the panels fall back to their `inheritedValue = value` default.
|
|
19
|
-
const NO_RESOLVED_STYLE = { value: undefined, sources: undefined };
|
|
20
|
-
|
|
21
17
|
/**
|
|
22
18
|
* Reads the Global Styles payload and returns it as a `GlobalStylesConfig`
|
|
23
19
|
* (`{ styles, _links }`), the shape `resolveStyle` expects. `_links` carries
|
|
@@ -225,7 +221,7 @@ function useVariationAndElements( blockName, className ) {
|
|
|
225
221
|
*
|
|
226
222
|
* Before the `globalStylesDataKey` payload settles (hydration) or when
|
|
227
223
|
* `blockName` is missing, the hook returns empty value and source objects, so
|
|
228
|
-
* each panel
|
|
224
|
+
* each panel reads no inherited value and renders its local value alone.
|
|
229
225
|
*
|
|
230
226
|
* @param {?string} blockName Selected block name (e.g. `core/heading`).
|
|
231
227
|
* @param {?string} className Block `className` used to detect an applied variation.
|
|
@@ -240,10 +236,6 @@ export function useResolvedStyle( blockName, className, selectedState = null ) {
|
|
|
240
236
|
const globalStyles = useRawGlobalStyles();
|
|
241
237
|
|
|
242
238
|
return useMemo( () => {
|
|
243
|
-
// Skip the cascade merge entirely when the experiment is off.
|
|
244
|
-
if ( ! isGlobalStylesInheritanceEnabled() ) {
|
|
245
|
-
return NO_RESOLVED_STYLE;
|
|
246
|
-
}
|
|
247
239
|
if ( ! blockName ) {
|
|
248
240
|
return { value: {}, sources: {} };
|
|
249
241
|
}
|
|
@@ -16,6 +16,7 @@ import { Stack } from '@wordpress/ui';
|
|
|
16
16
|
* @param {Function} props.onChangePseudoState Callback when pseudo state selection changes.
|
|
17
17
|
* @param {boolean} props.showText Whether to show text label on the toggle. Default true.
|
|
18
18
|
* @param {Object} props.popoverProps Popover props for the dropdown menu.
|
|
19
|
+
* @param {Element} props.children Optional menu content rendered after the state groups.
|
|
19
20
|
* @return {Element|null} State control component.
|
|
20
21
|
*/
|
|
21
22
|
export default function StateControl( {
|
|
@@ -27,6 +28,7 @@ export default function StateControl( {
|
|
|
27
28
|
onChangePseudoState,
|
|
28
29
|
showText = true,
|
|
29
30
|
popoverProps = {},
|
|
31
|
+
children,
|
|
30
32
|
} ) {
|
|
31
33
|
if ( ! viewportStates.length && ! pseudoStates.length ) {
|
|
32
34
|
return null;
|
|
@@ -102,7 +104,7 @@ export default function StateControl( {
|
|
|
102
104
|
/* translators: %s: Current state (e.g. "Hover", "Focus") */
|
|
103
105
|
__( 'State: %s' ),
|
|
104
106
|
currentStateLabel
|
|
105
|
-
|
|
107
|
+
)
|
|
106
108
|
}
|
|
107
109
|
popoverProps={ {
|
|
108
110
|
placement: 'right-start',
|
|
@@ -120,7 +122,10 @@ export default function StateControl( {
|
|
|
120
122
|
key={ `viewport-${ option.value }` }
|
|
121
123
|
onClick={ () => {
|
|
122
124
|
onChangeViewport?.( option.value );
|
|
123
|
-
if (
|
|
125
|
+
if (
|
|
126
|
+
! hasPseudoStateOptions &&
|
|
127
|
+
! children
|
|
128
|
+
) {
|
|
124
129
|
onClose();
|
|
125
130
|
}
|
|
126
131
|
} }
|
|
@@ -144,7 +149,10 @@ export default function StateControl( {
|
|
|
144
149
|
onChangePseudoState?.(
|
|
145
150
|
option.value
|
|
146
151
|
);
|
|
147
|
-
if (
|
|
152
|
+
if (
|
|
153
|
+
! hasViewportOptions &&
|
|
154
|
+
! children
|
|
155
|
+
) {
|
|
148
156
|
onClose();
|
|
149
157
|
}
|
|
150
158
|
} }
|
|
@@ -159,6 +167,7 @@ export default function StateControl( {
|
|
|
159
167
|
) ) }
|
|
160
168
|
</MenuGroup>
|
|
161
169
|
) }
|
|
170
|
+
{ children }
|
|
162
171
|
</>
|
|
163
172
|
) }
|
|
164
173
|
</DropdownMenu>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "@wordpress/base-styles/variables" as *;
|
|
2
2
|
@use "@wordpress/base-styles/colors" as *;
|
|
3
|
+
@use "@wordpress/base-styles/mixins";
|
|
3
4
|
|
|
4
5
|
.block-editor-global-styles__toggle-icon {
|
|
5
6
|
fill: currentColor;
|
|
@@ -146,3 +147,70 @@
|
|
|
146
147
|
opacity: 1;
|
|
147
148
|
}
|
|
148
149
|
}
|
|
150
|
+
|
|
151
|
+
.block-editor-global-styles__text-shadow {
|
|
152
|
+
width: 260px;
|
|
153
|
+
padding: $grid-unit-10;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.block-editor-global-styles__text-shadow-preview {
|
|
157
|
+
display: flex;
|
|
158
|
+
align-items: center;
|
|
159
|
+
justify-content: center;
|
|
160
|
+
height: 80px;
|
|
161
|
+
border: $gray-300 1px solid;
|
|
162
|
+
border-radius: $radius-small;
|
|
163
|
+
font-size: 24px;
|
|
164
|
+
margin-bottom: $grid-unit-20;
|
|
165
|
+
@include mixins.checkerboard-background( 8px );
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.block-editor-global-styles__text-shadow-list-item {
|
|
169
|
+
justify-content: space-between;
|
|
170
|
+
gap: $grid-unit-10;
|
|
171
|
+
width: 100%;
|
|
172
|
+
// The checkmark is always rendered so that its height is reserved and the
|
|
173
|
+
// list doesn't shift when the selection changes.
|
|
174
|
+
&:not(.is-active) svg {
|
|
175
|
+
opacity: 0;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.block-editor-global-styles__text-shadow-dropdown {
|
|
180
|
+
display: block;
|
|
181
|
+
padding: 0;
|
|
182
|
+
position: relative;
|
|
183
|
+
border: 1px solid $gray-300;
|
|
184
|
+
border-radius: $radius-small;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.block-editor-global-styles__text-shadow-dropdown-toggle {
|
|
188
|
+
width: 100%;
|
|
189
|
+
padding: $grid-unit-10;
|
|
190
|
+
|
|
191
|
+
&.is-open {
|
|
192
|
+
background-color: $gray-100;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.block-editor-global-styles__text-shadow-remove-button {
|
|
197
|
+
position: absolute;
|
|
198
|
+
right: $grid-unit;
|
|
199
|
+
top: $grid-unit;
|
|
200
|
+
opacity: 0;
|
|
201
|
+
|
|
202
|
+
@media not (prefers-reduced-motion) {
|
|
203
|
+
transition: opacity 0.1s ease-in-out;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.block-editor-global-styles__text-shadow-dropdown:hover &,
|
|
207
|
+
&:focus,
|
|
208
|
+
&:hover {
|
|
209
|
+
opacity: 1;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@media (hover: none) {
|
|
213
|
+
// Show reset button on devices that do not support hover.
|
|
214
|
+
opacity: 1;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { userEvent } from 'vitest/browser';
|
|
3
|
+
import { screen } from '@testing-library/react';
|
|
4
|
+
import { render, renderHook } from 'vitest-browser-react';
|
|
4
5
|
import ColorPanel, {
|
|
5
6
|
useHasColorPanel,
|
|
6
7
|
useHasTextPanel,
|
|
@@ -11,10 +12,6 @@ import ColorPanel, {
|
|
|
11
12
|
useHasCaptionPanel,
|
|
12
13
|
} from '../color-panel';
|
|
13
14
|
|
|
14
|
-
globalThis.wpVitest.mockMatchMedia();
|
|
15
|
-
|
|
16
|
-
globalThis.wpVitest.mockResizeObserver();
|
|
17
|
-
|
|
18
15
|
// The inheritance treatment sits behind the
|
|
19
16
|
// `gutenberg-global-styles-inheritance-ui` experiment. Turn it on so these
|
|
20
17
|
// tests exercise the inheriting path.
|
|
@@ -39,22 +36,22 @@ describe( 'useHasColorPanel', () => {
|
|
|
39
36
|
// After moving top-level text color to TypographyPanel and top-level
|
|
40
37
|
// background color to BackgroundPanel, the Color panel only aggregates
|
|
41
38
|
// link and element controls (heading, button, caption).
|
|
42
|
-
it( 'should be false when only text color is enabled', () => {
|
|
43
|
-
const { result } = renderHook( () =>
|
|
39
|
+
it( 'should be false when only text color is enabled', async () => {
|
|
40
|
+
const { result } = await renderHook( () =>
|
|
44
41
|
useHasColorPanel( settingsWithColors( { text: true } ) )
|
|
45
42
|
);
|
|
46
43
|
expect( result.current ).toBeFalsy();
|
|
47
44
|
} );
|
|
48
45
|
|
|
49
|
-
it( 'should be false when only background color is enabled', () => {
|
|
50
|
-
const { result } = renderHook( () =>
|
|
46
|
+
it( 'should be false when only background color is enabled', async () => {
|
|
47
|
+
const { result } = await renderHook( () =>
|
|
51
48
|
useHasColorPanel( settingsWithColors( { background: true } ) )
|
|
52
49
|
);
|
|
53
50
|
expect( result.current ).toBeFalsy();
|
|
54
51
|
} );
|
|
55
52
|
|
|
56
|
-
it( 'should be false when both text and background are enabled but no element controls are', () => {
|
|
57
|
-
const { result } = renderHook( () =>
|
|
53
|
+
it( 'should be false when both text and background are enabled but no element controls are', async () => {
|
|
54
|
+
const { result } = await renderHook( () =>
|
|
58
55
|
useHasColorPanel(
|
|
59
56
|
settingsWithColors( { text: true, background: true } )
|
|
60
57
|
)
|
|
@@ -62,65 +59,65 @@ describe( 'useHasColorPanel', () => {
|
|
|
62
59
|
expect( result.current ).toBeFalsy();
|
|
63
60
|
} );
|
|
64
61
|
|
|
65
|
-
it( 'should be true when link color is enabled', () => {
|
|
66
|
-
const { result } = renderHook( () =>
|
|
62
|
+
it( 'should be true when link color is enabled', async () => {
|
|
63
|
+
const { result } = await renderHook( () =>
|
|
67
64
|
useHasColorPanel( settingsWithColors( { link: true } ) )
|
|
68
65
|
);
|
|
69
66
|
expect( result.current ).toBeTruthy();
|
|
70
67
|
} );
|
|
71
68
|
|
|
72
|
-
it( 'should be true when heading element is enabled', () => {
|
|
73
|
-
const { result } = renderHook( () =>
|
|
69
|
+
it( 'should be true when heading element is enabled', async () => {
|
|
70
|
+
const { result } = await renderHook( () =>
|
|
74
71
|
useHasColorPanel( settingsWithColors( { heading: true } ) )
|
|
75
72
|
);
|
|
76
73
|
expect( result.current ).toBeTruthy();
|
|
77
74
|
} );
|
|
78
75
|
|
|
79
|
-
it( 'should be true when button element is enabled', () => {
|
|
80
|
-
const { result } = renderHook( () =>
|
|
76
|
+
it( 'should be true when button element is enabled', async () => {
|
|
77
|
+
const { result } = await renderHook( () =>
|
|
81
78
|
useHasColorPanel( settingsWithColors( { button: true } ) )
|
|
82
79
|
);
|
|
83
80
|
expect( result.current ).toBeTruthy();
|
|
84
81
|
} );
|
|
85
82
|
|
|
86
|
-
it( 'should be true when caption element is enabled', () => {
|
|
87
|
-
const { result } = renderHook( () =>
|
|
83
|
+
it( 'should be true when caption element is enabled', async () => {
|
|
84
|
+
const { result } = await renderHook( () =>
|
|
88
85
|
useHasColorPanel( settingsWithColors( { caption: true } ) )
|
|
89
86
|
);
|
|
90
87
|
expect( result.current ).toBeTruthy();
|
|
91
88
|
} );
|
|
92
89
|
|
|
93
|
-
it( 'should be false when no color controls are enabled', () => {
|
|
94
|
-
const { result } = renderHook( () => useHasColorPanel( {} ) );
|
|
90
|
+
it( 'should be false when no color controls are enabled', async () => {
|
|
91
|
+
const { result } = await renderHook( () => useHasColorPanel( {} ) );
|
|
95
92
|
expect( result.current ).toBeFalsy();
|
|
96
93
|
} );
|
|
97
94
|
} );
|
|
98
95
|
|
|
99
96
|
describe( 'useHasTextPanel', () => {
|
|
100
97
|
// Still exported for TypographyPanel to consume as its text color gate.
|
|
101
|
-
it( 'should be true when text color is enabled and colors exist', () => {
|
|
102
|
-
const { result } = renderHook( () =>
|
|
98
|
+
it( 'should be true when text color is enabled and colors exist', async () => {
|
|
99
|
+
const { result } = await renderHook( () =>
|
|
103
100
|
useHasTextPanel( settingsWithColors( { text: true } ) )
|
|
104
101
|
);
|
|
105
102
|
expect( result.current ).toBeTruthy();
|
|
106
103
|
} );
|
|
107
104
|
|
|
108
|
-
it( 'should be true when text color is enabled with custom colors support', () => {
|
|
109
|
-
const { result } = renderHook( () =>
|
|
105
|
+
it( 'should be true when text color is enabled with custom colors support', async () => {
|
|
106
|
+
const { result } = await renderHook( () =>
|
|
110
107
|
useHasTextPanel( { color: { text: true, custom: true } } )
|
|
111
108
|
);
|
|
112
109
|
expect( result.current ).toBeTruthy();
|
|
113
110
|
} );
|
|
114
111
|
|
|
115
|
-
it( 'should be false when text color is disabled', () => {
|
|
116
|
-
const { result } = renderHook( () =>
|
|
112
|
+
it( 'should be false when text color is disabled', async () => {
|
|
113
|
+
const { result } = await renderHook( () =>
|
|
117
114
|
useHasTextPanel( settingsWithColors( { text: false } ) )
|
|
118
115
|
);
|
|
119
116
|
expect( result.current ).toBeFalsy();
|
|
120
117
|
} );
|
|
121
118
|
|
|
122
|
-
it( 'should be false when no colors or custom support exist', () => {
|
|
123
|
-
const { result } = renderHook( () =>
|
|
119
|
+
it( 'should be false when no colors or custom support exist', async () => {
|
|
120
|
+
const { result } = await renderHook( () =>
|
|
124
121
|
useHasTextPanel( { color: { text: true } } )
|
|
125
122
|
);
|
|
126
123
|
expect( result.current ).toBeFalsy();
|
|
@@ -129,8 +126,8 @@ describe( 'useHasTextPanel', () => {
|
|
|
129
126
|
|
|
130
127
|
describe( 'useHasBackgroundColorPanel', () => {
|
|
131
128
|
// Still exported for BackgroundPanel to consume as its background color gate.
|
|
132
|
-
it( 'should be true when background is enabled and colors exist', () => {
|
|
133
|
-
const { result } = renderHook( () =>
|
|
129
|
+
it( 'should be true when background is enabled and colors exist', async () => {
|
|
130
|
+
const { result } = await renderHook( () =>
|
|
134
131
|
useHasBackgroundColorPanel(
|
|
135
132
|
settingsWithColors( { background: true } )
|
|
136
133
|
)
|
|
@@ -138,8 +135,8 @@ describe( 'useHasBackgroundColorPanel', () => {
|
|
|
138
135
|
expect( result.current ).toBeTruthy();
|
|
139
136
|
} );
|
|
140
137
|
|
|
141
|
-
it( 'should be true when only gradients are available', () => {
|
|
142
|
-
const { result } = renderHook( () =>
|
|
138
|
+
it( 'should be true when only gradients are available', async () => {
|
|
139
|
+
const { result } = await renderHook( () =>
|
|
143
140
|
useHasBackgroundColorPanel( {
|
|
144
141
|
color: {
|
|
145
142
|
background: true,
|
|
@@ -158,8 +155,8 @@ describe( 'useHasBackgroundColorPanel', () => {
|
|
|
158
155
|
expect( result.current ).toBeTruthy();
|
|
159
156
|
} );
|
|
160
157
|
|
|
161
|
-
it( 'should be false when background color is disabled', () => {
|
|
162
|
-
const { result } = renderHook( () =>
|
|
158
|
+
it( 'should be false when background color is disabled', async () => {
|
|
159
|
+
const { result } = await renderHook( () =>
|
|
163
160
|
useHasBackgroundColorPanel(
|
|
164
161
|
settingsWithColors( { background: false } )
|
|
165
162
|
)
|
|
@@ -169,29 +166,29 @@ describe( 'useHasBackgroundColorPanel', () => {
|
|
|
169
166
|
} );
|
|
170
167
|
|
|
171
168
|
describe( 'element color hooks', () => {
|
|
172
|
-
it( 'useHasLinkPanel is truthy when link is enabled with colors', () => {
|
|
173
|
-
const { result } = renderHook( () =>
|
|
169
|
+
it( 'useHasLinkPanel is truthy when link is enabled with colors', async () => {
|
|
170
|
+
const { result } = await renderHook( () =>
|
|
174
171
|
useHasLinkPanel( settingsWithColors( { link: true } ) )
|
|
175
172
|
);
|
|
176
173
|
expect( result.current ).toBeTruthy();
|
|
177
174
|
} );
|
|
178
175
|
|
|
179
|
-
it( 'useHasHeadingPanel is truthy when heading is enabled with colors', () => {
|
|
180
|
-
const { result } = renderHook( () =>
|
|
176
|
+
it( 'useHasHeadingPanel is truthy when heading is enabled with colors', async () => {
|
|
177
|
+
const { result } = await renderHook( () =>
|
|
181
178
|
useHasHeadingPanel( settingsWithColors( { heading: true } ) )
|
|
182
179
|
);
|
|
183
180
|
expect( result.current ).toBeTruthy();
|
|
184
181
|
} );
|
|
185
182
|
|
|
186
|
-
it( 'useHasButtonPanel is truthy when button is enabled with colors', () => {
|
|
187
|
-
const { result } = renderHook( () =>
|
|
183
|
+
it( 'useHasButtonPanel is truthy when button is enabled with colors', async () => {
|
|
184
|
+
const { result } = await renderHook( () =>
|
|
188
185
|
useHasButtonPanel( settingsWithColors( { button: true } ) )
|
|
189
186
|
);
|
|
190
187
|
expect( result.current ).toBeTruthy();
|
|
191
188
|
} );
|
|
192
189
|
|
|
193
|
-
it( 'useHasCaptionPanel is truthy when caption is enabled with colors', () => {
|
|
194
|
-
const { result } = renderHook( () =>
|
|
190
|
+
it( 'useHasCaptionPanel is truthy when caption is enabled with colors', async () => {
|
|
191
|
+
const { result } = await renderHook( () =>
|
|
195
192
|
useHasCaptionPanel( settingsWithColors( { caption: true } ) )
|
|
196
193
|
);
|
|
197
194
|
expect( result.current ).toBeTruthy();
|
|
@@ -238,7 +235,7 @@ describe( 'ColorPanel — duplicate-hex preset slug identity', () => {
|
|
|
238
235
|
};
|
|
239
236
|
|
|
240
237
|
it( 'marks only the local link preset as selected when another preset shares its hex', async () => {
|
|
241
|
-
await
|
|
238
|
+
await render(
|
|
242
239
|
<ColorPanel
|
|
243
240
|
value={ {
|
|
244
241
|
elements: {
|
|
@@ -253,7 +250,9 @@ describe( 'ColorPanel — duplicate-hex preset slug identity', () => {
|
|
|
253
250
|
/>
|
|
254
251
|
);
|
|
255
252
|
|
|
256
|
-
await click(
|
|
253
|
+
await userEvent.click(
|
|
254
|
+
screen.getByRole( 'button', { name: /^Link/ } )
|
|
255
|
+
);
|
|
257
256
|
const swatches = await screen.findAllByRole( 'option' );
|
|
258
257
|
|
|
259
258
|
// swatch[0] = 'Dark background', swatch[1] = 'Dark text'. Selection
|
|
@@ -264,8 +263,8 @@ describe( 'ColorPanel — duplicate-hex preset slug identity', () => {
|
|
|
264
263
|
} );
|
|
265
264
|
|
|
266
265
|
describe( 'ColorPanel — additional elements', () => {
|
|
267
|
-
it( 'renders additional element color controls', () => {
|
|
268
|
-
render(
|
|
266
|
+
it( 'renders additional element color controls', async () => {
|
|
267
|
+
await render(
|
|
269
268
|
<ColorPanel
|
|
270
269
|
value={ {} }
|
|
271
270
|
settings={ settingsWithColors( {
|
|
@@ -289,7 +288,7 @@ describe( 'ColorPanel — additional elements', () => {
|
|
|
289
288
|
|
|
290
289
|
describe( 'ColorPanel — inherited Global Styles label treatment', () => {
|
|
291
290
|
describe( 'Link color', () => {
|
|
292
|
-
it( 'exposes an accessible reset when local link.text overrides the inherited value', () => {
|
|
291
|
+
it( 'exposes an accessible reset when local link.text overrides the inherited value', async () => {
|
|
293
292
|
const inheritedValue = {
|
|
294
293
|
elements: { link: { color: { text: '#0000ff' } } },
|
|
295
294
|
};
|
|
@@ -297,7 +296,7 @@ describe( 'ColorPanel — inherited Global Styles label treatment', () => {
|
|
|
297
296
|
elements: { link: { color: { text: '#aaaaaa' } } },
|
|
298
297
|
};
|
|
299
298
|
|
|
300
|
-
render(
|
|
299
|
+
await render(
|
|
301
300
|
<ColorPanel
|
|
302
301
|
value={ value }
|
|
303
302
|
inheritedValue={ inheritedValue }
|
|
@@ -338,8 +337,8 @@ describe( 'ColorPanel — inherited Global Styles label treatment', () => {
|
|
|
338
337
|
},
|
|
339
338
|
};
|
|
340
339
|
|
|
341
|
-
it( 'paints an inherited link preset via its CSS custom property', () => {
|
|
342
|
-
const { container } = render(
|
|
340
|
+
it( 'paints an inherited link preset via its CSS custom property', async () => {
|
|
341
|
+
const { container } = await render(
|
|
343
342
|
<ColorPanel
|
|
344
343
|
value={ {} }
|
|
345
344
|
inheritedValue={ {
|
|
@@ -363,8 +362,8 @@ describe( 'ColorPanel — inherited Global Styles label treatment', () => {
|
|
|
363
362
|
).toBe( true );
|
|
364
363
|
} );
|
|
365
364
|
|
|
366
|
-
it( 'paints an inherited element (heading) preset via its CSS custom property', () => {
|
|
367
|
-
const { container } = render(
|
|
365
|
+
it( 'paints an inherited element (heading) preset via its CSS custom property', async () => {
|
|
366
|
+
const { container } = await render(
|
|
368
367
|
<ColorPanel
|
|
369
368
|
value={ {} }
|
|
370
369
|
inheritedValue={ {
|