@wordpress/block-editor 9.0.0 → 9.1.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.
Files changed (235) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +1 -0
  3. package/build/components/block-alignment-matrix-control/index.js +1 -6
  4. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  5. package/build/components/block-content-overlay/index.js +4 -82
  6. package/build/components/block-content-overlay/index.js.map +1 -1
  7. package/build/components/block-draggable/draggable-chip.native.js +64 -0
  8. package/build/components/block-draggable/draggable-chip.native.js.map +1 -0
  9. package/build/components/block-draggable/dropping-insertion-point.native.js +157 -0
  10. package/build/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  11. package/build/components/block-draggable/index.native.js +484 -0
  12. package/build/components/block-draggable/index.native.js.map +1 -0
  13. package/build/components/block-draggable/use-scroll-when-dragging.native.js +130 -0
  14. package/build/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  15. package/build/components/block-list/block-list-context.native.js +195 -0
  16. package/build/components/block-list/block-list-context.native.js.map +1 -0
  17. package/build/components/block-list/block-list-item-cell.native.js +67 -0
  18. package/build/components/block-list/block-list-item-cell.native.js.map +1 -0
  19. package/build/components/block-list/block-list-item.native.js +12 -9
  20. package/build/components/block-list/block-list-item.native.js.map +1 -1
  21. package/build/components/block-list/block.native.js +26 -5
  22. package/build/components/block-list/block.native.js.map +1 -1
  23. package/build/components/block-list/index.native.js +75 -23
  24. package/build/components/block-list/index.native.js.map +1 -1
  25. package/build/components/block-list/use-block-props/index.js +8 -4
  26. package/build/components/block-list/use-block-props/index.js.map +1 -1
  27. package/build/components/block-list/use-in-between-inserter.js +1 -1
  28. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  29. package/build/components/block-mobile-toolbar/index.native.js +9 -3
  30. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  31. package/build/components/block-mover/index.native.js +17 -4
  32. package/build/components/block-mover/index.native.js.map +1 -1
  33. package/build/components/block-popover/inbetween.js +10 -2
  34. package/build/components/block-popover/inbetween.js.map +1 -1
  35. package/build/components/block-popover/index.js +4 -16
  36. package/build/components/block-popover/index.js.map +1 -1
  37. package/build/components/block-preview/index.js +1 -1
  38. package/build/components/block-preview/index.js.map +1 -1
  39. package/build/components/block-tools/selected-block-popover.js +1 -29
  40. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  41. package/build/components/border-radius-control/input-controls.js +10 -3
  42. package/build/components/border-radius-control/input-controls.js.map +1 -1
  43. package/build/components/colors-gradients/dropdown.js +149 -44
  44. package/build/components/colors-gradients/dropdown.js.map +1 -1
  45. package/build/components/iframe/index.js +51 -50
  46. package/build/components/iframe/index.js.map +1 -1
  47. package/build/components/image-editor/use-save-image.js +3 -1
  48. package/build/components/image-editor/use-save-image.js.map +1 -1
  49. package/build/components/index.js +5 -14
  50. package/build/components/index.js.map +1 -1
  51. package/build/components/inserter/index.native.js +1 -1
  52. package/build/components/inserter/index.native.js.map +1 -1
  53. package/build/components/link-control/constants.js +11 -1
  54. package/build/components/link-control/constants.js.map +1 -1
  55. package/build/components/link-control/search-results.js +4 -3
  56. package/build/components/link-control/search-results.js.map +1 -1
  57. package/build/components/link-control/use-search-handler.js +4 -4
  58. package/build/components/link-control/use-search-handler.js.map +1 -1
  59. package/build/components/list-view/drop-indicator.js +0 -1
  60. package/build/components/list-view/drop-indicator.js.map +1 -1
  61. package/build/components/navigable-toolbar/index.js +12 -2
  62. package/build/components/navigable-toolbar/index.js.map +1 -1
  63. package/build/components/rich-text/format-toolbar-container.js +0 -1
  64. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  65. package/build/components/rich-text/index.js +1 -1
  66. package/build/components/rich-text/index.js.map +1 -1
  67. package/build/components/url-input/index.js +4 -1
  68. package/build/components/url-input/index.js.map +1 -1
  69. package/build/components/use-block-drop-zone/index.native.js +167 -0
  70. package/build/components/use-block-drop-zone/index.native.js.map +1 -0
  71. package/build/components/use-on-block-drop/index.native.js +95 -0
  72. package/build/components/use-on-block-drop/index.native.js.map +1 -0
  73. package/build/components/warning/index.js +6 -1
  74. package/build/components/warning/index.js.map +1 -1
  75. package/build/hooks/anchor.js.map +1 -1
  76. package/build/hooks/border.js +2 -7
  77. package/build/hooks/border.js.map +1 -1
  78. package/build/hooks/color-panel.js +14 -7
  79. package/build/hooks/color-panel.js.map +1 -1
  80. package/build/hooks/style.js +14 -13
  81. package/build/hooks/style.js.map +1 -1
  82. package/build/hooks/typography.js +6 -2
  83. package/build/hooks/typography.js.map +1 -1
  84. package/build-module/components/block-alignment-matrix-control/index.js +1 -6
  85. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  86. package/build-module/components/block-content-overlay/index.js +3 -78
  87. package/build-module/components/block-content-overlay/index.js.map +1 -1
  88. package/build-module/components/block-draggable/draggable-chip.native.js +50 -0
  89. package/build-module/components/block-draggable/draggable-chip.native.js.map +1 -0
  90. package/build-module/components/block-draggable/dropping-insertion-point.native.js +137 -0
  91. package/build-module/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  92. package/build-module/components/block-draggable/index.native.js +449 -0
  93. package/build-module/components/block-draggable/index.native.js.map +1 -0
  94. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js +120 -0
  95. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  96. package/build-module/components/block-list/block-list-context.native.js +179 -0
  97. package/build-module/components/block-list/block-list-context.native.js.map +1 -0
  98. package/build-module/components/block-list/block-list-item-cell.native.js +59 -0
  99. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -0
  100. package/build-module/components/block-list/block-list-item.native.js +12 -9
  101. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  102. package/build-module/components/block-list/block.native.js +25 -5
  103. package/build-module/components/block-list/block.native.js.map +1 -1
  104. package/build-module/components/block-list/index.native.js +72 -23
  105. package/build-module/components/block-list/index.native.js.map +1 -1
  106. package/build-module/components/block-list/use-block-props/index.js +9 -5
  107. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  108. package/build-module/components/block-list/use-in-between-inserter.js +1 -1
  109. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  110. package/build-module/components/block-mobile-toolbar/index.native.js +8 -3
  111. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  112. package/build-module/components/block-mover/index.native.js +18 -5
  113. package/build-module/components/block-mover/index.native.js.map +1 -1
  114. package/build-module/components/block-popover/inbetween.js +10 -2
  115. package/build-module/components/block-popover/inbetween.js.map +1 -1
  116. package/build-module/components/block-popover/index.js +4 -15
  117. package/build-module/components/block-popover/index.js.map +1 -1
  118. package/build-module/components/block-preview/index.js +1 -1
  119. package/build-module/components/block-preview/index.js.map +1 -1
  120. package/build-module/components/block-tools/selected-block-popover.js +2 -29
  121. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  122. package/build-module/components/border-radius-control/input-controls.js +11 -4
  123. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  124. package/build-module/components/colors-gradients/dropdown.js +151 -46
  125. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  126. package/build-module/components/iframe/index.js +52 -51
  127. package/build-module/components/iframe/index.js.map +1 -1
  128. package/build-module/components/image-editor/use-save-image.js +2 -1
  129. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  130. package/build-module/components/index.js +1 -2
  131. package/build-module/components/index.js.map +1 -1
  132. package/build-module/components/inserter/index.native.js +1 -1
  133. package/build-module/components/inserter/index.native.js.map +1 -1
  134. package/build-module/components/link-control/constants.js +5 -0
  135. package/build-module/components/link-control/constants.js.map +1 -1
  136. package/build-module/components/link-control/search-results.js +3 -4
  137. package/build-module/components/link-control/search-results.js.map +1 -1
  138. package/build-module/components/link-control/use-search-handler.js +5 -5
  139. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  140. package/build-module/components/list-view/drop-indicator.js +0 -1
  141. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  142. package/build-module/components/navigable-toolbar/index.js +12 -2
  143. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  144. package/build-module/components/rich-text/format-toolbar-container.js +0 -1
  145. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  146. package/build-module/components/rich-text/index.js +1 -1
  147. package/build-module/components/rich-text/index.js.map +1 -1
  148. package/build-module/components/url-input/index.js +4 -1
  149. package/build-module/components/url-input/index.js.map +1 -1
  150. package/build-module/components/use-block-drop-zone/index.native.js +148 -0
  151. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -0
  152. package/build-module/components/use-on-block-drop/index.native.js +83 -0
  153. package/build-module/components/use-on-block-drop/index.native.js.map +1 -0
  154. package/build-module/components/warning/index.js +6 -1
  155. package/build-module/components/warning/index.js.map +1 -1
  156. package/build-module/hooks/anchor.js.map +1 -1
  157. package/build-module/hooks/border.js +2 -7
  158. package/build-module/hooks/border.js.map +1 -1
  159. package/build-module/hooks/color-panel.js +11 -6
  160. package/build-module/hooks/color-panel.js.map +1 -1
  161. package/build-module/hooks/style.js +15 -14
  162. package/build-module/hooks/style.js.map +1 -1
  163. package/build-module/hooks/typography.js +6 -2
  164. package/build-module/hooks/typography.js.map +1 -1
  165. package/build-style/style-rtl.css +60 -174
  166. package/build-style/style.css +60 -174
  167. package/package.json +28 -28
  168. package/src/components/block-alignment-matrix-control/index.js +1 -5
  169. package/src/components/block-content-overlay/index.js +8 -95
  170. package/src/components/block-content-overlay/style.scss +2 -11
  171. package/src/components/block-draggable/draggable-chip.native.js +49 -0
  172. package/src/components/block-draggable/dropping-insertion-point.native.js +181 -0
  173. package/src/components/block-draggable/dropping-insertion-point.native.scss +8 -0
  174. package/src/components/block-draggable/index.native.js +458 -0
  175. package/src/components/block-draggable/style.native.scss +19 -0
  176. package/src/components/block-draggable/use-scroll-when-dragging.native.js +135 -0
  177. package/src/components/block-list/block-list-context.native.js +175 -0
  178. package/src/components/block-list/block-list-item-cell.native.js +49 -0
  179. package/src/components/block-list/block-list-item.native.js +7 -11
  180. package/src/components/block-list/block.native.js +36 -8
  181. package/src/components/block-list/index.native.js +54 -13
  182. package/src/components/block-list/test/block-list-context.native.js +253 -0
  183. package/src/components/block-list/test/fixtures/block-list-context.native.js +79 -0
  184. package/src/components/block-list/use-block-props/index.js +10 -5
  185. package/src/components/block-list/use-in-between-inserter.js +1 -1
  186. package/src/components/block-mobile-toolbar/index.native.js +8 -1
  187. package/src/components/block-mover/index.native.js +22 -6
  188. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +6 -0
  189. package/src/components/block-popover/inbetween.js +9 -1
  190. package/src/components/block-popover/index.js +1 -16
  191. package/src/components/block-popover/style.scss +1 -0
  192. package/src/components/block-preview/index.js +1 -4
  193. package/src/components/block-switcher/style.scss +2 -39
  194. package/src/components/block-tools/selected-block-popover.js +1 -36
  195. package/src/components/block-tools/style.scss +1 -12
  196. package/src/components/border-radius-control/input-controls.js +16 -8
  197. package/src/components/border-radius-control/style.scss +3 -2
  198. package/src/components/colors-gradients/dropdown.js +156 -62
  199. package/src/components/colors-gradients/style.scss +51 -23
  200. package/src/components/duotone-control/style.scss +1 -7
  201. package/src/components/iframe/index.js +62 -54
  202. package/src/components/image-editor/use-save-image.js +2 -1
  203. package/src/components/index.js +1 -2
  204. package/src/components/inserter/index.native.js +1 -1
  205. package/src/components/inserter/style.scss +2 -1
  206. package/src/components/link-control/constants.js +11 -0
  207. package/src/components/link-control/search-results.js +4 -5
  208. package/src/components/link-control/use-search-handler.js +11 -5
  209. package/src/components/list-view/drop-indicator.js +0 -1
  210. package/src/components/list-view/style.scss +2 -1
  211. package/src/components/navigable-toolbar/index.js +12 -2
  212. package/src/components/preview-options/style.scss +0 -4
  213. package/src/components/rich-text/format-toolbar-container.js +0 -1
  214. package/src/components/rich-text/index.js +1 -1
  215. package/src/components/rich-text/style.scss +2 -8
  216. package/src/components/url-input/index.js +3 -1
  217. package/src/components/use-block-drop-zone/index.native.js +173 -0
  218. package/src/components/use-on-block-drop/index.native.js +119 -0
  219. package/src/components/warning/index.js +47 -42
  220. package/src/components/warning/test/__snapshots__/index.js.snap +15 -6
  221. package/src/components/warning/test/index.js +1 -1
  222. package/src/hooks/anchor.js +1 -1
  223. package/src/hooks/border.js +2 -11
  224. package/src/hooks/border.scss +0 -48
  225. package/src/hooks/color-panel.js +13 -9
  226. package/src/hooks/color.scss +0 -62
  227. package/src/hooks/style.js +25 -39
  228. package/src/hooks/typography.js +2 -0
  229. package/src/style.scss +0 -1
  230. package/build/components/colors-gradients/tools-panel-color-dropdown.js +0 -89
  231. package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  232. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +0 -75
  233. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  234. package/src/components/block-alignment-matrix-control/style.scss +0 -10
  235. package/src/components/colors-gradients/tools-panel-color-dropdown.js +0 -85
@@ -0,0 +1,484 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.BlockDraggableWrapper = void 0;
9
+
10
+ var _element = require("@wordpress/element");
11
+
12
+ var _reactNative = require("react-native");
13
+
14
+ var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
15
+
16
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
17
+
18
+ var _components = require("@wordpress/components");
19
+
20
+ var _data = require("@wordpress/data");
21
+
22
+ var _blocks = require("@wordpress/blocks");
23
+
24
+ var _reactNativeBridge = require("@wordpress/react-native-bridge");
25
+
26
+ var _reactNativeAztec = _interopRequireDefault(require("@wordpress/react-native-aztec"));
27
+
28
+ var _useScrollWhenDragging = _interopRequireDefault(require("./use-scroll-when-dragging"));
29
+
30
+ var _draggableChip = _interopRequireDefault(require("./draggable-chip"));
31
+
32
+ var _store = require("../../store");
33
+
34
+ var _blockListContext = require("../block-list/block-list-context");
35
+
36
+ var _droppingInsertionPoint = _interopRequireDefault(require("./dropping-insertion-point"));
37
+
38
+ var _useBlockDropZone = _interopRequireDefault(require("../use-block-drop-zone"));
39
+
40
+ var _style = _interopRequireDefault(require("./style.scss"));
41
+
42
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
43
+
44
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
+
46
+ /**
47
+ * External dependencies
48
+ */
49
+
50
+ /**
51
+ * WordPress dependencies
52
+ */
53
+
54
+ /**
55
+ * Internal dependencies
56
+ */
57
+ const CHIP_OFFSET_TO_TOUCH_POSITION = 32;
58
+ const BLOCK_OPACITY_ANIMATION_CONFIG = {
59
+ duration: 350
60
+ };
61
+ const BLOCK_OPACITY_ANIMATION_DELAY = 250;
62
+ const DEFAULT_LONG_PRESS_MIN_DURATION = 500;
63
+ const DEFAULT_IOS_LONG_PRESS_MIN_DURATION = DEFAULT_LONG_PRESS_MIN_DURATION - 50;
64
+ /**
65
+ * Block draggable wrapper component
66
+ *
67
+ * This component handles all the interactions for dragging blocks.
68
+ * It relies on the block list and its context for dragging, hence it
69
+ * should be rendered between the `BlockListProvider` component and the
70
+ * block list rendering. It also requires listening to scroll events,
71
+ * therefore for this purpose, it returns the `onScroll` event handler
72
+ * that should be attached to the list that renders the blocks.
73
+ *
74
+ *
75
+ * @param {Object} props Component props.
76
+ * @param {JSX.Element} props.children Children to be rendered.
77
+ * @param {boolean} props.isRTL Check if current locale is RTL.
78
+ *
79
+ * @return {Function} Render function that passes `onScroll` event handler.
80
+ */
81
+
82
+ const BlockDraggableWrapper = _ref => {
83
+ let {
84
+ children,
85
+ isRTL
86
+ } = _ref;
87
+ const [draggedBlockIcon, setDraggedBlockIcon] = (0, _element.useState)();
88
+ const {
89
+ selectBlock,
90
+ startDraggingBlocks,
91
+ stopDraggingBlocks
92
+ } = (0, _data.useDispatch)(_store.store);
93
+ const {
94
+ scrollRef
95
+ } = (0, _blockListContext.useBlockListContext)();
96
+ const animatedScrollRef = (0, _reactNativeReanimated.useAnimatedRef)();
97
+ const {
98
+ left,
99
+ right
100
+ } = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
101
+ const {
102
+ width
103
+ } = (0, _reactNativeSafeAreaContext.useSafeAreaFrame)();
104
+ const safeAreaOffset = left + right;
105
+ const contentWidth = width - safeAreaOffset;
106
+ animatedScrollRef(scrollRef);
107
+ const scroll = {
108
+ offsetY: (0, _reactNativeReanimated.useSharedValue)(0)
109
+ };
110
+ const chip = {
111
+ x: (0, _reactNativeReanimated.useSharedValue)(0),
112
+ y: (0, _reactNativeReanimated.useSharedValue)(0),
113
+ width: (0, _reactNativeReanimated.useSharedValue)(0),
114
+ height: (0, _reactNativeReanimated.useSharedValue)(0)
115
+ };
116
+ const currentYPosition = (0, _reactNativeReanimated.useSharedValue)(0);
117
+ const isDragging = (0, _reactNativeReanimated.useSharedValue)(false);
118
+ const [startScrolling, scrollOnDragOver, stopScrolling, draggingScrollHandler] = (0, _useScrollWhenDragging.default)();
119
+
120
+ const scrollHandler = event => {
121
+ 'worklet';
122
+
123
+ const {
124
+ contentOffset
125
+ } = event;
126
+ scroll.offsetY.value = contentOffset.y;
127
+ draggingScrollHandler(event);
128
+ };
129
+
130
+ const {
131
+ onBlockDragOver,
132
+ onBlockDragEnd,
133
+ onBlockDrop,
134
+ targetBlockIndex
135
+ } = (0, _useBlockDropZone.default)(); // Stop dragging blocks if the block draggable is unmounted.
136
+
137
+ (0, _element.useEffect)(() => {
138
+ return () => {
139
+ if (isDragging.value) {
140
+ stopDraggingBlocks();
141
+ }
142
+ };
143
+ }, []);
144
+
145
+ const setDraggedBlockIconByClientId = clientId => {
146
+ var _getBlockType;
147
+
148
+ const blockName = (0, _data.select)(_store.store).getBlockName(clientId);
149
+ const blockIcon = (_getBlockType = (0, _blocks.getBlockType)(blockName)) === null || _getBlockType === void 0 ? void 0 : _getBlockType.icon;
150
+
151
+ if (blockIcon) {
152
+ setDraggedBlockIcon(blockIcon);
153
+ }
154
+ };
155
+
156
+ const onStartDragging = _ref2 => {
157
+ let {
158
+ clientId,
159
+ position
160
+ } = _ref2;
161
+
162
+ if (clientId) {
163
+ startDraggingBlocks([clientId]);
164
+ setDraggedBlockIconByClientId(clientId);
165
+ (0, _reactNativeReanimated.runOnUI)(startScrolling)(position.y);
166
+ (0, _reactNativeBridge.generateHapticFeedback)();
167
+ } else {
168
+ // We stop dragging if no block is found.
169
+ (0, _reactNativeReanimated.runOnUI)(stopDragging)();
170
+ }
171
+ };
172
+
173
+ const onStopDragging = _ref3 => {
174
+ let {
175
+ clientId
176
+ } = _ref3;
177
+
178
+ if (clientId) {
179
+ onBlockDrop({
180
+ // Dropping is only allowed at root level
181
+ srcRootClientId: '',
182
+ srcClientIds: [clientId],
183
+ type: 'block'
184
+ });
185
+ selectBlock(clientId);
186
+ setDraggedBlockIcon(undefined);
187
+ }
188
+
189
+ onBlockDragEnd();
190
+ stopDraggingBlocks();
191
+ };
192
+
193
+ const onChipLayout = _ref4 => {
194
+ let {
195
+ nativeEvent: {
196
+ layout
197
+ }
198
+ } = _ref4;
199
+
200
+ if (layout.width > 0) {
201
+ chip.width.value = layout.width;
202
+ }
203
+
204
+ if (layout.height > 0) {
205
+ chip.height.value = layout.height;
206
+ }
207
+ };
208
+
209
+ const startDragging = _ref5 => {
210
+ 'worklet';
211
+
212
+ let {
213
+ x,
214
+ y,
215
+ id
216
+ } = _ref5;
217
+ const dragPosition = {
218
+ x,
219
+ y
220
+ };
221
+ chip.x.value = dragPosition.x;
222
+ chip.y.value = dragPosition.y;
223
+ currentYPosition.value = dragPosition.y;
224
+ isDragging.value = true;
225
+ (0, _reactNativeReanimated.runOnJS)(onStartDragging)({
226
+ clientId: id,
227
+ position: dragPosition
228
+ });
229
+ };
230
+
231
+ const updateDragging = _ref6 => {
232
+ 'worklet';
233
+
234
+ let {
235
+ x,
236
+ y
237
+ } = _ref6;
238
+ const dragPosition = {
239
+ x,
240
+ y
241
+ };
242
+ chip.x.value = dragPosition.x;
243
+ chip.y.value = dragPosition.y;
244
+ currentYPosition.value = dragPosition.y;
245
+ (0, _reactNativeReanimated.runOnJS)(onBlockDragOver)({
246
+ x,
247
+ y: y + scroll.offsetY.value
248
+ }); // Update scrolling velocity
249
+
250
+ scrollOnDragOver(dragPosition.y);
251
+ };
252
+
253
+ const stopDragging = _ref7 => {
254
+ 'worklet';
255
+
256
+ let {
257
+ id
258
+ } = _ref7;
259
+ isDragging.value = false;
260
+ stopScrolling();
261
+ (0, _reactNativeReanimated.runOnJS)(onStopDragging)({
262
+ clientId: id
263
+ });
264
+ };
265
+
266
+ const chipDynamicStyles = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
267
+ const chipOffset = chip.width.value / 2;
268
+ const translateX = !isRTL ? chip.x.value - chipOffset : -(contentWidth - (chip.x.value + chipOffset));
269
+ return {
270
+ transform: [{
271
+ translateX
272
+ }, {
273
+ translateY: chip.y.value - chip.height.value - CHIP_OFFSET_TO_TOUCH_POSITION
274
+ }]
275
+ };
276
+ });
277
+ const chipStyles = [chipDynamicStyles, _style.default['draggable-chip__wrapper']];
278
+
279
+ const exitingAnimation = _ref8 => {
280
+ 'worklet';
281
+
282
+ let {
283
+ currentHeight,
284
+ currentWidth
285
+ } = _ref8;
286
+ const translateX = !isRTL ? 0 : currentWidth * -1;
287
+ const duration = 150;
288
+ const animations = {
289
+ transform: [{
290
+ translateY: (0, _reactNativeReanimated.withTiming)(currentHeight, {
291
+ duration
292
+ })
293
+ }, {
294
+ translateX: (0, _reactNativeReanimated.withTiming)(translateX, {
295
+ duration
296
+ })
297
+ }, {
298
+ scale: (0, _reactNativeReanimated.withTiming)(0, {
299
+ duration
300
+ })
301
+ }]
302
+ };
303
+ const initialValues = {
304
+ transform: [{
305
+ translateY: 0
306
+ }, {
307
+ translateX
308
+ }, {
309
+ scale: 1
310
+ }]
311
+ };
312
+ return {
313
+ initialValues,
314
+ animations
315
+ };
316
+ };
317
+
318
+ return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_droppingInsertionPoint.default, {
319
+ scroll: scroll,
320
+ currentYPosition: currentYPosition,
321
+ isDragging: isDragging,
322
+ targetBlockIndex: targetBlockIndex
323
+ }), (0, _element.createElement)(_components.Draggable, {
324
+ onDragStart: startDragging,
325
+ onDragOver: updateDragging,
326
+ onDragEnd: stopDragging
327
+ }, children({
328
+ onScroll: scrollHandler
329
+ })), (0, _element.createElement)(_reactNativeReanimated.default.View, {
330
+ onLayout: onChipLayout,
331
+ style: chipStyles,
332
+ pointerEvents: "none"
333
+ }, draggedBlockIcon && (0, _element.createElement)(_reactNativeReanimated.default.View, {
334
+ entering: _reactNativeReanimated.ZoomInEasyDown.duration(200),
335
+ exiting: exitingAnimation
336
+ }, (0, _element.createElement)(_draggableChip.default, {
337
+ icon: draggedBlockIcon
338
+ }))));
339
+ };
340
+ /**
341
+ * Block draggable component
342
+ *
343
+ * This component serves for animating the block when it is being dragged.
344
+ * Hence, it should be wrapped around the rendering of a block.
345
+ *
346
+ * @param {Object} props Component props.
347
+ * @param {JSX.Element} props.children Children to be rendered.
348
+ * @param {string} props.clientId Client id of the block.
349
+ * @param {string} [props.draggingClientId] Client id to use for dragging. If not defined, the value from `clientId` will be used.
350
+ * @param {boolean} [props.enabled] Enables the draggable trigger.
351
+ *
352
+ * @return {Function} Render function which includes the parameter `isDraggable` to determine if the block can be dragged.
353
+ */
354
+
355
+
356
+ exports.BlockDraggableWrapper = BlockDraggableWrapper;
357
+
358
+ const BlockDraggable = _ref9 => {
359
+ let {
360
+ clientId,
361
+ children,
362
+ draggingClientId,
363
+ enabled = true
364
+ } = _ref9;
365
+ const wasBeingDragged = (0, _element.useRef)(false);
366
+ const [isEditingText, setIsEditingText] = (0, _element.useState)(false);
367
+ const [isScreenReaderEnabled, setIsScreenReaderEnabled] = (0, _element.useState)(false);
368
+ const draggingAnimation = {
369
+ opacity: (0, _reactNativeReanimated.useSharedValue)(1)
370
+ };
371
+
372
+ const startDraggingBlock = () => {
373
+ draggingAnimation.opacity.value = (0, _reactNativeReanimated.withTiming)(0.4, BLOCK_OPACITY_ANIMATION_CONFIG);
374
+ };
375
+
376
+ const stopDraggingBlock = () => {
377
+ draggingAnimation.opacity.value = (0, _reactNativeReanimated.withDelay)(BLOCK_OPACITY_ANIMATION_DELAY, (0, _reactNativeReanimated.withTiming)(1, BLOCK_OPACITY_ANIMATION_CONFIG));
378
+ };
379
+
380
+ const {
381
+ isDraggable,
382
+ isBeingDragged,
383
+ isBlockSelected
384
+ } = (0, _data.useSelect)(_select => {
385
+ const {
386
+ getBlockRootClientId,
387
+ getTemplateLock,
388
+ isBlockBeingDragged,
389
+ getSelectedBlockClientId
390
+ } = _select(_store.store);
391
+
392
+ const rootClientId = getBlockRootClientId(clientId);
393
+ const templateLock = rootClientId ? getTemplateLock(rootClientId) : null;
394
+ const selectedBlockClientId = getSelectedBlockClientId();
395
+ return {
396
+ isBeingDragged: isBlockBeingDragged(clientId),
397
+ isDraggable: 'all' !== templateLock,
398
+ isBlockSelected: selectedBlockClientId && selectedBlockClientId === clientId
399
+ };
400
+ }, [clientId]);
401
+ (0, _element.useEffect)(() => {
402
+ if (isBeingDragged !== wasBeingDragged.current) {
403
+ if (isBeingDragged) {
404
+ startDraggingBlock();
405
+ } else {
406
+ stopDraggingBlock();
407
+ }
408
+ }
409
+
410
+ wasBeingDragged.current = isBeingDragged;
411
+ }, [isBeingDragged]);
412
+ const onFocusChangeAztec = (0, _element.useCallback)(_ref10 => {
413
+ let {
414
+ isFocused
415
+ } = _ref10;
416
+ setIsEditingText(isFocused);
417
+ }, []);
418
+ (0, _element.useEffect)(() => {
419
+ let mounted = true;
420
+
421
+ const isAnyAztecInputFocused = _reactNativeAztec.default.InputState.isFocused();
422
+
423
+ if (isAnyAztecInputFocused) {
424
+ setIsEditingText(isAnyAztecInputFocused);
425
+ }
426
+
427
+ _reactNativeAztec.default.InputState.addFocusChangeListener(onFocusChangeAztec);
428
+
429
+ const screenReaderChangedListener = _reactNative.AccessibilityInfo.addEventListener('screenReaderChanged', setIsScreenReaderEnabled);
430
+
431
+ _reactNative.AccessibilityInfo.isScreenReaderEnabled().then(screenReaderEnabled => {
432
+ if (mounted) {
433
+ setIsScreenReaderEnabled(screenReaderEnabled);
434
+ }
435
+ });
436
+
437
+ return () => {
438
+ mounted = false;
439
+
440
+ _reactNativeAztec.default.InputState.removeFocusChangeListener(onFocusChangeAztec);
441
+
442
+ screenReaderChangedListener.remove();
443
+ };
444
+ }, []);
445
+ const onLongPressDraggable = (0, _element.useCallback)(() => {
446
+ // Ensure that no text input is focused when starting the dragging gesture in order to prevent conflicts with text editing.
447
+ _reactNativeAztec.default.InputState.blurCurrentFocusedElement();
448
+ }, []);
449
+ const animatedWrapperStyles = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
450
+ return {
451
+ opacity: draggingAnimation.opacity.value
452
+ };
453
+ });
454
+ const wrapperStyles = [animatedWrapperStyles, _style.default['draggable-wrapper__container']];
455
+ const canDragBlock = enabled && !isScreenReaderEnabled && (!isBlockSelected || !isEditingText);
456
+
457
+ if (!isDraggable) {
458
+ return children({
459
+ isDraggable: false
460
+ });
461
+ }
462
+
463
+ return (0, _element.createElement)(_components.DraggableTrigger, {
464
+ id: draggingClientId || clientId,
465
+ enabled: enabled && canDragBlock,
466
+ minDuration: _element.Platform.select({
467
+ // On iOS, using a lower min duration than the default
468
+ // value prevents the long-press gesture from being
469
+ // triggered in underneath elements. This is required to
470
+ // prevent enabling text editing when dragging is available.
471
+ ios: canDragBlock ? DEFAULT_IOS_LONG_PRESS_MIN_DURATION : DEFAULT_LONG_PRESS_MIN_DURATION,
472
+ android: DEFAULT_LONG_PRESS_MIN_DURATION
473
+ }),
474
+ onLongPress: onLongPressDraggable
475
+ }, (0, _element.createElement)(_reactNativeReanimated.default.View, {
476
+ style: wrapperStyles
477
+ }, children({
478
+ isDraggable: true
479
+ })));
480
+ };
481
+
482
+ var _default = BlockDraggable;
483
+ exports.default = _default;
484
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-draggable/index.native.js"],"names":["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","blockEditorStore","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","styles","exitingAnimation","currentHeight","currentWidth","animations","scale","initialValues","onScroll","ZoomInEasyDown","BlockDraggable","draggingClientId","enabled","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","RCTAztecView","InputState","addFocusChangeListener","screenReaderChangedListener","AccessibilityInfo","addEventListener","then","screenReaderEnabled","removeFocusChangeListener","remove","onLongPressDraggable","blurCurrentFocusedElement","animatedWrapperStyles","wrapperStyles","canDragBlock","Platform","select","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>\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 *\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} ) => {\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>\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,130 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useScrollWhenDragging;
7
+
8
+ var _reactNative = require("react-native");
9
+
10
+ var _reactNativeReanimated = require("react-native-reanimated");
11
+
12
+ var _blockListContext = require("../block-list/block-list-context");
13
+
14
+ /**
15
+ * External dependencies
16
+ */
17
+
18
+ /**
19
+ * Internal dependencies
20
+ */
21
+ const SCROLL_INACTIVE_DISTANCE_PX = 50;
22
+ const SCROLL_INTERVAL_MS = 1000;
23
+ const VELOCITY_MULTIPLIER = 5000;
24
+ /**
25
+ * React hook that scrolls the scroll container when a block is being dragged.
26
+ *
27
+ * @return {Function[]} `startScrolling`, `scrollOnDragOver`, `stopScrolling`
28
+ * functions to be called in `onDragStart`, `onDragOver`
29
+ * and `onDragEnd` events respectively. Additionally,
30
+ * `scrollHandler` function is returned which should be
31
+ * called in the `onScroll` event of the block list.
32
+ */
33
+
34
+ function useScrollWhenDragging() {
35
+ const {
36
+ scrollRef
37
+ } = (0, _blockListContext.useBlockListContext)();
38
+ const animatedScrollRef = (0, _reactNativeReanimated.useAnimatedRef)();
39
+ animatedScrollRef(scrollRef);
40
+ const {
41
+ height: windowHeight
42
+ } = (0, _reactNative.useWindowDimensions)();
43
+ const velocityY = (0, _reactNativeReanimated.useSharedValue)(0);
44
+ const offsetY = (0, _reactNativeReanimated.useSharedValue)(0);
45
+ const dragStartY = (0, _reactNativeReanimated.useSharedValue)(0);
46
+ const animationTimer = (0, _reactNativeReanimated.useSharedValue)(0);
47
+ const isAnimationTimerActive = (0, _reactNativeReanimated.useSharedValue)(false);
48
+ const isScrollActive = (0, _reactNativeReanimated.useSharedValue)(false);
49
+ const scroll = {
50
+ offsetY: (0, _reactNativeReanimated.useSharedValue)(0),
51
+ maxOffsetY: (0, _reactNativeReanimated.useSharedValue)(0)
52
+ };
53
+
54
+ const scrollHandler = event => {
55
+ 'worklet';
56
+
57
+ const {
58
+ contentSize,
59
+ contentOffset,
60
+ layoutMeasurement
61
+ } = event;
62
+ scroll.offsetY.value = contentOffset.y;
63
+ scroll.maxOffsetY.value = contentSize.height - layoutMeasurement.height;
64
+ };
65
+
66
+ const stopScrolling = () => {
67
+ 'worklet';
68
+
69
+ (0, _reactNativeReanimated.cancelAnimation)(animationTimer);
70
+ isAnimationTimerActive.value = false;
71
+ isScrollActive.value = false;
72
+ velocityY.value = 0;
73
+ };
74
+
75
+ const startScrolling = y => {
76
+ 'worklet';
77
+
78
+ stopScrolling();
79
+ offsetY.value = scroll.offsetY.value;
80
+ dragStartY.value = y;
81
+ animationTimer.value = 0;
82
+ animationTimer.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)(1, {
83
+ duration: SCROLL_INTERVAL_MS,
84
+ easing: _reactNativeReanimated.Easing.linear
85
+ }), -1, true);
86
+ isAnimationTimerActive.value = true;
87
+ };
88
+
89
+ const scrollOnDragOver = y => {
90
+ 'worklet';
91
+
92
+ const dragDistance = Math.max(Math.abs(y - dragStartY.value) - SCROLL_INACTIVE_DISTANCE_PX, 0);
93
+ const distancePercentage = dragDistance / windowHeight;
94
+
95
+ if (!isScrollActive.value) {
96
+ isScrollActive.value = dragDistance > 0;
97
+ } else if (y > dragStartY.value) {
98
+ // User is dragging downwards.
99
+ velocityY.value = VELOCITY_MULTIPLIER * distancePercentage;
100
+ } else if (y < dragStartY.value) {
101
+ // User is dragging upwards.
102
+ velocityY.value = -VELOCITY_MULTIPLIER * distancePercentage;
103
+ } else {
104
+ velocityY.value = 0;
105
+ }
106
+ };
107
+
108
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => animationTimer.value, (value, previous) => {
109
+ if (velocityY.value === 0) {
110
+ return;
111
+ }
112
+
113
+ const delta = Math.abs(value - previous);
114
+ let newOffset = offsetY.value + delta * velocityY.value;
115
+
116
+ if (scroll.maxOffsetY.value !== 0) {
117
+ newOffset = Math.max(0, Math.min(scroll.maxOffsetY.value, newOffset));
118
+ } else {
119
+ // Scroll values are empty until receiving the first scroll event.
120
+ // In that case, the max offset is unknown and we can't clamp the
121
+ // new offset value.
122
+ newOffset = Math.max(0, newOffset);
123
+ }
124
+
125
+ offsetY.value = newOffset;
126
+ (0, _reactNativeReanimated.scrollTo)(animatedScrollRef, 0, offsetY.value, false);
127
+ });
128
+ return [startScrolling, scrollOnDragOver, stopScrolling, scrollHandler];
129
+ }
130
+ //# 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":["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","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"]}