@wordpress/block-editor 8.6.0 → 9.2.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 +11 -0
- package/README.md +5 -2
- package/build/components/block-alignment-control/constants.js +48 -0
- package/build/components/block-alignment-control/constants.js.map +1 -0
- package/build/components/block-alignment-control/ui.js +9 -40
- package/build/components/block-alignment-control/ui.js.map +1 -1
- package/build/components/block-alignment-control/ui.native.js +92 -0
- package/build/components/block-alignment-control/ui.native.js.map +1 -0
- package/build/components/block-alignment-matrix-control/index.js +1 -6
- package/build/components/block-alignment-matrix-control/index.js.map +1 -1
- package/build/components/block-content-overlay/index.js +4 -82
- package/build/components/block-content-overlay/index.js.map +1 -1
- package/build/components/block-draggable/draggable-chip.native.js +65 -0
- package/build/components/block-draggable/draggable-chip.native.js.map +1 -0
- package/build/components/block-draggable/dropping-insertion-point.native.js +157 -0
- package/build/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
- package/build/components/block-draggable/index.native.js +488 -0
- package/build/components/block-draggable/index.native.js.map +1 -0
- package/build/components/block-draggable/use-scroll-when-dragging.native.js +130 -0
- package/build/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
- package/build/components/block-list/block-list-context.native.js +195 -0
- package/build/components/block-list/block-list-context.native.js.map +1 -0
- package/build/components/block-list/block-list-item-cell.native.js +67 -0
- package/build/components/block-list/block-list-item-cell.native.js.map +1 -0
- package/build/components/block-list/block-list-item.native.js +12 -9
- package/build/components/block-list/block-list-item.native.js.map +1 -1
- package/build/components/block-list/block.native.js +27 -5
- package/build/components/block-list/block.native.js.map +1 -1
- package/build/components/block-list/index.js +34 -32
- package/build/components/block-list/index.js.map +1 -1
- package/build/components/block-list/index.native.js +75 -23
- package/build/components/block-list/index.native.js.map +1 -1
- package/build/components/block-list/use-block-props/index.js +8 -4
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-block-class-names.js +1 -7
- package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
- package/build/components/block-list/use-in-between-inserter.js +1 -1
- package/build/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build/components/block-mobile-toolbar/index.native.js +10 -3
- package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
- package/build/components/block-mover/index.native.js +17 -4
- package/build/components/block-mover/index.native.js.map +1 -1
- package/build/components/block-navigation/dropdown.js +11 -5
- package/build/components/block-navigation/dropdown.js.map +1 -1
- package/build/components/block-popover/inbetween.js +19 -8
- package/build/components/block-popover/inbetween.js.map +1 -1
- package/build/components/block-popover/index.js +20 -16
- package/build/components/block-popover/index.js.map +1 -1
- package/build/components/block-preview/index.js +1 -1
- package/build/components/block-preview/index.js.map +1 -1
- package/build/components/block-tools/block-selection-button.js +1 -0
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/block-tools/selected-block-popover.js +1 -29
- package/build/components/block-tools/selected-block-popover.js.map +1 -1
- package/build/components/block-variation-transforms/index.js +16 -2
- package/build/components/block-variation-transforms/index.js.map +1 -1
- package/build/components/border-radius-control/input-controls.js +10 -3
- package/build/components/border-radius-control/input-controls.js.map +1 -1
- package/build/components/color-style-selector/index.js +9 -0
- package/build/components/color-style-selector/index.js.map +1 -1
- package/build/components/colors-gradients/dropdown.js +122 -41
- package/build/components/colors-gradients/dropdown.js.map +1 -1
- package/build/components/colors-gradients/panel-color-gradient-settings.js +35 -60
- package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
- package/build/components/convert-to-group-buttons/toolbar.js +22 -5
- package/build/components/convert-to-group-buttons/toolbar.js.map +1 -1
- package/build/components/iframe/index.js +51 -50
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/image-editor/use-save-image.js +3 -1
- package/build/components/image-editor/use-save-image.js.map +1 -1
- package/build/components/index.js +14 -23
- package/build/components/index.js.map +1 -1
- package/build/components/inserter/index.js +21 -7
- package/build/components/inserter/index.js.map +1 -1
- package/build/components/inserter/index.native.js +2 -2
- package/build/components/inserter/index.native.js.map +1 -1
- package/build/components/inserter/quick-inserter.js +4 -5
- package/build/components/inserter/quick-inserter.js.map +1 -1
- package/build/components/link-control/constants.js +11 -1
- package/build/components/link-control/constants.js.map +1 -1
- package/build/components/link-control/search-results.js +4 -3
- package/build/components/link-control/search-results.js.map +1 -1
- package/build/components/link-control/use-search-handler.js +4 -4
- package/build/components/link-control/use-search-handler.js.map +1 -1
- package/build/components/list-view/block.js +15 -15
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +9 -13
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/context.js +1 -4
- package/build/components/list-view/context.js.map +1 -1
- package/build/components/list-view/drop-indicator.js +0 -1
- package/build/components/list-view/drop-indicator.js.map +1 -1
- package/build/components/list-view/index.js +15 -32
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/media-placeholder/index.js +0 -2
- package/build/components/media-placeholder/index.js.map +1 -1
- package/build/components/media-replace-flow/index.js +0 -2
- package/build/components/media-replace-flow/index.js.map +1 -1
- package/build/components/media-upload/index.native.js +10 -4
- package/build/components/media-upload/index.native.js.map +1 -1
- package/build/components/navigable-toolbar/index.js +12 -2
- package/build/components/navigable-toolbar/index.js.map +1 -1
- package/build/components/plain-text/index.native.js +62 -7
- package/build/components/plain-text/index.native.js.map +1 -1
- package/build/components/publish-date-time-picker/index.js +55 -0
- package/build/components/publish-date-time-picker/index.js.map +1 -0
- package/build/components/rich-text/format-toolbar-container.js +0 -1
- package/build/components/rich-text/format-toolbar-container.js.map +1 -1
- package/build/components/rich-text/index.js +2 -2
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +5 -1
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/url-input/index.js +11 -4
- package/build/components/url-input/index.js.map +1 -1
- package/build/components/use-block-drop-zone/index.native.js +167 -0
- package/build/components/use-block-drop-zone/index.native.js.map +1 -0
- package/build/components/use-on-block-drop/index.native.js +95 -0
- package/build/components/use-on-block-drop/index.native.js.map +1 -0
- package/build/components/use-setting/index.js +42 -18
- package/build/components/use-setting/index.js.map +1 -1
- package/build/components/warning/index.js +6 -1
- package/build/components/warning/index.js.map +1 -1
- package/build/components/writing-flow/use-click-selection.js +1 -3
- package/build/components/writing-flow/use-click-selection.js.map +1 -1
- package/build/components/writing-flow/use-input.js +15 -0
- package/build/components/writing-flow/use-input.js.map +1 -1
- package/build/components/writing-flow/use-selection-observer.js +49 -8
- package/build/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build/elements/index.js +9 -0
- package/build/elements/index.js.map +1 -0
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/border.js +2 -7
- package/build/hooks/border.js.map +1 -1
- package/build/hooks/color-panel.js +14 -7
- package/build/hooks/color-panel.js.map +1 -1
- package/build/hooks/color.js +8 -88
- package/build/hooks/color.js.map +1 -1
- package/build/hooks/dimensions.js +16 -6
- package/build/hooks/dimensions.js.map +1 -1
- package/build/hooks/index.js +2 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/margin.js +64 -12
- package/build/hooks/margin.js.map +1 -1
- package/build/hooks/padding.js +60 -12
- package/build/hooks/padding.js.map +1 -1
- package/build/hooks/settings.js +32 -0
- package/build/hooks/settings.js.map +1 -0
- package/build/hooks/style.js +14 -13
- package/build/hooks/style.js.map +1 -1
- package/build/hooks/typography.js +6 -2
- package/build/hooks/typography.js.map +1 -1
- package/build/index.js +14 -0
- package/build/index.js.map +1 -1
- package/build/layouts/flex.js +5 -2
- package/build/layouts/flex.js.map +1 -1
- package/build/store/actions.js +14 -0
- package/build/store/actions.js.map +1 -1
- package/build/store/defaults.js +0 -1
- package/build/store/defaults.js.map +1 -1
- package/build/store/reducer.js +17 -2
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +43 -13
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/block-alignment-control/constants.js +36 -0
- package/build-module/components/block-alignment-control/constants.js.map +1 -0
- package/build-module/components/block-alignment-control/ui.js +4 -35
- package/build-module/components/block-alignment-control/ui.js.map +1 -1
- package/build-module/components/block-alignment-control/ui.native.js +78 -0
- package/build-module/components/block-alignment-control/ui.native.js.map +1 -0
- package/build-module/components/block-alignment-matrix-control/index.js +1 -6
- package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
- package/build-module/components/block-content-overlay/index.js +3 -78
- package/build-module/components/block-content-overlay/index.js.map +1 -1
- package/build-module/components/block-draggable/draggable-chip.native.js +51 -0
- package/build-module/components/block-draggable/draggable-chip.native.js.map +1 -0
- package/build-module/components/block-draggable/dropping-insertion-point.native.js +137 -0
- package/build-module/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
- package/build-module/components/block-draggable/index.native.js +453 -0
- package/build-module/components/block-draggable/index.native.js.map +1 -0
- package/build-module/components/block-draggable/use-scroll-when-dragging.native.js +120 -0
- package/build-module/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
- package/build-module/components/block-list/block-list-context.native.js +179 -0
- package/build-module/components/block-list/block-list-context.native.js.map +1 -0
- package/build-module/components/block-list/block-list-item-cell.native.js +59 -0
- package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -0
- package/build-module/components/block-list/block-list-item.native.js +12 -9
- package/build-module/components/block-list/block-list-item.native.js.map +1 -1
- package/build-module/components/block-list/block.native.js +26 -5
- package/build-module/components/block-list/block.native.js.map +1 -1
- package/build-module/components/block-list/index.js +35 -33
- package/build-module/components/block-list/index.js.map +1 -1
- package/build-module/components/block-list/index.native.js +72 -23
- package/build-module/components/block-list/index.native.js.map +1 -1
- package/build-module/components/block-list/use-block-props/index.js +9 -5
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-block-class-names.js +1 -7
- package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js +1 -1
- package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
- package/build-module/components/block-mobile-toolbar/index.native.js +9 -3
- package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
- package/build-module/components/block-mover/index.native.js +18 -5
- package/build-module/components/block-mover/index.native.js.map +1 -1
- package/build-module/components/block-navigation/dropdown.js +10 -5
- package/build-module/components/block-navigation/dropdown.js.map +1 -1
- package/build-module/components/block-popover/inbetween.js +19 -8
- package/build-module/components/block-popover/inbetween.js.map +1 -1
- package/build-module/components/block-popover/index.js +21 -15
- package/build-module/components/block-popover/index.js.map +1 -1
- package/build-module/components/block-preview/index.js +1 -1
- package/build-module/components/block-preview/index.js.map +1 -1
- package/build-module/components/block-tools/block-selection-button.js +1 -0
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/block-tools/selected-block-popover.js +2 -29
- package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
- package/build-module/components/block-variation-transforms/index.js +13 -2
- package/build-module/components/block-variation-transforms/index.js.map +1 -1
- package/build-module/components/border-radius-control/input-controls.js +11 -4
- package/build-module/components/border-radius-control/input-controls.js.map +1 -1
- package/build-module/components/color-style-selector/index.js +6 -0
- package/build-module/components/color-style-selector/index.js.map +1 -1
- package/build-module/components/colors-gradients/dropdown.js +124 -43
- package/build-module/components/colors-gradients/dropdown.js.map +1 -1
- package/build-module/components/colors-gradients/panel-color-gradient-settings.js +36 -64
- package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
- package/build-module/components/convert-to-group-buttons/toolbar.js +23 -6
- package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -1
- package/build-module/components/iframe/index.js +52 -51
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/image-editor/use-save-image.js +2 -1
- package/build-module/components/image-editor/use-save-image.js.map +1 -1
- package/build-module/components/index.js +2 -3
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/inserter/index.js +21 -7
- package/build-module/components/inserter/index.js.map +1 -1
- package/build-module/components/inserter/index.native.js +2 -2
- package/build-module/components/inserter/index.native.js.map +1 -1
- package/build-module/components/inserter/quick-inserter.js +4 -5
- package/build-module/components/inserter/quick-inserter.js.map +1 -1
- package/build-module/components/link-control/constants.js +5 -0
- package/build-module/components/link-control/constants.js.map +1 -1
- package/build-module/components/link-control/search-results.js +3 -4
- package/build-module/components/link-control/search-results.js.map +1 -1
- package/build-module/components/link-control/use-search-handler.js +5 -5
- package/build-module/components/link-control/use-search-handler.js.map +1 -1
- package/build-module/components/list-view/block.js +15 -16
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +9 -13
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/context.js +1 -4
- package/build-module/components/list-view/context.js.map +1 -1
- package/build-module/components/list-view/drop-indicator.js +0 -1
- package/build-module/components/list-view/drop-indicator.js.map +1 -1
- package/build-module/components/list-view/index.js +15 -31
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/media-placeholder/index.js +0 -2
- package/build-module/components/media-placeholder/index.js.map +1 -1
- package/build-module/components/media-replace-flow/index.js +0 -2
- package/build-module/components/media-replace-flow/index.js.map +1 -1
- package/build-module/components/media-upload/index.native.js +8 -3
- package/build-module/components/media-upload/index.native.js.map +1 -1
- package/build-module/components/navigable-toolbar/index.js +12 -2
- package/build-module/components/navigable-toolbar/index.js.map +1 -1
- package/build-module/components/plain-text/index.native.js +63 -8
- package/build-module/components/plain-text/index.native.js.map +1 -1
- package/build-module/components/publish-date-time-picker/index.js +42 -0
- package/build-module/components/publish-date-time-picker/index.js.map +1 -0
- package/build-module/components/rich-text/format-toolbar-container.js +0 -1
- package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
- package/build-module/components/rich-text/index.js +2 -2
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +5 -1
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/url-input/index.js +11 -4
- package/build-module/components/url-input/index.js.map +1 -1
- package/build-module/components/use-block-drop-zone/index.native.js +148 -0
- package/build-module/components/use-block-drop-zone/index.native.js.map +1 -0
- package/build-module/components/use-on-block-drop/index.native.js +83 -0
- package/build-module/components/use-on-block-drop/index.native.js.map +1 -0
- package/build-module/components/use-setting/index.js +43 -19
- package/build-module/components/use-setting/index.js.map +1 -1
- package/build-module/components/warning/index.js +6 -1
- package/build-module/components/warning/index.js.map +1 -1
- package/build-module/components/writing-flow/use-click-selection.js +1 -3
- package/build-module/components/writing-flow/use-click-selection.js.map +1 -1
- package/build-module/components/writing-flow/use-input.js +15 -0
- package/build-module/components/writing-flow/use-input.js.map +1 -1
- package/build-module/components/writing-flow/use-selection-observer.js +49 -8
- package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
- package/build-module/elements/index.js +2 -0
- package/build-module/elements/index.js.map +1 -0
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/border.js +2 -7
- package/build-module/hooks/border.js.map +1 -1
- package/build-module/hooks/color-panel.js +11 -6
- package/build-module/hooks/color-panel.js.map +1 -1
- package/build-module/hooks/color.js +8 -88
- package/build-module/hooks/color.js.map +1 -1
- package/build-module/hooks/dimensions.js +19 -9
- package/build-module/hooks/dimensions.js.map +1 -1
- package/build-module/hooks/index.js +1 -0
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/margin.js +61 -13
- package/build-module/hooks/margin.js.map +1 -1
- package/build-module/hooks/padding.js +57 -13
- package/build-module/hooks/padding.js.map +1 -1
- package/build-module/hooks/settings.js +29 -0
- package/build-module/hooks/settings.js.map +1 -0
- package/build-module/hooks/style.js +15 -14
- package/build-module/hooks/style.js.map +1 -1
- package/build-module/hooks/typography.js +6 -2
- package/build-module/hooks/typography.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/layouts/flex.js +4 -2
- package/build-module/layouts/flex.js.map +1 -1
- package/build-module/store/actions.js +12 -0
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/defaults.js +0 -1
- package/build-module/store/defaults.js.map +1 -1
- package/build-module/store/reducer.js +17 -2
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +37 -12
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +100 -225
- package/build-style/style.css +100 -225
- package/package.json +30 -30
- package/src/components/block-alignment-control/constants.js +45 -0
- package/src/components/block-alignment-control/ui.js +69 -109
- package/src/components/block-alignment-control/ui.native.js +86 -0
- package/src/components/block-alignment-matrix-control/index.js +1 -5
- package/src/components/block-content-overlay/index.js +8 -95
- package/src/components/block-content-overlay/style.scss +2 -12
- package/src/components/block-draggable/draggable-chip.native.js +49 -0
- package/src/components/block-draggable/dropping-insertion-point.native.js +181 -0
- package/src/components/block-draggable/dropping-insertion-point.native.scss +8 -0
- package/src/components/block-draggable/index.native.js +462 -0
- package/src/components/block-draggable/style.native.scss +19 -0
- package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +73 -0
- package/src/components/block-draggable/test/helpers.native.js +183 -0
- package/src/components/block-draggable/test/index.native.js +496 -0
- package/src/components/block-draggable/use-scroll-when-dragging.native.js +135 -0
- package/src/components/block-list/block-list-context.native.js +175 -0
- package/src/components/block-list/block-list-item-cell.native.js +49 -0
- package/src/components/block-list/block-list-item.native.js +7 -11
- package/src/components/block-list/block.native.js +37 -8
- package/src/components/block-list/index.js +44 -44
- package/src/components/block-list/index.native.js +54 -13
- package/src/components/block-list/style.scss +7 -18
- package/src/components/block-list/test/block-list-context.native.js +253 -0
- package/src/components/block-list/test/fixtures/block-list-context.native.js +79 -0
- package/src/components/block-list/use-block-props/index.js +10 -5
- package/src/components/block-list/use-block-props/use-block-class-names.js +1 -11
- package/src/components/block-list/use-in-between-inserter.js +1 -1
- package/src/components/block-mobile-toolbar/index.native.js +9 -1
- package/src/components/block-mover/index.native.js +22 -6
- package/src/components/block-mover/test/__snapshots__/index.native.js.snap +10 -0
- package/src/components/block-navigation/dropdown.js +12 -8
- package/src/components/block-popover/inbetween.js +21 -8
- package/src/components/block-popover/index.js +18 -15
- package/src/components/block-popover/style.scss +4 -0
- package/src/components/block-preview/index.js +1 -4
- package/src/components/block-switcher/style.scss +2 -39
- package/src/components/block-tools/block-selection-button.js +1 -0
- package/src/components/block-tools/selected-block-popover.js +1 -36
- package/src/components/block-tools/style.scss +1 -12
- package/src/components/block-variation-transforms/index.js +6 -2
- package/src/components/border-radius-control/input-controls.js +16 -8
- package/src/components/border-radius-control/style.scss +3 -2
- package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
- package/src/components/color-style-selector/index.js +18 -9
- package/src/components/colors-gradients/dropdown.js +130 -62
- package/src/components/colors-gradients/panel-color-gradient-settings.js +30 -76
- package/src/components/colors-gradients/style.scss +52 -50
- package/src/components/convert-to-group-buttons/toolbar.js +30 -13
- package/src/components/duotone-control/style.scss +1 -7
- package/src/components/iframe/index.js +62 -54
- package/src/components/image-editor/use-save-image.js +2 -1
- package/src/components/image-size-control/README.md +1 -1
- package/src/components/index.js +2 -3
- package/src/components/inserter/index.js +20 -0
- package/src/components/inserter/index.native.js +2 -2
- package/src/components/inserter/quick-inserter.js +3 -11
- package/src/components/inserter/style.native.scss +1 -0
- package/src/components/inserter/style.scss +2 -1
- package/src/components/link-control/constants.js +11 -0
- package/src/components/link-control/search-results.js +4 -5
- package/src/components/link-control/use-search-handler.js +11 -5
- package/src/components/list-view/block.js +24 -34
- package/src/components/list-view/branch.js +10 -20
- package/src/components/list-view/context.js +1 -4
- package/src/components/list-view/drop-indicator.js +0 -1
- package/src/components/list-view/index.js +11 -41
- package/src/components/list-view/style.scss +2 -1
- package/src/components/media-placeholder/index.js +0 -2
- package/src/components/media-replace-flow/index.js +0 -2
- package/src/components/media-upload/index.native.js +6 -2
- package/src/components/media-upload/test/index.native.js +31 -6
- package/src/components/navigable-toolbar/index.js +12 -2
- package/src/components/plain-text/index.native.js +64 -8
- package/src/components/preview-options/style.scss +0 -4
- package/src/components/publish-date-time-picker/README.md +52 -0
- package/src/components/publish-date-time-picker/index.js +50 -0
- package/src/components/publish-date-time-picker/style.scss +20 -0
- package/src/components/rich-text/format-toolbar-container.js +0 -1
- package/src/components/rich-text/index.js +3 -1
- package/src/components/rich-text/index.native.js +4 -0
- package/src/components/rich-text/style.scss +2 -8
- package/src/components/url-input/index.js +9 -4
- package/src/components/use-block-drop-zone/index.native.js +173 -0
- package/src/components/use-on-block-drop/index.native.js +119 -0
- package/src/components/use-setting/index.js +57 -21
- package/src/components/warning/index.js +47 -42
- package/src/components/warning/test/__snapshots__/index.js.snap +15 -6
- package/src/components/warning/test/index.js +1 -1
- package/src/components/writing-flow/use-click-selection.js +1 -4
- package/src/components/writing-flow/use-input.js +12 -0
- package/src/components/writing-flow/use-selection-observer.js +55 -10
- package/src/elements/index.js +1 -0
- package/src/hooks/anchor.js +1 -1
- package/src/hooks/border.js +2 -11
- package/src/hooks/border.scss +0 -48
- package/src/hooks/color-panel.js +13 -9
- package/src/hooks/color.js +5 -74
- package/src/hooks/color.scss +5 -58
- package/src/hooks/dimensions.js +55 -41
- package/src/hooks/index.js +1 -0
- package/src/hooks/margin.js +64 -15
- package/src/hooks/padding.js +60 -15
- package/src/hooks/padding.scss +12 -0
- package/src/hooks/settings.js +32 -0
- package/src/hooks/style.js +25 -39
- package/src/hooks/test/settings.js +48 -0
- package/src/hooks/typography.js +2 -0
- package/src/index.js +1 -0
- package/src/layouts/flex.js +11 -3
- package/src/store/actions.js +12 -0
- package/src/store/defaults.js +0 -1
- package/src/store/reducer.js +14 -1
- package/src/store/selectors.js +42 -12
- package/src/store/test/reducer.js +5 -0
- package/src/store/test/selectors.js +17 -0
- package/src/style.scss +2 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/border-style-control/index.js +0 -60
- package/build/components/border-style-control/index.js.map +0 -1
- package/build/components/colors/color-panel.js +0 -82
- package/build/components/colors/color-panel.js.map +0 -1
- package/build/components/colors/color-panel.native.js +0 -11
- package/build/components/colors/color-panel.native.js.map +0 -1
- package/build/components/colors-gradients/tools-panel-color-dropdown.js +0 -89
- package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
- package/build-module/components/border-style-control/index.js +0 -50
- package/build-module/components/border-style-control/index.js.map +0 -1
- package/build-module/components/colors/color-panel.js +0 -70
- package/build-module/components/colors/color-panel.js.map +0 -1
- package/build-module/components/colors/color-panel.native.js +0 -4
- package/build-module/components/colors/color-panel.native.js.map +0 -1
- package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +0 -75
- package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
- package/src/components/block-alignment-matrix-control/style.scss +0 -10
- package/src/components/border-style-control/index.js +0 -47
- package/src/components/border-style-control/style.scss +0 -18
- package/src/components/colors/color-panel.js +0 -91
- package/src/components/colors/color-panel.native.js +0 -3
- package/src/components/colors-gradients/tools-panel-color-dropdown.js +0 -85
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* External dependencies
|
|
5
|
+
*/
|
|
6
|
+
import { AccessibilityInfo } from 'react-native';
|
|
7
|
+
import { useSafeAreaInsets, useSafeAreaFrame } from 'react-native-safe-area-context';
|
|
8
|
+
import Animated, { runOnJS, runOnUI, useAnimatedRef, useAnimatedStyle, useSharedValue, withDelay, withTiming, ZoomInEasyDown } from 'react-native-reanimated';
|
|
9
|
+
/**
|
|
10
|
+
* WordPress dependencies
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { Draggable, DraggableTrigger } from '@wordpress/components';
|
|
14
|
+
import { select, useSelect, useDispatch } from '@wordpress/data';
|
|
15
|
+
import { useCallback, useEffect, useRef, useState, Platform } from '@wordpress/element';
|
|
16
|
+
import { getBlockType } from '@wordpress/blocks';
|
|
17
|
+
import { generateHapticFeedback } from '@wordpress/react-native-bridge';
|
|
18
|
+
import RCTAztecView from '@wordpress/react-native-aztec';
|
|
19
|
+
/**
|
|
20
|
+
* Internal dependencies
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import useScrollWhenDragging from './use-scroll-when-dragging';
|
|
24
|
+
import DraggableChip from './draggable-chip';
|
|
25
|
+
import { store as blockEditorStore } from '../../store';
|
|
26
|
+
import { useBlockListContext } from '../block-list/block-list-context';
|
|
27
|
+
import DroppingInsertionPoint from './dropping-insertion-point';
|
|
28
|
+
import useBlockDropZone from '../use-block-drop-zone';
|
|
29
|
+
import styles from './style.scss';
|
|
30
|
+
const CHIP_OFFSET_TO_TOUCH_POSITION = 32;
|
|
31
|
+
const BLOCK_OPACITY_ANIMATION_CONFIG = {
|
|
32
|
+
duration: 350
|
|
33
|
+
};
|
|
34
|
+
const BLOCK_OPACITY_ANIMATION_DELAY = 250;
|
|
35
|
+
const DEFAULT_LONG_PRESS_MIN_DURATION = 500;
|
|
36
|
+
const DEFAULT_IOS_LONG_PRESS_MIN_DURATION = DEFAULT_LONG_PRESS_MIN_DURATION - 50;
|
|
37
|
+
/**
|
|
38
|
+
* Block draggable wrapper component
|
|
39
|
+
*
|
|
40
|
+
* This component handles all the interactions for dragging blocks.
|
|
41
|
+
* It relies on the block list and its context for dragging, hence it
|
|
42
|
+
* should be rendered between the `BlockListProvider` component and the
|
|
43
|
+
* block list rendering. It also requires listening to scroll events,
|
|
44
|
+
* therefore for this purpose, it returns the `onScroll` event handler
|
|
45
|
+
* that should be attached to the list that renders the blocks.
|
|
46
|
+
*
|
|
47
|
+
*
|
|
48
|
+
* @param {Object} props Component props.
|
|
49
|
+
* @param {JSX.Element} props.children Children to be rendered.
|
|
50
|
+
* @param {boolean} props.isRTL Check if current locale is RTL.
|
|
51
|
+
*
|
|
52
|
+
* @return {Function} Render function that passes `onScroll` event handler.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
const BlockDraggableWrapper = _ref => {
|
|
56
|
+
let {
|
|
57
|
+
children,
|
|
58
|
+
isRTL
|
|
59
|
+
} = _ref;
|
|
60
|
+
const [draggedBlockIcon, setDraggedBlockIcon] = useState();
|
|
61
|
+
const {
|
|
62
|
+
selectBlock,
|
|
63
|
+
startDraggingBlocks,
|
|
64
|
+
stopDraggingBlocks
|
|
65
|
+
} = useDispatch(blockEditorStore);
|
|
66
|
+
const {
|
|
67
|
+
scrollRef
|
|
68
|
+
} = useBlockListContext();
|
|
69
|
+
const animatedScrollRef = useAnimatedRef();
|
|
70
|
+
const {
|
|
71
|
+
left,
|
|
72
|
+
right
|
|
73
|
+
} = useSafeAreaInsets();
|
|
74
|
+
const {
|
|
75
|
+
width
|
|
76
|
+
} = useSafeAreaFrame();
|
|
77
|
+
const safeAreaOffset = left + right;
|
|
78
|
+
const contentWidth = width - safeAreaOffset;
|
|
79
|
+
animatedScrollRef(scrollRef);
|
|
80
|
+
const scroll = {
|
|
81
|
+
offsetY: useSharedValue(0)
|
|
82
|
+
};
|
|
83
|
+
const chip = {
|
|
84
|
+
x: useSharedValue(0),
|
|
85
|
+
y: useSharedValue(0),
|
|
86
|
+
width: useSharedValue(0),
|
|
87
|
+
height: useSharedValue(0)
|
|
88
|
+
};
|
|
89
|
+
const currentYPosition = useSharedValue(0);
|
|
90
|
+
const isDragging = useSharedValue(false);
|
|
91
|
+
const [startScrolling, scrollOnDragOver, stopScrolling, draggingScrollHandler] = useScrollWhenDragging();
|
|
92
|
+
|
|
93
|
+
const scrollHandler = event => {
|
|
94
|
+
'worklet';
|
|
95
|
+
|
|
96
|
+
const {
|
|
97
|
+
contentOffset
|
|
98
|
+
} = event;
|
|
99
|
+
scroll.offsetY.value = contentOffset.y;
|
|
100
|
+
draggingScrollHandler(event);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const {
|
|
104
|
+
onBlockDragOver,
|
|
105
|
+
onBlockDragEnd,
|
|
106
|
+
onBlockDrop,
|
|
107
|
+
targetBlockIndex
|
|
108
|
+
} = useBlockDropZone(); // Stop dragging blocks if the block draggable is unmounted.
|
|
109
|
+
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
return () => {
|
|
112
|
+
if (isDragging.value) {
|
|
113
|
+
stopDraggingBlocks();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}, []);
|
|
117
|
+
|
|
118
|
+
const setDraggedBlockIconByClientId = clientId => {
|
|
119
|
+
var _getBlockType;
|
|
120
|
+
|
|
121
|
+
const blockName = select(blockEditorStore).getBlockName(clientId);
|
|
122
|
+
const blockIcon = (_getBlockType = getBlockType(blockName)) === null || _getBlockType === void 0 ? void 0 : _getBlockType.icon;
|
|
123
|
+
|
|
124
|
+
if (blockIcon) {
|
|
125
|
+
setDraggedBlockIcon(blockIcon);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const onStartDragging = _ref2 => {
|
|
130
|
+
let {
|
|
131
|
+
clientId,
|
|
132
|
+
position
|
|
133
|
+
} = _ref2;
|
|
134
|
+
|
|
135
|
+
if (clientId) {
|
|
136
|
+
startDraggingBlocks([clientId]);
|
|
137
|
+
setDraggedBlockIconByClientId(clientId);
|
|
138
|
+
runOnUI(startScrolling)(position.y);
|
|
139
|
+
generateHapticFeedback();
|
|
140
|
+
} else {
|
|
141
|
+
// We stop dragging if no block is found.
|
|
142
|
+
runOnUI(stopDragging)();
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const onStopDragging = _ref3 => {
|
|
147
|
+
let {
|
|
148
|
+
clientId
|
|
149
|
+
} = _ref3;
|
|
150
|
+
|
|
151
|
+
if (clientId) {
|
|
152
|
+
onBlockDrop({
|
|
153
|
+
// Dropping is only allowed at root level
|
|
154
|
+
srcRootClientId: '',
|
|
155
|
+
srcClientIds: [clientId],
|
|
156
|
+
type: 'block'
|
|
157
|
+
});
|
|
158
|
+
selectBlock(clientId);
|
|
159
|
+
setDraggedBlockIcon(undefined);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
onBlockDragEnd();
|
|
163
|
+
stopDraggingBlocks();
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const onChipLayout = _ref4 => {
|
|
167
|
+
let {
|
|
168
|
+
nativeEvent: {
|
|
169
|
+
layout
|
|
170
|
+
}
|
|
171
|
+
} = _ref4;
|
|
172
|
+
|
|
173
|
+
if (layout.width > 0) {
|
|
174
|
+
chip.width.value = layout.width;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (layout.height > 0) {
|
|
178
|
+
chip.height.value = layout.height;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const startDragging = _ref5 => {
|
|
183
|
+
'worklet';
|
|
184
|
+
|
|
185
|
+
let {
|
|
186
|
+
x,
|
|
187
|
+
y,
|
|
188
|
+
id
|
|
189
|
+
} = _ref5;
|
|
190
|
+
const dragPosition = {
|
|
191
|
+
x,
|
|
192
|
+
y
|
|
193
|
+
};
|
|
194
|
+
chip.x.value = dragPosition.x;
|
|
195
|
+
chip.y.value = dragPosition.y;
|
|
196
|
+
currentYPosition.value = dragPosition.y;
|
|
197
|
+
isDragging.value = true;
|
|
198
|
+
runOnJS(onStartDragging)({
|
|
199
|
+
clientId: id,
|
|
200
|
+
position: dragPosition
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const updateDragging = _ref6 => {
|
|
205
|
+
'worklet';
|
|
206
|
+
|
|
207
|
+
let {
|
|
208
|
+
x,
|
|
209
|
+
y
|
|
210
|
+
} = _ref6;
|
|
211
|
+
const dragPosition = {
|
|
212
|
+
x,
|
|
213
|
+
y
|
|
214
|
+
};
|
|
215
|
+
chip.x.value = dragPosition.x;
|
|
216
|
+
chip.y.value = dragPosition.y;
|
|
217
|
+
currentYPosition.value = dragPosition.y;
|
|
218
|
+
runOnJS(onBlockDragOver)({
|
|
219
|
+
x,
|
|
220
|
+
y: y + scroll.offsetY.value
|
|
221
|
+
}); // Update scrolling velocity
|
|
222
|
+
|
|
223
|
+
scrollOnDragOver(dragPosition.y);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
const stopDragging = _ref7 => {
|
|
227
|
+
'worklet';
|
|
228
|
+
|
|
229
|
+
let {
|
|
230
|
+
id
|
|
231
|
+
} = _ref7;
|
|
232
|
+
isDragging.value = false;
|
|
233
|
+
stopScrolling();
|
|
234
|
+
runOnJS(onStopDragging)({
|
|
235
|
+
clientId: id
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
const chipDynamicStyles = useAnimatedStyle(() => {
|
|
240
|
+
const chipOffset = chip.width.value / 2;
|
|
241
|
+
const translateX = !isRTL ? chip.x.value - chipOffset : -(contentWidth - (chip.x.value + chipOffset));
|
|
242
|
+
return {
|
|
243
|
+
transform: [{
|
|
244
|
+
translateX
|
|
245
|
+
}, {
|
|
246
|
+
translateY: chip.y.value - chip.height.value - CHIP_OFFSET_TO_TOUCH_POSITION
|
|
247
|
+
}]
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
const chipStyles = [chipDynamicStyles, styles['draggable-chip__wrapper']];
|
|
251
|
+
|
|
252
|
+
const exitingAnimation = _ref8 => {
|
|
253
|
+
'worklet';
|
|
254
|
+
|
|
255
|
+
let {
|
|
256
|
+
currentHeight,
|
|
257
|
+
currentWidth
|
|
258
|
+
} = _ref8;
|
|
259
|
+
const translateX = !isRTL ? 0 : currentWidth * -1;
|
|
260
|
+
const duration = 150;
|
|
261
|
+
const animations = {
|
|
262
|
+
transform: [{
|
|
263
|
+
translateY: withTiming(currentHeight, {
|
|
264
|
+
duration
|
|
265
|
+
})
|
|
266
|
+
}, {
|
|
267
|
+
translateX: withTiming(translateX, {
|
|
268
|
+
duration
|
|
269
|
+
})
|
|
270
|
+
}, {
|
|
271
|
+
scale: withTiming(0, {
|
|
272
|
+
duration
|
|
273
|
+
})
|
|
274
|
+
}]
|
|
275
|
+
};
|
|
276
|
+
const initialValues = {
|
|
277
|
+
transform: [{
|
|
278
|
+
translateY: 0
|
|
279
|
+
}, {
|
|
280
|
+
translateX
|
|
281
|
+
}, {
|
|
282
|
+
scale: 1
|
|
283
|
+
}]
|
|
284
|
+
};
|
|
285
|
+
return {
|
|
286
|
+
initialValues,
|
|
287
|
+
animations
|
|
288
|
+
};
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
return createElement(Fragment, null, createElement(DroppingInsertionPoint, {
|
|
292
|
+
scroll: scroll,
|
|
293
|
+
currentYPosition: currentYPosition,
|
|
294
|
+
isDragging: isDragging,
|
|
295
|
+
targetBlockIndex: targetBlockIndex
|
|
296
|
+
}), createElement(Draggable, {
|
|
297
|
+
onDragStart: startDragging,
|
|
298
|
+
onDragOver: updateDragging,
|
|
299
|
+
onDragEnd: stopDragging,
|
|
300
|
+
testID: "block-draggable-wrapper"
|
|
301
|
+
}, children({
|
|
302
|
+
onScroll: scrollHandler
|
|
303
|
+
})), createElement(Animated.View, {
|
|
304
|
+
onLayout: onChipLayout,
|
|
305
|
+
style: chipStyles,
|
|
306
|
+
pointerEvents: "none"
|
|
307
|
+
}, draggedBlockIcon && createElement(Animated.View, {
|
|
308
|
+
entering: ZoomInEasyDown.duration(200),
|
|
309
|
+
exiting: exitingAnimation
|
|
310
|
+
}, createElement(DraggableChip, {
|
|
311
|
+
icon: draggedBlockIcon
|
|
312
|
+
}))));
|
|
313
|
+
};
|
|
314
|
+
/**
|
|
315
|
+
* Block draggable component
|
|
316
|
+
*
|
|
317
|
+
* This component serves for animating the block when it is being dragged.
|
|
318
|
+
* Hence, it should be wrapped around the rendering of a block.
|
|
319
|
+
*
|
|
320
|
+
* @param {Object} props Component props.
|
|
321
|
+
* @param {JSX.Element} props.children Children to be rendered.
|
|
322
|
+
* @param {string} props.clientId Client id of the block.
|
|
323
|
+
* @param {string} [props.draggingClientId] Client id to use for dragging. If not defined, the value from `clientId` will be used.
|
|
324
|
+
* @param {boolean} [props.enabled] Enables the draggable trigger.
|
|
325
|
+
* @param {string} [props.testID] Id used for querying the long-press gesture handler in tests.
|
|
326
|
+
*
|
|
327
|
+
* @return {Function} Render function which includes the parameter `isDraggable` to determine if the block can be dragged.
|
|
328
|
+
*/
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
const BlockDraggable = _ref9 => {
|
|
332
|
+
let {
|
|
333
|
+
clientId,
|
|
334
|
+
children,
|
|
335
|
+
draggingClientId,
|
|
336
|
+
enabled = true,
|
|
337
|
+
testID
|
|
338
|
+
} = _ref9;
|
|
339
|
+
const wasBeingDragged = useRef(false);
|
|
340
|
+
const [isEditingText, setIsEditingText] = useState(false);
|
|
341
|
+
const [isScreenReaderEnabled, setIsScreenReaderEnabled] = useState(false);
|
|
342
|
+
const draggingAnimation = {
|
|
343
|
+
opacity: useSharedValue(1)
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
const startDraggingBlock = () => {
|
|
347
|
+
draggingAnimation.opacity.value = withTiming(0.4, BLOCK_OPACITY_ANIMATION_CONFIG);
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
const stopDraggingBlock = () => {
|
|
351
|
+
draggingAnimation.opacity.value = withDelay(BLOCK_OPACITY_ANIMATION_DELAY, withTiming(1, BLOCK_OPACITY_ANIMATION_CONFIG));
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
const {
|
|
355
|
+
isDraggable,
|
|
356
|
+
isBeingDragged,
|
|
357
|
+
isBlockSelected
|
|
358
|
+
} = useSelect(_select => {
|
|
359
|
+
const {
|
|
360
|
+
getBlockRootClientId,
|
|
361
|
+
getTemplateLock,
|
|
362
|
+
isBlockBeingDragged,
|
|
363
|
+
getSelectedBlockClientId
|
|
364
|
+
} = _select(blockEditorStore);
|
|
365
|
+
|
|
366
|
+
const rootClientId = getBlockRootClientId(clientId);
|
|
367
|
+
const templateLock = rootClientId ? getTemplateLock(rootClientId) : null;
|
|
368
|
+
const selectedBlockClientId = getSelectedBlockClientId();
|
|
369
|
+
return {
|
|
370
|
+
isBeingDragged: isBlockBeingDragged(clientId),
|
|
371
|
+
isDraggable: 'all' !== templateLock,
|
|
372
|
+
isBlockSelected: selectedBlockClientId && selectedBlockClientId === clientId
|
|
373
|
+
};
|
|
374
|
+
}, [clientId]);
|
|
375
|
+
useEffect(() => {
|
|
376
|
+
if (isBeingDragged !== wasBeingDragged.current) {
|
|
377
|
+
if (isBeingDragged) {
|
|
378
|
+
startDraggingBlock();
|
|
379
|
+
} else {
|
|
380
|
+
stopDraggingBlock();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
wasBeingDragged.current = isBeingDragged;
|
|
385
|
+
}, [isBeingDragged]);
|
|
386
|
+
const onFocusChangeAztec = useCallback(_ref10 => {
|
|
387
|
+
let {
|
|
388
|
+
isFocused
|
|
389
|
+
} = _ref10;
|
|
390
|
+
setIsEditingText(isFocused);
|
|
391
|
+
}, []);
|
|
392
|
+
useEffect(() => {
|
|
393
|
+
let mounted = true;
|
|
394
|
+
const isAnyAztecInputFocused = RCTAztecView.InputState.isFocused();
|
|
395
|
+
|
|
396
|
+
if (isAnyAztecInputFocused) {
|
|
397
|
+
setIsEditingText(isAnyAztecInputFocused);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
RCTAztecView.InputState.addFocusChangeListener(onFocusChangeAztec);
|
|
401
|
+
const screenReaderChangedListener = AccessibilityInfo.addEventListener('screenReaderChanged', setIsScreenReaderEnabled);
|
|
402
|
+
AccessibilityInfo.isScreenReaderEnabled().then(screenReaderEnabled => {
|
|
403
|
+
if (mounted) {
|
|
404
|
+
setIsScreenReaderEnabled(screenReaderEnabled);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
return () => {
|
|
408
|
+
mounted = false;
|
|
409
|
+
RCTAztecView.InputState.removeFocusChangeListener(onFocusChangeAztec);
|
|
410
|
+
screenReaderChangedListener.remove();
|
|
411
|
+
};
|
|
412
|
+
}, []);
|
|
413
|
+
const onLongPressDraggable = useCallback(() => {
|
|
414
|
+
// Ensure that no text input is focused when starting the dragging gesture in order to prevent conflicts with text editing.
|
|
415
|
+
RCTAztecView.InputState.blurCurrentFocusedElement();
|
|
416
|
+
}, []);
|
|
417
|
+
const animatedWrapperStyles = useAnimatedStyle(() => {
|
|
418
|
+
return {
|
|
419
|
+
opacity: draggingAnimation.opacity.value
|
|
420
|
+
};
|
|
421
|
+
});
|
|
422
|
+
const wrapperStyles = [animatedWrapperStyles, styles['draggable-wrapper__container']];
|
|
423
|
+
const canDragBlock = enabled && !isScreenReaderEnabled && (!isBlockSelected || !isEditingText);
|
|
424
|
+
|
|
425
|
+
if (!isDraggable) {
|
|
426
|
+
return children({
|
|
427
|
+
isDraggable: false
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return createElement(DraggableTrigger, {
|
|
432
|
+
id: draggingClientId || clientId,
|
|
433
|
+
enabled: enabled && canDragBlock,
|
|
434
|
+
minDuration: Platform.select({
|
|
435
|
+
// On iOS, using a lower min duration than the default
|
|
436
|
+
// value prevents the long-press gesture from being
|
|
437
|
+
// triggered in underneath elements. This is required to
|
|
438
|
+
// prevent enabling text editing when dragging is available.
|
|
439
|
+
ios: canDragBlock ? DEFAULT_IOS_LONG_PRESS_MIN_DURATION : DEFAULT_LONG_PRESS_MIN_DURATION,
|
|
440
|
+
android: DEFAULT_LONG_PRESS_MIN_DURATION
|
|
441
|
+
}),
|
|
442
|
+
onLongPress: onLongPressDraggable,
|
|
443
|
+
testID: testID
|
|
444
|
+
}, createElement(Animated.View, {
|
|
445
|
+
style: wrapperStyles
|
|
446
|
+
}, children({
|
|
447
|
+
isDraggable: true
|
|
448
|
+
})));
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
export { BlockDraggableWrapper };
|
|
452
|
+
export default BlockDraggable;
|
|
453
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-draggable/index.native.js"],"names":["AccessibilityInfo","useSafeAreaInsets","useSafeAreaFrame","Animated","runOnJS","runOnUI","useAnimatedRef","useAnimatedStyle","useSharedValue","withDelay","withTiming","ZoomInEasyDown","Draggable","DraggableTrigger","select","useSelect","useDispatch","useCallback","useEffect","useRef","useState","Platform","getBlockType","generateHapticFeedback","RCTAztecView","useScrollWhenDragging","DraggableChip","store","blockEditorStore","useBlockListContext","DroppingInsertionPoint","useBlockDropZone","styles","CHIP_OFFSET_TO_TOUCH_POSITION","BLOCK_OPACITY_ANIMATION_CONFIG","duration","BLOCK_OPACITY_ANIMATION_DELAY","DEFAULT_LONG_PRESS_MIN_DURATION","DEFAULT_IOS_LONG_PRESS_MIN_DURATION","BlockDraggableWrapper","children","isRTL","draggedBlockIcon","setDraggedBlockIcon","selectBlock","startDraggingBlocks","stopDraggingBlocks","scrollRef","animatedScrollRef","left","right","width","safeAreaOffset","contentWidth","scroll","offsetY","chip","x","y","height","currentYPosition","isDragging","startScrolling","scrollOnDragOver","stopScrolling","draggingScrollHandler","scrollHandler","event","contentOffset","value","onBlockDragOver","onBlockDragEnd","onBlockDrop","targetBlockIndex","setDraggedBlockIconByClientId","clientId","blockName","getBlockName","blockIcon","icon","onStartDragging","position","stopDragging","onStopDragging","srcRootClientId","srcClientIds","type","undefined","onChipLayout","nativeEvent","layout","startDragging","id","dragPosition","updateDragging","chipDynamicStyles","chipOffset","translateX","transform","translateY","chipStyles","exitingAnimation","currentHeight","currentWidth","animations","scale","initialValues","onScroll","BlockDraggable","draggingClientId","enabled","testID","wasBeingDragged","isEditingText","setIsEditingText","isScreenReaderEnabled","setIsScreenReaderEnabled","draggingAnimation","opacity","startDraggingBlock","stopDraggingBlock","isDraggable","isBeingDragged","isBlockSelected","_select","getBlockRootClientId","getTemplateLock","isBlockBeingDragged","getSelectedBlockClientId","rootClientId","templateLock","selectedBlockClientId","current","onFocusChangeAztec","isFocused","mounted","isAnyAztecInputFocused","InputState","addFocusChangeListener","screenReaderChangedListener","addEventListener","then","screenReaderEnabled","removeFocusChangeListener","remove","onLongPressDraggable","blurCurrentFocusedElement","animatedWrapperStyles","wrapperStyles","canDragBlock","ios","android"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { AccessibilityInfo } from 'react-native';\nimport {\n\tuseSafeAreaInsets,\n\tuseSafeAreaFrame,\n} from 'react-native-safe-area-context';\nimport Animated, {\n\trunOnJS,\n\trunOnUI,\n\tuseAnimatedRef,\n\tuseAnimatedStyle,\n\tuseSharedValue,\n\twithDelay,\n\twithTiming,\n\tZoomInEasyDown,\n} from 'react-native-reanimated';\n\n/**\n * WordPress dependencies\n */\nimport { Draggable, DraggableTrigger } from '@wordpress/components';\nimport { select, useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tPlatform,\n} from '@wordpress/element';\nimport { getBlockType } from '@wordpress/blocks';\nimport { generateHapticFeedback } from '@wordpress/react-native-bridge';\nimport RCTAztecView from '@wordpress/react-native-aztec';\n\n/**\n * Internal dependencies\n */\nimport useScrollWhenDragging from './use-scroll-when-dragging';\nimport DraggableChip from './draggable-chip';\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockListContext } from '../block-list/block-list-context';\nimport DroppingInsertionPoint from './dropping-insertion-point';\nimport useBlockDropZone from '../use-block-drop-zone';\nimport styles from './style.scss';\n\nconst CHIP_OFFSET_TO_TOUCH_POSITION = 32;\nconst BLOCK_OPACITY_ANIMATION_CONFIG = { duration: 350 };\nconst BLOCK_OPACITY_ANIMATION_DELAY = 250;\nconst DEFAULT_LONG_PRESS_MIN_DURATION = 500;\nconst DEFAULT_IOS_LONG_PRESS_MIN_DURATION =\n\tDEFAULT_LONG_PRESS_MIN_DURATION - 50;\n\n/**\n * Block draggable wrapper component\n *\n * This component handles all the interactions for dragging blocks.\n * It relies on the block list and its context for dragging, hence it\n * should be rendered between the `BlockListProvider` component and the\n * block list rendering. It also requires listening to scroll events,\n * therefore for this purpose, it returns the `onScroll` event handler\n * that should be attached to the list that renders the blocks.\n *\n *\n * @param {Object} props Component props.\n * @param {JSX.Element} props.children Children to be rendered.\n * @param {boolean} props.isRTL Check if current locale is RTL.\n *\n * @return {Function} Render function that passes `onScroll` event handler.\n */\nconst BlockDraggableWrapper = ( { children, isRTL } ) => {\n\tconst [ draggedBlockIcon, setDraggedBlockIcon ] = useState();\n\n\tconst {\n\t\tselectBlock,\n\t\tstartDraggingBlocks,\n\t\tstopDraggingBlocks,\n\t} = useDispatch( blockEditorStore );\n\n\tconst { scrollRef } = useBlockListContext();\n\tconst animatedScrollRef = useAnimatedRef();\n\tconst { left, right } = useSafeAreaInsets();\n\tconst { width } = useSafeAreaFrame();\n\tconst safeAreaOffset = left + right;\n\tconst contentWidth = width - safeAreaOffset;\n\tanimatedScrollRef( scrollRef );\n\n\tconst scroll = {\n\t\toffsetY: useSharedValue( 0 ),\n\t};\n\tconst chip = {\n\t\tx: useSharedValue( 0 ),\n\t\ty: useSharedValue( 0 ),\n\t\twidth: useSharedValue( 0 ),\n\t\theight: useSharedValue( 0 ),\n\t};\n\tconst currentYPosition = useSharedValue( 0 );\n\tconst isDragging = useSharedValue( false );\n\n\tconst [\n\t\tstartScrolling,\n\t\tscrollOnDragOver,\n\t\tstopScrolling,\n\t\tdraggingScrollHandler,\n\t] = useScrollWhenDragging();\n\n\tconst scrollHandler = ( event ) => {\n\t\t'worklet';\n\t\tconst { contentOffset } = event;\n\t\tscroll.offsetY.value = contentOffset.y;\n\n\t\tdraggingScrollHandler( event );\n\t};\n\n\tconst {\n\t\tonBlockDragOver,\n\t\tonBlockDragEnd,\n\t\tonBlockDrop,\n\t\ttargetBlockIndex,\n\t} = useBlockDropZone();\n\n\t// Stop dragging blocks if the block draggable is unmounted.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( isDragging.value ) {\n\t\t\t\tstopDraggingBlocks();\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\tconst setDraggedBlockIconByClientId = ( clientId ) => {\n\t\tconst blockName = select( blockEditorStore ).getBlockName( clientId );\n\t\tconst blockIcon = getBlockType( blockName )?.icon;\n\t\tif ( blockIcon ) {\n\t\t\tsetDraggedBlockIcon( blockIcon );\n\t\t}\n\t};\n\n\tconst onStartDragging = ( { clientId, position } ) => {\n\t\tif ( clientId ) {\n\t\t\tstartDraggingBlocks( [ clientId ] );\n\t\t\tsetDraggedBlockIconByClientId( clientId );\n\t\t\trunOnUI( startScrolling )( position.y );\n\t\t\tgenerateHapticFeedback();\n\t\t} else {\n\t\t\t// We stop dragging if no block is found.\n\t\t\trunOnUI( stopDragging )();\n\t\t}\n\t};\n\n\tconst onStopDragging = ( { clientId } ) => {\n\t\tif ( clientId ) {\n\t\t\tonBlockDrop( {\n\t\t\t\t// Dropping is only allowed at root level\n\t\t\t\tsrcRootClientId: '',\n\t\t\t\tsrcClientIds: [ clientId ],\n\t\t\t\ttype: 'block',\n\t\t\t} );\n\t\t\tselectBlock( clientId );\n\t\t\tsetDraggedBlockIcon( undefined );\n\t\t}\n\t\tonBlockDragEnd();\n\t\tstopDraggingBlocks();\n\t};\n\n\tconst onChipLayout = ( { nativeEvent: { layout } } ) => {\n\t\tif ( layout.width > 0 ) {\n\t\t\tchip.width.value = layout.width;\n\t\t}\n\t\tif ( layout.height > 0 ) {\n\t\t\tchip.height.value = layout.height;\n\t\t}\n\t};\n\n\tconst startDragging = ( { x, y, id } ) => {\n\t\t'worklet';\n\t\tconst dragPosition = { x, y };\n\t\tchip.x.value = dragPosition.x;\n\t\tchip.y.value = dragPosition.y;\n\t\tcurrentYPosition.value = dragPosition.y;\n\n\t\tisDragging.value = true;\n\n\t\trunOnJS( onStartDragging )( { clientId: id, position: dragPosition } );\n\t};\n\n\tconst updateDragging = ( { x, y } ) => {\n\t\t'worklet';\n\t\tconst dragPosition = { x, y };\n\t\tchip.x.value = dragPosition.x;\n\t\tchip.y.value = dragPosition.y;\n\t\tcurrentYPosition.value = dragPosition.y;\n\n\t\trunOnJS( onBlockDragOver )( { x, y: y + scroll.offsetY.value } );\n\n\t\t// Update scrolling velocity\n\t\tscrollOnDragOver( dragPosition.y );\n\t};\n\n\tconst stopDragging = ( { id } ) => {\n\t\t'worklet';\n\t\tisDragging.value = false;\n\n\t\tstopScrolling();\n\t\trunOnJS( onStopDragging )( { clientId: id } );\n\t};\n\n\tconst chipDynamicStyles = useAnimatedStyle( () => {\n\t\tconst chipOffset = chip.width.value / 2;\n\t\tconst translateX = ! isRTL\n\t\t\t? chip.x.value - chipOffset\n\t\t\t: -( contentWidth - ( chip.x.value + chipOffset ) );\n\n\t\treturn {\n\t\t\ttransform: [\n\t\t\t\t{\n\t\t\t\t\ttranslateX,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttranslateY:\n\t\t\t\t\t\tchip.y.value -\n\t\t\t\t\t\tchip.height.value -\n\t\t\t\t\t\tCHIP_OFFSET_TO_TOUCH_POSITION,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t} );\n\tconst chipStyles = [\n\t\tchipDynamicStyles,\n\t\tstyles[ 'draggable-chip__wrapper' ],\n\t];\n\n\tconst exitingAnimation = ( { currentHeight, currentWidth } ) => {\n\t\t'worklet';\n\t\tconst translateX = ! isRTL ? 0 : currentWidth * -1;\n\t\tconst duration = 150;\n\t\tconst animations = {\n\t\t\ttransform: [\n\t\t\t\t{\n\t\t\t\t\ttranslateY: withTiming( currentHeight, {\n\t\t\t\t\t\tduration,\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttranslateX: withTiming( translateX, {\n\t\t\t\t\t\tduration,\n\t\t\t\t\t} ),\n\t\t\t\t},\n\t\t\t\t{ scale: withTiming( 0, { duration } ) },\n\t\t\t],\n\t\t};\n\t\tconst initialValues = {\n\t\t\ttransform: [ { translateY: 0 }, { translateX }, { scale: 1 } ],\n\t\t};\n\t\treturn {\n\t\t\tinitialValues,\n\t\t\tanimations,\n\t\t};\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<DroppingInsertionPoint\n\t\t\t\tscroll={ scroll }\n\t\t\t\tcurrentYPosition={ currentYPosition }\n\t\t\t\tisDragging={ isDragging }\n\t\t\t\ttargetBlockIndex={ targetBlockIndex }\n\t\t\t/>\n\t\t\t<Draggable\n\t\t\t\tonDragStart={ startDragging }\n\t\t\t\tonDragOver={ updateDragging }\n\t\t\t\tonDragEnd={ stopDragging }\n\t\t\t\ttestID=\"block-draggable-wrapper\"\n\t\t\t>\n\t\t\t\t{ children( { onScroll: scrollHandler } ) }\n\t\t\t</Draggable>\n\t\t\t<Animated.View\n\t\t\t\tonLayout={ onChipLayout }\n\t\t\t\tstyle={ chipStyles }\n\t\t\t\tpointerEvents=\"none\"\n\t\t\t>\n\t\t\t\t{ draggedBlockIcon && (\n\t\t\t\t\t<Animated.View\n\t\t\t\t\t\tentering={ ZoomInEasyDown.duration( 200 ) }\n\t\t\t\t\t\texiting={ exitingAnimation }\n\t\t\t\t\t>\n\t\t\t\t\t\t<DraggableChip icon={ draggedBlockIcon } />\n\t\t\t\t\t</Animated.View>\n\t\t\t\t) }\n\t\t\t</Animated.View>\n\t\t</>\n\t);\n};\n\n/**\n * Block draggable component\n *\n * This component serves for animating the block when it is being dragged.\n * Hence, it should be wrapped around the rendering of a block.\n *\n * @param {Object} props Component props.\n * @param {JSX.Element} props.children Children to be rendered.\n * @param {string} props.clientId Client id of the block.\n * @param {string} [props.draggingClientId] Client id to use for dragging. If not defined, the value from `clientId` will be used.\n * @param {boolean} [props.enabled] Enables the draggable trigger.\n * @param {string} [props.testID] Id used for querying the long-press gesture handler in tests.\n *\n * @return {Function} Render function which includes the parameter `isDraggable` to determine if the block can be dragged.\n */\nconst BlockDraggable = ( {\n\tclientId,\n\tchildren,\n\tdraggingClientId,\n\tenabled = true,\n\ttestID,\n} ) => {\n\tconst wasBeingDragged = useRef( false );\n\tconst [ isEditingText, setIsEditingText ] = useState( false );\n\tconst [ isScreenReaderEnabled, setIsScreenReaderEnabled ] = useState(\n\t\tfalse\n\t);\n\n\tconst draggingAnimation = {\n\t\topacity: useSharedValue( 1 ),\n\t};\n\n\tconst startDraggingBlock = () => {\n\t\tdraggingAnimation.opacity.value = withTiming(\n\t\t\t0.4,\n\t\t\tBLOCK_OPACITY_ANIMATION_CONFIG\n\t\t);\n\t};\n\n\tconst stopDraggingBlock = () => {\n\t\tdraggingAnimation.opacity.value = withDelay(\n\t\t\tBLOCK_OPACITY_ANIMATION_DELAY,\n\t\t\twithTiming( 1, BLOCK_OPACITY_ANIMATION_CONFIG )\n\t\t);\n\t};\n\n\tconst { isDraggable, isBeingDragged, isBlockSelected } = useSelect(\n\t\t( _select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t} = _select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst templateLock = rootClientId\n\t\t\t\t? getTemplateLock( rootClientId )\n\t\t\t\t: null;\n\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\n\t\t\treturn {\n\t\t\t\tisBeingDragged: isBlockBeingDragged( clientId ),\n\t\t\t\tisDraggable: 'all' !== templateLock,\n\t\t\t\tisBlockSelected:\n\t\t\t\t\tselectedBlockClientId && selectedBlockClientId === clientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tuseEffect( () => {\n\t\tif ( isBeingDragged !== wasBeingDragged.current ) {\n\t\t\tif ( isBeingDragged ) {\n\t\t\t\tstartDraggingBlock();\n\t\t\t} else {\n\t\t\t\tstopDraggingBlock();\n\t\t\t}\n\t\t}\n\t\twasBeingDragged.current = isBeingDragged;\n\t}, [ isBeingDragged ] );\n\n\tconst onFocusChangeAztec = useCallback( ( { isFocused } ) => {\n\t\tsetIsEditingText( isFocused );\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tlet mounted = true;\n\n\t\tconst isAnyAztecInputFocused = RCTAztecView.InputState.isFocused();\n\t\tif ( isAnyAztecInputFocused ) {\n\t\t\tsetIsEditingText( isAnyAztecInputFocused );\n\t\t}\n\n\t\tRCTAztecView.InputState.addFocusChangeListener( onFocusChangeAztec );\n\n\t\tconst screenReaderChangedListener = AccessibilityInfo.addEventListener(\n\t\t\t'screenReaderChanged',\n\t\t\tsetIsScreenReaderEnabled\n\t\t);\n\t\tAccessibilityInfo.isScreenReaderEnabled().then(\n\t\t\t( screenReaderEnabled ) => {\n\t\t\t\tif ( mounted ) {\n\t\t\t\t\tsetIsScreenReaderEnabled( screenReaderEnabled );\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn () => {\n\t\t\tmounted = false;\n\n\t\t\tRCTAztecView.InputState.removeFocusChangeListener(\n\t\t\t\tonFocusChangeAztec\n\t\t\t);\n\n\t\t\tscreenReaderChangedListener.remove();\n\t\t};\n\t}, [] );\n\n\tconst onLongPressDraggable = useCallback( () => {\n\t\t// Ensure that no text input is focused when starting the dragging gesture in order to prevent conflicts with text editing.\n\t\tRCTAztecView.InputState.blurCurrentFocusedElement();\n\t}, [] );\n\n\tconst animatedWrapperStyles = useAnimatedStyle( () => {\n\t\treturn {\n\t\t\topacity: draggingAnimation.opacity.value,\n\t\t};\n\t} );\n\tconst wrapperStyles = [\n\t\tanimatedWrapperStyles,\n\t\tstyles[ 'draggable-wrapper__container' ],\n\t];\n\n\tconst canDragBlock =\n\t\tenabled &&\n\t\t! isScreenReaderEnabled &&\n\t\t( ! isBlockSelected || ! isEditingText );\n\n\tif ( ! isDraggable ) {\n\t\treturn children( { isDraggable: false } );\n\t}\n\n\treturn (\n\t\t<DraggableTrigger\n\t\t\tid={ draggingClientId || clientId }\n\t\t\tenabled={ enabled && canDragBlock }\n\t\t\tminDuration={ Platform.select( {\n\t\t\t\t// On iOS, using a lower min duration than the default\n\t\t\t\t// value prevents the long-press gesture from being\n\t\t\t\t// triggered in underneath elements. This is required to\n\t\t\t\t// prevent enabling text editing when dragging is available.\n\t\t\t\tios: canDragBlock\n\t\t\t\t\t? DEFAULT_IOS_LONG_PRESS_MIN_DURATION\n\t\t\t\t\t: DEFAULT_LONG_PRESS_MIN_DURATION,\n\t\t\t\tandroid: DEFAULT_LONG_PRESS_MIN_DURATION,\n\t\t\t} ) }\n\t\t\tonLongPress={ onLongPressDraggable }\n\t\t\ttestID={ testID }\n\t\t>\n\t\t\t<Animated.View style={ wrapperStyles }>\n\t\t\t\t{ children( { isDraggable: true } ) }\n\t\t\t</Animated.View>\n\t\t</DraggableTrigger>\n\t);\n};\n\nexport { BlockDraggableWrapper };\nexport default BlockDraggable;\n"]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useWindowDimensions } from 'react-native';
|
|
5
|
+
import { useSharedValue, useAnimatedRef, scrollTo, useAnimatedReaction, withTiming, withRepeat, cancelAnimation, Easing } from 'react-native-reanimated';
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { useBlockListContext } from '../block-list/block-list-context';
|
|
11
|
+
const SCROLL_INACTIVE_DISTANCE_PX = 50;
|
|
12
|
+
const SCROLL_INTERVAL_MS = 1000;
|
|
13
|
+
const VELOCITY_MULTIPLIER = 5000;
|
|
14
|
+
/**
|
|
15
|
+
* React hook that scrolls the scroll container when a block is being dragged.
|
|
16
|
+
*
|
|
17
|
+
* @return {Function[]} `startScrolling`, `scrollOnDragOver`, `stopScrolling`
|
|
18
|
+
* functions to be called in `onDragStart`, `onDragOver`
|
|
19
|
+
* and `onDragEnd` events respectively. Additionally,
|
|
20
|
+
* `scrollHandler` function is returned which should be
|
|
21
|
+
* called in the `onScroll` event of the block list.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export default function useScrollWhenDragging() {
|
|
25
|
+
const {
|
|
26
|
+
scrollRef
|
|
27
|
+
} = useBlockListContext();
|
|
28
|
+
const animatedScrollRef = useAnimatedRef();
|
|
29
|
+
animatedScrollRef(scrollRef);
|
|
30
|
+
const {
|
|
31
|
+
height: windowHeight
|
|
32
|
+
} = useWindowDimensions();
|
|
33
|
+
const velocityY = useSharedValue(0);
|
|
34
|
+
const offsetY = useSharedValue(0);
|
|
35
|
+
const dragStartY = useSharedValue(0);
|
|
36
|
+
const animationTimer = useSharedValue(0);
|
|
37
|
+
const isAnimationTimerActive = useSharedValue(false);
|
|
38
|
+
const isScrollActive = useSharedValue(false);
|
|
39
|
+
const scroll = {
|
|
40
|
+
offsetY: useSharedValue(0),
|
|
41
|
+
maxOffsetY: useSharedValue(0)
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const scrollHandler = event => {
|
|
45
|
+
'worklet';
|
|
46
|
+
|
|
47
|
+
const {
|
|
48
|
+
contentSize,
|
|
49
|
+
contentOffset,
|
|
50
|
+
layoutMeasurement
|
|
51
|
+
} = event;
|
|
52
|
+
scroll.offsetY.value = contentOffset.y;
|
|
53
|
+
scroll.maxOffsetY.value = contentSize.height - layoutMeasurement.height;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const stopScrolling = () => {
|
|
57
|
+
'worklet';
|
|
58
|
+
|
|
59
|
+
cancelAnimation(animationTimer);
|
|
60
|
+
isAnimationTimerActive.value = false;
|
|
61
|
+
isScrollActive.value = false;
|
|
62
|
+
velocityY.value = 0;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const startScrolling = y => {
|
|
66
|
+
'worklet';
|
|
67
|
+
|
|
68
|
+
stopScrolling();
|
|
69
|
+
offsetY.value = scroll.offsetY.value;
|
|
70
|
+
dragStartY.value = y;
|
|
71
|
+
animationTimer.value = 0;
|
|
72
|
+
animationTimer.value = withRepeat(withTiming(1, {
|
|
73
|
+
duration: SCROLL_INTERVAL_MS,
|
|
74
|
+
easing: Easing.linear
|
|
75
|
+
}), -1, true);
|
|
76
|
+
isAnimationTimerActive.value = true;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const scrollOnDragOver = y => {
|
|
80
|
+
'worklet';
|
|
81
|
+
|
|
82
|
+
const dragDistance = Math.max(Math.abs(y - dragStartY.value) - SCROLL_INACTIVE_DISTANCE_PX, 0);
|
|
83
|
+
const distancePercentage = dragDistance / windowHeight;
|
|
84
|
+
|
|
85
|
+
if (!isScrollActive.value) {
|
|
86
|
+
isScrollActive.value = dragDistance > 0;
|
|
87
|
+
} else if (y > dragStartY.value) {
|
|
88
|
+
// User is dragging downwards.
|
|
89
|
+
velocityY.value = VELOCITY_MULTIPLIER * distancePercentage;
|
|
90
|
+
} else if (y < dragStartY.value) {
|
|
91
|
+
// User is dragging upwards.
|
|
92
|
+
velocityY.value = -VELOCITY_MULTIPLIER * distancePercentage;
|
|
93
|
+
} else {
|
|
94
|
+
velocityY.value = 0;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
useAnimatedReaction(() => animationTimer.value, (value, previous) => {
|
|
99
|
+
if (velocityY.value === 0) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const delta = Math.abs(value - previous);
|
|
104
|
+
let newOffset = offsetY.value + delta * velocityY.value;
|
|
105
|
+
|
|
106
|
+
if (scroll.maxOffsetY.value !== 0) {
|
|
107
|
+
newOffset = Math.max(0, Math.min(scroll.maxOffsetY.value, newOffset));
|
|
108
|
+
} else {
|
|
109
|
+
// Scroll values are empty until receiving the first scroll event.
|
|
110
|
+
// In that case, the max offset is unknown and we can't clamp the
|
|
111
|
+
// new offset value.
|
|
112
|
+
newOffset = Math.max(0, newOffset);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
offsetY.value = newOffset;
|
|
116
|
+
scrollTo(animatedScrollRef, 0, offsetY.value, false);
|
|
117
|
+
});
|
|
118
|
+
return [startScrolling, scrollOnDragOver, stopScrolling, scrollHandler];
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=use-scroll-when-dragging.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-draggable/use-scroll-when-dragging.native.js"],"names":["useWindowDimensions","useSharedValue","useAnimatedRef","scrollTo","useAnimatedReaction","withTiming","withRepeat","cancelAnimation","Easing","useBlockListContext","SCROLL_INACTIVE_DISTANCE_PX","SCROLL_INTERVAL_MS","VELOCITY_MULTIPLIER","useScrollWhenDragging","scrollRef","animatedScrollRef","height","windowHeight","velocityY","offsetY","dragStartY","animationTimer","isAnimationTimerActive","isScrollActive","scroll","maxOffsetY","scrollHandler","event","contentSize","contentOffset","layoutMeasurement","value","y","stopScrolling","startScrolling","duration","easing","linear","scrollOnDragOver","dragDistance","Math","max","abs","distancePercentage","previous","delta","newOffset","min"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useWindowDimensions } from 'react-native';\nimport {\n\tuseSharedValue,\n\tuseAnimatedRef,\n\tscrollTo,\n\tuseAnimatedReaction,\n\twithTiming,\n\twithRepeat,\n\tcancelAnimation,\n\tEasing,\n} from 'react-native-reanimated';\n\n/**\n * Internal dependencies\n */\nimport { useBlockListContext } from '../block-list/block-list-context';\n\nconst SCROLL_INACTIVE_DISTANCE_PX = 50;\nconst SCROLL_INTERVAL_MS = 1000;\nconst VELOCITY_MULTIPLIER = 5000;\n\n/**\n * React hook that scrolls the scroll container when a block is being dragged.\n *\n * @return {Function[]} `startScrolling`, `scrollOnDragOver`, `stopScrolling`\n * functions to be called in `onDragStart`, `onDragOver`\n * and `onDragEnd` events respectively. Additionally,\n * \t\t\t\t\t\t`scrollHandler` function is returned which should be\n * \t\t\t\t\t\tcalled in the `onScroll` event of the block list.\n */\nexport default function useScrollWhenDragging() {\n\tconst { scrollRef } = useBlockListContext();\n\tconst animatedScrollRef = useAnimatedRef();\n\tanimatedScrollRef( scrollRef );\n\n\tconst { height: windowHeight } = useWindowDimensions();\n\n\tconst velocityY = useSharedValue( 0 );\n\tconst offsetY = useSharedValue( 0 );\n\tconst dragStartY = useSharedValue( 0 );\n\tconst animationTimer = useSharedValue( 0 );\n\tconst isAnimationTimerActive = useSharedValue( false );\n\tconst isScrollActive = useSharedValue( false );\n\n\tconst scroll = {\n\t\toffsetY: useSharedValue( 0 ),\n\t\tmaxOffsetY: useSharedValue( 0 ),\n\t};\n\tconst scrollHandler = ( event ) => {\n\t\t'worklet';\n\t\tconst { contentSize, contentOffset, layoutMeasurement } = event;\n\t\tscroll.offsetY.value = contentOffset.y;\n\t\tscroll.maxOffsetY.value = contentSize.height - layoutMeasurement.height;\n\t};\n\n\tconst stopScrolling = () => {\n\t\t'worklet';\n\t\tcancelAnimation( animationTimer );\n\n\t\tisAnimationTimerActive.value = false;\n\t\tisScrollActive.value = false;\n\t\tvelocityY.value = 0;\n\t};\n\n\tconst startScrolling = ( y ) => {\n\t\t'worklet';\n\t\tstopScrolling();\n\t\toffsetY.value = scroll.offsetY.value;\n\t\tdragStartY.value = y;\n\n\t\tanimationTimer.value = 0;\n\t\tanimationTimer.value = withRepeat(\n\t\t\twithTiming( 1, {\n\t\t\t\tduration: SCROLL_INTERVAL_MS,\n\t\t\t\teasing: Easing.linear,\n\t\t\t} ),\n\t\t\t-1,\n\t\t\ttrue\n\t\t);\n\t\tisAnimationTimerActive.value = true;\n\t};\n\n\tconst scrollOnDragOver = ( y ) => {\n\t\t'worklet';\n\t\tconst dragDistance = Math.max(\n\t\t\tMath.abs( y - dragStartY.value ) - SCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t0\n\t\t);\n\t\tconst distancePercentage = dragDistance / windowHeight;\n\n\t\tif ( ! isScrollActive.value ) {\n\t\t\tisScrollActive.value = dragDistance > 0;\n\t\t} else if ( y > dragStartY.value ) {\n\t\t\t// User is dragging downwards.\n\t\t\tvelocityY.value = VELOCITY_MULTIPLIER * distancePercentage;\n\t\t} else if ( y < dragStartY.value ) {\n\t\t\t// User is dragging upwards.\n\t\t\tvelocityY.value = -VELOCITY_MULTIPLIER * distancePercentage;\n\t\t} else {\n\t\t\tvelocityY.value = 0;\n\t\t}\n\t};\n\n\tuseAnimatedReaction(\n\t\t() => animationTimer.value,\n\t\t( value, previous ) => {\n\t\t\tif ( velocityY.value === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst delta = Math.abs( value - previous );\n\t\t\tlet newOffset = offsetY.value + delta * velocityY.value;\n\n\t\t\tif ( scroll.maxOffsetY.value !== 0 ) {\n\t\t\t\tnewOffset = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.min( scroll.maxOffsetY.value, newOffset )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Scroll values are empty until receiving the first scroll event.\n\t\t\t\t// In that case, the max offset is unknown and we can't clamp the\n\t\t\t\t// new offset value.\n\t\t\t\tnewOffset = Math.max( 0, newOffset );\n\t\t\t}\n\n\t\t\toffsetY.value = newOffset;\n\t\t\tscrollTo( animatedScrollRef, 0, offsetY.value, false );\n\t\t}\n\t);\n\n\treturn [ startScrolling, scrollOnDragOver, stopScrolling, scrollHandler ];\n}\n"]}
|