@wordpress/block-editor 12.15.0 → 12.16.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 +2 -0
- package/README.md +9 -4
- package/build/components/block-canvas/index.js +22 -6
- package/build/components/block-canvas/index.js.map +1 -1
- package/build/components/block-card/index.js +1 -1
- package/build/components/block-card/index.js.map +1 -1
- package/build/components/block-controls/hook.js +3 -23
- package/build/components/block-controls/hook.js.map +1 -1
- package/build/components/block-edit/context.js +5 -1
- package/build/components/block-edit/context.js.map +1 -1
- package/build/components/block-edit/index.js +18 -9
- package/build/components/block-edit/index.js.map +1 -1
- package/build/components/block-info-slot-fill/index.js +3 -4
- package/build/components/block-info-slot-fill/index.js.map +1 -1
- package/build/components/block-list/block.js +28 -9
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-list/block.native.js +14 -5
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/use-block-props/index.js +61 -18
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-focus-first-element.js +4 -29
- package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
- package/build/components/block-list/use-block-props/use-is-hovered.js +4 -14
- package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build/components/block-patterns-list/index.js +1 -1
- package/build/components/block-patterns-list/index.js.map +1 -1
- package/build/components/block-removal-warning-modal/index.js +2 -9
- package/build/components/block-removal-warning-modal/index.js.map +1 -1
- package/build/components/block-rename/modal.js +3 -0
- package/build/components/block-rename/modal.js.map +1 -1
- package/build/components/block-settings/container.native.js +6 -4
- package/build/components/block-settings/container.native.js.map +1 -1
- package/build/components/block-styles/index.js +1 -1
- package/build/components/block-styles/index.js.map +1 -1
- package/build/components/block-styles/index.native.js +3 -2
- package/build/components/block-styles/index.native.js.map +1 -1
- package/build/components/block-toolbar/index.js +89 -27
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/block-toolbar-breadcrumb.js +49 -0
- package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
- package/build/components/block-tools/block-toolbar-popover.js +86 -0
- package/build/components/block-tools/block-toolbar-popover.js.map +1 -0
- package/build/components/block-tools/index.js +27 -24
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/block-types-list/index.native.js +4 -3
- package/build/components/block-types-list/index.native.js.map +1 -1
- package/build/components/block-variation-picker/index.native.js +2 -1
- package/build/components/block-variation-picker/index.native.js.map +1 -1
- package/build/components/colors-gradients/control.js +28 -17
- package/build/components/colors-gradients/control.js.map +1 -1
- package/build/components/duotone-control/index.js +1 -4
- package/build/components/duotone-control/index.js.map +1 -1
- package/build/components/global-styles/color-panel.js +22 -20
- package/build/components/global-styles/color-panel.js.map +1 -1
- package/build/components/global-styles/filters-panel.js +9 -3
- package/build/components/global-styles/filters-panel.js.map +1 -1
- package/build/components/global-styles/typography-panel.js +20 -31
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/image-link-destinations/index.native.js +118 -0
- package/build/components/image-link-destinations/index.native.js.map +1 -0
- package/build/components/index.native.js +8 -0
- package/build/components/index.native.js.map +1 -1
- package/build/components/inserter/media-tab/media-panel.js +2 -2
- package/build/components/inserter/media-tab/media-panel.js.map +1 -1
- package/build/components/inserter/menu.js +14 -7
- package/build/components/inserter/menu.js.map +1 -1
- package/build/components/inserter/preview-panel.js +2 -2
- package/build/components/inserter/preview-panel.js.map +1 -1
- package/build/components/inserter-button/index.native.js +98 -0
- package/build/components/inserter-button/index.native.js.map +1 -0
- package/build/components/inserter-button/sparkles.js +23 -0
- package/build/components/inserter-button/sparkles.js.map +1 -0
- package/build/components/inserter-draggable-blocks/index.js +8 -4
- package/build/components/inserter-draggable-blocks/index.js.map +1 -1
- package/build/components/inspector-controls/fill.js +3 -3
- package/build/components/inspector-controls/fill.js.map +1 -1
- package/build/components/inspector-controls/fill.native.js +3 -3
- package/build/components/inspector-controls/fill.native.js.map +1 -1
- package/build/components/navigable-toolbar/index.js +2 -2
- package/build/components/navigable-toolbar/index.js.map +1 -1
- package/build/components/preview-options/index.js +6 -62
- package/build/components/preview-options/index.js.map +1 -1
- package/build/components/rich-text/content.js +26 -23
- package/build/components/rich-text/content.js.map +1 -1
- package/build/components/rich-text/get-rich-text-values.js +2 -1
- package/build/components/rich-text/get-rich-text-values.js.map +1 -1
- package/build/components/rich-text/index.js +2 -30
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +9 -16
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/native/get-format-colors.native.js +22 -24
- package/build/components/rich-text/native/get-format-colors.native.js.map +1 -1
- package/build/components/rich-text/native/index.native.js +7 -34
- package/build/components/rich-text/native/index.native.js.map +1 -1
- package/build/components/rich-text/use-input-rules.js +5 -1
- package/build/components/rich-text/use-input-rules.js.map +1 -1
- package/build/components/rich-text/with-deprecations.js +50 -0
- package/build/components/rich-text/with-deprecations.js.map +1 -0
- package/build/components/use-block-drop-zone/index.js +70 -8
- package/build/components/use-block-drop-zone/index.js.map +1 -1
- package/build/components/use-on-block-drop/index.js +1 -1
- package/build/components/use-on-block-drop/index.js.map +1 -1
- package/build/components/use-resize-canvas/index.js +4 -1
- package/build/components/use-resize-canvas/index.js.map +1 -1
- package/build/components/use-settings/index.js +14 -0
- package/build/components/use-settings/index.js.map +1 -1
- package/build/hooks/align.js +20 -68
- package/build/hooks/align.js.map +1 -1
- package/build/hooks/align.native.js +11 -1
- package/build/hooks/align.native.js.map +1 -1
- package/build/hooks/anchor.js +13 -29
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/background.js +28 -31
- package/build/hooks/background.js.map +1 -1
- package/build/hooks/block-hooks.js +24 -32
- package/build/hooks/block-hooks.js.map +1 -1
- package/build/hooks/block-renaming.js +18 -22
- package/build/hooks/block-renaming.js.map +1 -1
- package/build/hooks/border.js +58 -80
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color.js +76 -89
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/content-lock-ui.js +29 -29
- package/build/hooks/content-lock-ui.js.map +1 -1
- package/build/hooks/custom-class-name.js +12 -29
- package/build/hooks/custom-class-name.js.map +1 -1
- package/build/hooks/custom-fields.js +24 -38
- package/build/hooks/custom-fields.js.map +1 -1
- package/build/hooks/dimensions.js +21 -17
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/duotone.js +31 -61
- package/build/hooks/duotone.js.map +1 -1
- package/build/hooks/font-family.js +16 -25
- package/build/hooks/font-family.js.map +1 -1
- package/build/hooks/font-size.js +51 -119
- package/build/hooks/font-size.js.map +1 -1
- package/build/hooks/index.js +25 -14
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/index.native.js +10 -3
- package/build/hooks/index.native.js.map +1 -1
- package/build/hooks/layout-child.js +68 -0
- package/build/hooks/layout-child.js.map +1 -0
- package/build/hooks/layout.js +16 -101
- package/build/hooks/layout.js.map +1 -1
- package/build/hooks/padding.js +2 -2
- package/build/hooks/padding.js.map +1 -1
- package/build/hooks/position.js +40 -62
- package/build/hooks/position.js.map +1 -1
- package/build/hooks/style.js +51 -88
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/typography.js +34 -14
- package/build/hooks/typography.js.map +1 -1
- package/build/hooks/utils.js +154 -7
- package/build/hooks/utils.js.map +1 -1
- package/build/private-apis.js +0 -2
- package/build/private-apis.js.map +1 -1
- package/build/store/private-actions.js +8 -0
- package/build/store/private-actions.js.map +1 -1
- package/build/store/private-selectors.js +34 -0
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +8 -0
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +10 -60
- package/build/store/selectors.js.map +1 -1
- package/build/store/utils.js +66 -0
- package/build/store/utils.js.map +1 -0
- package/build/utils/object.js +21 -61
- package/build/utils/object.js.map +1 -1
- package/build/utils/selection.js +9 -1
- package/build/utils/selection.js.map +1 -1
- package/build-module/components/block-canvas/index.js +23 -7
- package/build-module/components/block-canvas/index.js.map +1 -1
- package/build-module/components/block-card/index.js +1 -1
- package/build-module/components/block-card/index.js.map +1 -1
- package/build-module/components/block-controls/hook.js +4 -24
- package/build-module/components/block-controls/hook.js.map +1 -1
- package/build-module/components/block-edit/context.js +2 -0
- package/build-module/components/block-edit/context.js.map +1 -1
- package/build-module/components/block-edit/index.js +19 -10
- package/build-module/components/block-edit/index.js.map +1 -1
- package/build-module/components/block-info-slot-fill/index.js +3 -3
- package/build-module/components/block-info-slot-fill/index.js.map +1 -1
- package/build-module/components/block-list/block.js +29 -10
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-list/block.native.js +14 -5
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/use-block-props/index.js +62 -19
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-focus-first-element.js +4 -29
- package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-is-hovered.js +4 -14
- package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build-module/components/block-patterns-list/index.js +1 -1
- package/build-module/components/block-patterns-list/index.js.map +1 -1
- package/build-module/components/block-removal-warning-modal/index.js +3 -10
- package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
- package/build-module/components/block-rename/modal.js +3 -0
- package/build-module/components/block-rename/modal.js.map +1 -1
- package/build-module/components/block-settings/container.native.js +4 -2
- package/build-module/components/block-settings/container.native.js.map +1 -1
- package/build-module/components/block-styles/index.js +1 -1
- package/build-module/components/block-styles/index.js.map +1 -1
- package/build-module/components/block-styles/index.native.js +3 -2
- package/build-module/components/block-styles/index.native.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +88 -25
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/block-toolbar-breadcrumb.js +41 -0
- package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
- package/build-module/components/block-tools/block-toolbar-popover.js +76 -0
- package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -0
- package/build-module/components/block-tools/index.js +27 -24
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/block-types-list/index.native.js +2 -1
- package/build-module/components/block-types-list/index.native.js.map +1 -1
- package/build-module/components/block-variation-picker/index.native.js +2 -1
- package/build-module/components/block-variation-picker/index.native.js.map +1 -1
- package/build-module/components/colors-gradients/control.js +29 -18
- package/build-module/components/colors-gradients/control.js.map +1 -1
- package/build-module/components/duotone-control/index.js +1 -4
- package/build-module/components/duotone-control/index.js.map +1 -1
- package/build-module/components/global-styles/color-panel.js +23 -21
- package/build-module/components/global-styles/color-panel.js.map +1 -1
- package/build-module/components/global-styles/filters-panel.js +10 -4
- package/build-module/components/global-styles/filters-panel.js.map +1 -1
- package/build-module/components/global-styles/typography-panel.js +20 -31
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/image-link-destinations/index.native.js +109 -0
- package/build-module/components/image-link-destinations/index.native.js.map +1 -0
- package/build-module/components/index.native.js +1 -0
- package/build-module/components/index.native.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-panel.js +1 -1
- package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
- package/build-module/components/inserter/menu.js +14 -7
- package/build-module/components/inserter/menu.js.map +1 -1
- package/build-module/components/inserter/preview-panel.js +2 -2
- package/build-module/components/inserter/preview-panel.js.map +1 -1
- package/build-module/components/inserter-button/index.native.js +89 -0
- package/build-module/components/inserter-button/index.native.js.map +1 -0
- package/build-module/components/inserter-button/sparkles.js +15 -0
- package/build-module/components/inserter-button/sparkles.js.map +1 -0
- package/build-module/components/inserter-draggable-blocks/index.js +9 -5
- package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
- package/build-module/components/inspector-controls/fill.js +3 -3
- package/build-module/components/inspector-controls/fill.js.map +1 -1
- package/build-module/components/inspector-controls/fill.native.js +3 -3
- package/build-module/components/inspector-controls/fill.native.js.map +1 -1
- package/build-module/components/navigable-toolbar/index.js +2 -2
- package/build-module/components/navigable-toolbar/index.js.map +1 -1
- package/build-module/components/preview-options/index.js +6 -62
- package/build-module/components/preview-options/index.js.map +1 -1
- package/build-module/components/rich-text/content.js +25 -21
- package/build-module/components/rich-text/content.js.map +1 -1
- package/build-module/components/rich-text/get-rich-text-values.js +2 -1
- package/build-module/components/rich-text/get-rich-text-values.js.map +1 -1
- package/build-module/components/rich-text/index.js +4 -32
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +10 -18
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/native/get-format-colors.native.js +22 -24
- package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -1
- package/build-module/components/rich-text/native/index.native.js +7 -34
- package/build-module/components/rich-text/native/index.native.js.map +1 -1
- package/build-module/components/rich-text/use-input-rules.js +5 -1
- package/build-module/components/rich-text/use-input-rules.js.map +1 -1
- package/build-module/components/rich-text/with-deprecations.js +42 -0
- package/build-module/components/rich-text/with-deprecations.js.map +1 -0
- package/build-module/components/use-block-drop-zone/index.js +69 -8
- package/build-module/components/use-block-drop-zone/index.js.map +1 -1
- package/build-module/components/use-on-block-drop/index.js +1 -1
- package/build-module/components/use-on-block-drop/index.js.map +1 -1
- package/build-module/components/use-resize-canvas/index.js +4 -1
- package/build-module/components/use-resize-canvas/index.js.map +1 -1
- package/build-module/components/use-settings/index.js +13 -1
- package/build-module/components/use-settings/index.js.map +1 -1
- package/build-module/hooks/align.js +19 -66
- package/build-module/hooks/align.js.map +1 -1
- package/build-module/hooks/align.native.js +1 -0
- package/build-module/hooks/align.native.js.map +1 -1
- package/build-module/hooks/anchor.js +11 -26
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/background.js +26 -28
- package/build-module/hooks/background.js.map +1 -1
- package/build-module/hooks/block-hooks.js +22 -30
- package/build-module/hooks/block-hooks.js.map +1 -1
- package/build-module/hooks/block-renaming.js +17 -21
- package/build-module/hooks/block-renaming.js.map +1 -1
- package/build-module/hooks/border.js +57 -78
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color.js +74 -86
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/content-lock-ui.js +27 -27
- package/build-module/hooks/content-lock-ui.js.map +1 -1
- package/build-module/hooks/custom-class-name.js +11 -27
- package/build-module/hooks/custom-class-name.js.map +1 -1
- package/build-module/hooks/custom-fields.js +20 -39
- package/build-module/hooks/custom-fields.js.map +1 -1
- package/build-module/hooks/dimensions.js +21 -16
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/duotone.js +30 -61
- package/build-module/hooks/duotone.js.map +1 -1
- package/build-module/hooks/font-family.js +14 -23
- package/build-module/hooks/font-family.js.map +1 -1
- package/build-module/hooks/font-size.js +49 -119
- package/build-module/hooks/font-size.js.map +1 -1
- package/build-module/hooks/index.js +18 -14
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/index.native.js +5 -3
- package/build-module/hooks/index.native.js.map +1 -1
- package/build-module/hooks/layout-child.js +60 -0
- package/build-module/hooks/layout-child.js.map +1 -0
- package/build-module/hooks/layout.js +13 -98
- package/build-module/hooks/layout.js.map +1 -1
- package/build-module/hooks/padding.js +2 -2
- package/build-module/hooks/padding.js.map +1 -1
- package/build-module/hooks/position.js +38 -59
- package/build-module/hooks/position.js.map +1 -1
- package/build-module/hooks/style.js +51 -84
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/typography.js +33 -12
- package/build-module/hooks/typography.js.map +1 -1
- package/build-module/hooks/utils.js +149 -6
- package/build-module/hooks/utils.js.map +1 -1
- package/build-module/private-apis.js +0 -2
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/private-actions.js +7 -0
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/private-selectors.js +33 -1
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +8 -0
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +3 -53
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/store/utils.js +56 -0
- package/build-module/store/utils.js.map +1 -0
- package/build-module/utils/object.js +21 -60
- package/build-module/utils/object.js.map +1 -1
- package/build-module/utils/selection.js +9 -1
- package/build-module/utils/selection.js.map +1 -1
- package/build-style/style-rtl.css +113 -293
- package/build-style/style.css +113 -293
- package/package.json +31 -31
- package/src/components/block-canvas/index.js +31 -17
- package/src/components/block-caption/README.md +2 -2
- package/src/components/block-card/index.js +5 -3
- package/src/components/block-card/style.scss +7 -3
- package/src/components/block-controls/hook.js +8 -30
- package/src/components/block-controls/test/index.js +3 -3
- package/src/components/block-edit/context.js +3 -0
- package/src/components/block-edit/index.js +36 -10
- package/src/components/block-info-slot-fill/index.js +6 -3
- package/src/components/block-inspector/style.scss +0 -4
- package/src/components/block-list/block.js +39 -5
- package/src/components/block-list/block.native.js +18 -4
- package/src/components/block-list/use-block-props/index.js +74 -21
- package/src/components/block-list/use-block-props/use-focus-first-element.js +1 -34
- package/src/components/block-list/use-block-props/use-is-hovered.js +2 -13
- package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +1 -5
- package/src/components/block-patterns-list/index.js +1 -1
- package/src/components/block-removal-warning-modal/index.js +7 -14
- package/src/components/block-rename/modal.js +7 -1
- package/src/components/block-settings/container.native.js +3 -5
- package/src/components/block-styles/index.js +1 -1
- package/src/components/block-styles/index.native.js +4 -2
- package/src/components/block-styles/style.scss +0 -11
- package/src/components/block-switcher/test/__snapshots__/index.js.snap +3 -1
- package/src/components/block-toolbar/index.js +180 -95
- package/src/components/block-toolbar/style.scss +50 -66
- package/src/components/block-tools/block-toolbar-breadcrumb.js +46 -0
- package/src/components/block-tools/block-toolbar-popover.js +90 -0
- package/src/components/block-tools/index.js +42 -29
- package/src/components/block-tools/style.scss +60 -172
- package/src/components/block-types-list/index.native.js +2 -1
- package/src/components/block-variation-picker/index.native.js +1 -1
- package/src/components/colors-gradients/control.js +49 -30
- package/src/components/colors-gradients/style.scss +0 -7
- package/src/components/duotone-control/index.js +2 -5
- package/src/components/duotone-control/style.scss +1 -6
- package/src/components/global-styles/color-panel.js +34 -25
- package/src/components/global-styles/filters-panel.js +8 -4
- package/src/components/global-styles/typography-panel.js +23 -43
- package/src/components/image-link-destinations/index.native.js +152 -0
- package/src/components/image-link-destinations/style.native.scss +16 -0
- package/src/components/index.native.js +1 -0
- package/src/components/inner-blocks/README.md +13 -2
- package/src/components/inserter/media-tab/media-panel.js +1 -1
- package/src/components/inserter/menu.js +16 -8
- package/src/components/inserter/preview-panel.js +2 -2
- package/src/components/inserter/style.scss +15 -17
- package/src/components/inserter-button/README.md +62 -0
- package/src/components/inserter-button/index.native.js +116 -0
- package/src/components/inserter-button/sparkles.js +15 -0
- package/src/components/inserter-button/style.native.scss +72 -0
- package/src/components/inserter-draggable-blocks/index.js +18 -5
- package/src/components/inspector-controls/fill.js +6 -3
- package/src/components/inspector-controls/fill.native.js +6 -3
- package/src/components/link-control/style.scss +1 -1
- package/src/components/link-control/test/index.js +1 -1
- package/src/components/navigable-toolbar/README.md +2 -0
- package/src/components/navigable-toolbar/index.js +2 -2
- package/src/components/preview-options/index.js +6 -86
- package/src/components/rich-text/content.js +27 -20
- package/src/components/rich-text/get-rich-text-values.js +6 -1
- package/src/components/rich-text/index.js +5 -46
- package/src/components/rich-text/index.native.js +8 -25
- package/src/components/rich-text/native/get-format-colors.native.js +33 -40
- package/src/components/rich-text/native/index.native.js +7 -48
- package/src/components/rich-text/use-input-rules.js +6 -1
- package/src/components/rich-text/with-deprecations.js +51 -0
- package/src/components/use-block-drop-zone/index.js +114 -14
- package/src/components/use-on-block-drop/index.js +2 -1
- package/src/components/use-resize-canvas/README.md +3 -3
- package/src/components/use-resize-canvas/index.js +4 -1
- package/src/components/use-settings/index.js +15 -1
- package/src/hooks/align.js +15 -76
- package/src/hooks/align.native.js +1 -0
- package/src/hooks/anchor.js +13 -33
- package/src/hooks/background.js +28 -23
- package/src/hooks/block-hooks.js +22 -51
- package/src/hooks/block-renaming.js +23 -37
- package/src/hooks/border.js +67 -118
- package/src/hooks/color.js +100 -132
- package/src/hooks/content-lock-ui.js +110 -122
- package/src/hooks/custom-class-name.js +8 -40
- package/src/hooks/custom-fields.js +20 -47
- package/src/hooks/dimensions.js +20 -16
- package/src/hooks/duotone.js +70 -127
- package/src/hooks/font-family.js +10 -29
- package/src/hooks/font-size.js +66 -162
- package/src/hooks/index.js +42 -14
- package/src/hooks/index.native.js +6 -3
- package/src/hooks/layout-child.js +53 -0
- package/src/hooks/layout.js +13 -102
- package/src/hooks/padding.js +2 -2
- package/src/hooks/position.js +50 -90
- package/src/hooks/style.js +117 -187
- package/src/hooks/test/align.js +1 -178
- package/src/hooks/typography.js +20 -16
- package/src/hooks/utils.js +187 -6
- package/src/private-apis.js +0 -2
- package/src/store/private-actions.js +8 -0
- package/src/store/private-selectors.js +45 -0
- package/src/store/reducer.js +8 -0
- package/src/store/selectors.js +5 -69
- package/src/store/utils.js +74 -0
- package/src/style.scss +0 -2
- package/src/utils/object.js +18 -69
- package/src/utils/selection.js +9 -2
- package/build/components/block-list/use-block-props/use-block-class-names.js +0 -67
- package/build/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
- package/build/components/block-list/use-block-props/use-block-custom-class-name.js +0 -46
- package/build/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
- package/build/components/block-list/use-block-props/use-block-default-class-name.js +0 -37
- package/build/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
- package/build/components/block-tools/back-compat.js +0 -45
- package/build/components/block-tools/back-compat.js.map +0 -1
- package/build/components/block-tools/block-contextual-toolbar.js +0 -91
- package/build/components/block-tools/block-contextual-toolbar.js.map +0 -1
- package/build/components/block-tools/selected-block-tools.js +0 -113
- package/build/components/block-tools/selected-block-tools.js.map +0 -1
- package/build/components/inserter/hooks/use-debounced-input.js +0 -22
- package/build/components/inserter/hooks/use-debounced-input.js.map +0 -1
- package/build/components/use-display-block-controls/index.js +0 -39
- package/build/components/use-display-block-controls/index.js.map +0 -1
- package/build/components/use-display-block-controls/index.native.js +0 -39
- package/build/components/use-display-block-controls/index.native.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-block-class-names.js +0 -60
- package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js +0 -40
- package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
- package/build-module/components/block-list/use-block-props/use-block-default-class-name.js +0 -31
- package/build-module/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
- package/build-module/components/block-tools/back-compat.js +0 -35
- package/build-module/components/block-tools/back-compat.js.map +0 -1
- package/build-module/components/block-tools/block-contextual-toolbar.js +0 -83
- package/build-module/components/block-tools/block-contextual-toolbar.js.map +0 -1
- package/build-module/components/block-tools/selected-block-tools.js +0 -105
- package/build-module/components/block-tools/selected-block-tools.js.map +0 -1
- package/build-module/components/inserter/hooks/use-debounced-input.js +0 -15
- package/build-module/components/inserter/hooks/use-debounced-input.js.map +0 -1
- package/build-module/components/use-display-block-controls/index.js +0 -32
- package/build-module/components/use-display-block-controls/index.js.map +0 -1
- package/build-module/components/use-display-block-controls/index.native.js +0 -32
- package/build-module/components/use-display-block-controls/index.native.js.map +0 -1
- package/src/components/block-list/use-block-props/use-block-class-names.js +0 -66
- package/src/components/block-list/use-block-props/use-block-custom-class-name.js +0 -44
- package/src/components/block-list/use-block-props/use-block-default-class-name.js +0 -35
- package/src/components/block-parent-selector/style.scss +0 -11
- package/src/components/block-tools/back-compat.js +0 -35
- package/src/components/block-tools/block-contextual-toolbar.js +0 -100
- package/src/components/block-tools/selected-block-tools.js +0 -127
- package/src/components/inserter/hooks/use-debounced-input.js +0 -18
- package/src/components/preview-options/README.md +0 -94
- package/src/components/preview-options/style.scss +0 -64
- package/src/components/use-display-block-controls/index.js +0 -36
- package/src/components/use-display-block-controls/index.native.js +0 -37
- package/src/hooks/test/color.js +0 -112
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import { createElement, Fragment } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* External dependencies
|
|
4
|
-
*/
|
|
5
|
-
import classnames from 'classnames';
|
|
6
|
-
|
|
7
2
|
/**
|
|
8
3
|
* WordPress dependencies
|
|
9
4
|
*/
|
|
10
5
|
import { useMemo } from '@wordpress/element';
|
|
11
6
|
import { addFilter } from '@wordpress/hooks';
|
|
12
7
|
import { getBlockSupport, hasBlockSupport, __EXPERIMENTAL_ELEMENTS as ELEMENTS } from '@wordpress/blocks';
|
|
13
|
-
import {
|
|
8
|
+
import { useInstanceId } from '@wordpress/compose';
|
|
14
9
|
import { getCSSRules, compileCSS } from '@wordpress/style-engine';
|
|
15
10
|
|
|
16
11
|
/**
|
|
@@ -21,8 +16,7 @@ import { BORDER_SUPPORT_KEY, BorderPanel } from './border';
|
|
|
21
16
|
import { COLOR_SUPPORT_KEY, ColorEdit } from './color';
|
|
22
17
|
import { TypographyPanel, TYPOGRAPHY_SUPPORT_KEY, TYPOGRAPHY_SUPPORT_KEYS } from './typography';
|
|
23
18
|
import { DIMENSIONS_SUPPORT_KEY, SPACING_SUPPORT_KEY, DimensionsPanel } from './dimensions';
|
|
24
|
-
import
|
|
25
|
-
import { shouldSkipSerialization, useStyleOverride } from './utils';
|
|
19
|
+
import { shouldSkipSerialization, useStyleOverride, useBlockSettings } from './utils';
|
|
26
20
|
import { scopeSelector } from '../components/global-styles/utils';
|
|
27
21
|
import { useBlockEditingMode } from '../components/block-editing-mode';
|
|
28
22
|
const styleSupportKeys = [...TYPOGRAPHY_SUPPORT_KEYS, BORDER_SUPPORT_KEY, COLOR_SUPPORT_KEY, DIMENSIONS_SUPPORT_KEY, BACKGROUND_SUPPORT_KEY, SPACING_SUPPORT_KEY];
|
|
@@ -237,22 +231,22 @@ export function omitStyle(style, paths, preserveReference = false) {
|
|
|
237
231
|
/**
|
|
238
232
|
* Override props assigned to save component to inject the CSS variables definition.
|
|
239
233
|
*
|
|
240
|
-
* @param {Object} props
|
|
241
|
-
* @param {Object}
|
|
242
|
-
* @param {Object} attributes
|
|
243
|
-
* @param {?Record<string, string[]>} skipPaths
|
|
234
|
+
* @param {Object} props Additional props applied to save element.
|
|
235
|
+
* @param {Object|string} blockNameOrType Block type.
|
|
236
|
+
* @param {Object} attributes Block attributes.
|
|
237
|
+
* @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.
|
|
244
238
|
*
|
|
245
239
|
* @return {Object} Filtered props applied to save element.
|
|
246
240
|
*/
|
|
247
|
-
export function addSaveProps(props,
|
|
248
|
-
if (!hasStyleSupport(
|
|
241
|
+
export function addSaveProps(props, blockNameOrType, attributes, skipPaths = skipSerializationPathsSave) {
|
|
242
|
+
if (!hasStyleSupport(blockNameOrType)) {
|
|
249
243
|
return props;
|
|
250
244
|
}
|
|
251
245
|
let {
|
|
252
246
|
style
|
|
253
247
|
} = attributes;
|
|
254
248
|
Object.entries(skipPaths).forEach(([indicator, path]) => {
|
|
255
|
-
const skipSerialization = skipSerializationPathsSaveChecks[indicator] || getBlockSupport(
|
|
249
|
+
const skipSerialization = skipSerializationPathsSaveChecks[indicator] || getBlockSupport(blockNameOrType, indicator);
|
|
256
250
|
if (skipSerialization === true) {
|
|
257
251
|
style = omitStyle(style, path);
|
|
258
252
|
}
|
|
@@ -269,62 +263,41 @@ export function addSaveProps(props, blockType, attributes, skipPaths = skipSeria
|
|
|
269
263
|
};
|
|
270
264
|
return props;
|
|
271
265
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const existingGetEditWrapperProps = settings.getEditWrapperProps;
|
|
286
|
-
settings.getEditWrapperProps = attributes => {
|
|
287
|
-
let props = {};
|
|
288
|
-
if (existingGetEditWrapperProps) {
|
|
289
|
-
props = existingGetEditWrapperProps(attributes);
|
|
290
|
-
}
|
|
291
|
-
return addSaveProps(props, settings, attributes, skipSerializationPathsEdit);
|
|
266
|
+
function BlockStyleControls({
|
|
267
|
+
clientId,
|
|
268
|
+
name,
|
|
269
|
+
setAttributes,
|
|
270
|
+
__unstableParentLayout
|
|
271
|
+
}) {
|
|
272
|
+
const settings = useBlockSettings(name, __unstableParentLayout);
|
|
273
|
+
const blockEditingMode = useBlockEditingMode();
|
|
274
|
+
const passedProps = {
|
|
275
|
+
clientId,
|
|
276
|
+
name,
|
|
277
|
+
setAttributes,
|
|
278
|
+
settings
|
|
292
279
|
};
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Override the default edit UI to include new inspector controls for
|
|
298
|
-
* all the custom styles configs.
|
|
299
|
-
*
|
|
300
|
-
* @param {Function} BlockEdit Original component.
|
|
301
|
-
*
|
|
302
|
-
* @return {Function} Wrapped component.
|
|
303
|
-
*/
|
|
304
|
-
export const withBlockStyleControls = createHigherOrderComponent(BlockEdit => props => {
|
|
305
|
-
if (!hasStyleSupport(props.name)) {
|
|
306
|
-
return createElement(BlockEdit, {
|
|
307
|
-
key: "edit",
|
|
308
|
-
...props
|
|
309
|
-
});
|
|
280
|
+
if (blockEditingMode !== 'default') {
|
|
281
|
+
return null;
|
|
310
282
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
return createElement(Fragment, null, shouldDisplayControls && blockEditingMode === 'default' && createElement(Fragment, null, createElement(ColorEdit, {
|
|
314
|
-
...props
|
|
283
|
+
return createElement(Fragment, null, createElement(ColorEdit, {
|
|
284
|
+
...passedProps
|
|
315
285
|
}), createElement(BackgroundImagePanel, {
|
|
316
|
-
...
|
|
286
|
+
...passedProps
|
|
317
287
|
}), createElement(TypographyPanel, {
|
|
318
|
-
...
|
|
288
|
+
...passedProps
|
|
319
289
|
}), createElement(BorderPanel, {
|
|
320
|
-
...
|
|
290
|
+
...passedProps
|
|
321
291
|
}), createElement(DimensionsPanel, {
|
|
322
|
-
...
|
|
323
|
-
})), createElement(BlockEdit, {
|
|
324
|
-
key: "edit",
|
|
325
|
-
...props
|
|
292
|
+
...passedProps
|
|
326
293
|
}));
|
|
327
|
-
}
|
|
294
|
+
}
|
|
295
|
+
export default {
|
|
296
|
+
edit: BlockStyleControls,
|
|
297
|
+
hasSupport: hasStyleSupport,
|
|
298
|
+
attributeKeys: ['style'],
|
|
299
|
+
useBlockProps
|
|
300
|
+
};
|
|
328
301
|
|
|
329
302
|
// Defines which element types are supported, including their hover styles or
|
|
330
303
|
// any other elements that have been included under a single element type
|
|
@@ -338,21 +311,17 @@ const elementTypes = [{
|
|
|
338
311
|
elementType: 'heading',
|
|
339
312
|
elements: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
|
|
340
313
|
}];
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
* @return {Function} Wrapped component
|
|
347
|
-
*/
|
|
348
|
-
const withElementsStyles = createHigherOrderComponent(BlockListBlock => props => {
|
|
349
|
-
const blockElementsContainerIdentifier = `wp-elements-${useInstanceId(BlockListBlock)}`;
|
|
314
|
+
function useBlockProps({
|
|
315
|
+
name,
|
|
316
|
+
style
|
|
317
|
+
}) {
|
|
318
|
+
const blockElementsContainerIdentifier = `wp-elements-${useInstanceId(useBlockProps)}`;
|
|
350
319
|
|
|
351
320
|
// The .editor-styles-wrapper selector is required on elements styles. As it is
|
|
352
321
|
// added to all other editor styles, not providing it causes reset and global
|
|
353
322
|
// styles to override element styles because of higher specificity.
|
|
354
323
|
const baseElementSelector = `.editor-styles-wrapper .${blockElementsContainerIdentifier}`;
|
|
355
|
-
const blockElementStyles =
|
|
324
|
+
const blockElementStyles = style?.elements;
|
|
356
325
|
const styles = useMemo(() => {
|
|
357
326
|
if (!blockElementStyles) {
|
|
358
327
|
return;
|
|
@@ -363,7 +332,7 @@ const withElementsStyles = createHigherOrderComponent(BlockListBlock => props =>
|
|
|
363
332
|
pseudo,
|
|
364
333
|
elements
|
|
365
334
|
}) => {
|
|
366
|
-
const skipSerialization = shouldSkipSerialization(
|
|
335
|
+
const skipSerialization = shouldSkipSerialization(name, COLOR_SUPPORT_KEY, elementType);
|
|
367
336
|
if (skipSerialization) {
|
|
368
337
|
return;
|
|
369
338
|
}
|
|
@@ -400,18 +369,16 @@ const withElementsStyles = createHigherOrderComponent(BlockListBlock => props =>
|
|
|
400
369
|
}
|
|
401
370
|
});
|
|
402
371
|
return elementCSSRules.length > 0 ? elementCSSRules.join('') : undefined;
|
|
403
|
-
}, [baseElementSelector, blockElementStyles,
|
|
372
|
+
}, [baseElementSelector, blockElementStyles, name]);
|
|
404
373
|
useStyleOverride({
|
|
405
374
|
css: styles
|
|
406
375
|
});
|
|
407
|
-
return
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
},
|
|
376
|
+
return addSaveProps({
|
|
377
|
+
className: blockElementsContainerIdentifier
|
|
378
|
+
}, name, {
|
|
379
|
+
style
|
|
380
|
+
}, skipSerializationPathsEdit);
|
|
381
|
+
}
|
|
412
382
|
addFilter('blocks.registerBlockType', 'core/style/addAttribute', addAttribute);
|
|
413
383
|
addFilter('blocks.getSaveContent.extraProps', 'core/style/addSaveProps', addSaveProps);
|
|
414
|
-
addFilter('blocks.registerBlockType', 'core/style/addEditProps', addEditProps);
|
|
415
|
-
addFilter('editor.BlockEdit', 'core/style/with-block-controls', withBlockStyleControls);
|
|
416
|
-
addFilter('editor.BlockListBlock', 'core/editor/with-elements-styles', withElementsStyles);
|
|
417
384
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["classnames","useMemo","addFilter","getBlockSupport","hasBlockSupport","__EXPERIMENTAL_ELEMENTS","ELEMENTS","createHigherOrderComponent","useInstanceId","getCSSRules","compileCSS","BACKGROUND_SUPPORT_KEY","BackgroundImagePanel","BORDER_SUPPORT_KEY","BorderPanel","COLOR_SUPPORT_KEY","ColorEdit","TypographyPanel","TYPOGRAPHY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEYS","DIMENSIONS_SUPPORT_KEY","SPACING_SUPPORT_KEY","DimensionsPanel","useDisplayBlockControls","shouldSkipSerialization","useStyleOverride","scopeSelector","useBlockEditingMode","styleSupportKeys","hasStyleSupport","nameOrType","some","key","getInlineStyles","styles","output","forEach","rule","value","addAttribute","settings","attributes","style","Object","assign","type","skipSerializationPathsEdit","skipSerializationPathsSave","skipSerializationPathsSaveChecks","renamedFeatures","gradients","omitStyle","paths","preserveReference","newStyle","JSON","parse","stringify","Array","isArray","path","split","length","firstSubpath","restPath","addSaveProps","props","blockType","skipPaths","entries","indicator","skipSerialization","featureName","feature","addEditProps","existingGetEditWrapperProps","getEditWrapperProps","withBlockStyleControls","BlockEdit","name","createElement","shouldDisplayControls","blockEditingMode","Fragment","elementTypes","elementType","pseudo","elements","withElementsStyles","BlockListBlock","blockElementsContainerIdentifier","baseElementSelector","blockElementStyles","elementCSSRules","elementStyles","selector","push","pseudoSelector","element","join","undefined","css","className"],"sources":["@wordpress/block-editor/src/hooks/style.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\thasBlockSupport,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n} from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { getCSSRules, compileCSS } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { BACKGROUND_SUPPORT_KEY, BackgroundImagePanel } from './background';\nimport { BORDER_SUPPORT_KEY, BorderPanel } from './border';\nimport { COLOR_SUPPORT_KEY, ColorEdit } from './color';\nimport {\n\tTypographyPanel,\n\tTYPOGRAPHY_SUPPORT_KEY,\n\tTYPOGRAPHY_SUPPORT_KEYS,\n} from './typography';\nimport {\n\tDIMENSIONS_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n\tDimensionsPanel,\n} from './dimensions';\nimport useDisplayBlockControls from '../components/use-display-block-controls';\nimport { shouldSkipSerialization, useStyleOverride } from './utils';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\nconst styleSupportKeys = [\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tDIMENSIONS_SUPPORT_KEY,\n\tBACKGROUND_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n];\n\nconst hasStyleSupport = ( nameOrType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( nameOrType, key ) );\n\n/**\n * Returns the inline styles to add depending on the style object\n *\n * @param {Object} styles Styles configuration.\n *\n * @return {Object} Flattened CSS variables declaration.\n */\nexport function getInlineStyles( styles = {} ) {\n\tconst output = {};\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tgetCSSRules( styles ).forEach( ( rule ) => {\n\t\toutput[ rule.key ] = rule.value;\n\t} );\n\n\treturn output;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `style` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttribute( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsEdit = {\n\t[ `${ BORDER_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [ 'border' ],\n\t[ `${ COLOR_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tCOLOR_SUPPORT_KEY,\n\t],\n\t[ `${ TYPOGRAPHY_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t],\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t],\n\t[ `${ SPACING_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tSPACING_SUPPORT_KEY,\n\t],\n};\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * Extends the Edit skip paths to enable skipping additional paths in just\n * the Save component. This allows a block support to be serialized within the\n * editor, while using an alternate approach, such as server-side rendering, when\n * the support is saved.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsSave = {\n\t...skipSerializationPathsEdit,\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: [ BACKGROUND_SUPPORT_KEY ], // Skip serialization of background support in save mode.\n};\n\nconst skipSerializationPathsSaveChecks = {\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: true,\n};\n\n/**\n * A dictionary used to normalize feature names between support flags, style\n * object properties and __experimentSkipSerialization configuration arrays.\n *\n * This allows not having to provide a migration for a support flag and possible\n * backwards compatibility bridges, while still achieving consistency between\n * the support flag and the skip serialization array.\n *\n * @constant\n * @type {Record<string, string>}\n */\nconst renamedFeatures = { gradients: 'gradient' };\n\n/**\n * A utility function used to remove one or more paths from a style object.\n * Works in a way similar to Lodash's `omit()`. See unit tests and examples below.\n *\n * It supports a single string path:\n *\n * ```\n * omitStyle( { color: 'red' }, 'color' ); // {}\n * ```\n *\n * or an array of paths:\n *\n * ```\n * omitStyle( { color: 'red', background: '#fff' }, [ 'color', 'background' ] ); // {}\n * ```\n *\n * It also allows you to specify paths at multiple levels in a string.\n *\n * ```\n * omitStyle( { typography: { textDecoration: 'underline' } }, 'typography.textDecoration' ); // {}\n * ```\n *\n * You can remove multiple paths at the same time:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t'typography.textDecoration',\n * \t\t\t'typography.textTransform',\n *\t\t]\n * );\n * // {}\n * ```\n *\n * You can also specify nested paths as arrays:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'typography', 'textDecoration' ],\n * \t\t\t[ 'typography', 'textTransform' ],\n *\t\t]\n * );\n * // {}\n * ```\n *\n * With regards to nesting of styles, infinite depth is supported:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\tborder: {\n * \t\t\t\tradius: {\n * \t\t\t\t\ttopLeft: '10px',\n * \t\t\t\t\ttopRight: '0.5rem',\n * \t\t\t\t}\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'border', 'radius', 'topRight' ],\n *\t\t]\n * );\n * // { border: { radius: { topLeft: '10px' } } }\n * ```\n *\n * The third argument, `preserveReference`, defines how to treat the input style object.\n * It is mostly necessary to properly handle mutation when recursively handling the style object.\n * Defaulting to `false`, this will always create a new object, avoiding to mutate `style`.\n * However, when recursing, we change that value to `true` in order to work with a single copy\n * of the original style object.\n *\n * @see https://lodash.com/docs/4.17.15#omit\n *\n * @param {Object} style Styles object.\n * @param {Array|string} paths Paths to remove.\n * @param {boolean} preserveReference True to mutate the `style` object, false otherwise.\n * @return {Object} Styles object with the specified paths removed.\n */\nexport function omitStyle( style, paths, preserveReference = false ) {\n\tif ( ! style ) {\n\t\treturn style;\n\t}\n\n\tlet newStyle = style;\n\tif ( ! preserveReference ) {\n\t\tnewStyle = JSON.parse( JSON.stringify( style ) );\n\t}\n\n\tif ( ! Array.isArray( paths ) ) {\n\t\tpaths = [ paths ];\n\t}\n\n\tpaths.forEach( ( path ) => {\n\t\tif ( ! Array.isArray( path ) ) {\n\t\t\tpath = path.split( '.' );\n\t\t}\n\n\t\tif ( path.length > 1 ) {\n\t\t\tconst [ firstSubpath, ...restPath ] = path;\n\t\t\tomitStyle( newStyle[ firstSubpath ], [ restPath ], true );\n\t\t} else if ( path.length === 1 ) {\n\t\t\tdelete newStyle[ path[ 0 ] ];\n\t\t}\n\t} );\n\n\treturn newStyle;\n}\n\n/**\n * Override props assigned to save component to inject the CSS variables definition.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n * @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps(\n\tprops,\n\tblockType,\n\tattributes,\n\tskipPaths = skipSerializationPathsSave\n) {\n\tif ( ! hasStyleSupport( blockType ) ) {\n\t\treturn props;\n\t}\n\n\tlet { style } = attributes;\n\tObject.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {\n\t\tconst skipSerialization =\n\t\t\tskipSerializationPathsSaveChecks[ indicator ] ||\n\t\t\tgetBlockSupport( blockType, indicator );\n\n\t\tif ( skipSerialization === true ) {\n\t\t\tstyle = omitStyle( style, path );\n\t\t}\n\n\t\tif ( Array.isArray( skipSerialization ) ) {\n\t\t\tskipSerialization.forEach( ( featureName ) => {\n\t\t\t\tconst feature = renamedFeatures[ featureName ] || featureName;\n\t\t\t\tstyle = omitStyle( style, [ [ ...path, feature ] ] );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tprops.style = {\n\t\t...getInlineStyles( style ),\n\t\t...props.style,\n\t};\n\n\treturn props;\n}\n\n/**\n * Filters registered block settings to extend the block edit wrapper\n * to apply the desired styles and classnames properly.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object}.Filtered block settings.\n */\nexport function addEditProps( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\tconst existingGetEditWrapperProps = settings.getEditWrapperProps;\n\tsettings.getEditWrapperProps = ( attributes ) => {\n\t\tlet props = {};\n\t\tif ( existingGetEditWrapperProps ) {\n\t\t\tprops = existingGetEditWrapperProps( attributes );\n\t\t}\n\n\t\treturn addSaveProps(\n\t\t\tprops,\n\t\t\tsettings,\n\t\t\tattributes,\n\t\t\tskipSerializationPathsEdit\n\t\t);\n\t};\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include new inspector controls for\n * all the custom styles configs.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withBlockStyleControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tif ( ! hasStyleSupport( props.name ) ) {\n\t\t\treturn <BlockEdit key=\"edit\" { ...props } />;\n\t\t}\n\n\t\tconst shouldDisplayControls = useDisplayBlockControls();\n\t\tconst blockEditingMode = useBlockEditingMode();\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ shouldDisplayControls && blockEditingMode === 'default' && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ColorEdit { ...props } />\n\t\t\t\t\t\t<BackgroundImagePanel { ...props } />\n\t\t\t\t\t\t<TypographyPanel { ...props } />\n\t\t\t\t\t\t<BorderPanel { ...props } />\n\t\t\t\t\t\t<DimensionsPanel { ...props } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<BlockEdit key=\"edit\" { ...props } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withBlockStyleControls'\n);\n\n// Defines which element types are supported, including their hover styles or\n// any other elements that have been included under a single element type\n// e.g. heading and h1-h6.\nconst elementTypes = [\n\t{ elementType: 'button' },\n\t{ elementType: 'link', pseudo: [ ':hover' ] },\n\t{\n\t\telementType: 'heading',\n\t\telements: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ],\n\t},\n];\n\n/**\n * Override the default block element to include elements styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nconst withElementsStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(\n\t\t\tBlockListBlock\n\t\t) }`;\n\n\t\t// The .editor-styles-wrapper selector is required on elements styles. As it is\n\t\t// added to all other editor styles, not providing it causes reset and global\n\t\t// styles to override element styles because of higher specificity.\n\t\tconst baseElementSelector = `.editor-styles-wrapper .${ blockElementsContainerIdentifier }`;\n\t\tconst blockElementStyles = props.attributes.style?.elements;\n\n\t\tconst styles = useMemo( () => {\n\t\t\tif ( ! blockElementStyles ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst elementCSSRules = [];\n\n\t\t\telementTypes.forEach( ( { elementType, pseudo, elements } ) => {\n\t\t\t\tconst skipSerialization = shouldSkipSerialization(\n\t\t\t\t\tprops.name,\n\t\t\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t\t\telementType\n\t\t\t\t);\n\n\t\t\t\tif ( skipSerialization ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst elementStyles = blockElementStyles?.[ elementType ];\n\n\t\t\t\t// Process primary element type styles.\n\t\t\t\tif ( elementStyles ) {\n\t\t\t\t\tconst selector = scopeSelector(\n\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\tELEMENTS[ elementType ]\n\t\t\t\t\t);\n\n\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\tcompileCSS( elementStyles, { selector } )\n\t\t\t\t\t);\n\n\t\t\t\t\t// Process any interactive states for the element type.\n\t\t\t\t\tif ( pseudo ) {\n\t\t\t\t\t\tpseudo.forEach( ( pseudoSelector ) => {\n\t\t\t\t\t\t\tif ( elementStyles[ pseudoSelector ] ) {\n\t\t\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\t\t\tcompileCSS(\n\t\t\t\t\t\t\t\t\t\telementStyles[ pseudoSelector ],\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\t\t\t\t`${ ELEMENTS[ elementType ] }${ pseudoSelector }`\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process related elements e.g. h1-h6 for headings\n\t\t\t\tif ( elements ) {\n\t\t\t\t\telements.forEach( ( element ) => {\n\t\t\t\t\t\tif ( blockElementStyles[ element ] ) {\n\t\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\t\tcompileCSS( blockElementStyles[ element ], {\n\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\t\tELEMENTS[ element ]\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn elementCSSRules.length > 0\n\t\t\t\t? elementCSSRules.join( '' )\n\t\t\t\t: undefined;\n\t\t}, [ baseElementSelector, blockElementStyles, props.name ] );\n\n\t\tuseStyleOverride( { css: styles } );\n\n\t\treturn (\n\t\t\t<BlockListBlock\n\t\t\t\t{ ...props }\n\t\t\t\tclassName={\n\t\t\t\t\tprops.attributes.style?.elements\n\t\t\t\t\t\t? classnames(\n\t\t\t\t\t\t\t\tprops.className,\n\t\t\t\t\t\t\t\tblockElementsContainerIdentifier\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: props.className\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t},\n\t'withElementsStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addAttribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/style/addSaveProps',\n\taddSaveProps\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addEditProps',\n\taddEditProps\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/style/with-block-controls',\n\twithBlockStyleControls\n);\n\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/with-elements-styles',\n\twithElementsStyles\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useMemo","addFilter","getBlockSupport","hasBlockSupport","__EXPERIMENTAL_ELEMENTS","ELEMENTS","useInstanceId","getCSSRules","compileCSS","BACKGROUND_SUPPORT_KEY","BackgroundImagePanel","BORDER_SUPPORT_KEY","BorderPanel","COLOR_SUPPORT_KEY","ColorEdit","TypographyPanel","TYPOGRAPHY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEYS","DIMENSIONS_SUPPORT_KEY","SPACING_SUPPORT_KEY","DimensionsPanel","shouldSkipSerialization","useStyleOverride","useBlockSettings","scopeSelector","useBlockEditingMode","styleSupportKeys","hasStyleSupport","nameOrType","some","key","getInlineStyles","styles","output","forEach","rule","value","addAttribute","settings","attributes","style","Object","assign","type","skipSerializationPathsEdit","skipSerializationPathsSave","skipSerializationPathsSaveChecks","renamedFeatures","gradients","omitStyle","paths","preserveReference","newStyle","JSON","parse","stringify","Array","isArray","path","split","length","firstSubpath","restPath","addSaveProps","props","blockNameOrType","skipPaths","entries","indicator","skipSerialization","featureName","feature","BlockStyleControls","clientId","name","setAttributes","__unstableParentLayout","blockEditingMode","passedProps","createElement","Fragment","edit","hasSupport","attributeKeys","useBlockProps","elementTypes","elementType","pseudo","elements","blockElementsContainerIdentifier","baseElementSelector","blockElementStyles","elementCSSRules","elementStyles","selector","push","pseudoSelector","element","join","undefined","css","className"],"sources":["@wordpress/block-editor/src/hooks/style.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\thasBlockSupport,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { getCSSRules, compileCSS } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { BACKGROUND_SUPPORT_KEY, BackgroundImagePanel } from './background';\nimport { BORDER_SUPPORT_KEY, BorderPanel } from './border';\nimport { COLOR_SUPPORT_KEY, ColorEdit } from './color';\nimport {\n\tTypographyPanel,\n\tTYPOGRAPHY_SUPPORT_KEY,\n\tTYPOGRAPHY_SUPPORT_KEYS,\n} from './typography';\nimport {\n\tDIMENSIONS_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n\tDimensionsPanel,\n} from './dimensions';\nimport {\n\tshouldSkipSerialization,\n\tuseStyleOverride,\n\tuseBlockSettings,\n} from './utils';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\nconst styleSupportKeys = [\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tDIMENSIONS_SUPPORT_KEY,\n\tBACKGROUND_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n];\n\nconst hasStyleSupport = ( nameOrType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( nameOrType, key ) );\n\n/**\n * Returns the inline styles to add depending on the style object\n *\n * @param {Object} styles Styles configuration.\n *\n * @return {Object} Flattened CSS variables declaration.\n */\nexport function getInlineStyles( styles = {} ) {\n\tconst output = {};\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tgetCSSRules( styles ).forEach( ( rule ) => {\n\t\toutput[ rule.key ] = rule.value;\n\t} );\n\n\treturn output;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `style` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttribute( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsEdit = {\n\t[ `${ BORDER_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [ 'border' ],\n\t[ `${ COLOR_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tCOLOR_SUPPORT_KEY,\n\t],\n\t[ `${ TYPOGRAPHY_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t],\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t],\n\t[ `${ SPACING_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tSPACING_SUPPORT_KEY,\n\t],\n};\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * Extends the Edit skip paths to enable skipping additional paths in just\n * the Save component. This allows a block support to be serialized within the\n * editor, while using an alternate approach, such as server-side rendering, when\n * the support is saved.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsSave = {\n\t...skipSerializationPathsEdit,\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: [ BACKGROUND_SUPPORT_KEY ], // Skip serialization of background support in save mode.\n};\n\nconst skipSerializationPathsSaveChecks = {\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: true,\n};\n\n/**\n * A dictionary used to normalize feature names between support flags, style\n * object properties and __experimentSkipSerialization configuration arrays.\n *\n * This allows not having to provide a migration for a support flag and possible\n * backwards compatibility bridges, while still achieving consistency between\n * the support flag and the skip serialization array.\n *\n * @constant\n * @type {Record<string, string>}\n */\nconst renamedFeatures = { gradients: 'gradient' };\n\n/**\n * A utility function used to remove one or more paths from a style object.\n * Works in a way similar to Lodash's `omit()`. See unit tests and examples below.\n *\n * It supports a single string path:\n *\n * ```\n * omitStyle( { color: 'red' }, 'color' ); // {}\n * ```\n *\n * or an array of paths:\n *\n * ```\n * omitStyle( { color: 'red', background: '#fff' }, [ 'color', 'background' ] ); // {}\n * ```\n *\n * It also allows you to specify paths at multiple levels in a string.\n *\n * ```\n * omitStyle( { typography: { textDecoration: 'underline' } }, 'typography.textDecoration' ); // {}\n * ```\n *\n * You can remove multiple paths at the same time:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t'typography.textDecoration',\n * \t\t\t'typography.textTransform',\n *\t\t]\n * );\n * // {}\n * ```\n *\n * You can also specify nested paths as arrays:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'typography', 'textDecoration' ],\n * \t\t\t[ 'typography', 'textTransform' ],\n *\t\t]\n * );\n * // {}\n * ```\n *\n * With regards to nesting of styles, infinite depth is supported:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\tborder: {\n * \t\t\t\tradius: {\n * \t\t\t\t\ttopLeft: '10px',\n * \t\t\t\t\ttopRight: '0.5rem',\n * \t\t\t\t}\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'border', 'radius', 'topRight' ],\n *\t\t]\n * );\n * // { border: { radius: { topLeft: '10px' } } }\n * ```\n *\n * The third argument, `preserveReference`, defines how to treat the input style object.\n * It is mostly necessary to properly handle mutation when recursively handling the style object.\n * Defaulting to `false`, this will always create a new object, avoiding to mutate `style`.\n * However, when recursing, we change that value to `true` in order to work with a single copy\n * of the original style object.\n *\n * @see https://lodash.com/docs/4.17.15#omit\n *\n * @param {Object} style Styles object.\n * @param {Array|string} paths Paths to remove.\n * @param {boolean} preserveReference True to mutate the `style` object, false otherwise.\n * @return {Object} Styles object with the specified paths removed.\n */\nexport function omitStyle( style, paths, preserveReference = false ) {\n\tif ( ! style ) {\n\t\treturn style;\n\t}\n\n\tlet newStyle = style;\n\tif ( ! preserveReference ) {\n\t\tnewStyle = JSON.parse( JSON.stringify( style ) );\n\t}\n\n\tif ( ! Array.isArray( paths ) ) {\n\t\tpaths = [ paths ];\n\t}\n\n\tpaths.forEach( ( path ) => {\n\t\tif ( ! Array.isArray( path ) ) {\n\t\t\tpath = path.split( '.' );\n\t\t}\n\n\t\tif ( path.length > 1 ) {\n\t\t\tconst [ firstSubpath, ...restPath ] = path;\n\t\t\tomitStyle( newStyle[ firstSubpath ], [ restPath ], true );\n\t\t} else if ( path.length === 1 ) {\n\t\t\tdelete newStyle[ path[ 0 ] ];\n\t\t}\n\t} );\n\n\treturn newStyle;\n}\n\n/**\n * Override props assigned to save component to inject the CSS variables definition.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n * @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps(\n\tprops,\n\tblockNameOrType,\n\tattributes,\n\tskipPaths = skipSerializationPathsSave\n) {\n\tif ( ! hasStyleSupport( blockNameOrType ) ) {\n\t\treturn props;\n\t}\n\n\tlet { style } = attributes;\n\tObject.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {\n\t\tconst skipSerialization =\n\t\t\tskipSerializationPathsSaveChecks[ indicator ] ||\n\t\t\tgetBlockSupport( blockNameOrType, indicator );\n\n\t\tif ( skipSerialization === true ) {\n\t\t\tstyle = omitStyle( style, path );\n\t\t}\n\n\t\tif ( Array.isArray( skipSerialization ) ) {\n\t\t\tskipSerialization.forEach( ( featureName ) => {\n\t\t\t\tconst feature = renamedFeatures[ featureName ] || featureName;\n\t\t\t\tstyle = omitStyle( style, [ [ ...path, feature ] ] );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tprops.style = {\n\t\t...getInlineStyles( style ),\n\t\t...props.style,\n\t};\n\n\treturn props;\n}\n\nfunction BlockStyleControls( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\t__unstableParentLayout,\n} ) {\n\tconst settings = useBlockSettings( name, __unstableParentLayout );\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst passedProps = {\n\t\tclientId,\n\t\tname,\n\t\tsetAttributes,\n\t\tsettings,\n\t};\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<>\n\t\t\t<ColorEdit { ...passedProps } />\n\t\t\t<BackgroundImagePanel { ...passedProps } />\n\t\t\t<TypographyPanel { ...passedProps } />\n\t\t\t<BorderPanel { ...passedProps } />\n\t\t\t<DimensionsPanel { ...passedProps } />\n\t\t</>\n\t);\n}\n\nexport default {\n\tedit: BlockStyleControls,\n\thasSupport: hasStyleSupport,\n\tattributeKeys: [ 'style' ],\n\tuseBlockProps,\n};\n\n// Defines which element types are supported, including their hover styles or\n// any other elements that have been included under a single element type\n// e.g. heading and h1-h6.\nconst elementTypes = [\n\t{ elementType: 'button' },\n\t{ elementType: 'link', pseudo: [ ':hover' ] },\n\t{\n\t\telementType: 'heading',\n\t\telements: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ],\n\t},\n];\n\nfunction useBlockProps( { name, style } ) {\n\tconst blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(\n\t\tuseBlockProps\n\t) }`;\n\n\t// The .editor-styles-wrapper selector is required on elements styles. As it is\n\t// added to all other editor styles, not providing it causes reset and global\n\t// styles to override element styles because of higher specificity.\n\tconst baseElementSelector = `.editor-styles-wrapper .${ blockElementsContainerIdentifier }`;\n\tconst blockElementStyles = style?.elements;\n\n\tconst styles = useMemo( () => {\n\t\tif ( ! blockElementStyles ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementCSSRules = [];\n\n\t\telementTypes.forEach( ( { elementType, pseudo, elements } ) => {\n\t\t\tconst skipSerialization = shouldSkipSerialization(\n\t\t\t\tname,\n\t\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t\telementType\n\t\t\t);\n\n\t\t\tif ( skipSerialization ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst elementStyles = blockElementStyles?.[ elementType ];\n\n\t\t\t// Process primary element type styles.\n\t\t\tif ( elementStyles ) {\n\t\t\t\tconst selector = scopeSelector(\n\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\tELEMENTS[ elementType ]\n\t\t\t\t);\n\n\t\t\t\telementCSSRules.push(\n\t\t\t\t\tcompileCSS( elementStyles, { selector } )\n\t\t\t\t);\n\n\t\t\t\t// Process any interactive states for the element type.\n\t\t\t\tif ( pseudo ) {\n\t\t\t\t\tpseudo.forEach( ( pseudoSelector ) => {\n\t\t\t\t\t\tif ( elementStyles[ pseudoSelector ] ) {\n\t\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\t\tcompileCSS( elementStyles[ pseudoSelector ], {\n\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\t\t`${ ELEMENTS[ elementType ] }${ pseudoSelector }`\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Process related elements e.g. h1-h6 for headings\n\t\t\tif ( elements ) {\n\t\t\t\telements.forEach( ( element ) => {\n\t\t\t\t\tif ( blockElementStyles[ element ] ) {\n\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\tcompileCSS( blockElementStyles[ element ], {\n\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\tELEMENTS[ element ]\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn elementCSSRules.length > 0\n\t\t\t? elementCSSRules.join( '' )\n\t\t\t: undefined;\n\t}, [ baseElementSelector, blockElementStyles, name ] );\n\n\tuseStyleOverride( { css: styles } );\n\n\treturn addSaveProps(\n\t\t{ className: blockElementsContainerIdentifier },\n\t\tname,\n\t\t{ style },\n\t\tskipSerializationPathsEdit\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addAttribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/style/addSaveProps',\n\taddSaveProps\n);\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SACCC,eAAe,EACfC,eAAe,EACfC,uBAAuB,IAAIC,QAAQ,QAC7B,mBAAmB;AAC1B,SAASC,aAAa,QAAQ,oBAAoB;AAClD,SAASC,WAAW,EAAEC,UAAU,QAAQ,yBAAyB;;AAEjE;AACA;AACA;AACA,SAASC,sBAAsB,EAAEC,oBAAoB,QAAQ,cAAc;AAC3E,SAASC,kBAAkB,EAAEC,WAAW,QAAQ,UAAU;AAC1D,SAASC,iBAAiB,EAAEC,SAAS,QAAQ,SAAS;AACtD,SACCC,eAAe,EACfC,sBAAsB,EACtBC,uBAAuB,QACjB,cAAc;AACrB,SACCC,sBAAsB,EACtBC,mBAAmB,EACnBC,eAAe,QACT,cAAc;AACrB,SACCC,uBAAuB,EACvBC,gBAAgB,EAChBC,gBAAgB,QACV,SAAS;AAChB,SAASC,aAAa,QAAQ,mCAAmC;AACjE,SAASC,mBAAmB,QAAQ,kCAAkC;AAEtE,MAAMC,gBAAgB,GAAG,CACxB,GAAGT,uBAAuB,EAC1BN,kBAAkB,EAClBE,iBAAiB,EACjBK,sBAAsB,EACtBT,sBAAsB,EACtBU,mBAAmB,CACnB;AAED,MAAMQ,eAAe,GAAKC,UAAU,IACnCF,gBAAgB,CAACG,IAAI,CAAIC,GAAG,IAAM3B,eAAe,CAAEyB,UAAU,EAAEE,GAAI,CAAE,CAAC;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAEC,MAAM,GAAG,CAAC,CAAC,EAAG;EAC9C,MAAMC,MAAM,GAAG,CAAC,CAAC;EACjB;EACA;EACA1B,WAAW,CAAEyB,MAAO,CAAC,CAACE,OAAO,CAAIC,IAAI,IAAM;IAC1CF,MAAM,CAAEE,IAAI,CAACL,GAAG,CAAE,GAAGK,IAAI,CAACC,KAAK;EAChC,CAAE,CAAC;EAEH,OAAOH,MAAM;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASI,YAAYA,CAAEC,QAAQ,EAAG;EACjC,IAAK,CAAEX,eAAe,CAAEW,QAAS,CAAC,EAAG;IACpC,OAAOA,QAAQ;EAChB;;EAEA;EACA,IAAK,CAAEA,QAAQ,CAACC,UAAU,CAACC,KAAK,EAAG;IAClCC,MAAM,CAACC,MAAM,CAAEJ,QAAQ,CAACC,UAAU,EAAE;MACnCC,KAAK,EAAE;QACNG,IAAI,EAAE;MACP;IACD,CAAE,CAAC;EACJ;EAEA,OAAOL,QAAQ;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,0BAA0B,GAAG;EAClC,CAAG,GAAGjC,kBAAoB,kCAAiC,GAAI,CAAE,QAAQ,CAAE;EAC3E,CAAG,GAAGE,iBAAmB,kCAAiC,GAAI,CAC7DA,iBAAiB,CACjB;EACD,CAAG,GAAGG,sBAAwB,kCAAiC,GAAI,CAClEA,sBAAsB,CACtB;EACD,CAAG,GAAGE,sBAAwB,kCAAiC,GAAI,CAClEA,sBAAsB,CACtB;EACD,CAAG,GAAGC,mBAAqB,kCAAiC,GAAI,CAC/DA,mBAAmB;AAErB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM0B,0BAA0B,GAAG;EAClC,GAAGD,0BAA0B;EAC7B,CAAG,GAAGnC,sBAAwB,EAAC,GAAI,CAAEA,sBAAsB,CAAE,CAAE;AAChE,CAAC;;AAED,MAAMqC,gCAAgC,GAAG;EACxC,CAAG,GAAGrC,sBAAwB,EAAC,GAAI;AACpC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMsC,eAAe,GAAG;EAAEC,SAAS,EAAE;AAAW,CAAC;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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"}
|
|
@@ -4,6 +4,8 @@ import { createElement } from "react";
|
|
|
4
4
|
*/
|
|
5
5
|
import { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';
|
|
6
6
|
import { useMemo, useCallback } from '@wordpress/element';
|
|
7
|
+
import { useSelect } from '@wordpress/data';
|
|
8
|
+
import { pure } from '@wordpress/compose';
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Internal dependencies
|
|
@@ -13,7 +15,8 @@ import { default as StylesTypographyPanel, useHasTypographyPanel } from '../comp
|
|
|
13
15
|
import { LINE_HEIGHT_SUPPORT_KEY } from './line-height';
|
|
14
16
|
import { FONT_FAMILY_SUPPORT_KEY } from './font-family';
|
|
15
17
|
import { FONT_SIZE_SUPPORT_KEY } from './font-size';
|
|
16
|
-
import { cleanEmptyObject
|
|
18
|
+
import { cleanEmptyObject } from './utils';
|
|
19
|
+
import { store as blockEditorStore } from '../store';
|
|
17
20
|
function omit(object, keys) {
|
|
18
21
|
return Object.fromEntries(Object.entries(object).filter(([key]) => !keys.includes(key)));
|
|
19
22
|
}
|
|
@@ -71,22 +74,35 @@ function TypographyInspectorControl({
|
|
|
71
74
|
resetAllFilter: attributesResetAllFilter
|
|
72
75
|
}, children);
|
|
73
76
|
}
|
|
74
|
-
|
|
77
|
+
function TypographyPanelPure({
|
|
75
78
|
clientId,
|
|
76
79
|
name,
|
|
77
|
-
attributes,
|
|
78
80
|
setAttributes,
|
|
79
|
-
|
|
81
|
+
settings
|
|
80
82
|
}) {
|
|
81
|
-
|
|
83
|
+
function selector(select) {
|
|
84
|
+
const {
|
|
85
|
+
style,
|
|
86
|
+
fontFamily,
|
|
87
|
+
fontSize
|
|
88
|
+
} = select(blockEditorStore).getBlockAttributes(clientId) || {};
|
|
89
|
+
return {
|
|
90
|
+
style,
|
|
91
|
+
fontFamily,
|
|
92
|
+
fontSize
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const {
|
|
96
|
+
style,
|
|
97
|
+
fontFamily,
|
|
98
|
+
fontSize
|
|
99
|
+
} = useSelect(selector, [clientId]);
|
|
82
100
|
const isEnabled = useHasTypographyPanel(settings);
|
|
83
|
-
const value = useMemo(() => {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
89
|
-
}, [attributes.style, attributes.fontSize, attributes.fontFamily]);
|
|
101
|
+
const value = useMemo(() => attributesToStyle({
|
|
102
|
+
style,
|
|
103
|
+
fontFamily,
|
|
104
|
+
fontSize
|
|
105
|
+
}), [style, fontSize, fontFamily]);
|
|
90
106
|
const onChange = newStyle => {
|
|
91
107
|
setAttributes(styleToAttributes(newStyle));
|
|
92
108
|
};
|
|
@@ -103,6 +119,11 @@ export function TypographyPanel({
|
|
|
103
119
|
defaultControls: defaultControls
|
|
104
120
|
});
|
|
105
121
|
}
|
|
122
|
+
|
|
123
|
+
// We don't want block controls to re-render when typing inside a block. `pure`
|
|
124
|
+
// will prevent re-renders unless props change, so only pass the needed props
|
|
125
|
+
// and not the whole attributes object.
|
|
126
|
+
export const TypographyPanel = pure(TypographyPanelPure);
|
|
106
127
|
export const hasTypographySupport = blockName => {
|
|
107
128
|
return TYPOGRAPHY_SUPPORT_KEYS.some(key => hasBlockSupport(blockName, key));
|
|
108
129
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getBlockSupport","hasBlockSupport","useMemo","useCallback","InspectorControls","default","StylesTypographyPanel","useHasTypographyPanel","LINE_HEIGHT_SUPPORT_KEY","FONT_FAMILY_SUPPORT_KEY","FONT_SIZE_SUPPORT_KEY","cleanEmptyObject","useBlockSettings","omit","object","keys","Object","fromEntries","entries","filter","key","includes","LETTER_SPACING_SUPPORT_KEY","TEXT_TRANSFORM_SUPPORT_KEY","TEXT_DECORATION_SUPPORT_KEY","TEXT_COLUMNS_SUPPORT_KEY","FONT_STYLE_SUPPORT_KEY","FONT_WEIGHT_SUPPORT_KEY","WRITING_MODE_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEYS","styleToAttributes","style","updatedStyle","fontSizeValue","typography","fontSize","fontFamilyValue","fontFamily","fontSizeSlug","startsWith","substring","length","undefined","fontFamilySlug","attributesToStyle","attributes","TypographyInspectorControl","children","resetAllFilter","attributesResetAllFilter","existingStyle","createElement","group","TypographyPanel","clientId","name","setAttributes","__unstableParentLayout","settings","isEnabled","value","onChange","newStyle","defaultControls","as","panelId","hasTypographySupport","blockName","some"],"sources":["@wordpress/block-editor/src/hooks/typography.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useMemo, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tdefault as StylesTypographyPanel,\n\tuseHasTypographyPanel,\n} from '../components/global-styles/typography-panel';\n\nimport { LINE_HEIGHT_SUPPORT_KEY } from './line-height';\nimport { FONT_FAMILY_SUPPORT_KEY } from './font-family';\nimport { FONT_SIZE_SUPPORT_KEY } from './font-size';\nimport { cleanEmptyObject, useBlockSettings } from './utils';\n\nfunction omit( object, keys ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )\n\t);\n}\n\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\nexport const TYPOGRAPHY_SUPPORT_KEY = 'typography';\nexport const TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n];\n\nfunction styleToAttributes( style ) {\n\tconst updatedStyle = { ...omit( style, [ 'fontFamily' ] ) };\n\tconst fontSizeValue = style?.typography?.fontSize;\n\tconst fontFamilyValue = style?.typography?.fontFamily;\n\tconst fontSizeSlug = fontSizeValue?.startsWith( 'var:preset|font-size|' )\n\t\t? fontSizeValue.substring( 'var:preset|font-size|'.length )\n\t\t: undefined;\n\tconst fontFamilySlug = fontFamilyValue?.startsWith(\n\t\t'var:preset|font-family|'\n\t)\n\t\t? fontFamilyValue.substring( 'var:preset|font-family|'.length )\n\t\t: undefined;\n\tupdatedStyle.typography = {\n\t\t...omit( updatedStyle.typography, [ 'fontFamily' ] ),\n\t\tfontSize: fontSizeSlug ? undefined : fontSizeValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tfontFamily: fontFamilySlug,\n\t\tfontSize: fontSizeSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\ttypography: {\n\t\t\t...attributes.style?.typography,\n\t\t\tfontFamily: attributes.fontFamily\n\t\t\t\t? 'var:preset|font-family|' + attributes.fontFamily\n\t\t\t\t: undefined,\n\t\t\tfontSize: attributes.fontSize\n\t\t\t\t? 'var:preset|font-size|' + attributes.fontSize\n\t\t\t\t: attributes.style?.typography?.fontSize,\n\t\t},\n\t};\n}\n\nfunction TypographyInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"typography\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function TypographyPanel( {\n\tclientId,\n\tname,\n\tattributes,\n\tsetAttributes,\n\t__unstableParentLayout,\n} ) {\n\tconst settings = useBlockSettings( name, __unstableParentLayout );\n\tconst isEnabled = useHasTypographyPanel( settings );\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( {\n\t\t\tstyle: attributes.style,\n\t\t\tfontFamily: attributes.fontFamily,\n\t\t\tfontSize: attributes.fontSize,\n\t\t} );\n\t}, [ attributes.style, attributes.fontSize, attributes.fontFamily ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t<StylesTypographyPanel\n\t\t\tas={ TypographyInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t/>\n\t);\n}\n\nexport const hasTypographySupport = ( blockName ) => {\n\treturn TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>\n\t\thasBlockSupport( blockName, key )\n\t);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getBlockSupport","hasBlockSupport","useMemo","useCallback","useSelect","pure","InspectorControls","default","StylesTypographyPanel","useHasTypographyPanel","LINE_HEIGHT_SUPPORT_KEY","FONT_FAMILY_SUPPORT_KEY","FONT_SIZE_SUPPORT_KEY","cleanEmptyObject","store","blockEditorStore","omit","object","keys","Object","fromEntries","entries","filter","key","includes","LETTER_SPACING_SUPPORT_KEY","TEXT_TRANSFORM_SUPPORT_KEY","TEXT_DECORATION_SUPPORT_KEY","TEXT_COLUMNS_SUPPORT_KEY","FONT_STYLE_SUPPORT_KEY","FONT_WEIGHT_SUPPORT_KEY","WRITING_MODE_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEYS","styleToAttributes","style","updatedStyle","fontSizeValue","typography","fontSize","fontFamilyValue","fontFamily","fontSizeSlug","startsWith","substring","length","undefined","fontFamilySlug","attributesToStyle","attributes","TypographyInspectorControl","children","resetAllFilter","attributesResetAllFilter","existingStyle","createElement","group","TypographyPanelPure","clientId","name","setAttributes","settings","selector","select","getBlockAttributes","isEnabled","value","onChange","newStyle","defaultControls","as","panelId","TypographyPanel","hasTypographySupport","blockName","some"],"sources":["@wordpress/block-editor/src/hooks/typography.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useMemo, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { pure } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tdefault as StylesTypographyPanel,\n\tuseHasTypographyPanel,\n} from '../components/global-styles/typography-panel';\n\nimport { LINE_HEIGHT_SUPPORT_KEY } from './line-height';\nimport { FONT_FAMILY_SUPPORT_KEY } from './font-family';\nimport { FONT_SIZE_SUPPORT_KEY } from './font-size';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nfunction omit( object, keys ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )\n\t);\n}\n\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\nexport const TYPOGRAPHY_SUPPORT_KEY = 'typography';\nexport const TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n];\n\nfunction styleToAttributes( style ) {\n\tconst updatedStyle = { ...omit( style, [ 'fontFamily' ] ) };\n\tconst fontSizeValue = style?.typography?.fontSize;\n\tconst fontFamilyValue = style?.typography?.fontFamily;\n\tconst fontSizeSlug = fontSizeValue?.startsWith( 'var:preset|font-size|' )\n\t\t? fontSizeValue.substring( 'var:preset|font-size|'.length )\n\t\t: undefined;\n\tconst fontFamilySlug = fontFamilyValue?.startsWith(\n\t\t'var:preset|font-family|'\n\t)\n\t\t? fontFamilyValue.substring( 'var:preset|font-family|'.length )\n\t\t: undefined;\n\tupdatedStyle.typography = {\n\t\t...omit( updatedStyle.typography, [ 'fontFamily' ] ),\n\t\tfontSize: fontSizeSlug ? undefined : fontSizeValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tfontFamily: fontFamilySlug,\n\t\tfontSize: fontSizeSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\ttypography: {\n\t\t\t...attributes.style?.typography,\n\t\t\tfontFamily: attributes.fontFamily\n\t\t\t\t? 'var:preset|font-family|' + attributes.fontFamily\n\t\t\t\t: undefined,\n\t\t\tfontSize: attributes.fontSize\n\t\t\t\t? 'var:preset|font-size|' + attributes.fontSize\n\t\t\t\t: attributes.style?.typography?.fontSize,\n\t\t},\n\t};\n}\n\nfunction TypographyInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"typography\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nfunction TypographyPanelPure( { clientId, name, setAttributes, settings } ) {\n\tfunction selector( select ) {\n\t\tconst { style, fontFamily, fontSize } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, fontFamily, fontSize };\n\t}\n\tconst { style, fontFamily, fontSize } = useSelect( selector, [ clientId ] );\n\tconst isEnabled = useHasTypographyPanel( settings );\n\tconst value = useMemo(\n\t\t() => attributesToStyle( { style, fontFamily, fontSize } ),\n\t\t[ style, fontSize, fontFamily ]\n\t);\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t<StylesTypographyPanel\n\t\t\tas={ TypographyInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t/>\n\t);\n}\n\n// We don't want block controls to re-render when typing inside a block. `pure`\n// will prevent re-renders unless props change, so only pass the needed props\n// and not the whole attributes object.\nexport const TypographyPanel = pure( TypographyPanelPure );\n\nexport const hasTypographySupport = ( blockName ) => {\n\treturn TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>\n\t\thasBlockSupport( blockName, key )\n\t);\n};\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,eAAe,EAAEC,eAAe,QAAQ,mBAAmB;AACpE,SAASC,OAAO,EAAEC,WAAW,QAAQ,oBAAoB;AACzD,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,IAAI,QAAQ,oBAAoB;;AAEzC;AACA;AACA;AACA,OAAOC,iBAAiB,MAAM,kCAAkC;AAChE,SACCC,OAAO,IAAIC,qBAAqB,EAChCC,qBAAqB,QACf,8CAA8C;AAErD,SAASC,uBAAuB,QAAQ,eAAe;AACvD,SAASC,uBAAuB,QAAQ,eAAe;AACvD,SAASC,qBAAqB,QAAQ,aAAa;AACnD,SAASC,gBAAgB,QAAQ,SAAS;AAC1C,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,UAAU;AAEpD,SAASC,IAAIA,CAAEC,MAAM,EAAEC,IAAI,EAAG;EAC7B,OAAOC,MAAM,CAACC,WAAW,CACxBD,MAAM,CAACE,OAAO,CAAEJ,MAAO,CAAC,CAACK,MAAM,CAAE,CAAE,CAAEC,GAAG,CAAE,KAAM,CAAEL,IAAI,CAACM,QAAQ,CAAED,GAAI,CAAE,CACxE,CAAC;AACF;AAEA,MAAME,0BAA0B,GAAG,wCAAwC;AAC3E,MAAMC,0BAA0B,GAAG,wCAAwC;AAC3E,MAAMC,2BAA2B,GAAG,yCAAyC;AAC7E,MAAMC,wBAAwB,GAAG,wBAAwB;AACzD,MAAMC,sBAAsB,GAAG,oCAAoC;AACnE,MAAMC,uBAAuB,GAAG,qCAAqC;AACrE,MAAMC,wBAAwB,GAAG,sCAAsC;AACvE,OAAO,MAAMC,sBAAsB,GAAG,YAAY;AAClD,OAAO,MAAMC,uBAAuB,GAAG,CACtCvB,uBAAuB,EACvBE,qBAAqB,EACrBiB,sBAAsB,EACtBC,uBAAuB,EACvBnB,uBAAuB,EACvBiB,wBAAwB,EACxBD,2BAA2B,EAC3BI,wBAAwB,EACxBL,0BAA0B,EAC1BD,0BAA0B,CAC1B;AAED,SAASS,iBAAiBA,CAAEC,KAAK,EAAG;EACnC,MAAMC,YAAY,GAAG;IAAE,GAAGpB,IAAI,CAAEmB,KAAK,EAAE,CAAE,YAAY,CAAG;EAAE,CAAC;EAC3D,MAAME,aAAa,GAAGF,KAAK,EAAEG,UAAU,EAAEC,QAAQ;EACjD,MAAMC,eAAe,GAAGL,KAAK,EAAEG,UAAU,EAAEG,UAAU;EACrD,MAAMC,YAAY,GAAGL,aAAa,EAAEM,UAAU,CAAE,uBAAwB,CAAC,GACtEN,aAAa,CAACO,SAAS,CAAE,uBAAuB,CAACC,MAAO,CAAC,GACzDC,SAAS;EACZ,MAAMC,cAAc,GAAGP,eAAe,EAAEG,UAAU,CACjD,yBACD,CAAC,GACEH,eAAe,CAACI,SAAS,CAAE,yBAAyB,CAACC,MAAO,CAAC,GAC7DC,SAAS;EACZV,YAAY,CAACE,UAAU,GAAG;IACzB,GAAGtB,IAAI,CAAEoB,YAAY,CAACE,UAAU,EAAE,CAAE,YAAY,CAAG,CAAC;IACpDC,QAAQ,EAAEG,YAAY,GAAGI,SAAS,GAAGT;EACtC,CAAC;EACD,OAAO;IACNF,KAAK,EAAEtB,gBAAgB,CAAEuB,YAAa,CAAC;IACvCK,UAAU,EAAEM,cAAc;IAC1BR,QAAQ,EAAEG;EACX,CAAC;AACF;AAEA,SAASM,iBAAiBA,CAAEC,UAAU,EAAG;EACxC,OAAO;IACN,GAAGA,UAAU,CAACd,KAAK;IACnBG,UAAU,EAAE;MACX,GAAGW,UAAU,CAACd,KAAK,EAAEG,UAAU;MAC/BG,UAAU,EAAEQ,UAAU,CAACR,UAAU,GAC9B,yBAAyB,GAAGQ,UAAU,CAACR,UAAU,GACjDK,SAAS;MACZP,QAAQ,EAAEU,UAAU,CAACV,QAAQ,GAC1B,uBAAuB,GAAGU,UAAU,CAACV,QAAQ,GAC7CU,UAAU,CAACd,KAAK,EAAEG,UAAU,EAAEC;IAClC;EACD,CAAC;AACF;AAEA,SAASW,0BAA0BA,CAAE;EAAEC,QAAQ;EAAEC;AAAe,CAAC,EAAG;EACnE,MAAMC,wBAAwB,GAAGlD,WAAW,CACzC8C,UAAU,IAAM;IACjB,MAAMK,aAAa,GAAGN,iBAAiB,CAAEC,UAAW,CAAC;IACrD,MAAMb,YAAY,GAAGgB,cAAc,CAAEE,aAAc,CAAC;IACpD,OAAO;MACN,GAAGL,UAAU;MACb,GAAGf,iBAAiB,CAAEE,YAAa;IACpC,CAAC;EACF,CAAC,EACD,CAAEgB,cAAc,CACjB,CAAC;EAED,OACCG,aAAA,CAACjD,iBAAiB;IACjBkD,KAAK,EAAC,YAAY;IAClBJ,cAAc,EAAGC;EAA0B,GAEzCF,QACgB,CAAC;AAEtB;AAEA,SAASM,mBAAmBA,CAAE;EAAEC,QAAQ;EAAEC,IAAI;EAAEC,aAAa;EAAEC;AAAS,CAAC,EAAG;EAC3E,SAASC,QAAQA,CAAEC,MAAM,EAAG;IAC3B,MAAM;MAAE5B,KAAK;MAAEM,UAAU;MAAEF;IAAS,CAAC,GACpCwB,MAAM,CAAEhD,gBAAiB,CAAC,CAACiD,kBAAkB,CAAEN,QAAS,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO;MAAEvB,KAAK;MAAEM,UAAU;MAAEF;IAAS,CAAC;EACvC;EACA,MAAM;IAAEJ,KAAK;IAAEM,UAAU;IAAEF;EAAS,CAAC,GAAGnC,SAAS,CAAE0D,QAAQ,EAAE,CAAEJ,QAAQ,CAAG,CAAC;EAC3E,MAAMO,SAAS,GAAGxD,qBAAqB,CAAEoD,QAAS,CAAC;EACnD,MAAMK,KAAK,GAAGhE,OAAO,CACpB,MAAM8C,iBAAiB,CAAE;IAAEb,KAAK;IAAEM,UAAU;IAAEF;EAAS,CAAE,CAAC,EAC1D,CAAEJ,KAAK,EAAEI,QAAQ,EAAEE,UAAU,CAC9B,CAAC;EAED,MAAM0B,QAAQ,GAAKC,QAAQ,IAAM;IAChCR,aAAa,CAAE1B,iBAAiB,CAAEkC,QAAS,CAAE,CAAC;EAC/C,CAAC;EAED,IAAK,CAAEH,SAAS,EAAG;IAClB,OAAO,IAAI;EACZ;EAEA,MAAMI,eAAe,GAAGrE,eAAe,CAAE2D,IAAI,EAAE,CAC9C3B,sBAAsB,EACtB,+BAA+B,CAC9B,CAAC;EAEH,OACCuB,aAAA,CAAC/C,qBAAqB;IACrB8D,EAAE,EAAGpB,0BAA4B;IACjCqB,OAAO,EAAGb,QAAU;IACpBG,QAAQ,EAAGA,QAAU;IACrBK,KAAK,EAAGA,KAAO;IACfC,QAAQ,EAAGA,QAAU;IACrBE,eAAe,EAAGA;EAAiB,CACnC,CAAC;AAEJ;;AAEA;AACA;AACA;AACA,OAAO,MAAMG,eAAe,GAAGnE,IAAI,CAAEoD,mBAAoB,CAAC;AAE1D,OAAO,MAAMgB,oBAAoB,GAAKC,SAAS,IAAM;EACpD,OAAOzC,uBAAuB,CAAC0C,IAAI,CAAIpD,GAAG,IACzCtB,eAAe,CAAEyE,SAAS,EAAEnD,GAAI,CACjC,CAAC;AACF,CAAC"}
|
|
@@ -1,18 +1,26 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
1
2
|
/**
|
|
2
3
|
* WordPress dependencies
|
|
3
4
|
*/
|
|
4
5
|
import { getBlockSupport } from '@wordpress/blocks';
|
|
5
|
-
import { useMemo, useEffect, useId } from '@wordpress/element';
|
|
6
|
+
import { useMemo, useEffect, useId, useState } from '@wordpress/element';
|
|
6
7
|
import { useDispatch } from '@wordpress/data';
|
|
8
|
+
import { createHigherOrderComponent, pure } from '@wordpress/compose';
|
|
9
|
+
import { addFilter } from '@wordpress/hooks';
|
|
7
10
|
|
|
8
11
|
/**
|
|
9
12
|
* Internal dependencies
|
|
10
13
|
*/
|
|
14
|
+
import { useBlockEditContext, mayDisplayControlsKey, mayDisplayParentControlsKey } from '../components/block-edit/context';
|
|
11
15
|
import { useSettings } from '../components';
|
|
12
16
|
import { useSettingsForBlockElement } from '../components/global-styles/hooks';
|
|
13
17
|
import { getValueFromObjectPath, setImmutably } from '../utils/object';
|
|
14
18
|
import { store as blockEditorStore } from '../store';
|
|
15
19
|
import { unlock } from '../lock-unlock';
|
|
20
|
+
/**
|
|
21
|
+
* External dependencies
|
|
22
|
+
*/
|
|
23
|
+
import classnames from 'classnames';
|
|
16
24
|
|
|
17
25
|
/**
|
|
18
26
|
* Removed falsy values from nested object.
|
|
@@ -73,14 +81,14 @@ export function transformStyles(activeSupports, migrationPaths, result, source,
|
|
|
73
81
|
* Check whether serialization of specific block support feature or set should
|
|
74
82
|
* be skipped.
|
|
75
83
|
*
|
|
76
|
-
* @param {string|Object}
|
|
77
|
-
* @param {string} featureSet
|
|
78
|
-
* @param {string} feature
|
|
84
|
+
* @param {string|Object} blockNameOrType Block name or block type object.
|
|
85
|
+
* @param {string} featureSet Name of block support feature set.
|
|
86
|
+
* @param {string} feature Name of the individual feature to check.
|
|
79
87
|
*
|
|
80
88
|
* @return {boolean} Whether serialization should occur.
|
|
81
89
|
*/
|
|
82
|
-
export function shouldSkipSerialization(
|
|
83
|
-
const support = getBlockSupport(
|
|
90
|
+
export function shouldSkipSerialization(blockNameOrType, featureSet, feature) {
|
|
91
|
+
const support = getBlockSupport(blockNameOrType, featureSet);
|
|
84
92
|
const skipSerialization = support?.__experimentalSkipSerialization;
|
|
85
93
|
if (Array.isArray(skipSerialization)) {
|
|
86
94
|
return skipSerialization.includes(feature);
|
|
@@ -197,4 +205,139 @@ export function useBlockSettings(name, parentLayout) {
|
|
|
197
205
|
}, [fontFamilies, fontSizes, customFontSize, fontStyle, fontWeight, lineHeight, textColumns, textDecoration, textTransform, letterSpacing, writingMode, padding, margin, blockGap, spacingSizes, units, minHeight, layout, parentLayout, borderColor, borderRadius, borderStyle, borderWidth, customColorsEnabled, customColors, customDuotone, themeColors, defaultColors, defaultPalette, defaultDuotone, userDuotonePalette, themeDuotonePalette, defaultDuotonePalette, userGradientPalette, themeGradientPalette, defaultGradientPalette, defaultGradients, areCustomGradientsEnabled, isBackgroundEnabled, isLinkEnabled, isTextEnabled, isHeadingEnabled, isButtonEnabled]);
|
|
198
206
|
return useSettingsForBlockElement(rawSettings, name);
|
|
199
207
|
}
|
|
208
|
+
export function createBlockEditFilter(features) {
|
|
209
|
+
// We don't want block controls to re-render when typing inside a block.
|
|
210
|
+
// `pure` will prevent re-renders unless props change, so only pass the
|
|
211
|
+
// needed props and not the whole attributes object.
|
|
212
|
+
features = features.map(settings => {
|
|
213
|
+
return {
|
|
214
|
+
...settings,
|
|
215
|
+
Edit: pure(settings.edit)
|
|
216
|
+
};
|
|
217
|
+
});
|
|
218
|
+
const withBlockEditHooks = createHigherOrderComponent(OriginalBlockEdit => props => {
|
|
219
|
+
const context = useBlockEditContext();
|
|
220
|
+
// CAUTION: code added before this line will be executed for all
|
|
221
|
+
// blocks, not just those that support the feature! Code added
|
|
222
|
+
// above this line should be carefully evaluated for its impact on
|
|
223
|
+
// performance.
|
|
224
|
+
return [...features.map((feature, i) => {
|
|
225
|
+
const {
|
|
226
|
+
Edit,
|
|
227
|
+
hasSupport,
|
|
228
|
+
attributeKeys = [],
|
|
229
|
+
shareWithChildBlocks
|
|
230
|
+
} = feature;
|
|
231
|
+
const shouldDisplayControls = context[mayDisplayControlsKey] || context[mayDisplayParentControlsKey] && shareWithChildBlocks;
|
|
232
|
+
if (!shouldDisplayControls || !hasSupport(props.name)) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
const neededProps = {};
|
|
236
|
+
for (const key of attributeKeys) {
|
|
237
|
+
if (props.attributes[key]) {
|
|
238
|
+
neededProps[key] = props.attributes[key];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return createElement(Edit
|
|
242
|
+
// We can use the index because the array length
|
|
243
|
+
// is fixed per page load right now.
|
|
244
|
+
, {
|
|
245
|
+
key: i,
|
|
246
|
+
name: props.name,
|
|
247
|
+
clientId: props.clientId,
|
|
248
|
+
setAttributes: props.setAttributes,
|
|
249
|
+
__unstableParentLayout: props.__unstableParentLayout
|
|
250
|
+
// This component is pure, so only pass needed
|
|
251
|
+
// props!!!
|
|
252
|
+
,
|
|
253
|
+
...neededProps
|
|
254
|
+
});
|
|
255
|
+
}), createElement(OriginalBlockEdit, {
|
|
256
|
+
key: "edit",
|
|
257
|
+
...props
|
|
258
|
+
})];
|
|
259
|
+
}, 'withBlockEditHooks');
|
|
260
|
+
addFilter('editor.BlockEdit', 'core/editor/hooks', withBlockEditHooks);
|
|
261
|
+
}
|
|
262
|
+
function BlockProps({
|
|
263
|
+
index,
|
|
264
|
+
useBlockProps,
|
|
265
|
+
setAllWrapperProps,
|
|
266
|
+
...props
|
|
267
|
+
}) {
|
|
268
|
+
const wrapperProps = useBlockProps(props);
|
|
269
|
+
const setWrapperProps = next => setAllWrapperProps(prev => {
|
|
270
|
+
const nextAll = [...prev];
|
|
271
|
+
nextAll[index] = next;
|
|
272
|
+
return nextAll;
|
|
273
|
+
});
|
|
274
|
+
// Setting state after every render is fine because this component is
|
|
275
|
+
// pure and will only re-render when needed props change.
|
|
276
|
+
useEffect(() => {
|
|
277
|
+
// We could shallow compare the props, but since this component only
|
|
278
|
+
// changes when needed attributes change, the benefit is probably small.
|
|
279
|
+
setWrapperProps(wrapperProps);
|
|
280
|
+
return () => {
|
|
281
|
+
setWrapperProps(undefined);
|
|
282
|
+
};
|
|
283
|
+
});
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
const BlockPropsPure = pure(BlockProps);
|
|
287
|
+
export function createBlockListBlockFilter(features) {
|
|
288
|
+
const withBlockListBlockHooks = createHigherOrderComponent(BlockListBlock => props => {
|
|
289
|
+
const [allWrapperProps, setAllWrapperProps] = useState(Array(features.length).fill(undefined));
|
|
290
|
+
return [...features.map((feature, i) => {
|
|
291
|
+
const {
|
|
292
|
+
hasSupport,
|
|
293
|
+
attributeKeys = [],
|
|
294
|
+
useBlockProps
|
|
295
|
+
} = feature;
|
|
296
|
+
const neededProps = {};
|
|
297
|
+
for (const key of attributeKeys) {
|
|
298
|
+
if (props.attributes[key]) {
|
|
299
|
+
neededProps[key] = props.attributes[key];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (!hasSupport(props.name) ||
|
|
303
|
+
// Skip rendering if none of the needed attributes are
|
|
304
|
+
// set.
|
|
305
|
+
!Object.keys(neededProps).length) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
return createElement(BlockPropsPure
|
|
309
|
+
// We can use the index because the array length
|
|
310
|
+
// is fixed per page load right now.
|
|
311
|
+
, {
|
|
312
|
+
key: i,
|
|
313
|
+
index: i,
|
|
314
|
+
useBlockProps: useBlockProps
|
|
315
|
+
// This component is pure, so we must pass a stable
|
|
316
|
+
// function reference.
|
|
317
|
+
,
|
|
318
|
+
setAllWrapperProps: setAllWrapperProps,
|
|
319
|
+
name: props.name
|
|
320
|
+
// This component is pure, so only pass needed
|
|
321
|
+
// props!!!
|
|
322
|
+
,
|
|
323
|
+
...neededProps
|
|
324
|
+
});
|
|
325
|
+
}), createElement(BlockListBlock, {
|
|
326
|
+
key: "edit",
|
|
327
|
+
...props,
|
|
328
|
+
wrapperProps: allWrapperProps.filter(Boolean).reduce((acc, wrapperProps) => {
|
|
329
|
+
return {
|
|
330
|
+
...acc,
|
|
331
|
+
...wrapperProps,
|
|
332
|
+
className: classnames(acc.className, wrapperProps.className),
|
|
333
|
+
style: {
|
|
334
|
+
...acc.style,
|
|
335
|
+
...wrapperProps.style
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
}, props.wrapperProps || {})
|
|
339
|
+
})];
|
|
340
|
+
}, 'withBlockListBlockHooks');
|
|
341
|
+
addFilter('editor.BlockListBlock', 'core/editor/hooks', withBlockListBlockHooks);
|
|
342
|
+
}
|
|
200
343
|
//# sourceMappingURL=utils.js.map
|