@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
|
@@ -13,6 +13,9 @@ import { isUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock } from '@wordpr
|
|
|
13
13
|
import useOnBlockDrop from '../use-on-block-drop';
|
|
14
14
|
import { getDistanceToNearestEdge, isPointContainedByRect } from '../../utils/math';
|
|
15
15
|
import { store as blockEditorStore } from '../../store';
|
|
16
|
+
const THRESHOLD_DISTANCE = 30;
|
|
17
|
+
const MINIMUM_HEIGHT_FOR_THRESHOLD = 120;
|
|
18
|
+
const MINIMUM_WIDTH_FOR_THRESHOLD = 120;
|
|
16
19
|
|
|
17
20
|
/** @typedef {import('../../utils/math').WPPoint} WPPoint */
|
|
18
21
|
/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */
|
|
@@ -42,14 +45,56 @@ import { store as blockEditorStore } from '../../store';
|
|
|
42
45
|
* @param {WPBlockData[]} blocksData The block data list.
|
|
43
46
|
* @param {WPPoint} position The position of the item being dragged.
|
|
44
47
|
* @param {WPBlockListOrientation} orientation The orientation of the block list.
|
|
48
|
+
* @param {Object} options Additional options.
|
|
45
49
|
* @return {[number, WPDropOperation]} The drop target position.
|
|
46
50
|
*/
|
|
47
|
-
export function getDropTargetPosition(blocksData, position, orientation = 'vertical') {
|
|
51
|
+
export function getDropTargetPosition(blocksData, position, orientation = 'vertical', options = {}) {
|
|
48
52
|
const allowedEdges = orientation === 'horizontal' ? ['left', 'right'] : ['top', 'bottom'];
|
|
49
|
-
const isRightToLeft = isRTL();
|
|
50
53
|
let nearestIndex = 0;
|
|
51
54
|
let insertPosition = 'before';
|
|
52
55
|
let minDistance = Infinity;
|
|
56
|
+
const {
|
|
57
|
+
dropZoneElement,
|
|
58
|
+
parentBlockOrientation,
|
|
59
|
+
rootBlockIndex = 0
|
|
60
|
+
} = options;
|
|
61
|
+
|
|
62
|
+
// Allow before/after when dragging over the top/bottom edges of the drop zone.
|
|
63
|
+
if (dropZoneElement && parentBlockOrientation !== 'horizontal') {
|
|
64
|
+
const rect = dropZoneElement.getBoundingClientRect();
|
|
65
|
+
const [distance, edge] = getDistanceToNearestEdge(position, rect, ['top', 'bottom']);
|
|
66
|
+
|
|
67
|
+
// If dragging over the top or bottom of the drop zone, insert the block
|
|
68
|
+
// before or after the parent block. This only applies to blocks that use
|
|
69
|
+
// a drop zone element, typically container blocks such as Group or Cover.
|
|
70
|
+
if (rect.height > MINIMUM_HEIGHT_FOR_THRESHOLD && distance < THRESHOLD_DISTANCE) {
|
|
71
|
+
if (edge === 'top') {
|
|
72
|
+
return [rootBlockIndex, 'before'];
|
|
73
|
+
}
|
|
74
|
+
if (edge === 'bottom') {
|
|
75
|
+
return [rootBlockIndex + 1, 'after'];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const isRightToLeft = isRTL();
|
|
80
|
+
|
|
81
|
+
// Allow before/after when dragging over the left/right edges of the drop zone.
|
|
82
|
+
if (dropZoneElement && parentBlockOrientation === 'horizontal') {
|
|
83
|
+
const rect = dropZoneElement.getBoundingClientRect();
|
|
84
|
+
const [distance, edge] = getDistanceToNearestEdge(position, rect, ['left', 'right']);
|
|
85
|
+
|
|
86
|
+
// If dragging over the left or right of the drop zone, insert the block
|
|
87
|
+
// before or after the parent block. This only applies to blocks that use
|
|
88
|
+
// a drop zone element, typically container blocks such as Group.
|
|
89
|
+
if (rect.width > MINIMUM_WIDTH_FOR_THRESHOLD && distance < THRESHOLD_DISTANCE) {
|
|
90
|
+
if (isRightToLeft && edge === 'right' || !isRightToLeft && edge === 'left') {
|
|
91
|
+
return [rootBlockIndex, 'before'];
|
|
92
|
+
}
|
|
93
|
+
if (isRightToLeft && edge === 'left' || !isRightToLeft && edge === 'right') {
|
|
94
|
+
return [rootBlockIndex + 1, 'after'];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
53
98
|
blocksData.forEach(({
|
|
54
99
|
isUnmodifiedDefaultBlock,
|
|
55
100
|
getBoundingClientRect,
|
|
@@ -110,14 +155,24 @@ export default function useBlockDropZone({
|
|
|
110
155
|
index: null,
|
|
111
156
|
operation: 'insert'
|
|
112
157
|
});
|
|
113
|
-
const
|
|
158
|
+
const {
|
|
159
|
+
isDisabled,
|
|
160
|
+
parentBlockClientId,
|
|
161
|
+
rootBlockIndex
|
|
162
|
+
} = useSelect(select => {
|
|
114
163
|
const {
|
|
115
164
|
__unstableIsWithinBlockOverlay,
|
|
116
165
|
__unstableHasActiveBlockOverlayActive,
|
|
166
|
+
getBlockIndex,
|
|
167
|
+
getBlockParents,
|
|
117
168
|
getBlockEditingMode
|
|
118
169
|
} = select(blockEditorStore);
|
|
119
170
|
const blockEditingMode = getBlockEditingMode(targetRootClientId);
|
|
120
|
-
return
|
|
171
|
+
return {
|
|
172
|
+
parentBlockClientId: getBlockParents(targetRootClientId, true)[0] || '',
|
|
173
|
+
rootBlockIndex: getBlockIndex(targetRootClientId),
|
|
174
|
+
isDisabled: blockEditingMode !== 'default' || __unstableHasActiveBlockOverlayActive(targetRootClientId) || __unstableIsWithinBlockOverlay(targetRootClientId)
|
|
175
|
+
};
|
|
121
176
|
}, [targetRootClientId]);
|
|
122
177
|
const {
|
|
123
178
|
getBlockListSettings,
|
|
@@ -128,7 +183,7 @@ export default function useBlockDropZone({
|
|
|
128
183
|
showInsertionPoint,
|
|
129
184
|
hideInsertionPoint
|
|
130
185
|
} = useDispatch(blockEditorStore);
|
|
131
|
-
const onBlockDrop = useOnBlockDrop(targetRootClientId, dropTarget.index, {
|
|
186
|
+
const onBlockDrop = useOnBlockDrop(dropTarget.operation === 'before' || dropTarget.operation === 'after' ? parentBlockClientId : targetRootClientId, dropTarget.index, {
|
|
132
187
|
operation: dropTarget.operation
|
|
133
188
|
});
|
|
134
189
|
const throttled = useThrottle(useCallback((event, ownerDocument) => {
|
|
@@ -158,17 +213,23 @@ export default function useBlockDropZone({
|
|
|
158
213
|
const [targetIndex, operation] = getDropTargetPosition(blocksData, {
|
|
159
214
|
x: event.clientX,
|
|
160
215
|
y: event.clientY
|
|
161
|
-
}, getBlockListSettings(targetRootClientId)?.orientation
|
|
216
|
+
}, getBlockListSettings(targetRootClientId)?.orientation, {
|
|
217
|
+
dropZoneElement,
|
|
218
|
+
parentBlockClientId,
|
|
219
|
+
parentBlockOrientation: parentBlockClientId ? getBlockListSettings(parentBlockClientId)?.orientation : undefined,
|
|
220
|
+
rootBlockIndex
|
|
221
|
+
});
|
|
162
222
|
registry.batch(() => {
|
|
163
223
|
setDropTarget({
|
|
164
224
|
index: targetIndex,
|
|
165
225
|
operation
|
|
166
226
|
});
|
|
167
|
-
|
|
227
|
+
const insertionPointClientId = ['before', 'after'].includes(operation) ? parentBlockClientId : targetRootClientId;
|
|
228
|
+
showInsertionPoint(insertionPointClientId, targetIndex, {
|
|
168
229
|
operation
|
|
169
230
|
});
|
|
170
231
|
});
|
|
171
|
-
}, [getBlocks, targetRootClientId, getBlockListSettings, registry, showInsertionPoint, getBlockIndex]), 200);
|
|
232
|
+
}, [dropZoneElement, getBlocks, targetRootClientId, getBlockListSettings, registry, showInsertionPoint, getBlockIndex, parentBlockClientId, rootBlockIndex]), 200);
|
|
172
233
|
return useDropZone({
|
|
173
234
|
dropZoneElement,
|
|
174
235
|
isDisabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","useSelect","useRegistry","useCallback","useState","useThrottle","__experimentalUseDropZone","useDropZone","isRTL","isUnmodifiedDefaultBlock","getIsUnmodifiedDefaultBlock","useOnBlockDrop","getDistanceToNearestEdge","isPointContainedByRect","store","blockEditorStore","getDropTargetPosition","blocksData","position","orientation","allowedEdges","isRightToLeft","nearestIndex","insertPosition","minDistance","Infinity","forEach","getBoundingClientRect","blockIndex","rect","distance","edge","adjacentIndex","isNearestBlockUnmodifiedDefaultBlock","isAdjacentBlockUnmodifiedDefaultBlock","insertionIndex","useBlockDropZone","dropZoneElement","rootClientId","targetRootClientId","registry","dropTarget","setDropTarget","index","operation","isDisabled","select","__unstableIsWithinBlockOverlay","__unstableHasActiveBlockOverlayActive","getBlockEditingMode","blockEditingMode","getBlockListSettings","getBlocks","getBlockIndex","showInsertionPoint","hideInsertionPoint","onBlockDrop","throttled","event","ownerDocument","blocks","length","batch","map","block","clientId","getElementById","targetIndex","x","clientX","y","clientY","onDrop","onDragOver","currentTarget","onDragLeave","cancel","onDragEnd"],"sources":["@wordpress/block-editor/src/components/use-block-drop-zone/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport { isUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useOnBlockDrop from '../use-on-block-drop';\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n} from '../../utils/math';\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\n/**\n * The orientation of a block list.\n *\n * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation\n */\n\n/**\n * The insert position when dropping a block.\n *\n * @typedef {'before'|'after'} WPInsertPosition\n */\n\n/**\n * @typedef {Object} WPBlockData\n * @property {boolean} isUnmodifiedDefaultBlock Is the block unmodified default block.\n * @property {() => DOMRect} getBoundingClientRect Get the bounding client rect of the block.\n * @property {number} blockIndex The index of the block.\n */\n\n/**\n * Get the drop target position from a given drop point and the orientation.\n *\n * @param {WPBlockData[]} blocksData The block data list.\n * @param {WPPoint} position The position of the item being dragged.\n * @param {WPBlockListOrientation} orientation The orientation of the block list.\n * @return {[number, WPDropOperation]} The drop target position.\n */\nexport function getDropTargetPosition(\n\tblocksData,\n\tposition,\n\torientation = 'vertical'\n) {\n\tconst allowedEdges =\n\t\torientation === 'horizontal'\n\t\t\t? [ 'left', 'right' ]\n\t\t\t: [ 'top', 'bottom' ];\n\n\tconst isRightToLeft = isRTL();\n\n\tlet nearestIndex = 0;\n\tlet insertPosition = 'before';\n\tlet minDistance = Infinity;\n\n\tblocksData.forEach(\n\t\t( { isUnmodifiedDefaultBlock, getBoundingClientRect, blockIndex } ) => {\n\t\t\tconst rect = getBoundingClientRect();\n\n\t\t\tlet [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\tallowedEdges\n\t\t\t);\n\t\t\t// Prioritize the element if the point is inside of an unmodified default block.\n\t\t\tif (\n\t\t\t\tisUnmodifiedDefaultBlock &&\n\t\t\t\tisPointContainedByRect( position, rect )\n\t\t\t) {\n\t\t\t\tdistance = 0;\n\t\t\t}\n\n\t\t\tif ( distance < minDistance ) {\n\t\t\t\t// Where the dropped block will be inserted on the nearest block.\n\t\t\t\tinsertPosition =\n\t\t\t\t\tedge === 'bottom' ||\n\t\t\t\t\t( ! isRightToLeft && edge === 'right' ) ||\n\t\t\t\t\t( isRightToLeft && edge === 'left' )\n\t\t\t\t\t\t? 'after'\n\t\t\t\t\t\t: 'before';\n\n\t\t\t\t// Update the currently known best candidate.\n\t\t\t\tminDistance = distance;\n\t\t\t\tnearestIndex = blockIndex;\n\t\t\t}\n\t\t}\n\t);\n\n\tconst adjacentIndex =\n\t\tnearestIndex + ( insertPosition === 'after' ? 1 : -1 );\n\tconst isNearestBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ nearestIndex ]?.isUnmodifiedDefaultBlock;\n\tconst isAdjacentBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ adjacentIndex ]?.isUnmodifiedDefaultBlock;\n\n\t// If both blocks are not unmodified default blocks then just insert between them.\n\tif (\n\t\t! isNearestBlockUnmodifiedDefaultBlock &&\n\t\t! isAdjacentBlockUnmodifiedDefaultBlock\n\t) {\n\t\t// If the user is dropping to the trailing edge of the block\n\t\t// add 1 to the index to represent dragging after.\n\t\tconst insertionIndex =\n\t\t\tinsertPosition === 'after' ? nearestIndex + 1 : nearestIndex;\n\t\treturn [ insertionIndex, 'insert' ];\n\t}\n\n\t// Otherwise, replace the nearest unmodified default block.\n\treturn [\n\t\tisNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex,\n\t\t'replace',\n\t];\n}\n\n/**\n * @typedef {Object} WPBlockDropZoneConfig\n * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.\n * @property {string} rootClientId The root client id for the block list.\n */\n\n/**\n * A React hook that can be used to make a block list handle drag and drop.\n *\n * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.\n */\nexport default function useBlockDropZone( {\n\tdropZoneElement,\n\t// An undefined value represents a top-level block. Default to an empty\n\t// string for this so that `targetRootClientId` can be easily compared to\n\t// values returned by the `getRootBlockClientId` selector, which also uses\n\t// an empty string to represent top-level blocks.\n\trootClientId: targetRootClientId = '',\n} = {} ) {\n\tconst registry = useRegistry();\n\tconst [ dropTarget, setDropTarget ] = useState( {\n\t\tindex: null,\n\t\toperation: 'insert',\n\t} );\n\n\tconst isDisabled = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\t__unstableIsWithinBlockOverlay,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst blockEditingMode = getBlockEditingMode( targetRootClientId );\n\t\t\treturn (\n\t\t\t\tblockEditingMode !== 'default' ||\n\t\t\t\t__unstableHasActiveBlockOverlayActive( targetRootClientId ) ||\n\t\t\t\t__unstableIsWithinBlockOverlay( targetRootClientId )\n\t\t\t);\n\t\t},\n\t\t[ targetRootClientId ]\n\t);\n\n\tconst { getBlockListSettings, getBlocks, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst { showInsertionPoint, hideInsertionPoint } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst onBlockDrop = useOnBlockDrop( targetRootClientId, dropTarget.index, {\n\t\toperation: dropTarget.operation,\n\t} );\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, ownerDocument ) => {\n\t\t\t\tconst blocks = getBlocks( targetRootClientId );\n\n\t\t\t\t// The block list is empty, don't show the insertion point but still allow dropping.\n\t\t\t\tif ( blocks.length === 0 ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tshowInsertionPoint( targetRootClientId, 0, {\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocksData = blocks.map( ( block ) => {\n\t\t\t\t\tconst clientId = block.clientId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisUnmodifiedDefaultBlock:\n\t\t\t\t\t\t\tgetIsUnmodifiedDefaultBlock( block ),\n\t\t\t\t\t\tgetBoundingClientRect: () =>\n\t\t\t\t\t\t\townerDocument\n\t\t\t\t\t\t\t\t.getElementById( `block-${ clientId }` )\n\t\t\t\t\t\t\t\t.getBoundingClientRect(),\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst [ targetIndex, operation ] = getDropTargetPosition(\n\t\t\t\t\tblocksData,\n\t\t\t\t\t{ x: event.clientX, y: event.clientY },\n\t\t\t\t\tgetBlockListSettings( targetRootClientId )?.orientation\n\t\t\t\t);\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\tindex: targetIndex,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t} );\n\t\t\t\t\tshowInsertionPoint( targetRootClientId, targetIndex, {\n\t\t\t\t\t\toperation,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tgetBlocks,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tregistry,\n\t\t\t\tshowInsertionPoint,\n\t\t\t\tgetBlockIndex,\n\t\t\t]\n\t\t),\n\t\t200\n\t);\n\n\treturn useDropZone( {\n\t\tdropZoneElement,\n\t\tisDisabled,\n\t\tonDrop: onBlockDrop,\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget.ownerDocument );\n\t\t},\n\t\tonDragLeave() {\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t} );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACrE,SAASC,WAAW,EAAEC,QAAQ,QAAQ,oBAAoB;AAC1D,SACCC,WAAW,EACXC,yBAAyB,IAAIC,WAAW,QAClC,oBAAoB;AAC3B,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,wBAAwB,IAAIC,2BAA2B,QAAQ,mBAAmB;;AAE3F;AACA;AACA;AACA,OAAOC,cAAc,MAAM,sBAAsB;AACjD,SACCC,wBAAwB,EACxBC,sBAAsB,QAChB,kBAAkB;AACzB,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;;AAEvD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACpCC,UAAU,EACVC,QAAQ,EACRC,WAAW,GAAG,UAAU,EACvB;EACD,MAAMC,YAAY,GACjBD,WAAW,KAAK,YAAY,GACzB,CAAE,MAAM,EAAE,OAAO,CAAE,GACnB,CAAE,KAAK,EAAE,QAAQ,CAAE;EAEvB,MAAME,aAAa,GAAGb,KAAK,CAAC,CAAC;EAE7B,IAAIc,YAAY,GAAG,CAAC;EACpB,IAAIC,cAAc,GAAG,QAAQ;EAC7B,IAAIC,WAAW,GAAGC,QAAQ;EAE1BR,UAAU,CAACS,OAAO,CACjB,CAAE;IAAEjB,wBAAwB;IAAEkB,qBAAqB;IAAEC;EAAW,CAAC,KAAM;IACtE,MAAMC,IAAI,GAAGF,qBAAqB,CAAC,CAAC;IAEpC,IAAI,CAAEG,QAAQ,EAAEC,IAAI,CAAE,GAAGnB,wBAAwB,CAChDM,QAAQ,EACRW,IAAI,EACJT,YACD,CAAC;IACD;IACA,IACCX,wBAAwB,IACxBI,sBAAsB,CAAEK,QAAQ,EAAEW,IAAK,CAAC,EACvC;MACDC,QAAQ,GAAG,CAAC;IACb;IAEA,IAAKA,QAAQ,GAAGN,WAAW,EAAG;MAC7B;MACAD,cAAc,GACbQ,IAAI,KAAK,QAAQ,IACf,CAAEV,aAAa,IAAIU,IAAI,KAAK,OAAS,IACrCV,aAAa,IAAIU,IAAI,KAAK,MAAQ,GACjC,OAAO,GACP,QAAQ;;MAEZ;MACAP,WAAW,GAAGM,QAAQ;MACtBR,YAAY,GAAGM,UAAU;IAC1B;EACD,CACD,CAAC;EAED,MAAMI,aAAa,GAClBV,YAAY,IAAKC,cAAc,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE;EACvD,MAAMU,oCAAoC,GACzC,CAAC,CAAEhB,UAAU,CAAEK,YAAY,CAAE,EAAEb,wBAAwB;EACxD,MAAMyB,qCAAqC,GAC1C,CAAC,CAAEjB,UAAU,CAAEe,aAAa,CAAE,EAAEvB,wBAAwB;;EAEzD;EACA,IACC,CAAEwB,oCAAoC,IACtC,CAAEC,qCAAqC,EACtC;IACD;IACA;IACA,MAAMC,cAAc,GACnBZ,cAAc,KAAK,OAAO,GAAGD,YAAY,GAAG,CAAC,GAAGA,YAAY;IAC7D,OAAO,CAAEa,cAAc,EAAE,QAAQ,CAAE;EACpC;;EAEA;EACA,OAAO,CACNF,oCAAoC,GAAGX,YAAY,GAAGU,aAAa,EACnE,SAAS,CACT;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASI,gBAAgBA,CAAE;EACzCC,eAAe;EACf;EACA;EACA;EACA;EACAC,YAAY,EAAEC,kBAAkB,GAAG;AACpC,CAAC,GAAG,CAAC,CAAC,EAAG;EACR,MAAMC,QAAQ,GAAGtC,WAAW,CAAC,CAAC;EAC9B,MAAM,CAAEuC,UAAU,EAAEC,aAAa,CAAE,GAAGtC,QAAQ,CAAE;IAC/CuC,KAAK,EAAE,IAAI;IACXC,SAAS,EAAE;EACZ,CAAE,CAAC;EAEH,MAAMC,UAAU,GAAG5C,SAAS,CACzB6C,MAAM,IAAM;IACb,MAAM;MACLC,8BAA8B;MAC9BC,qCAAqC;MACrCC;IACD,CAAC,GAAGH,MAAM,CAAE/B,gBAAiB,CAAC;IAC9B,MAAMmC,gBAAgB,GAAGD,mBAAmB,CAAEV,kBAAmB,CAAC;IAClE,OACCW,gBAAgB,KAAK,SAAS,IAC9BF,qCAAqC,CAAET,kBAAmB,CAAC,IAC3DQ,8BAA8B,CAAER,kBAAmB,CAAC;EAEtD,CAAC,EACD,CAAEA,kBAAkB,CACrB,CAAC;EAED,MAAM;IAAEY,oBAAoB;IAAEC,SAAS;IAAEC;EAAc,CAAC,GACvDpD,SAAS,CAAEc,gBAAiB,CAAC;EAC9B,MAAM;IAAEuC,kBAAkB;IAAEC;EAAmB,CAAC,GAC/CvD,WAAW,CAAEe,gBAAiB,CAAC;EAEhC,MAAMyC,WAAW,GAAG7C,cAAc,CAAE4B,kBAAkB,EAAEE,UAAU,CAACE,KAAK,EAAE;IACzEC,SAAS,EAAEH,UAAU,CAACG;EACvB,CAAE,CAAC;EACH,MAAMa,SAAS,GAAGpD,WAAW,CAC5BF,WAAW,CACV,CAAEuD,KAAK,EAAEC,aAAa,KAAM;IAC3B,MAAMC,MAAM,GAAGR,SAAS,CAAEb,kBAAmB,CAAC;;IAE9C;IACA,IAAKqB,MAAM,CAACC,MAAM,KAAK,CAAC,EAAG;MAC1BrB,QAAQ,CAACsB,KAAK,CAAE,MAAM;QACrBpB,aAAa,CAAE;UACdC,KAAK,EAAE,CAAC;UACRC,SAAS,EAAE;QACZ,CAAE,CAAC;QACHU,kBAAkB,CAAEf,kBAAkB,EAAE,CAAC,EAAE;UAC1CK,SAAS,EAAE;QACZ,CAAE,CAAC;MACJ,CAAE,CAAC;MACH;IACD;IAEA,MAAM3B,UAAU,GAAG2C,MAAM,CAACG,GAAG,CAAIC,KAAK,IAAM;MAC3C,MAAMC,QAAQ,GAAGD,KAAK,CAACC,QAAQ;MAE/B,OAAO;QACNxD,wBAAwB,EACvBC,2BAA2B,CAAEsD,KAAM,CAAC;QACrCrC,qBAAqB,EAAEA,CAAA,KACtBgC,aAAa,CACXO,cAAc,CAAG,SAASD,QAAU,EAAE,CAAC,CACvCtC,qBAAqB,CAAC,CAAC;QAC1BC,UAAU,EAAEyB,aAAa,CAAEY,QAAS;MACrC,CAAC;IACF,CAAE,CAAC;IAEH,MAAM,CAAEE,WAAW,EAAEvB,SAAS,CAAE,GAAG5B,qBAAqB,CACvDC,UAAU,EACV;MAAEmD,CAAC,EAAEV,KAAK,CAACW,OAAO;MAAEC,CAAC,EAAEZ,KAAK,CAACa;IAAQ,CAAC,EACtCpB,oBAAoB,CAAEZ,kBAAmB,CAAC,EAAEpB,WAC7C,CAAC;IAEDqB,QAAQ,CAACsB,KAAK,CAAE,MAAM;MACrBpB,aAAa,CAAE;QACdC,KAAK,EAAEwB,WAAW;QAClBvB;MACD,CAAE,CAAC;MACHU,kBAAkB,CAAEf,kBAAkB,EAAE4B,WAAW,EAAE;QACpDvB;MACD,CAAE,CAAC;IACJ,CAAE,CAAC;EACJ,CAAC,EACD,CACCQ,SAAS,EACTb,kBAAkB,EAClBY,oBAAoB,EACpBX,QAAQ,EACRc,kBAAkB,EAClBD,aAAa,CAEf,CAAC,EACD,GACD,CAAC;EAED,OAAO9C,WAAW,CAAE;IACnB8B,eAAe;IACfQ,UAAU;IACV2B,MAAM,EAAEhB,WAAW;IACnBiB,UAAUA,CAAEf,KAAK,EAAG;MACnB;MACA;MACA;MACAD,SAAS,CAAEC,KAAK,EAAEA,KAAK,CAACgB,aAAa,CAACf,aAAc,CAAC;IACtD,CAAC;IACDgB,WAAWA,CAAA,EAAG;MACblB,SAAS,CAACmB,MAAM,CAAC,CAAC;MAClBrB,kBAAkB,CAAC,CAAC;IACrB,CAAC;IACDsB,SAASA,CAAA,EAAG;MACXpB,SAAS,CAACmB,MAAM,CAAC,CAAC;MAClBrB,kBAAkB,CAAC,CAAC;IACrB;EACD,CAAE,CAAC;AACJ"}
|
|
1
|
+
{"version":3,"names":["useDispatch","useSelect","useRegistry","useCallback","useState","useThrottle","__experimentalUseDropZone","useDropZone","isRTL","isUnmodifiedDefaultBlock","getIsUnmodifiedDefaultBlock","useOnBlockDrop","getDistanceToNearestEdge","isPointContainedByRect","store","blockEditorStore","THRESHOLD_DISTANCE","MINIMUM_HEIGHT_FOR_THRESHOLD","MINIMUM_WIDTH_FOR_THRESHOLD","getDropTargetPosition","blocksData","position","orientation","options","allowedEdges","nearestIndex","insertPosition","minDistance","Infinity","dropZoneElement","parentBlockOrientation","rootBlockIndex","rect","getBoundingClientRect","distance","edge","height","isRightToLeft","width","forEach","blockIndex","adjacentIndex","isNearestBlockUnmodifiedDefaultBlock","isAdjacentBlockUnmodifiedDefaultBlock","insertionIndex","useBlockDropZone","rootClientId","targetRootClientId","registry","dropTarget","setDropTarget","index","operation","isDisabled","parentBlockClientId","select","__unstableIsWithinBlockOverlay","__unstableHasActiveBlockOverlayActive","getBlockIndex","getBlockParents","getBlockEditingMode","blockEditingMode","getBlockListSettings","getBlocks","showInsertionPoint","hideInsertionPoint","onBlockDrop","throttled","event","ownerDocument","blocks","length","batch","map","block","clientId","getElementById","targetIndex","x","clientX","y","clientY","undefined","insertionPointClientId","includes","onDrop","onDragOver","currentTarget","onDragLeave","cancel","onDragEnd"],"sources":["@wordpress/block-editor/src/components/use-block-drop-zone/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport { isUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useOnBlockDrop from '../use-on-block-drop';\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n} from '../../utils/math';\nimport { store as blockEditorStore } from '../../store';\n\nconst THRESHOLD_DISTANCE = 30;\nconst MINIMUM_HEIGHT_FOR_THRESHOLD = 120;\nconst MINIMUM_WIDTH_FOR_THRESHOLD = 120;\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\n/**\n * The orientation of a block list.\n *\n * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation\n */\n\n/**\n * The insert position when dropping a block.\n *\n * @typedef {'before'|'after'} WPInsertPosition\n */\n\n/**\n * @typedef {Object} WPBlockData\n * @property {boolean} isUnmodifiedDefaultBlock Is the block unmodified default block.\n * @property {() => DOMRect} getBoundingClientRect Get the bounding client rect of the block.\n * @property {number} blockIndex The index of the block.\n */\n\n/**\n * Get the drop target position from a given drop point and the orientation.\n *\n * @param {WPBlockData[]} blocksData The block data list.\n * @param {WPPoint} position The position of the item being dragged.\n * @param {WPBlockListOrientation} orientation The orientation of the block list.\n * @param {Object} options Additional options.\n * @return {[number, WPDropOperation]} The drop target position.\n */\nexport function getDropTargetPosition(\n\tblocksData,\n\tposition,\n\torientation = 'vertical',\n\toptions = {}\n) {\n\tconst allowedEdges =\n\t\torientation === 'horizontal'\n\t\t\t? [ 'left', 'right' ]\n\t\t\t: [ 'top', 'bottom' ];\n\n\tlet nearestIndex = 0;\n\tlet insertPosition = 'before';\n\tlet minDistance = Infinity;\n\n\tconst {\n\t\tdropZoneElement,\n\t\tparentBlockOrientation,\n\t\trootBlockIndex = 0,\n\t} = options;\n\n\t// Allow before/after when dragging over the top/bottom edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation !== 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'top',\n\t\t\t'bottom',\n\t\t] );\n\n\t\t// If dragging over the top or bottom of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group or Cover.\n\t\tif (\n\t\t\trect.height > MINIMUM_HEIGHT_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif ( edge === 'top' ) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif ( edge === 'bottom' ) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst isRightToLeft = isRTL();\n\n\t// Allow before/after when dragging over the left/right edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation === 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'left',\n\t\t\t'right',\n\t\t] );\n\n\t\t// If dragging over the left or right of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group.\n\t\tif (\n\t\t\trect.width > MINIMUM_WIDTH_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'right' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'left' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'left' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'right' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tblocksData.forEach(\n\t\t( { isUnmodifiedDefaultBlock, getBoundingClientRect, blockIndex } ) => {\n\t\t\tconst rect = getBoundingClientRect();\n\n\t\t\tlet [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\tallowedEdges\n\t\t\t);\n\t\t\t// Prioritize the element if the point is inside of an unmodified default block.\n\t\t\tif (\n\t\t\t\tisUnmodifiedDefaultBlock &&\n\t\t\t\tisPointContainedByRect( position, rect )\n\t\t\t) {\n\t\t\t\tdistance = 0;\n\t\t\t}\n\n\t\t\tif ( distance < minDistance ) {\n\t\t\t\t// Where the dropped block will be inserted on the nearest block.\n\t\t\t\tinsertPosition =\n\t\t\t\t\tedge === 'bottom' ||\n\t\t\t\t\t( ! isRightToLeft && edge === 'right' ) ||\n\t\t\t\t\t( isRightToLeft && edge === 'left' )\n\t\t\t\t\t\t? 'after'\n\t\t\t\t\t\t: 'before';\n\n\t\t\t\t// Update the currently known best candidate.\n\t\t\t\tminDistance = distance;\n\t\t\t\tnearestIndex = blockIndex;\n\t\t\t}\n\t\t}\n\t);\n\n\tconst adjacentIndex =\n\t\tnearestIndex + ( insertPosition === 'after' ? 1 : -1 );\n\tconst isNearestBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ nearestIndex ]?.isUnmodifiedDefaultBlock;\n\tconst isAdjacentBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ adjacentIndex ]?.isUnmodifiedDefaultBlock;\n\n\t// If both blocks are not unmodified default blocks then just insert between them.\n\tif (\n\t\t! isNearestBlockUnmodifiedDefaultBlock &&\n\t\t! isAdjacentBlockUnmodifiedDefaultBlock\n\t) {\n\t\t// If the user is dropping to the trailing edge of the block\n\t\t// add 1 to the index to represent dragging after.\n\t\tconst insertionIndex =\n\t\t\tinsertPosition === 'after' ? nearestIndex + 1 : nearestIndex;\n\t\treturn [ insertionIndex, 'insert' ];\n\t}\n\n\t// Otherwise, replace the nearest unmodified default block.\n\treturn [\n\t\tisNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex,\n\t\t'replace',\n\t];\n}\n\n/**\n * @typedef {Object} WPBlockDropZoneConfig\n * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.\n * @property {string} rootClientId The root client id for the block list.\n */\n\n/**\n * A React hook that can be used to make a block list handle drag and drop.\n *\n * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.\n */\nexport default function useBlockDropZone( {\n\tdropZoneElement,\n\t// An undefined value represents a top-level block. Default to an empty\n\t// string for this so that `targetRootClientId` can be easily compared to\n\t// values returned by the `getRootBlockClientId` selector, which also uses\n\t// an empty string to represent top-level blocks.\n\trootClientId: targetRootClientId = '',\n} = {} ) {\n\tconst registry = useRegistry();\n\tconst [ dropTarget, setDropTarget ] = useState( {\n\t\tindex: null,\n\t\toperation: 'insert',\n\t} );\n\n\tconst { isDisabled, parentBlockClientId, rootBlockIndex } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\t__unstableIsWithinBlockOverlay,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockParents,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst blockEditingMode = getBlockEditingMode( targetRootClientId );\n\t\t\treturn {\n\t\t\t\tparentBlockClientId:\n\t\t\t\t\tgetBlockParents( targetRootClientId, true )[ 0 ] || '',\n\t\t\t\trootBlockIndex: getBlockIndex( targetRootClientId ),\n\t\t\t\tisDisabled:\n\t\t\t\t\tblockEditingMode !== 'default' ||\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive(\n\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t) ||\n\t\t\t\t\t__unstableIsWithinBlockOverlay( targetRootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ targetRootClientId ]\n\t);\n\n\tconst { getBlockListSettings, getBlocks, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst { showInsertionPoint, hideInsertionPoint } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst onBlockDrop = useOnBlockDrop(\n\t\tdropTarget.operation === 'before' || dropTarget.operation === 'after'\n\t\t\t? parentBlockClientId\n\t\t\t: targetRootClientId,\n\t\tdropTarget.index,\n\t\t{\n\t\t\toperation: dropTarget.operation,\n\t\t}\n\t);\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, ownerDocument ) => {\n\t\t\t\tconst blocks = getBlocks( targetRootClientId );\n\n\t\t\t\t// The block list is empty, don't show the insertion point but still allow dropping.\n\t\t\t\tif ( blocks.length === 0 ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tshowInsertionPoint( targetRootClientId, 0, {\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocksData = blocks.map( ( block ) => {\n\t\t\t\t\tconst clientId = block.clientId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisUnmodifiedDefaultBlock:\n\t\t\t\t\t\t\tgetIsUnmodifiedDefaultBlock( block ),\n\t\t\t\t\t\tgetBoundingClientRect: () =>\n\t\t\t\t\t\t\townerDocument\n\t\t\t\t\t\t\t\t.getElementById( `block-${ clientId }` )\n\t\t\t\t\t\t\t\t.getBoundingClientRect(),\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst [ targetIndex, operation ] = getDropTargetPosition(\n\t\t\t\t\tblocksData,\n\t\t\t\t\t{ x: event.clientX, y: event.clientY },\n\t\t\t\t\tgetBlockListSettings( targetRootClientId )?.orientation,\n\t\t\t\t\t{\n\t\t\t\t\t\tdropZoneElement,\n\t\t\t\t\t\tparentBlockClientId,\n\t\t\t\t\t\tparentBlockOrientation: parentBlockClientId\n\t\t\t\t\t\t\t? getBlockListSettings( parentBlockClientId )\n\t\t\t\t\t\t\t\t\t?.orientation\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\trootBlockIndex,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\tindex: targetIndex,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst insertionPointClientId = [\n\t\t\t\t\t\t'before',\n\t\t\t\t\t\t'after',\n\t\t\t\t\t].includes( operation )\n\t\t\t\t\t\t? parentBlockClientId\n\t\t\t\t\t\t: targetRootClientId;\n\n\t\t\t\t\tshowInsertionPoint( insertionPointClientId, targetIndex, {\n\t\t\t\t\t\toperation,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tdropZoneElement,\n\t\t\t\tgetBlocks,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tregistry,\n\t\t\t\tshowInsertionPoint,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tparentBlockClientId,\n\t\t\t\trootBlockIndex,\n\t\t\t]\n\t\t),\n\t\t200\n\t);\n\n\treturn useDropZone( {\n\t\tdropZoneElement,\n\t\tisDisabled,\n\t\tonDrop: onBlockDrop,\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget.ownerDocument );\n\t\t},\n\t\tonDragLeave() {\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t} );\n}\n"],"mappings":"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"}
|
|
@@ -195,7 +195,7 @@ export default function useOnBlockDrop(targetRootClientId, targetBlockIndex, opt
|
|
|
195
195
|
} else {
|
|
196
196
|
moveBlocksToPosition(sourceClientIds, sourceRootClientId, targetRootClientId, insertIndex);
|
|
197
197
|
}
|
|
198
|
-
}, [operation, getBlockOrder, getBlocksByClientId,
|
|
198
|
+
}, [operation, getBlockOrder, getBlocksByClientId, moveBlocksToPosition, registry, removeBlocks, replaceBlocks, targetBlockIndex, targetRootClientId]);
|
|
199
199
|
const _onDrop = onBlockDrop(targetRootClientId, targetBlockIndex, getBlockIndex, getClientIdsOfDescendants, moveBlocks, insertOrReplaceBlocks, clearSelectedBlock);
|
|
200
200
|
const _onFilesDrop = onFilesDrop(targetRootClientId, targetBlockIndex, hasUploadPermissions, updateBlockAttributes, canInsertBlockType, insertOrReplaceBlocks);
|
|
201
201
|
const _onHTMLDrop = onHTMLDrop(targetRootClientId, targetBlockIndex, insertOrReplaceBlocks);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","cloneBlock","findTransform","getBlockTransforms","pasteHandler","useDispatch","useSelect","useRegistry","getFilesFromDataTransfer","store","blockEditorStore","parseDropEvent","event","result","srcRootClientId","srcClientIds","srcIndex","type","blocks","dataTransfer","Object","assign","JSON","parse","getData","err","onBlockDrop","targetRootClientId","targetBlockIndex","getBlockIndex","getClientIdsOfDescendants","moveBlocks","insertOrReplaceBlocks","clearSelectedBlock","sourceRootClientId","sourceClientIds","dropType","blocksToInsert","map","block","sourceBlockIndex","includes","some","id","isAtSameLevel","draggedBlockCount","length","insertIndex","onFilesDrop","hasUploadPermissions","updateBlockAttributes","canInsertBlockType","files","transformation","transform","blockName","isMatch","onHTMLDrop","HTML","mode","useOnBlockDrop","options","operation","select","getSettings","mediaUpload","getBlockOrder","getBlocksByClientId","insertBlocks","moveBlocksToPosition","replaceBlocks","removeBlocks","registry","updateSelection","initialPosition","clientIds","clientId","undefined","sourceBlocks","targetBlockClientIds","targetBlockClientId","batch","_onDrop","_onFilesDrop","_onHTMLDrop","html"],"sources":["@wordpress/block-editor/src/components/use-on-block-drop/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport {\n\tcloneBlock,\n\tfindTransform,\n\tgetBlockTransforms,\n\tpasteHandler,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('react').SyntheticEvent} SyntheticEvent */\n/** @typedef {import('./types').WPDropOperation} WPDropOperation */\n\n/**\n * Retrieve the data for a block drop event.\n *\n * @param {SyntheticEvent} event The drop event.\n *\n * @return {Object} An object with block drag and drop data.\n */\nexport function parseDropEvent( event ) {\n\tlet result = {\n\t\tsrcRootClientId: null,\n\t\tsrcClientIds: null,\n\t\tsrcIndex: null,\n\t\ttype: null,\n\t\tblocks: null,\n\t};\n\n\tif ( ! event.dataTransfer ) {\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tresult = Object.assign(\n\t\t\tresult,\n\t\t\tJSON.parse( event.dataTransfer.getData( 'wp-blocks' ) )\n\t\t);\n\t} catch ( err ) {\n\t\treturn result;\n\t}\n\n\treturn result;\n}\n\n/**\n * A function that returns an event handler function for block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} getBlockIndex A function that gets the index of a block.\n * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.\n * @param {Function} moveBlocks A function that moves blocks.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n * @param {Function} clearSelectedBlock A function that clears block selection.\n * @return {Function} The event handler for a block drop event.\n */\nexport function onBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tgetBlockIndex,\n\tgetClientIdsOfDescendants,\n\tmoveBlocks,\n\tinsertOrReplaceBlocks,\n\tclearSelectedBlock\n) {\n\treturn ( event ) => {\n\t\tconst {\n\t\t\tsrcRootClientId: sourceRootClientId,\n\t\t\tsrcClientIds: sourceClientIds,\n\t\t\ttype: dropType,\n\t\t\tblocks,\n\t\t} = parseDropEvent( event );\n\n\t\t// If the user is inserting a block.\n\t\tif ( dropType === 'inserter' ) {\n\t\t\tclearSelectedBlock();\n\t\t\tconst blocksToInsert = blocks.map( ( block ) =>\n\t\t\t\tcloneBlock( block )\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocksToInsert, true, null );\n\t\t}\n\n\t\t// If the user is moving a block.\n\t\tif ( dropType === 'block' ) {\n\t\t\tconst sourceBlockIndex = getBlockIndex( sourceClientIds[ 0 ] );\n\n\t\t\t// If the user is dropping to the same position, return early.\n\t\t\tif (\n\t\t\t\tsourceRootClientId === targetRootClientId &&\n\t\t\t\tsourceBlockIndex === targetBlockIndex\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is attempting to drop a block within its own\n\t\t\t// nested blocks, return early as this would create infinite\n\t\t\t// recursion.\n\t\t\tif (\n\t\t\t\tsourceClientIds.includes( targetRootClientId ) ||\n\t\t\t\tgetClientIdsOfDescendants( sourceClientIds ).some(\n\t\t\t\t\t( id ) => id === targetRootClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isAtSameLevel = sourceRootClientId === targetRootClientId;\n\t\t\tconst draggedBlockCount = sourceClientIds.length;\n\n\t\t\t// If the block is kept at the same level and moved downwards,\n\t\t\t// subtract to take into account that the blocks being dragged\n\t\t\t// were removed from the block list above the insertion point.\n\t\t\tconst insertIndex =\n\t\t\t\tisAtSameLevel && sourceBlockIndex < targetBlockIndex\n\t\t\t\t\t? targetBlockIndex - draggedBlockCount\n\t\t\t\t\t: targetBlockIndex;\n\n\t\t\tmoveBlocks( sourceClientIds, sourceRootClientId, insertIndex );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related file drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {boolean} hasUploadPermissions Whether the user has upload permissions.\n * @param {Function} updateBlockAttributes A function that updates a block's attributes.\n * @param {Function} canInsertBlockType A function that returns checks whether a block type can be inserted.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related file drop event.\n */\nexport function onFilesDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\thasUploadPermissions,\n\tupdateBlockAttributes,\n\tcanInsertBlockType,\n\tinsertOrReplaceBlocks\n) {\n\treturn ( files ) => {\n\t\tif ( ! hasUploadPermissions ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformation = findTransform(\n\t\t\tgetBlockTransforms( 'from' ),\n\t\t\t( transform ) =>\n\t\t\t\ttransform.type === 'files' &&\n\t\t\t\tcanInsertBlockType( transform.blockName, targetRootClientId ) &&\n\t\t\t\ttransform.isMatch( files )\n\t\t);\n\n\t\tif ( transformation ) {\n\t\t\tconst blocks = transformation.transform(\n\t\t\t\tfiles,\n\t\t\t\tupdateBlockAttributes\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related HTML drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related HTML drop event.\n */\nexport function onHTMLDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tinsertOrReplaceBlocks\n) {\n\treturn ( HTML ) => {\n\t\tconst blocks = pasteHandler( { HTML, mode: 'BLOCKS' } );\n\n\t\tif ( blocks.length ) {\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A React hook for handling block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Object} options The optional options.\n * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.\n *\n * @return {Function} A function to be passed to the onDrop handler.\n */\nexport default function useOnBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\toptions = {}\n) {\n\tconst { operation = 'insert' } = options;\n\tconst hasUploadPermissions = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().mediaUpload,\n\t\t[]\n\t);\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tgetBlockOrder,\n\t\tgetBlocksByClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tinsertBlocks,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\tclearSelectedBlock,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst registry = useRegistry();\n\n\tconst insertOrReplaceBlocks = useCallback(\n\t\t( blocks, updateSelection = true, initialPosition = 0 ) => {\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\tconst clientIds = getBlockOrder( targetRootClientId );\n\t\t\t\tconst clientId = clientIds[ targetBlockIndex ];\n\n\t\t\t\treplaceBlocks( clientId, blocks, undefined, initialPosition );\n\t\t\t} else {\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tblocks,\n\t\t\t\t\ttargetBlockIndex,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tupdateSelection,\n\t\t\t\t\tinitialPosition\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\toperation,\n\t\t\tgetBlockOrder,\n\t\t\tinsertBlocks,\n\t\t\treplaceBlocks,\n\t\t\ttargetBlockIndex,\n\t\t\ttargetRootClientId,\n\t\t]\n\t);\n\n\tconst moveBlocks = useCallback(\n\t\t( sourceClientIds, sourceRootClientId, insertIndex ) => {\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\tconst sourceBlocks = getBlocksByClientId( sourceClientIds );\n\t\t\t\tconst targetBlockClientIds =\n\t\t\t\t\tgetBlockOrder( targetRootClientId );\n\t\t\t\tconst targetBlockClientId =\n\t\t\t\t\ttargetBlockClientIds[ targetBlockIndex ];\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t// Remove the source blocks.\n\t\t\t\t\tremoveBlocks( sourceClientIds, false );\n\t\t\t\t\t// Replace the target block with the source blocks.\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\ttargetBlockClientId,\n\t\t\t\t\t\tsourceBlocks,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t0\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\tsourceClientIds,\n\t\t\t\t\tsourceRootClientId,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tinsertIndex\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\toperation,\n\t\t\tgetBlockOrder,\n\t\t\tgetBlocksByClientId,\n\t\t\tinsertBlocks,\n\t\t\tmoveBlocksToPosition,\n\t\t\tremoveBlocks,\n\t\t\ttargetBlockIndex,\n\t\t\ttargetRootClientId,\n\t\t]\n\t);\n\n\tconst _onDrop = onBlockDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tmoveBlocks,\n\t\tinsertOrReplaceBlocks,\n\t\tclearSelectedBlock\n\t);\n\tconst _onFilesDrop = onFilesDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\thasUploadPermissions,\n\t\tupdateBlockAttributes,\n\t\tcanInsertBlockType,\n\t\tinsertOrReplaceBlocks\n\t);\n\tconst _onHTMLDrop = onHTMLDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tinsertOrReplaceBlocks\n\t);\n\n\treturn ( event ) => {\n\t\tconst files = getFilesFromDataTransfer( event.dataTransfer );\n\t\tconst html = event.dataTransfer.getData( 'text/html' );\n\n\t\t/**\n\t\t * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.\n\t\t * The order of the checks is important to recognise the HTML drop.\n\t\t */\n\t\tif ( html ) {\n\t\t\t_onHTMLDrop( html );\n\t\t} else if ( files.length ) {\n\t\t\t_onFilesDrop( files );\n\t\t} else {\n\t\t\t_onDrop( event );\n\t\t}\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useCallback","cloneBlock","findTransform","getBlockTransforms","pasteHandler","useDispatch","useSelect","useRegistry","getFilesFromDataTransfer","store","blockEditorStore","parseDropEvent","event","result","srcRootClientId","srcClientIds","srcIndex","type","blocks","dataTransfer","Object","assign","JSON","parse","getData","err","onBlockDrop","targetRootClientId","targetBlockIndex","getBlockIndex","getClientIdsOfDescendants","moveBlocks","insertOrReplaceBlocks","clearSelectedBlock","sourceRootClientId","sourceClientIds","dropType","blocksToInsert","map","block","sourceBlockIndex","includes","some","id","isAtSameLevel","draggedBlockCount","length","insertIndex","onFilesDrop","hasUploadPermissions","updateBlockAttributes","canInsertBlockType","files","transformation","transform","blockName","isMatch","onHTMLDrop","HTML","mode","useOnBlockDrop","options","operation","select","getSettings","mediaUpload","getBlockOrder","getBlocksByClientId","insertBlocks","moveBlocksToPosition","replaceBlocks","removeBlocks","registry","updateSelection","initialPosition","clientIds","clientId","undefined","sourceBlocks","targetBlockClientIds","targetBlockClientId","batch","_onDrop","_onFilesDrop","_onHTMLDrop","html"],"sources":["@wordpress/block-editor/src/components/use-on-block-drop/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport {\n\tcloneBlock,\n\tfindTransform,\n\tgetBlockTransforms,\n\tpasteHandler,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('react').SyntheticEvent} SyntheticEvent */\n/** @typedef {import('./types').WPDropOperation} WPDropOperation */\n\n/**\n * Retrieve the data for a block drop event.\n *\n * @param {SyntheticEvent} event The drop event.\n *\n * @return {Object} An object with block drag and drop data.\n */\nexport function parseDropEvent( event ) {\n\tlet result = {\n\t\tsrcRootClientId: null,\n\t\tsrcClientIds: null,\n\t\tsrcIndex: null,\n\t\ttype: null,\n\t\tblocks: null,\n\t};\n\n\tif ( ! event.dataTransfer ) {\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tresult = Object.assign(\n\t\t\tresult,\n\t\t\tJSON.parse( event.dataTransfer.getData( 'wp-blocks' ) )\n\t\t);\n\t} catch ( err ) {\n\t\treturn result;\n\t}\n\n\treturn result;\n}\n\n/**\n * A function that returns an event handler function for block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} getBlockIndex A function that gets the index of a block.\n * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.\n * @param {Function} moveBlocks A function that moves blocks.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n * @param {Function} clearSelectedBlock A function that clears block selection.\n * @return {Function} The event handler for a block drop event.\n */\nexport function onBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tgetBlockIndex,\n\tgetClientIdsOfDescendants,\n\tmoveBlocks,\n\tinsertOrReplaceBlocks,\n\tclearSelectedBlock\n) {\n\treturn ( event ) => {\n\t\tconst {\n\t\t\tsrcRootClientId: sourceRootClientId,\n\t\t\tsrcClientIds: sourceClientIds,\n\t\t\ttype: dropType,\n\t\t\tblocks,\n\t\t} = parseDropEvent( event );\n\n\t\t// If the user is inserting a block.\n\t\tif ( dropType === 'inserter' ) {\n\t\t\tclearSelectedBlock();\n\t\t\tconst blocksToInsert = blocks.map( ( block ) =>\n\t\t\t\tcloneBlock( block )\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocksToInsert, true, null );\n\t\t}\n\n\t\t// If the user is moving a block.\n\t\tif ( dropType === 'block' ) {\n\t\t\tconst sourceBlockIndex = getBlockIndex( sourceClientIds[ 0 ] );\n\n\t\t\t// If the user is dropping to the same position, return early.\n\t\t\tif (\n\t\t\t\tsourceRootClientId === targetRootClientId &&\n\t\t\t\tsourceBlockIndex === targetBlockIndex\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is attempting to drop a block within its own\n\t\t\t// nested blocks, return early as this would create infinite\n\t\t\t// recursion.\n\t\t\tif (\n\t\t\t\tsourceClientIds.includes( targetRootClientId ) ||\n\t\t\t\tgetClientIdsOfDescendants( sourceClientIds ).some(\n\t\t\t\t\t( id ) => id === targetRootClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isAtSameLevel = sourceRootClientId === targetRootClientId;\n\t\t\tconst draggedBlockCount = sourceClientIds.length;\n\n\t\t\t// If the block is kept at the same level and moved downwards,\n\t\t\t// subtract to take into account that the blocks being dragged\n\t\t\t// were removed from the block list above the insertion point.\n\t\t\tconst insertIndex =\n\t\t\t\tisAtSameLevel && sourceBlockIndex < targetBlockIndex\n\t\t\t\t\t? targetBlockIndex - draggedBlockCount\n\t\t\t\t\t: targetBlockIndex;\n\n\t\t\tmoveBlocks( sourceClientIds, sourceRootClientId, insertIndex );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related file drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {boolean} hasUploadPermissions Whether the user has upload permissions.\n * @param {Function} updateBlockAttributes A function that updates a block's attributes.\n * @param {Function} canInsertBlockType A function that returns checks whether a block type can be inserted.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related file drop event.\n */\nexport function onFilesDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\thasUploadPermissions,\n\tupdateBlockAttributes,\n\tcanInsertBlockType,\n\tinsertOrReplaceBlocks\n) {\n\treturn ( files ) => {\n\t\tif ( ! hasUploadPermissions ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformation = findTransform(\n\t\t\tgetBlockTransforms( 'from' ),\n\t\t\t( transform ) =>\n\t\t\t\ttransform.type === 'files' &&\n\t\t\t\tcanInsertBlockType( transform.blockName, targetRootClientId ) &&\n\t\t\t\ttransform.isMatch( files )\n\t\t);\n\n\t\tif ( transformation ) {\n\t\t\tconst blocks = transformation.transform(\n\t\t\t\tfiles,\n\t\t\t\tupdateBlockAttributes\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related HTML drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related HTML drop event.\n */\nexport function onHTMLDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tinsertOrReplaceBlocks\n) {\n\treturn ( HTML ) => {\n\t\tconst blocks = pasteHandler( { HTML, mode: 'BLOCKS' } );\n\n\t\tif ( blocks.length ) {\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A React hook for handling block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Object} options The optional options.\n * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.\n *\n * @return {Function} A function to be passed to the onDrop handler.\n */\nexport default function useOnBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\toptions = {}\n) {\n\tconst { operation = 'insert' } = options;\n\tconst hasUploadPermissions = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().mediaUpload,\n\t\t[]\n\t);\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tgetBlockOrder,\n\t\tgetBlocksByClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tinsertBlocks,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\tclearSelectedBlock,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst registry = useRegistry();\n\n\tconst insertOrReplaceBlocks = useCallback(\n\t\t( blocks, updateSelection = true, initialPosition = 0 ) => {\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\tconst clientIds = getBlockOrder( targetRootClientId );\n\t\t\t\tconst clientId = clientIds[ targetBlockIndex ];\n\n\t\t\t\treplaceBlocks( clientId, blocks, undefined, initialPosition );\n\t\t\t} else {\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tblocks,\n\t\t\t\t\ttargetBlockIndex,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tupdateSelection,\n\t\t\t\t\tinitialPosition\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\toperation,\n\t\t\tgetBlockOrder,\n\t\t\tinsertBlocks,\n\t\t\treplaceBlocks,\n\t\t\ttargetBlockIndex,\n\t\t\ttargetRootClientId,\n\t\t]\n\t);\n\n\tconst moveBlocks = useCallback(\n\t\t( sourceClientIds, sourceRootClientId, insertIndex ) => {\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\tconst sourceBlocks = getBlocksByClientId( sourceClientIds );\n\t\t\t\tconst targetBlockClientIds =\n\t\t\t\t\tgetBlockOrder( targetRootClientId );\n\t\t\t\tconst targetBlockClientId =\n\t\t\t\t\ttargetBlockClientIds[ targetBlockIndex ];\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t// Remove the source blocks.\n\t\t\t\t\tremoveBlocks( sourceClientIds, false );\n\t\t\t\t\t// Replace the target block with the source blocks.\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\ttargetBlockClientId,\n\t\t\t\t\t\tsourceBlocks,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t0\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\tsourceClientIds,\n\t\t\t\t\tsourceRootClientId,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tinsertIndex\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\toperation,\n\t\t\tgetBlockOrder,\n\t\t\tgetBlocksByClientId,\n\t\t\tmoveBlocksToPosition,\n\t\t\tregistry,\n\t\t\tremoveBlocks,\n\t\t\treplaceBlocks,\n\t\t\ttargetBlockIndex,\n\t\t\ttargetRootClientId,\n\t\t]\n\t);\n\n\tconst _onDrop = onBlockDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tmoveBlocks,\n\t\tinsertOrReplaceBlocks,\n\t\tclearSelectedBlock\n\t);\n\tconst _onFilesDrop = onFilesDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\thasUploadPermissions,\n\t\tupdateBlockAttributes,\n\t\tcanInsertBlockType,\n\t\tinsertOrReplaceBlocks\n\t);\n\tconst _onHTMLDrop = onHTMLDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tinsertOrReplaceBlocks\n\t);\n\n\treturn ( event ) => {\n\t\tconst files = getFilesFromDataTransfer( event.dataTransfer );\n\t\tconst html = event.dataTransfer.getData( 'text/html' );\n\n\t\t/**\n\t\t * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.\n\t\t * The order of the checks is important to recognise the HTML drop.\n\t\t */\n\t\tif ( html ) {\n\t\t\t_onHTMLDrop( html );\n\t\t} else if ( files.length ) {\n\t\t\t_onFilesDrop( files );\n\t\t} else {\n\t\t\t_onDrop( event );\n\t\t}\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","useResizeCanvas","deviceType","actualWidth","updateActualWidth","window","innerWidth","resizeListener","addEventListener","removeEventListener","getCanvasWidth","device","deviceWidth","marginValue","innerHeight","contentInlineStyles","height","marginVertical","marginHorizontal","width","marginTop","marginBottom","marginLeft","marginRight","borderRadius","border","overflowY"],"sources":["@wordpress/block-editor/src/components/use-resize-canvas/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\n\n/**\n * Function to resize the editor window.\n *\n * @param {string} deviceType Used for determining the size of the container (e.g. Desktop, Tablet, Mobile)\n *\n * @return {Object} Inline styles to be added to resizable container.\n */\nexport default function useResizeCanvas( deviceType ) {\n\tconst [ actualWidth, updateActualWidth ] = useState( window.innerWidth );\n\n\tuseEffect( () => {\n\t\tif ( deviceType === 'Desktop' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeListener = () => updateActualWidth( window.innerWidth );\n\t\twindow.addEventListener( 'resize', resizeListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'resize', resizeListener );\n\t\t};\n\t}, [ deviceType ] );\n\n\tconst getCanvasWidth = ( device ) => {\n\t\tlet deviceWidth;\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\t\tdeviceWidth = 780;\n\t\t\t\tbreak;\n\t\t\tcase 'Mobile':\n\t\t\t\tdeviceWidth = 360;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\n\t\treturn deviceWidth < actualWidth ? deviceWidth : actualWidth;\n\t};\n\n\tconst marginValue = () => ( window.innerHeight < 800 ? 36 : 72 );\n\n\tconst contentInlineStyles = ( device ) => {\n\t\tconst height = device === 'Mobile' ? '768px' : '1024px';\n\t\tconst marginVertical = marginValue() + 'px';\n\t\tconst marginHorizontal = 'auto';\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\tcase 'Mobile':\n\t\t\t\treturn {\n\t\t\t\t\twidth: getCanvasWidth( device ),\n\t\t\t\t\t// Keeping margin styles separate to avoid warnings\n\t\t\t\t\t// when those props get overridden in the iframe component\n\t\t\t\t\tmarginTop: marginVertical,\n\t\t\t\t\tmarginBottom: marginVertical,\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t\theight,\n\t\t\t\t\tborderRadius: '2px 2px 2px 2px',\n\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn
|
|
1
|
+
{"version":3,"names":["useEffect","useState","useResizeCanvas","deviceType","actualWidth","updateActualWidth","window","innerWidth","resizeListener","addEventListener","removeEventListener","getCanvasWidth","device","deviceWidth","marginValue","innerHeight","contentInlineStyles","height","marginVertical","marginHorizontal","width","marginTop","marginBottom","marginLeft","marginRight","borderRadius","border","overflowY"],"sources":["@wordpress/block-editor/src/components/use-resize-canvas/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\n\n/**\n * Function to resize the editor window.\n *\n * @param {string} deviceType Used for determining the size of the container (e.g. Desktop, Tablet, Mobile)\n *\n * @return {Object} Inline styles to be added to resizable container.\n */\nexport default function useResizeCanvas( deviceType ) {\n\tconst [ actualWidth, updateActualWidth ] = useState( window.innerWidth );\n\n\tuseEffect( () => {\n\t\tif ( deviceType === 'Desktop' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeListener = () => updateActualWidth( window.innerWidth );\n\t\twindow.addEventListener( 'resize', resizeListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'resize', resizeListener );\n\t\t};\n\t}, [ deviceType ] );\n\n\tconst getCanvasWidth = ( device ) => {\n\t\tlet deviceWidth;\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\t\tdeviceWidth = 780;\n\t\t\t\tbreak;\n\t\t\tcase 'Mobile':\n\t\t\t\tdeviceWidth = 360;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\n\t\treturn deviceWidth < actualWidth ? deviceWidth : actualWidth;\n\t};\n\n\tconst marginValue = () => ( window.innerHeight < 800 ? 36 : 72 );\n\n\tconst contentInlineStyles = ( device ) => {\n\t\tconst height = device === 'Mobile' ? '768px' : '1024px';\n\t\tconst marginVertical = marginValue() + 'px';\n\t\tconst marginHorizontal = 'auto';\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\tcase 'Mobile':\n\t\t\t\treturn {\n\t\t\t\t\twidth: getCanvasWidth( device ),\n\t\t\t\t\t// Keeping margin styles separate to avoid warnings\n\t\t\t\t\t// when those props get overridden in the iframe component\n\t\t\t\t\tmarginTop: marginVertical,\n\t\t\t\t\tmarginBottom: marginVertical,\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t\theight,\n\t\t\t\t\tborderRadius: '2px 2px 2px 2px',\n\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t};\n\t\t}\n\t};\n\n\treturn contentInlineStyles( deviceType );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,oBAAoB;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,eAAeA,CAAEC,UAAU,EAAG;EACrD,MAAM,CAAEC,WAAW,EAAEC,iBAAiB,CAAE,GAAGJ,QAAQ,CAAEK,MAAM,CAACC,UAAW,CAAC;EAExEP,SAAS,CAAE,MAAM;IAChB,IAAKG,UAAU,KAAK,SAAS,EAAG;MAC/B;IACD;IAEA,MAAMK,cAAc,GAAGA,CAAA,KAAMH,iBAAiB,CAAEC,MAAM,CAACC,UAAW,CAAC;IACnED,MAAM,CAACG,gBAAgB,CAAE,QAAQ,EAAED,cAAe,CAAC;IAEnD,OAAO,MAAM;MACZF,MAAM,CAACI,mBAAmB,CAAE,QAAQ,EAAEF,cAAe,CAAC;IACvD,CAAC;EACF,CAAC,EAAE,CAAEL,UAAU,CAAG,CAAC;EAEnB,MAAMQ,cAAc,GAAKC,MAAM,IAAM;IACpC,IAAIC,WAAW;IAEf,QAASD,MAAM;MACd,KAAK,QAAQ;QACZC,WAAW,GAAG,GAAG;QACjB;MACD,KAAK,QAAQ;QACZA,WAAW,GAAG,GAAG;QACjB;MACD;QACC,OAAO,IAAI;IACb;IAEA,OAAOA,WAAW,GAAGT,WAAW,GAAGS,WAAW,GAAGT,WAAW;EAC7D,CAAC;EAED,MAAMU,WAAW,GAAGA,CAAA,KAAQR,MAAM,CAACS,WAAW,GAAG,GAAG,GAAG,EAAE,GAAG,EAAI;EAEhE,MAAMC,mBAAmB,GAAKJ,MAAM,IAAM;IACzC,MAAMK,MAAM,GAAGL,MAAM,KAAK,QAAQ,GAAG,OAAO,GAAG,QAAQ;IACvD,MAAMM,cAAc,GAAGJ,WAAW,CAAC,CAAC,GAAG,IAAI;IAC3C,MAAMK,gBAAgB,GAAG,MAAM;IAE/B,QAASP,MAAM;MACd,KAAK,QAAQ;MACb,KAAK,QAAQ;QACZ,OAAO;UACNQ,KAAK,EAAET,cAAc,CAAEC,MAAO,CAAC;UAC/B;UACA;UACAS,SAAS,EAAEH,cAAc;UACzBI,YAAY,EAAEJ,cAAc;UAC5BK,UAAU,EAAEJ,gBAAgB;UAC5BK,WAAW,EAAEL,gBAAgB;UAC7BF,MAAM;UACNQ,YAAY,EAAE,iBAAiB;UAC/BC,MAAM,EAAE,gBAAgB;UACxBC,SAAS,EAAE;QACZ,CAAC;MACF;QACC,OAAO;UACNJ,UAAU,EAAEJ,gBAAgB;UAC5BK,WAAW,EAAEL;QACd,CAAC;IACH;EACD,CAAC;EAED,OAAOH,mBAAmB,CAAEb,UAAW,CAAC;AACzC"}
|
|
@@ -80,7 +80,7 @@ const removeCustomPrefixes = path => {
|
|
|
80
80
|
* @param {Object} value Object to merge
|
|
81
81
|
* @return {Array} Array of merged items
|
|
82
82
|
*/
|
|
83
|
-
function mergeOrigins(value) {
|
|
83
|
+
export function mergeOrigins(value) {
|
|
84
84
|
let result = mergeCache.get(value);
|
|
85
85
|
if (!result) {
|
|
86
86
|
result = ['default', 'theme', 'custom'].flatMap(key => {
|
|
@@ -93,6 +93,18 @@ function mergeOrigins(value) {
|
|
|
93
93
|
}
|
|
94
94
|
const mergeCache = new WeakMap();
|
|
95
95
|
|
|
96
|
+
/**
|
|
97
|
+
* For settings like `color.palette`, which have a value that is an object
|
|
98
|
+
* with `default`, `theme`, `custom`, with field values that are arrays of
|
|
99
|
+
* items, see if any of the three origins have values.
|
|
100
|
+
*
|
|
101
|
+
* @param {Object} value Object to check
|
|
102
|
+
* @return {boolean} Whether the object has values in any of the three origins
|
|
103
|
+
*/
|
|
104
|
+
export function hasMergedOrigins(value) {
|
|
105
|
+
return ['default', 'theme', 'custom'].some(key => value?.[key]?.length);
|
|
106
|
+
}
|
|
107
|
+
|
|
96
108
|
/**
|
|
97
109
|
* Hook that retrieves the given settings for the block instance in use.
|
|
98
110
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__EXPERIMENTAL_PATHS_WITH_MERGE","PATHS_WITH_MERGE","hasBlockSupport","useSelect","deprecated","useMemo","applyFilters","useBlockEditContext","store","blockEditorStore","getValueFromObjectPath","blockedPaths","deprecatedFlags","settings","colors","gradients","disableCustomColors","undefined","disableCustomGradients","fontSizes","disableCustomFontSizes","enableCustomLineHeight","enableCustomUnits","enableCustomSpacing","prefixedFlags","removeCustomPrefixes","path","mergeOrigins","value","result","mergeCache","get","flatMap","key","_value$key","set","WeakMap","useSettings","paths","name","blockName","clientId","select","candidates","getBlockParents","filter","candidateClientId","candidateBlockName","getBlockName","map","includes","console","warn","normalizedPath","_getValueFromObjectPa","candidateAtts","getBlockAttributes","blocks","getSettings","__experimentalFeatures","deprecatedSettingsValue","useSetting","since","alternative","note"],"sources":["@wordpress/block-editor/src/components/use-settings/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_PATHS_WITH_MERGE as PATHS_WITH_MERGE,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { useMemo } from '@wordpress/element';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { store as blockEditorStore } from '../../store';\nimport { getValueFromObjectPath } from '../../utils/object';\n\nconst blockedPaths = [\n\t'color',\n\t'border',\n\t'dimensions',\n\t'typography',\n\t'spacing',\n];\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) => settings.colors,\n\t'color.gradients': ( settings ) => settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) => settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.lineHeight': ( settings ) => settings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw', '%' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.padding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst prefixedFlags = {\n\t/*\n\t * These were only available in the plugin\n\t * and can be removed when the minimum WordPress version\n\t * for the plugin is 5.9.\n\t */\n\t'border.customColor': 'border.color',\n\t'border.customStyle': 'border.style',\n\t'border.customWidth': 'border.width',\n\t'typography.customFontStyle': 'typography.fontStyle',\n\t'typography.customFontWeight': 'typography.fontWeight',\n\t'typography.customLetterSpacing': 'typography.letterSpacing',\n\t'typography.customTextDecorations': 'typography.textDecoration',\n\t'typography.customTextTransforms': 'typography.textTransform',\n\t/*\n\t * These were part of WordPress 5.8 and we need to keep them.\n\t */\n\t'border.customRadius': 'border.radius',\n\t'spacing.customMargin': 'spacing.margin',\n\t'spacing.customPadding': 'spacing.padding',\n\t'typography.customLineHeight': 'typography.lineHeight',\n};\n\n/**\n * Remove `custom` prefixes for flags that did not land in 5.8.\n *\n * This provides continued support for `custom` prefixed properties. It will\n * be removed once third party devs have had sufficient time to update themes,\n * plugins, etc.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34485\n *\n * @param {string} path Path to desired value in settings.\n * @return {string} The value for defined setting.\n */\nconst removeCustomPrefixes = ( path ) => {\n\treturn prefixedFlags[ path ] || path;\n};\n\n/**\n * For settings like `color.palette`, which have a value that is an object\n * with `default`, `theme`, `custom`, with field values that are arrays of\n * items, merge these three arrays into one and return it. The calculation\n * is memoized so that identical input values produce identical output.\n * @param {Object} value Object to merge\n * @return {Array} Array of merged items\n */\nfunction mergeOrigins( value ) {\n\tlet result = mergeCache.get( value );\n\tif ( ! result ) {\n\t\tresult = [ 'default', 'theme', 'custom' ].flatMap(\n\t\t\t( key ) => value[ key ] ?? []\n\t\t);\n\t\tmergeCache.set( value, result );\n\t}\n\treturn result;\n}\nconst mergeCache = new WeakMap();\n\n/**\n * Hook that retrieves the given settings for the block instance in use.\n *\n * It looks up the settings first in the block instance hierarchy.\n * If none are found, it'll look them up in the block editor settings.\n *\n * @param {string[]} paths The paths to the settings.\n * @return {any[]} Returns the values defined for the settings.\n * @example\n * ```js\n * const [ fixed, sticky ] = useSettings( 'position.fixed', 'position.sticky' );\n * ```\n */\nexport function useSettings( ...paths ) {\n\tconst { name: blockName, clientId = null } = useBlockEditContext();\n\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tpaths = useMemo( () => paths, paths );\n\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst candidates = clientId\n\t\t\t\t? [\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t...select( blockEditorStore ).getBlockParents(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t/* ascending */ true\n\t\t\t\t\t\t),\n\t\t\t\t ].filter( ( candidateClientId ) => {\n\t\t\t\t\t\tconst candidateBlockName =\n\t\t\t\t\t\t\tselect( blockEditorStore ).getBlockName(\n\t\t\t\t\t\t\t\tcandidateClientId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn hasBlockSupport(\n\t\t\t\t\t\t\tcandidateBlockName,\n\t\t\t\t\t\t\t'__experimentalSettings',\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t);\n\t\t\t\t } )\n\t\t\t\t: [];\n\n\t\t\treturn paths.map( ( path ) => {\n\t\t\t\tif ( blockedPaths.includes( path ) ) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'Top level useSetting paths are disabled. Please use a subpath to query the information needed.'\n\t\t\t\t\t);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\t// 0. Allow third parties to filter the block's settings at runtime.\n\t\t\t\tlet result = applyFilters(\n\t\t\t\t\t'blockEditor.useSetting.before',\n\t\t\t\t\tundefined,\n\t\t\t\t\tpath,\n\t\t\t\t\tclientId,\n\t\t\t\t\tblockName\n\t\t\t\t);\n\n\t\t\t\tif ( undefined !== result ) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tconst normalizedPath = removeCustomPrefixes( path );\n\n\t\t\t\t// 1. Take settings from the block instance or its ancestors.\n\t\t\t\t// Start from the current block and work our way up the ancestors.\n\t\t\t\tfor ( const candidateClientId of candidates ) {\n\t\t\t\t\tconst candidateAtts =\n\t\t\t\t\t\tselect( blockEditorStore ).getBlockAttributes(\n\t\t\t\t\t\t\tcandidateClientId\n\t\t\t\t\t\t);\n\t\t\t\t\tresult =\n\t\t\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\t\t\tcandidateAtts.settings?.blocks?.[ blockName ],\n\t\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t\t) ??\n\t\t\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\t\t\tcandidateAtts.settings,\n\t\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t\t);\n\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t// Stop the search for more distant ancestors and move on.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 2. Fall back to the settings from the block editor store (__experimentalFeatures).\n\t\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\t\t\tif ( result === undefined && blockName ) {\n\t\t\t\t\tresult = getValueFromObjectPath(\n\t\t\t\t\t\tsettings.__experimentalFeatures?.blocks?.[ blockName ],\n\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( result === undefined ) {\n\t\t\t\t\tresult = getValueFromObjectPath(\n\t\t\t\t\t\tsettings.__experimentalFeatures,\n\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Return if the setting was found in either the block instance or the store.\n\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\tif ( PATHS_WITH_MERGE[ normalizedPath ] ) {\n\t\t\t\t\t\treturn mergeOrigins( result );\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// 3. Otherwise, use deprecated settings.\n\t\t\t\tconst deprecatedSettingsValue =\n\t\t\t\t\tdeprecatedFlags[ normalizedPath ]?.( settings );\n\t\t\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\t\t\treturn deprecatedSettingsValue;\n\t\t\t\t}\n\n\t\t\t\t// 4. Fallback for typography.dropCap:\n\t\t\t\t// This is only necessary to support typography.dropCap.\n\t\t\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t\t\t// To remove when __experimentalFeatures are ported to core.\n\t\t\t\treturn normalizedPath === 'typography.dropCap'\n\t\t\t\t\t? true\n\t\t\t\t\t: undefined;\n\t\t\t} );\n\t\t},\n\t\t[ blockName, clientId, paths ]\n\t);\n}\n\n/**\n * Hook that retrieves the given setting for the block instance in use.\n *\n * It looks up the setting first in the block instance hierarchy.\n * If none is found, it'll look it up in the block editor settings.\n *\n * @param {string} path The path to the setting.\n * @return {any} Returns the value defined for the setting.\n * @deprecated 6.5.0 Use useSettings instead.\n * @example\n * ```js\n * const isEnabled = useSetting( 'typography.dropCap' );\n * ```\n */\nexport function useSetting( path ) {\n\tdeprecated( 'wp.blockEditor.useSetting', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.useSettings',\n\t\tnote: 'The new useSettings function can retrieve multiple settings at once, with better performance.',\n\t} );\n\n\tconst [ value ] = useSettings( path );\n\treturn value;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["__EXPERIMENTAL_PATHS_WITH_MERGE","PATHS_WITH_MERGE","hasBlockSupport","useSelect","deprecated","useMemo","applyFilters","useBlockEditContext","store","blockEditorStore","getValueFromObjectPath","blockedPaths","deprecatedFlags","settings","colors","gradients","disableCustomColors","undefined","disableCustomGradients","fontSizes","disableCustomFontSizes","enableCustomLineHeight","enableCustomUnits","enableCustomSpacing","prefixedFlags","removeCustomPrefixes","path","mergeOrigins","value","result","mergeCache","get","flatMap","key","_value$key","set","WeakMap","hasMergedOrigins","some","length","useSettings","paths","name","blockName","clientId","select","candidates","getBlockParents","filter","candidateClientId","candidateBlockName","getBlockName","map","includes","console","warn","normalizedPath","_getValueFromObjectPa","candidateAtts","getBlockAttributes","blocks","getSettings","__experimentalFeatures","deprecatedSettingsValue","useSetting","since","alternative","note"],"sources":["@wordpress/block-editor/src/components/use-settings/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_PATHS_WITH_MERGE as PATHS_WITH_MERGE,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { useMemo } from '@wordpress/element';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { store as blockEditorStore } from '../../store';\nimport { getValueFromObjectPath } from '../../utils/object';\n\nconst blockedPaths = [\n\t'color',\n\t'border',\n\t'dimensions',\n\t'typography',\n\t'spacing',\n];\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) => settings.colors,\n\t'color.gradients': ( settings ) => settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) => settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.lineHeight': ( settings ) => settings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw', '%' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.padding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst prefixedFlags = {\n\t/*\n\t * These were only available in the plugin\n\t * and can be removed when the minimum WordPress version\n\t * for the plugin is 5.9.\n\t */\n\t'border.customColor': 'border.color',\n\t'border.customStyle': 'border.style',\n\t'border.customWidth': 'border.width',\n\t'typography.customFontStyle': 'typography.fontStyle',\n\t'typography.customFontWeight': 'typography.fontWeight',\n\t'typography.customLetterSpacing': 'typography.letterSpacing',\n\t'typography.customTextDecorations': 'typography.textDecoration',\n\t'typography.customTextTransforms': 'typography.textTransform',\n\t/*\n\t * These were part of WordPress 5.8 and we need to keep them.\n\t */\n\t'border.customRadius': 'border.radius',\n\t'spacing.customMargin': 'spacing.margin',\n\t'spacing.customPadding': 'spacing.padding',\n\t'typography.customLineHeight': 'typography.lineHeight',\n};\n\n/**\n * Remove `custom` prefixes for flags that did not land in 5.8.\n *\n * This provides continued support for `custom` prefixed properties. It will\n * be removed once third party devs have had sufficient time to update themes,\n * plugins, etc.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34485\n *\n * @param {string} path Path to desired value in settings.\n * @return {string} The value for defined setting.\n */\nconst removeCustomPrefixes = ( path ) => {\n\treturn prefixedFlags[ path ] || path;\n};\n\n/**\n * For settings like `color.palette`, which have a value that is an object\n * with `default`, `theme`, `custom`, with field values that are arrays of\n * items, merge these three arrays into one and return it. The calculation\n * is memoized so that identical input values produce identical output.\n * @param {Object} value Object to merge\n * @return {Array} Array of merged items\n */\nexport function mergeOrigins( value ) {\n\tlet result = mergeCache.get( value );\n\tif ( ! result ) {\n\t\tresult = [ 'default', 'theme', 'custom' ].flatMap(\n\t\t\t( key ) => value[ key ] ?? []\n\t\t);\n\t\tmergeCache.set( value, result );\n\t}\n\treturn result;\n}\nconst mergeCache = new WeakMap();\n\n/**\n * For settings like `color.palette`, which have a value that is an object\n * with `default`, `theme`, `custom`, with field values that are arrays of\n * items, see if any of the three origins have values.\n *\n * @param {Object} value Object to check\n * @return {boolean} Whether the object has values in any of the three origins\n */\nexport function hasMergedOrigins( value ) {\n\treturn [ 'default', 'theme', 'custom' ].some(\n\t\t( key ) => value?.[ key ]?.length\n\t);\n}\n\n/**\n * Hook that retrieves the given settings for the block instance in use.\n *\n * It looks up the settings first in the block instance hierarchy.\n * If none are found, it'll look them up in the block editor settings.\n *\n * @param {string[]} paths The paths to the settings.\n * @return {any[]} Returns the values defined for the settings.\n * @example\n * ```js\n * const [ fixed, sticky ] = useSettings( 'position.fixed', 'position.sticky' );\n * ```\n */\nexport function useSettings( ...paths ) {\n\tconst { name: blockName, clientId = null } = useBlockEditContext();\n\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tpaths = useMemo( () => paths, paths );\n\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst candidates = clientId\n\t\t\t\t? [\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t...select( blockEditorStore ).getBlockParents(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t/* ascending */ true\n\t\t\t\t\t\t),\n\t\t\t\t ].filter( ( candidateClientId ) => {\n\t\t\t\t\t\tconst candidateBlockName =\n\t\t\t\t\t\t\tselect( blockEditorStore ).getBlockName(\n\t\t\t\t\t\t\t\tcandidateClientId\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn hasBlockSupport(\n\t\t\t\t\t\t\tcandidateBlockName,\n\t\t\t\t\t\t\t'__experimentalSettings',\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t);\n\t\t\t\t } )\n\t\t\t\t: [];\n\n\t\t\treturn paths.map( ( path ) => {\n\t\t\t\tif ( blockedPaths.includes( path ) ) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'Top level useSetting paths are disabled. Please use a subpath to query the information needed.'\n\t\t\t\t\t);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\t// 0. Allow third parties to filter the block's settings at runtime.\n\t\t\t\tlet result = applyFilters(\n\t\t\t\t\t'blockEditor.useSetting.before',\n\t\t\t\t\tundefined,\n\t\t\t\t\tpath,\n\t\t\t\t\tclientId,\n\t\t\t\t\tblockName\n\t\t\t\t);\n\n\t\t\t\tif ( undefined !== result ) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tconst normalizedPath = removeCustomPrefixes( path );\n\n\t\t\t\t// 1. Take settings from the block instance or its ancestors.\n\t\t\t\t// Start from the current block and work our way up the ancestors.\n\t\t\t\tfor ( const candidateClientId of candidates ) {\n\t\t\t\t\tconst candidateAtts =\n\t\t\t\t\t\tselect( blockEditorStore ).getBlockAttributes(\n\t\t\t\t\t\t\tcandidateClientId\n\t\t\t\t\t\t);\n\t\t\t\t\tresult =\n\t\t\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\t\t\tcandidateAtts.settings?.blocks?.[ blockName ],\n\t\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t\t) ??\n\t\t\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\t\t\tcandidateAtts.settings,\n\t\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t\t);\n\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t// Stop the search for more distant ancestors and move on.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 2. Fall back to the settings from the block editor store (__experimentalFeatures).\n\t\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\t\t\tif ( result === undefined && blockName ) {\n\t\t\t\t\tresult = getValueFromObjectPath(\n\t\t\t\t\t\tsettings.__experimentalFeatures?.blocks?.[ blockName ],\n\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( result === undefined ) {\n\t\t\t\t\tresult = getValueFromObjectPath(\n\t\t\t\t\t\tsettings.__experimentalFeatures,\n\t\t\t\t\t\tnormalizedPath\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Return if the setting was found in either the block instance or the store.\n\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\tif ( PATHS_WITH_MERGE[ normalizedPath ] ) {\n\t\t\t\t\t\treturn mergeOrigins( result );\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// 3. Otherwise, use deprecated settings.\n\t\t\t\tconst deprecatedSettingsValue =\n\t\t\t\t\tdeprecatedFlags[ normalizedPath ]?.( settings );\n\t\t\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\t\t\treturn deprecatedSettingsValue;\n\t\t\t\t}\n\n\t\t\t\t// 4. Fallback for typography.dropCap:\n\t\t\t\t// This is only necessary to support typography.dropCap.\n\t\t\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t\t\t// To remove when __experimentalFeatures are ported to core.\n\t\t\t\treturn normalizedPath === 'typography.dropCap'\n\t\t\t\t\t? true\n\t\t\t\t\t: undefined;\n\t\t\t} );\n\t\t},\n\t\t[ blockName, clientId, paths ]\n\t);\n}\n\n/**\n * Hook that retrieves the given setting for the block instance in use.\n *\n * It looks up the setting first in the block instance hierarchy.\n * If none is found, it'll look it up in the block editor settings.\n *\n * @param {string} path The path to the setting.\n * @return {any} Returns the value defined for the setting.\n * @deprecated 6.5.0 Use useSettings instead.\n * @example\n * ```js\n * const isEnabled = useSetting( 'typography.dropCap' );\n * ```\n */\nexport function useSetting( path ) {\n\tdeprecated( 'wp.blockEditor.useSetting', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.useSettings',\n\t\tnote: 'The new useSettings function can retrieve multiple settings at once, with better performance.',\n\t} );\n\n\tconst [ value ] = useSettings( path );\n\treturn value;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createElement
|
|
1
|
+
import { createElement } from "react";
|
|
2
2
|
/**
|
|
3
3
|
* External dependencies
|
|
4
4
|
*/
|
|
@@ -7,7 +7,6 @@ import classnames from 'classnames';
|
|
|
7
7
|
/**
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
10
|
-
import { createHigherOrderComponent } from '@wordpress/compose';
|
|
11
10
|
import { addFilter } from '@wordpress/hooks';
|
|
12
11
|
import { getBlockSupport, getBlockType, hasBlockSupport } from '@wordpress/blocks';
|
|
13
12
|
|
|
@@ -91,9 +90,9 @@ export function addAttribute(settings) {
|
|
|
91
90
|
}
|
|
92
91
|
return settings;
|
|
93
92
|
}
|
|
94
|
-
function
|
|
95
|
-
blockName,
|
|
96
|
-
|
|
93
|
+
function BlockEditAlignmentToolbarControlsPure({
|
|
94
|
+
name: blockName,
|
|
95
|
+
align,
|
|
97
96
|
setAttributes
|
|
98
97
|
}) {
|
|
99
98
|
// Compute the block valid alignments by taking into account,
|
|
@@ -124,78 +123,34 @@ function BlockEditAlignmentToolbarControls({
|
|
|
124
123
|
group: "block",
|
|
125
124
|
__experimentalShareWithChildBlocks: true
|
|
126
125
|
}, createElement(BlockAlignmentControl, {
|
|
127
|
-
value:
|
|
126
|
+
value: align,
|
|
128
127
|
onChange: updateAlignment,
|
|
129
128
|
controls: validAlignments
|
|
130
129
|
}));
|
|
131
130
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
blockName: props.name,
|
|
145
|
-
attributes: props.attributes,
|
|
146
|
-
setAttributes: props.setAttributes
|
|
147
|
-
}), createElement(BlockEdit, {
|
|
148
|
-
key: "edit",
|
|
149
|
-
...props
|
|
150
|
-
}));
|
|
151
|
-
}, 'withAlignmentControls');
|
|
152
|
-
function BlockListBlockWithDataAlign({
|
|
153
|
-
block: BlockListBlock,
|
|
154
|
-
props
|
|
131
|
+
export default {
|
|
132
|
+
shareWithChildBlocks: true,
|
|
133
|
+
edit: BlockEditAlignmentToolbarControlsPure,
|
|
134
|
+
useBlockProps,
|
|
135
|
+
attributeKeys: ['align'],
|
|
136
|
+
hasSupport(name) {
|
|
137
|
+
return hasBlockSupport(name, 'align', false);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
function useBlockProps({
|
|
141
|
+
name,
|
|
142
|
+
align
|
|
155
143
|
}) {
|
|
156
|
-
const {
|
|
157
|
-
name,
|
|
158
|
-
attributes
|
|
159
|
-
} = props;
|
|
160
|
-
const {
|
|
161
|
-
align
|
|
162
|
-
} = attributes;
|
|
163
144
|
const blockAllowedAlignments = getValidAlignments(getBlockSupport(name, 'align'), hasBlockSupport(name, 'alignWide', true));
|
|
164
145
|
const validAlignments = useAvailableAlignments(blockAllowedAlignments);
|
|
165
|
-
let wrapperProps = props.wrapperProps;
|
|
166
146
|
if (validAlignments.some(alignment => alignment.name === align)) {
|
|
167
|
-
|
|
168
|
-
...wrapperProps,
|
|
147
|
+
return {
|
|
169
148
|
'data-align': align
|
|
170
149
|
};
|
|
171
150
|
}
|
|
172
|
-
return
|
|
173
|
-
...props,
|
|
174
|
-
wrapperProps: wrapperProps
|
|
175
|
-
});
|
|
151
|
+
return {};
|
|
176
152
|
}
|
|
177
153
|
|
|
178
|
-
/**
|
|
179
|
-
* Override the default block element to add alignment wrapper props.
|
|
180
|
-
*
|
|
181
|
-
* @param {Function} BlockListBlock Original component.
|
|
182
|
-
*
|
|
183
|
-
* @return {Function} Wrapped component.
|
|
184
|
-
*/
|
|
185
|
-
export const withDataAlign = createHigherOrderComponent(BlockListBlock => props => {
|
|
186
|
-
// If an alignment is not assigned, there's no need to go through the
|
|
187
|
-
// effort to validate or assign its value.
|
|
188
|
-
if (props.attributes.align === undefined) {
|
|
189
|
-
return createElement(BlockListBlock, {
|
|
190
|
-
...props
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
return createElement(BlockListBlockWithDataAlign, {
|
|
194
|
-
block: BlockListBlock,
|
|
195
|
-
props: props
|
|
196
|
-
});
|
|
197
|
-
}, 'withDataAlign');
|
|
198
|
-
|
|
199
154
|
/**
|
|
200
155
|
* Override props assigned to save component to inject alignment class name if
|
|
201
156
|
* block supports it.
|
|
@@ -223,7 +178,5 @@ export function addAssignedAlign(props, blockType, attributes) {
|
|
|
223
178
|
return props;
|
|
224
179
|
}
|
|
225
180
|
addFilter('blocks.registerBlockType', 'core/editor/align/addAttribute', addAttribute);
|
|
226
|
-
addFilter('editor.BlockListBlock', 'core/editor/align/with-data-align', withDataAlign);
|
|
227
|
-
addFilter('editor.BlockEdit', 'core/editor/align/with-toolbar-controls', withAlignmentControls);
|
|
228
181
|
addFilter('blocks.getSaveContent.extraProps', 'core/editor/align/addAssignedAlign', addAssignedAlign);
|
|
229
182
|
//# sourceMappingURL=align.js.map
|