@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
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { __ } from '@wordpress/i18n';
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
Composite,
|
|
5
|
+
Dropdown,
|
|
6
|
+
SelectControl as WCSelectControl,
|
|
7
|
+
} from '@wordpress/components';
|
|
8
|
+
import { Stack, Text } from '@wordpress/ui';
|
|
9
|
+
import { useRef, useMemo } from '@wordpress/element';
|
|
10
|
+
import { shadow as textShadowIcon, Icon, check, reset } from '@wordpress/icons';
|
|
11
|
+
import type { TextShadowPreset } from '@wordpress/global-styles-engine';
|
|
12
|
+
import clsx from 'clsx';
|
|
13
|
+
import { useSettings } from '../use-settings';
|
|
14
|
+
|
|
15
|
+
type TextShadowValue = string | undefined;
|
|
16
|
+
|
|
17
|
+
interface TextShadowProps {
|
|
18
|
+
textShadow: TextShadowValue;
|
|
19
|
+
onChange: ( textShadow: TextShadowValue ) => void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface TextShadowToggleProps extends TextShadowProps {
|
|
23
|
+
onToggle: () => void;
|
|
24
|
+
isOpen: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Shared reference to an empty array for cases where it is important to avoid
|
|
29
|
+
* returning a new array reference on every invocation.
|
|
30
|
+
*/
|
|
31
|
+
const EMPTY_ARRAY: TextShadowPreset[] = [];
|
|
32
|
+
|
|
33
|
+
// Above this number of presets, the list is rendered as a compact dropdown
|
|
34
|
+
// rather than a long list of options.
|
|
35
|
+
const PRESETS_SELECT_THRESHOLD = 7;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Extracts the preset slug from a raw text shadow value.
|
|
39
|
+
*
|
|
40
|
+
* @param rawValue The stored text shadow value.
|
|
41
|
+
* @return The preset slug, or undefined for custom values.
|
|
42
|
+
*/
|
|
43
|
+
function getTextShadowPresetSlug( rawValue: TextShadowValue ) {
|
|
44
|
+
if ( ! rawValue || typeof rawValue !== 'string' ) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Block supports use the `var:preset|text-shadow|slug` format.
|
|
49
|
+
if ( rawValue.startsWith( 'var:preset|text-shadow|' ) ) {
|
|
50
|
+
return rawValue.replace( 'var:preset|text-shadow|', '' );
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Global styles data uses the `var(--wp--preset--text-shadow--slug)` format.
|
|
54
|
+
const cssVarMatch = rawValue.match(
|
|
55
|
+
/^var\(--wp--preset--text-shadow--([^)]+)\)$/
|
|
56
|
+
);
|
|
57
|
+
if ( cssVarMatch ) {
|
|
58
|
+
return cssVarMatch[ 1 ];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function TextShadowPopover( { textShadow, onChange }: TextShadowProps ) {
|
|
65
|
+
const popoverProps = {
|
|
66
|
+
placement: 'left-start' as const,
|
|
67
|
+
offset: 36,
|
|
68
|
+
shift: true,
|
|
69
|
+
className: 'block-editor-global-styles__text-shadow-popover',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<Dropdown
|
|
74
|
+
popoverProps={ popoverProps }
|
|
75
|
+
className="block-editor-global-styles__text-shadow-dropdown"
|
|
76
|
+
renderToggle={ ( { onToggle, isOpen } ) => (
|
|
77
|
+
<TextShadowToggle
|
|
78
|
+
textShadow={ textShadow }
|
|
79
|
+
onChange={ onChange }
|
|
80
|
+
onToggle={ onToggle }
|
|
81
|
+
isOpen={ isOpen }
|
|
82
|
+
/>
|
|
83
|
+
) }
|
|
84
|
+
renderContent={ () => (
|
|
85
|
+
<TextShadowControl
|
|
86
|
+
textShadow={ textShadow }
|
|
87
|
+
onChange={ onChange }
|
|
88
|
+
/>
|
|
89
|
+
) }
|
|
90
|
+
/>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function TextShadowControl( { textShadow, onChange }: TextShadowProps ) {
|
|
95
|
+
const [
|
|
96
|
+
defaultPresetsEnabled,
|
|
97
|
+
defaultPresets,
|
|
98
|
+
themePresets,
|
|
99
|
+
customPresets,
|
|
100
|
+
] = useSettings(
|
|
101
|
+
'typography.defaultTextShadowPresets',
|
|
102
|
+
'typography.textShadowPresets.default',
|
|
103
|
+
'typography.textShadowPresets.theme',
|
|
104
|
+
'typography.textShadowPresets.custom'
|
|
105
|
+
) as [
|
|
106
|
+
boolean | undefined,
|
|
107
|
+
TextShadowPreset[] | undefined,
|
|
108
|
+
TextShadowPreset[] | undefined,
|
|
109
|
+
TextShadowPreset[] | undefined,
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
const presets = useMemo(
|
|
113
|
+
() => [
|
|
114
|
+
...( ( defaultPresetsEnabled && defaultPresets ) || EMPTY_ARRAY ),
|
|
115
|
+
...( themePresets || EMPTY_ARRAY ),
|
|
116
|
+
...( customPresets || EMPTY_ARRAY ),
|
|
117
|
+
],
|
|
118
|
+
[ defaultPresetsEnabled, defaultPresets, themePresets, customPresets ]
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const choices = [
|
|
122
|
+
{ value: 'none', label: __( 'None' ) },
|
|
123
|
+
...presets.map( ( preset ) => ( {
|
|
124
|
+
value: `var:preset|text-shadow|${ preset.slug }`,
|
|
125
|
+
label: preset.name,
|
|
126
|
+
} ) ),
|
|
127
|
+
];
|
|
128
|
+
|
|
129
|
+
const activeSlug = getTextShadowPresetSlug( textShadow );
|
|
130
|
+
const activeValue = activeSlug
|
|
131
|
+
? `var:preset|text-shadow|${ activeSlug }`
|
|
132
|
+
: ( textShadow ?? '' );
|
|
133
|
+
const previewValue = activeSlug
|
|
134
|
+
? presets.find( ( preset ) => preset.slug === activeSlug )?.textShadow
|
|
135
|
+
: textShadow;
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<Stack
|
|
139
|
+
className="block-editor-global-styles__text-shadow"
|
|
140
|
+
direction="column"
|
|
141
|
+
gap="sm"
|
|
142
|
+
>
|
|
143
|
+
<Text variant="heading-sm" render={ <h2 /> }>
|
|
144
|
+
{ __( 'Text shadow' ) }
|
|
145
|
+
</Text>
|
|
146
|
+
<div
|
|
147
|
+
className="block-editor-global-styles__text-shadow-preview"
|
|
148
|
+
style={ { textShadow: previewValue } }
|
|
149
|
+
>
|
|
150
|
+
{ __( 'Code is poetry' ) }
|
|
151
|
+
</div>
|
|
152
|
+
{ presets.length >= PRESETS_SELECT_THRESHOLD ? (
|
|
153
|
+
<WCSelectControl
|
|
154
|
+
hideLabelFromVision
|
|
155
|
+
label={ __( 'Text shadow preset' ) }
|
|
156
|
+
value={ activeValue }
|
|
157
|
+
options={ [
|
|
158
|
+
{ value: '', label: __( 'Default' ) },
|
|
159
|
+
...choices,
|
|
160
|
+
] }
|
|
161
|
+
onChange={ onChange }
|
|
162
|
+
/>
|
|
163
|
+
) : (
|
|
164
|
+
<Composite
|
|
165
|
+
role="listbox"
|
|
166
|
+
aria-label={ __( 'Text shadow presets' ) }
|
|
167
|
+
render={ <Stack direction="column" /> }
|
|
168
|
+
>
|
|
169
|
+
{ choices.map( ( { value, label } ) => {
|
|
170
|
+
const isActive = value === activeValue;
|
|
171
|
+
return (
|
|
172
|
+
<Composite.Item
|
|
173
|
+
key={ value }
|
|
174
|
+
role="option"
|
|
175
|
+
aria-selected={ isActive }
|
|
176
|
+
className={ clsx(
|
|
177
|
+
'block-editor-global-styles__text-shadow-list-item',
|
|
178
|
+
{ 'is-active': isActive }
|
|
179
|
+
) }
|
|
180
|
+
onClick={ () => onChange( value ) }
|
|
181
|
+
render={ <Button __next40pxDefaultSize /> }
|
|
182
|
+
>
|
|
183
|
+
<span>{ label }</span>
|
|
184
|
+
<Icon icon={ check } />
|
|
185
|
+
</Composite.Item>
|
|
186
|
+
);
|
|
187
|
+
} ) }
|
|
188
|
+
</Composite>
|
|
189
|
+
) }
|
|
190
|
+
<Stack direction="row" justify="flex-end">
|
|
191
|
+
<Button
|
|
192
|
+
__next40pxDefaultSize
|
|
193
|
+
variant="tertiary"
|
|
194
|
+
onClick={ () => onChange( undefined ) }
|
|
195
|
+
disabled={ ! textShadow }
|
|
196
|
+
accessibleWhenDisabled
|
|
197
|
+
>
|
|
198
|
+
{ __( 'Clear' ) }
|
|
199
|
+
</Button>
|
|
200
|
+
</Stack>
|
|
201
|
+
</Stack>
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function TextShadowToggle( {
|
|
206
|
+
textShadow,
|
|
207
|
+
onChange,
|
|
208
|
+
onToggle,
|
|
209
|
+
isOpen,
|
|
210
|
+
}: TextShadowToggleProps ) {
|
|
211
|
+
const buttonRef = useRef< HTMLButtonElement >( undefined );
|
|
212
|
+
|
|
213
|
+
return (
|
|
214
|
+
<>
|
|
215
|
+
<Button
|
|
216
|
+
__next40pxDefaultSize
|
|
217
|
+
onClick={ onToggle }
|
|
218
|
+
className={ clsx(
|
|
219
|
+
'block-editor-global-styles__text-shadow-dropdown-toggle',
|
|
220
|
+
{ 'is-open': isOpen }
|
|
221
|
+
) }
|
|
222
|
+
aria-expanded={ isOpen }
|
|
223
|
+
ref={ buttonRef }
|
|
224
|
+
>
|
|
225
|
+
<Stack
|
|
226
|
+
direction="row"
|
|
227
|
+
justify="flex-start"
|
|
228
|
+
align="center"
|
|
229
|
+
gap="sm"
|
|
230
|
+
>
|
|
231
|
+
<Icon icon={ textShadowIcon } size={ 24 } />
|
|
232
|
+
<span>{ __( 'Text shadow' ) }</span>
|
|
233
|
+
</Stack>
|
|
234
|
+
</Button>
|
|
235
|
+
{ !! textShadow && (
|
|
236
|
+
<Button
|
|
237
|
+
__next40pxDefaultSize
|
|
238
|
+
size="small"
|
|
239
|
+
icon={ reset }
|
|
240
|
+
onClick={ () => {
|
|
241
|
+
if ( isOpen ) {
|
|
242
|
+
onToggle();
|
|
243
|
+
}
|
|
244
|
+
onChange( undefined );
|
|
245
|
+
// Return focus to parent button.
|
|
246
|
+
buttonRef.current?.focus();
|
|
247
|
+
} }
|
|
248
|
+
className={ clsx(
|
|
249
|
+
'block-editor-global-styles__text-shadow-remove-button',
|
|
250
|
+
{ 'is-open': isOpen }
|
|
251
|
+
) }
|
|
252
|
+
label={ __( 'Remove text shadow' ) }
|
|
253
|
+
/>
|
|
254
|
+
) }
|
|
255
|
+
</>
|
|
256
|
+
);
|
|
257
|
+
}
|
|
@@ -17,6 +17,7 @@ import TextTransformControl from '../text-transform-control';
|
|
|
17
17
|
import TextDecorationControl from '../text-decoration-control';
|
|
18
18
|
import TextIndentControl from '../text-indent-control';
|
|
19
19
|
import WritingModeControl from '../writing-mode-control';
|
|
20
|
+
import { TextShadowPopover } from './text-shadow-panel';
|
|
20
21
|
import ColorGradientDropdownItem from './color-gradient-dropdown-item';
|
|
21
22
|
import { useHasTextPanel } from './color-panel';
|
|
22
23
|
import { useColorGradientSettings } from './hooks';
|
|
@@ -34,7 +35,7 @@ import { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights
|
|
|
34
35
|
import {
|
|
35
36
|
getInheritanceProps,
|
|
36
37
|
InheritanceToolsPanelItem,
|
|
37
|
-
|
|
38
|
+
isGlobalStylesInheritanceIndicatorUIEnabled,
|
|
38
39
|
} from './inheritance';
|
|
39
40
|
|
|
40
41
|
const MIN_TEXT_COLUMNS = 1;
|
|
@@ -79,6 +80,7 @@ export function useHasTypographyPanel( settings ) {
|
|
|
79
80
|
const hasTextColumns = useHasTextColumnsControl( settings );
|
|
80
81
|
const hasFontSize = useHasFontSizeControl( settings );
|
|
81
82
|
const hasTextColor = useHasTextPanel( settings );
|
|
83
|
+
const hasTextShadow = useHasTextShadowControl( settings );
|
|
82
84
|
|
|
83
85
|
return (
|
|
84
86
|
hasFontFamily ||
|
|
@@ -92,7 +94,8 @@ export function useHasTypographyPanel( settings ) {
|
|
|
92
94
|
hasTextIndent ||
|
|
93
95
|
hasWritingMode ||
|
|
94
96
|
hasTextColumns ||
|
|
95
|
-
hasTextColor
|
|
97
|
+
hasTextColor ||
|
|
98
|
+
hasTextShadow
|
|
96
99
|
);
|
|
97
100
|
}
|
|
98
101
|
|
|
@@ -158,6 +161,10 @@ function useHasTextIndentControl( settings ) {
|
|
|
158
161
|
return settings?.typography?.textIndent;
|
|
159
162
|
}
|
|
160
163
|
|
|
164
|
+
function useHasTextShadowControl( settings ) {
|
|
165
|
+
return settings?.typography?.textShadow;
|
|
166
|
+
}
|
|
167
|
+
|
|
161
168
|
/**
|
|
162
169
|
* Concatenate all the font sizes into a single list for the font size picker.
|
|
163
170
|
*
|
|
@@ -171,7 +178,7 @@ function getMergedFontSizes( settings ) {
|
|
|
171
178
|
return [
|
|
172
179
|
...( fontSizes?.custom ?? [] ),
|
|
173
180
|
...( fontSizes?.theme ?? [] ),
|
|
174
|
-
...( defaultFontSizesEnabled ? fontSizes?.default ?? [] : [] ),
|
|
181
|
+
...( defaultFontSizesEnabled ? ( fontSizes?.default ?? [] ) : [] ),
|
|
175
182
|
];
|
|
176
183
|
}
|
|
177
184
|
|
|
@@ -214,6 +221,7 @@ const DEFAULT_CONTROLS = {
|
|
|
214
221
|
textIndent: true,
|
|
215
222
|
writingMode: true,
|
|
216
223
|
textColumns: true,
|
|
224
|
+
textShadow: true,
|
|
217
225
|
};
|
|
218
226
|
|
|
219
227
|
const EMPTY_VALUES = [ undefined, null, '' ];
|
|
@@ -248,7 +256,7 @@ export default function TypographyPanel( {
|
|
|
248
256
|
panelId,
|
|
249
257
|
defaultControls = DEFAULT_CONTROLS,
|
|
250
258
|
isGlobalStyles = false,
|
|
251
|
-
showInheritanceLabelIndicators =
|
|
259
|
+
showInheritanceLabelIndicators = isGlobalStylesInheritanceIndicatorUIEnabled(),
|
|
252
260
|
contrastWarning,
|
|
253
261
|
} ) {
|
|
254
262
|
const { colors, allColors, areCustomSolidsEnabled, decodeValue } =
|
|
@@ -276,13 +284,7 @@ export default function TypographyPanel( {
|
|
|
276
284
|
newSlug
|
|
277
285
|
);
|
|
278
286
|
let changedObject = setImmutably( value, [ 'color', 'text' ], encoded );
|
|
279
|
-
|
|
280
|
-
// `inheritedValue`.
|
|
281
|
-
const syncLinkColor = isGlobalStylesInheritanceEnabled()
|
|
282
|
-
? shouldSyncLinkColor( value, inheritedValue )
|
|
283
|
-
: inheritedValue?.color?.text ===
|
|
284
|
-
inheritedValue?.elements?.link?.color?.text;
|
|
285
|
-
if ( syncLinkColor ) {
|
|
287
|
+
if ( shouldSyncLinkColor( value, inheritedValue ) ) {
|
|
286
288
|
changedObject = setImmutably(
|
|
287
289
|
changedObject,
|
|
288
290
|
[ 'elements', 'link', 'color', 'text' ],
|
|
@@ -778,6 +780,25 @@ export default function TypographyPanel( {
|
|
|
778
780
|
const hasTextAlign = () => hasValue( value?.typography?.textAlign );
|
|
779
781
|
const resetTextAlign = () => setTextAlign( undefined );
|
|
780
782
|
|
|
783
|
+
// Text Shadow
|
|
784
|
+
const hasTextShadowControl = useHasTextShadowControl( settings );
|
|
785
|
+
const inheritedTextShadow = inheritedValue?.typography?.textShadow;
|
|
786
|
+
const textShadow = value?.typography?.textShadow ?? inheritedTextShadow;
|
|
787
|
+
const isTextShadowPlaceholder =
|
|
788
|
+
! hasValue( value?.typography?.textShadow ) &&
|
|
789
|
+
hasValue( inheritedTextShadow );
|
|
790
|
+
const setTextShadow = ( newValue ) => {
|
|
791
|
+
onChange(
|
|
792
|
+
setImmutably(
|
|
793
|
+
value,
|
|
794
|
+
[ 'typography', 'textShadow' ],
|
|
795
|
+
newValue || undefined
|
|
796
|
+
)
|
|
797
|
+
);
|
|
798
|
+
};
|
|
799
|
+
const hasTextShadow = () => hasValue( value?.typography?.textShadow );
|
|
800
|
+
const resetTextShadow = () => setTextShadow( undefined );
|
|
801
|
+
|
|
781
802
|
const resetAllFilter = useCallback(
|
|
782
803
|
( previousValue ) => {
|
|
783
804
|
if ( ! hasTextColorEnabled ) {
|
|
@@ -943,7 +964,7 @@ export default function TypographyPanel( {
|
|
|
943
964
|
getNumericPlaceholder(
|
|
944
965
|
inheritedLineHeight
|
|
945
966
|
),
|
|
946
|
-
|
|
967
|
+
}
|
|
947
968
|
: {} ) }
|
|
948
969
|
/>
|
|
949
970
|
</InheritanceToolsPanelItem>
|
|
@@ -977,7 +998,7 @@ export default function TypographyPanel( {
|
|
|
977
998
|
isLetterSpacingPlaceholder
|
|
978
999
|
? getNumericPlaceholder(
|
|
979
1000
|
inheritedLetterSpacing
|
|
980
|
-
|
|
1001
|
+
)
|
|
981
1002
|
: undefined
|
|
982
1003
|
}
|
|
983
1004
|
/>
|
|
@@ -1113,6 +1134,24 @@ export default function TypographyPanel( {
|
|
|
1113
1134
|
/>
|
|
1114
1135
|
</InheritanceToolsPanelItem>
|
|
1115
1136
|
) }
|
|
1137
|
+
{ hasTextShadowControl && (
|
|
1138
|
+
<InheritanceToolsPanelItem
|
|
1139
|
+
{ ...inheritanceProps(
|
|
1140
|
+
isTextShadowPlaceholder,
|
|
1141
|
+
hasTextShadow() && inheritedTextShadow !== undefined
|
|
1142
|
+
) }
|
|
1143
|
+
label={ __( 'Text shadow' ) }
|
|
1144
|
+
hasValue={ hasTextShadow }
|
|
1145
|
+
onDeselect={ resetTextShadow }
|
|
1146
|
+
isShownByDefault={ defaultControls.textShadow }
|
|
1147
|
+
panelId={ panelId }
|
|
1148
|
+
>
|
|
1149
|
+
<TextShadowPopover
|
|
1150
|
+
textShadow={ textShadow }
|
|
1151
|
+
onChange={ setTextShadow }
|
|
1152
|
+
/>
|
|
1153
|
+
</InheritanceToolsPanelItem>
|
|
1154
|
+
) }
|
|
1116
1155
|
{ hasTextAlignmentControl && (
|
|
1117
1156
|
<InheritanceToolsPanelItem
|
|
1118
1157
|
{ ...inheritanceProps(
|
|
@@ -142,7 +142,7 @@ export function findNearestStyleAndWeight(
|
|
|
142
142
|
( option ) =>
|
|
143
143
|
option.style.fontWeight ===
|
|
144
144
|
findNearestFontWeight( fontWeights, fontWeight )
|
|
145
|
-
|
|
145
|
+
)?.style?.fontStyle;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
if ( ! hasFontWeight ) {
|
|
@@ -156,7 +156,7 @@ export function findNearestStyleAndWeight(
|
|
|
156
156
|
( option ) =>
|
|
157
157
|
option.style.fontStyle ===
|
|
158
158
|
( nearestFontStyle || fontStyle )
|
|
159
|
-
|
|
159
|
+
)?.style?.fontWeight;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
return { nearestFontStyle, nearestFontWeight };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __, sprintf } from '@wordpress/i18n';
|
|
2
2
|
import {
|
|
3
|
-
SelectControl,
|
|
3
|
+
SelectControl as WCSelectControl,
|
|
4
4
|
Notice,
|
|
5
5
|
__experimentalVStack as VStack,
|
|
6
6
|
} from '@wordpress/components';
|
|
@@ -80,7 +80,7 @@ export default function HTMLElementControl( {
|
|
|
80
80
|
|
|
81
81
|
return (
|
|
82
82
|
<VStack spacing={ 2 } className="block-editor-html-element-control">
|
|
83
|
-
<
|
|
83
|
+
<WCSelectControl
|
|
84
84
|
label={ __( 'HTML element' ) }
|
|
85
85
|
options={ modifiedOptions }
|
|
86
86
|
value={ tagName }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
SelectControl,
|
|
2
|
+
SelectControl as WCSelectControl,
|
|
3
3
|
__experimentalNumberControl as NumberControl,
|
|
4
4
|
__experimentalHStack as HStack,
|
|
5
5
|
__experimentalVStack as VStack,
|
|
@@ -83,7 +83,7 @@ export default function ImageSizeControl( {
|
|
|
83
83
|
return (
|
|
84
84
|
<VStack className="block-editor-image-size-control" spacing="4">
|
|
85
85
|
{ imageSizeOptions && imageSizeOptions.length > 0 && (
|
|
86
|
-
<
|
|
86
|
+
<WCSelectControl
|
|
87
87
|
label={ __( 'Resolution' ) }
|
|
88
88
|
value={ slug }
|
|
89
89
|
options={ imageSizeOptions }
|
|
@@ -18,6 +18,7 @@ import { useBlockEditContext } from '../block-edit/context';
|
|
|
18
18
|
import useBlockSync from '../provider/use-block-sync';
|
|
19
19
|
import { store as blockEditorStore } from '../../store';
|
|
20
20
|
import useBlockDropZone from '../use-block-drop-zone';
|
|
21
|
+
import { normalizeLegacyLayout } from '../../layouts/utils';
|
|
21
22
|
import { unlock } from '../../lock-unlock';
|
|
22
23
|
|
|
23
24
|
const EMPTY_OBJECT = {};
|
|
@@ -94,11 +95,18 @@ function UncontrolledInnerBlocks( props ) {
|
|
|
94
95
|
EMPTY_OBJECT;
|
|
95
96
|
|
|
96
97
|
const { allowSizingOnChildren = false } = defaultLayoutBlockSupport;
|
|
98
|
+
// Legacy markup expresses a constrained layout as `inherit: true` or bare
|
|
99
|
+
// content/wide sizes with no `type`. Promote it the way the layout styling
|
|
100
|
+
// hooks do, so the inner blocks resolve to constrained rather than flow.
|
|
101
|
+
const normalizedLayout = useMemo(
|
|
102
|
+
() => normalizeLegacyLayout( layout ),
|
|
103
|
+
[ layout ]
|
|
104
|
+
);
|
|
97
105
|
// The support is a config object, e.g. `{ allowSwitching: false, default: { type: 'flex' } }`,
|
|
98
106
|
// so the layout itself lives under `default`. Passing the config through would leave the
|
|
99
107
|
// context without a `type`, and consumers would resolve it to the flow layout.
|
|
100
108
|
const usedLayout =
|
|
101
|
-
|
|
109
|
+
normalizedLayout || defaultLayoutBlockSupport.default || EMPTY_OBJECT;
|
|
102
110
|
|
|
103
111
|
const memoedLayout = useMemo(
|
|
104
112
|
() => ( {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useMemo } from '@wordpress/element';
|
|
2
|
-
import {
|
|
2
|
+
import { _n, sprintf } from '@wordpress/i18n';
|
|
3
3
|
import { speak } from '@wordpress/a11y';
|
|
4
4
|
import usePatternsState from '../hooks/use-patterns-state';
|
|
5
5
|
import {
|
|
@@ -7,19 +7,10 @@ import {
|
|
|
7
7
|
allPatternsCategory,
|
|
8
8
|
myPatternsCategory,
|
|
9
9
|
starterPatternsCategory,
|
|
10
|
+
getPopulatedCategories,
|
|
10
11
|
INSERTER_PATTERN_TYPES,
|
|
11
12
|
} from './utils';
|
|
12
13
|
|
|
13
|
-
function hasRegisteredCategory( pattern, allCategories ) {
|
|
14
|
-
if ( ! pattern.categories || ! pattern.categories.length ) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return pattern.categories.some( ( cat ) =>
|
|
19
|
-
allCategories.some( ( category ) => category.name === cat )
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
14
|
export function usePatternCategories( rootClientId, sourceFilter = 'all' ) {
|
|
24
15
|
const [ patterns, allCategories ] = usePatternsState(
|
|
25
16
|
undefined,
|
|
@@ -33,33 +24,16 @@ export function usePatternCategories( rootClientId, sourceFilter = 'all' ) {
|
|
|
33
24
|
: patterns.filter(
|
|
34
25
|
( pattern ) =>
|
|
35
26
|
! isPatternFiltered( pattern, sourceFilter )
|
|
36
|
-
|
|
27
|
+
),
|
|
37
28
|
[ sourceFilter, patterns ]
|
|
38
29
|
);
|
|
39
30
|
|
|
40
31
|
// Remove any empty categories.
|
|
41
32
|
const populatedCategories = useMemo( () => {
|
|
42
|
-
const categories =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
)
|
|
47
|
-
)
|
|
48
|
-
.sort( ( a, b ) => a.label.localeCompare( b.label ) );
|
|
49
|
-
|
|
50
|
-
if (
|
|
51
|
-
filteredPatterns.some(
|
|
52
|
-
( pattern ) => ! hasRegisteredCategory( pattern, allCategories )
|
|
53
|
-
) &&
|
|
54
|
-
! categories.find(
|
|
55
|
-
( category ) => category.name === 'uncategorized'
|
|
56
|
-
)
|
|
57
|
-
) {
|
|
58
|
-
categories.push( {
|
|
59
|
-
name: 'uncategorized',
|
|
60
|
-
label: _x( 'Uncategorized' ),
|
|
61
|
-
} );
|
|
62
|
-
}
|
|
33
|
+
const categories = getPopulatedCategories(
|
|
34
|
+
filteredPatterns,
|
|
35
|
+
allCategories
|
|
36
|
+
);
|
|
63
37
|
if (
|
|
64
38
|
filteredPatterns.some( ( pattern ) =>
|
|
65
39
|
pattern.blockTypes?.includes( 'core/post-content' )
|
|
@@ -26,6 +26,50 @@ export const starterPatternsCategory = {
|
|
|
26
26
|
label: __( 'Starter content' ),
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
+
function hasRegisteredCategory( pattern, allCategories ) {
|
|
30
|
+
if ( ! pattern.categories || ! pattern.categories.length ) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return pattern.categories.some( ( cat ) =>
|
|
35
|
+
allCategories.some( ( category ) => category.name === cat )
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Returns the categories that contain at least one of the given patterns,
|
|
41
|
+
* sorted by label. An "Uncategorized" category is appended when some pattern
|
|
42
|
+
* belongs to no registered category.
|
|
43
|
+
*
|
|
44
|
+
* @param {Array} patterns The patterns to derive the categories from.
|
|
45
|
+
* @param {Array} allCategories The registered pattern categories.
|
|
46
|
+
*
|
|
47
|
+
* @return {Array} The populated categories.
|
|
48
|
+
*/
|
|
49
|
+
export function getPopulatedCategories( patterns, allCategories ) {
|
|
50
|
+
const categories = allCategories
|
|
51
|
+
.filter( ( category ) =>
|
|
52
|
+
patterns.some( ( pattern ) =>
|
|
53
|
+
pattern.categories?.includes( category.name )
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
.sort( ( a, b ) => a.label.localeCompare( b.label ) );
|
|
57
|
+
|
|
58
|
+
if (
|
|
59
|
+
patterns.some(
|
|
60
|
+
( pattern ) => ! hasRegisteredCategory( pattern, allCategories )
|
|
61
|
+
) &&
|
|
62
|
+
! categories.find( ( category ) => category.name === 'uncategorized' )
|
|
63
|
+
) {
|
|
64
|
+
categories.push( {
|
|
65
|
+
name: 'uncategorized',
|
|
66
|
+
label: __( 'Uncategorized' ),
|
|
67
|
+
} );
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return categories;
|
|
71
|
+
}
|
|
72
|
+
|
|
29
73
|
export function isPatternFiltered( pattern, sourceFilter, syncFilter ) {
|
|
30
74
|
const isUserPattern = pattern.name.startsWith( 'core/block' );
|
|
31
75
|
const isDirectoryPattern =
|
|
@@ -81,13 +81,13 @@ const useBlockTypesState = ( rootClientId, onInsert, isQuick ) => {
|
|
|
81
81
|
syncStatus === 'unsynced'
|
|
82
82
|
? parse( content, {
|
|
83
83
|
__unstableSkipMigrationLogs: true,
|
|
84
|
-
|
|
84
|
+
} )
|
|
85
85
|
: createBlock(
|
|
86
86
|
name,
|
|
87
87
|
initialAttributes,
|
|
88
88
|
createBlocksFromInnerBlocksTemplate( innerBlocks ),
|
|
89
89
|
innerContent
|
|
90
|
-
|
|
90
|
+
);
|
|
91
91
|
onInsert(
|
|
92
92
|
insertedBlock,
|
|
93
93
|
undefined,
|