@wordpress/block-editor 8.5.7 → 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 (462) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +5 -2
  3. package/build/components/block-alignment-control/constants.js +48 -0
  4. package/build/components/block-alignment-control/constants.js.map +1 -0
  5. package/build/components/block-alignment-control/ui.js +9 -40
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +92 -0
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -0
  9. package/build/components/block-alignment-matrix-control/index.js +1 -6
  10. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  11. package/build/components/block-content-overlay/index.js +5 -74
  12. package/build/components/block-content-overlay/index.js.map +1 -1
  13. package/build/components/block-draggable/draggable-chip.native.js +64 -0
  14. package/build/components/block-draggable/draggable-chip.native.js.map +1 -0
  15. package/build/components/block-draggable/dropping-insertion-point.native.js +157 -0
  16. package/build/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  17. package/build/components/block-draggable/index.native.js +484 -0
  18. package/build/components/block-draggable/index.native.js.map +1 -0
  19. package/build/components/block-draggable/use-scroll-when-dragging.native.js +130 -0
  20. package/build/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  21. package/build/components/block-list/block-list-context.native.js +195 -0
  22. package/build/components/block-list/block-list-context.native.js.map +1 -0
  23. package/build/components/block-list/block-list-item-cell.native.js +67 -0
  24. package/build/components/block-list/block-list-item-cell.native.js.map +1 -0
  25. package/build/components/block-list/block-list-item.native.js +12 -9
  26. package/build/components/block-list/block-list-item.native.js.map +1 -1
  27. package/build/components/block-list/block.native.js +29 -6
  28. package/build/components/block-list/block.native.js.map +1 -1
  29. package/build/components/block-list/index.native.js +75 -23
  30. package/build/components/block-list/index.native.js.map +1 -1
  31. package/build/components/block-list/use-block-props/index.js +8 -4
  32. package/build/components/block-list/use-block-props/index.js.map +1 -1
  33. package/build/components/block-list/use-block-props/use-block-class-names.js +1 -7
  34. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  35. package/build/components/block-list/use-in-between-inserter.js +1 -1
  36. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  37. package/build/components/block-lock/modal.js +34 -4
  38. package/build/components/block-lock/modal.js.map +1 -1
  39. package/build/components/block-lock/toolbar.js +2 -1
  40. package/build/components/block-lock/toolbar.js.map +1 -1
  41. package/build/components/block-lock/use-block-lock.js +4 -1
  42. package/build/components/block-lock/use-block-lock.js.map +1 -1
  43. package/build/components/block-mobile-toolbar/index.native.js +9 -3
  44. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  45. package/build/components/block-mover/button.js +4 -4
  46. package/build/components/block-mover/button.js.map +1 -1
  47. package/build/components/block-mover/index.js +39 -65
  48. package/build/components/block-mover/index.js.map +1 -1
  49. package/build/components/block-mover/index.native.js +17 -4
  50. package/build/components/block-mover/index.native.js.map +1 -1
  51. package/build/components/block-navigation/dropdown.js +11 -5
  52. package/build/components/block-navigation/dropdown.js.map +1 -1
  53. package/build/components/block-popover/inbetween.js +191 -0
  54. package/build/components/block-popover/inbetween.js.map +1 -0
  55. package/build/components/block-popover/index.js +85 -0
  56. package/build/components/block-popover/index.js.map +1 -0
  57. package/build/components/{block-tools → block-popover}/use-popover-scroll.js +4 -1
  58. package/build/components/block-popover/use-popover-scroll.js.map +1 -0
  59. package/build/components/block-preview/index.js +1 -1
  60. package/build/components/block-preview/index.js.map +1 -1
  61. package/build/components/block-styles/index.js +1 -10
  62. package/build/components/block-styles/index.js.map +1 -1
  63. package/build/components/block-tools/back-compat.js +2 -2
  64. package/build/components/block-tools/back-compat.js.map +1 -1
  65. package/build/components/block-tools/block-selection-button.js +4 -2
  66. package/build/components/block-tools/block-selection-button.js.map +1 -1
  67. package/build/components/block-tools/index.js +5 -5
  68. package/build/components/block-tools/index.js.map +1 -1
  69. package/build/components/block-tools/insertion-point.js +14 -121
  70. package/build/components/block-tools/insertion-point.js.map +1 -1
  71. package/build/components/block-tools/selected-block-popover.js +216 -0
  72. package/build/components/block-tools/selected-block-popover.js.map +1 -0
  73. package/build/components/border-radius-control/input-controls.js +10 -3
  74. package/build/components/border-radius-control/input-controls.js.map +1 -1
  75. package/build/components/color-style-selector/index.js +9 -0
  76. package/build/components/color-style-selector/index.js.map +1 -1
  77. package/build/components/colors-gradients/dropdown.js +149 -44
  78. package/build/components/colors-gradients/dropdown.js.map +1 -1
  79. package/build/components/duotone-control/index.js +5 -1
  80. package/build/components/duotone-control/index.js.map +1 -1
  81. package/build/components/image-editor/use-save-image.js +3 -1
  82. package/build/components/image-editor/use-save-image.js.map +1 -1
  83. package/build/components/index.js +5 -23
  84. package/build/components/index.js.map +1 -1
  85. package/build/components/inserter/index.native.js +31 -9
  86. package/build/components/inserter/index.native.js.map +1 -1
  87. package/build/components/link-control/constants.js +11 -1
  88. package/build/components/link-control/constants.js.map +1 -1
  89. package/build/components/link-control/search-results.js +4 -3
  90. package/build/components/link-control/search-results.js.map +1 -1
  91. package/build/components/link-control/use-search-handler.js +4 -4
  92. package/build/components/link-control/use-search-handler.js.map +1 -1
  93. package/build/components/list-view/block.js +15 -15
  94. package/build/components/list-view/block.js.map +1 -1
  95. package/build/components/list-view/branch.js +9 -13
  96. package/build/components/list-view/branch.js.map +1 -1
  97. package/build/components/list-view/context.js +1 -4
  98. package/build/components/list-view/context.js.map +1 -1
  99. package/build/components/list-view/drop-indicator.js +0 -1
  100. package/build/components/list-view/drop-indicator.js.map +1 -1
  101. package/build/components/list-view/index.js +15 -32
  102. package/build/components/list-view/index.js.map +1 -1
  103. package/build/components/navigable-toolbar/index.js +12 -2
  104. package/build/components/navigable-toolbar/index.js.map +1 -1
  105. package/build/components/rich-text/format-toolbar-container.js +0 -1
  106. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  107. package/build/components/rich-text/index.js +1 -6
  108. package/build/components/rich-text/index.js.map +1 -1
  109. package/build/components/rich-text/index.native.js +0 -4
  110. package/build/components/rich-text/index.native.js.map +1 -1
  111. package/build/components/url-input/index.js +11 -4
  112. package/build/components/url-input/index.js.map +1 -1
  113. package/build/components/use-block-display-information/index.js +3 -1
  114. package/build/components/use-block-display-information/index.js.map +1 -1
  115. package/build/components/use-block-drop-zone/index.native.js +167 -0
  116. package/build/components/use-block-drop-zone/index.native.js.map +1 -0
  117. package/build/components/use-on-block-drop/index.native.js +95 -0
  118. package/build/components/use-on-block-drop/index.native.js.map +1 -0
  119. package/build/components/use-setting/index.js +42 -18
  120. package/build/components/use-setting/index.js.map +1 -1
  121. package/build/hooks/anchor.js.map +1 -1
  122. package/build/hooks/border.js +463 -44
  123. package/build/hooks/border.js.map +1 -1
  124. package/build/hooks/color-panel.js +14 -7
  125. package/build/hooks/color-panel.js.map +1 -1
  126. package/build/hooks/dimensions.js +2 -2
  127. package/build/hooks/dimensions.js.map +1 -1
  128. package/build/hooks/index.js +3 -1
  129. package/build/hooks/index.js.map +1 -1
  130. package/build/hooks/margin.js +64 -12
  131. package/build/hooks/margin.js.map +1 -1
  132. package/build/hooks/padding.js +60 -12
  133. package/build/hooks/padding.js.map +1 -1
  134. package/build/hooks/settings.js +32 -0
  135. package/build/hooks/settings.js.map +1 -0
  136. package/build/hooks/style.js +14 -13
  137. package/build/hooks/style.js.map +1 -1
  138. package/build/hooks/typography.js +6 -2
  139. package/build/hooks/typography.js.map +1 -1
  140. package/build/hooks/use-border-props.js +22 -32
  141. package/build/hooks/use-border-props.js.map +1 -1
  142. package/build/store/actions.js +14 -2
  143. package/build/store/actions.js.map +1 -1
  144. package/build/store/defaults.js +0 -1
  145. package/build/store/defaults.js.map +1 -1
  146. package/build/store/reducer.js +0 -26
  147. package/build/store/reducer.js.map +1 -1
  148. package/build/store/selectors.js +47 -15
  149. package/build/store/selectors.js.map +1 -1
  150. package/build-module/components/block-alignment-control/constants.js +36 -0
  151. package/build-module/components/block-alignment-control/constants.js.map +1 -0
  152. package/build-module/components/block-alignment-control/ui.js +4 -35
  153. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  154. package/build-module/components/block-alignment-control/ui.native.js +78 -0
  155. package/build-module/components/block-alignment-control/ui.native.js.map +1 -0
  156. package/build-module/components/block-alignment-matrix-control/index.js +1 -6
  157. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  158. package/build-module/components/block-content-overlay/index.js +4 -70
  159. package/build-module/components/block-content-overlay/index.js.map +1 -1
  160. package/build-module/components/block-draggable/draggable-chip.native.js +50 -0
  161. package/build-module/components/block-draggable/draggable-chip.native.js.map +1 -0
  162. package/build-module/components/block-draggable/dropping-insertion-point.native.js +137 -0
  163. package/build-module/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  164. package/build-module/components/block-draggable/index.native.js +449 -0
  165. package/build-module/components/block-draggable/index.native.js.map +1 -0
  166. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js +120 -0
  167. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  168. package/build-module/components/block-list/block-list-context.native.js +179 -0
  169. package/build-module/components/block-list/block-list-context.native.js.map +1 -0
  170. package/build-module/components/block-list/block-list-item-cell.native.js +59 -0
  171. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -0
  172. package/build-module/components/block-list/block-list-item.native.js +12 -9
  173. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  174. package/build-module/components/block-list/block.native.js +28 -6
  175. package/build-module/components/block-list/block.native.js.map +1 -1
  176. package/build-module/components/block-list/index.native.js +72 -23
  177. package/build-module/components/block-list/index.native.js.map +1 -1
  178. package/build-module/components/block-list/use-block-props/index.js +9 -5
  179. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  180. package/build-module/components/block-list/use-block-props/use-block-class-names.js +1 -7
  181. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  182. package/build-module/components/block-list/use-in-between-inserter.js +1 -1
  183. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  184. package/build-module/components/block-lock/modal.js +34 -5
  185. package/build-module/components/block-lock/modal.js.map +1 -1
  186. package/build-module/components/block-lock/toolbar.js +2 -1
  187. package/build-module/components/block-lock/toolbar.js.map +1 -1
  188. package/build-module/components/block-lock/use-block-lock.js +4 -1
  189. package/build-module/components/block-lock/use-block-lock.js.map +1 -1
  190. package/build-module/components/block-mobile-toolbar/index.native.js +8 -3
  191. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  192. package/build-module/components/block-mover/button.js +5 -5
  193. package/build-module/components/block-mover/button.js.map +1 -1
  194. package/build-module/components/block-mover/index.js +38 -63
  195. package/build-module/components/block-mover/index.js.map +1 -1
  196. package/build-module/components/block-mover/index.native.js +18 -5
  197. package/build-module/components/block-mover/index.native.js.map +1 -1
  198. package/build-module/components/block-navigation/dropdown.js +10 -5
  199. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  200. package/build-module/components/block-popover/inbetween.js +173 -0
  201. package/build-module/components/block-popover/inbetween.js.map +1 -0
  202. package/build-module/components/block-popover/index.js +72 -0
  203. package/build-module/components/block-popover/index.js.map +1 -0
  204. package/build-module/components/{block-tools → block-popover}/use-popover-scroll.js +3 -1
  205. package/build-module/components/block-popover/use-popover-scroll.js.map +1 -0
  206. package/build-module/components/block-preview/index.js +1 -1
  207. package/build-module/components/block-preview/index.js.map +1 -1
  208. package/build-module/components/block-styles/index.js +1 -9
  209. package/build-module/components/block-styles/index.js.map +1 -1
  210. package/build-module/components/block-tools/back-compat.js +1 -1
  211. package/build-module/components/block-tools/back-compat.js.map +1 -1
  212. package/build-module/components/block-tools/block-selection-button.js +3 -2
  213. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  214. package/build-module/components/block-tools/index.js +3 -3
  215. package/build-module/components/block-tools/index.js.map +1 -1
  216. package/build-module/components/block-tools/insertion-point.js +16 -121
  217. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  218. package/build-module/components/block-tools/selected-block-popover.js +199 -0
  219. package/build-module/components/block-tools/selected-block-popover.js.map +1 -0
  220. package/build-module/components/border-radius-control/input-controls.js +11 -4
  221. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  222. package/build-module/components/color-style-selector/index.js +6 -0
  223. package/build-module/components/color-style-selector/index.js.map +1 -1
  224. package/build-module/components/colors-gradients/dropdown.js +151 -46
  225. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  226. package/build-module/components/duotone-control/index.js +4 -1
  227. package/build-module/components/duotone-control/index.js.map +1 -1
  228. package/build-module/components/image-editor/use-save-image.js +2 -1
  229. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  230. package/build-module/components/index.js +1 -3
  231. package/build-module/components/index.js.map +1 -1
  232. package/build-module/components/inserter/index.native.js +32 -11
  233. package/build-module/components/inserter/index.native.js.map +1 -1
  234. package/build-module/components/link-control/constants.js +5 -0
  235. package/build-module/components/link-control/constants.js.map +1 -1
  236. package/build-module/components/link-control/search-results.js +3 -4
  237. package/build-module/components/link-control/search-results.js.map +1 -1
  238. package/build-module/components/link-control/use-search-handler.js +5 -5
  239. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  240. package/build-module/components/list-view/block.js +15 -16
  241. package/build-module/components/list-view/block.js.map +1 -1
  242. package/build-module/components/list-view/branch.js +9 -13
  243. package/build-module/components/list-view/branch.js.map +1 -1
  244. package/build-module/components/list-view/context.js +1 -4
  245. package/build-module/components/list-view/context.js.map +1 -1
  246. package/build-module/components/list-view/drop-indicator.js +0 -1
  247. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  248. package/build-module/components/list-view/index.js +15 -31
  249. package/build-module/components/list-view/index.js.map +1 -1
  250. package/build-module/components/navigable-toolbar/index.js +12 -2
  251. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  252. package/build-module/components/rich-text/format-toolbar-container.js +0 -1
  253. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  254. package/build-module/components/rich-text/index.js +1 -5
  255. package/build-module/components/rich-text/index.js.map +1 -1
  256. package/build-module/components/rich-text/index.native.js +0 -4
  257. package/build-module/components/rich-text/index.native.js.map +1 -1
  258. package/build-module/components/url-input/index.js +11 -4
  259. package/build-module/components/url-input/index.js.map +1 -1
  260. package/build-module/components/use-block-display-information/index.js +3 -1
  261. package/build-module/components/use-block-display-information/index.js.map +1 -1
  262. package/build-module/components/use-block-drop-zone/index.native.js +148 -0
  263. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -0
  264. package/build-module/components/use-on-block-drop/index.native.js +83 -0
  265. package/build-module/components/use-on-block-drop/index.native.js.map +1 -0
  266. package/build-module/components/use-setting/index.js +43 -19
  267. package/build-module/components/use-setting/index.js.map +1 -1
  268. package/build-module/hooks/anchor.js.map +1 -1
  269. package/build-module/hooks/border.js +453 -44
  270. package/build-module/hooks/border.js.map +1 -1
  271. package/build-module/hooks/color-panel.js +11 -6
  272. package/build-module/hooks/color-panel.js.map +1 -1
  273. package/build-module/hooks/dimensions.js +5 -5
  274. package/build-module/hooks/dimensions.js.map +1 -1
  275. package/build-module/hooks/index.js +2 -1
  276. package/build-module/hooks/index.js.map +1 -1
  277. package/build-module/hooks/margin.js +61 -13
  278. package/build-module/hooks/margin.js.map +1 -1
  279. package/build-module/hooks/padding.js +57 -13
  280. package/build-module/hooks/padding.js.map +1 -1
  281. package/build-module/hooks/settings.js +29 -0
  282. package/build-module/hooks/settings.js.map +1 -0
  283. package/build-module/hooks/style.js +15 -14
  284. package/build-module/hooks/style.js.map +1 -1
  285. package/build-module/hooks/typography.js +6 -2
  286. package/build-module/hooks/typography.js.map +1 -1
  287. package/build-module/hooks/use-border-props.js +21 -30
  288. package/build-module/hooks/use-border-props.js.map +1 -1
  289. package/build-module/store/actions.js +14 -2
  290. package/build-module/store/actions.js.map +1 -1
  291. package/build-module/store/defaults.js +0 -1
  292. package/build-module/store/defaults.js.map +1 -1
  293. package/build-module/store/reducer.js +0 -24
  294. package/build-module/store/reducer.js.map +1 -1
  295. package/build-module/store/selectors.js +44 -15
  296. package/build-module/store/selectors.js.map +1 -1
  297. package/build-style/style-rtl.css +148 -410
  298. package/build-style/style.css +148 -410
  299. package/package.json +28 -28
  300. package/src/components/block-alignment-control/constants.js +45 -0
  301. package/src/components/block-alignment-control/ui.js +69 -109
  302. package/src/components/block-alignment-control/ui.native.js +86 -0
  303. package/src/components/block-alignment-matrix-control/index.js +1 -5
  304. package/src/components/block-content-overlay/index.js +9 -79
  305. package/src/components/block-content-overlay/style.scss +2 -11
  306. package/src/components/block-draggable/draggable-chip.native.js +49 -0
  307. package/src/components/block-draggable/dropping-insertion-point.native.js +181 -0
  308. package/src/components/block-draggable/dropping-insertion-point.native.scss +8 -0
  309. package/src/components/block-draggable/index.native.js +458 -0
  310. package/src/components/block-draggable/style.native.scss +19 -0
  311. package/src/components/block-draggable/use-scroll-when-dragging.native.js +135 -0
  312. package/src/components/block-list/block-list-context.native.js +175 -0
  313. package/src/components/block-list/block-list-item-cell.native.js +49 -0
  314. package/src/components/block-list/block-list-item.native.js +7 -11
  315. package/src/components/block-list/block.native.js +38 -8
  316. package/src/components/block-list/index.native.js +54 -13
  317. package/src/components/block-list/style.scss +7 -18
  318. package/src/components/block-list/test/block-list-context.native.js +253 -0
  319. package/src/components/block-list/test/fixtures/block-list-context.native.js +79 -0
  320. package/src/components/block-list/use-block-props/index.js +10 -5
  321. package/src/components/block-list/use-block-props/use-block-class-names.js +1 -11
  322. package/src/components/block-list/use-in-between-inserter.js +1 -1
  323. package/src/components/block-lock/modal.js +42 -3
  324. package/src/components/block-lock/toolbar.js +2 -2
  325. package/src/components/block-lock/use-block-lock.js +4 -1
  326. package/src/components/block-mobile-toolbar/index.native.js +8 -1
  327. package/src/components/block-mover/button.js +5 -7
  328. package/src/components/block-mover/index.js +37 -60
  329. package/src/components/block-mover/index.native.js +22 -6
  330. package/src/components/block-mover/stories/index.js +110 -0
  331. package/src/components/block-mover/style.scss +48 -138
  332. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +6 -0
  333. package/src/components/block-navigation/dropdown.js +12 -8
  334. package/src/components/block-popover/README.md +41 -0
  335. package/src/components/block-popover/inbetween.js +188 -0
  336. package/src/components/block-popover/index.js +75 -0
  337. package/src/components/block-popover/style.scss +28 -0
  338. package/src/components/{block-tools → block-popover}/use-popover-scroll.js +3 -1
  339. package/src/components/block-preview/index.js +1 -4
  340. package/src/components/block-styles/index.js +1 -12
  341. package/src/components/block-switcher/style.scss +2 -43
  342. package/src/components/block-toolbar/style.scss +0 -12
  343. package/src/components/block-tools/back-compat.js +1 -1
  344. package/src/components/block-tools/block-selection-button.js +3 -1
  345. package/src/components/block-tools/index.js +6 -4
  346. package/src/components/block-tools/insertion-point.js +19 -152
  347. package/src/components/block-tools/{block-popover.js → selected-block-popover.js} +24 -151
  348. package/src/components/block-tools/style.scss +12 -135
  349. package/src/components/border-radius-control/input-controls.js +16 -8
  350. package/src/components/border-radius-control/style.scss +7 -3
  351. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  352. package/src/components/color-style-selector/index.js +18 -9
  353. package/src/components/colors-gradients/dropdown.js +156 -62
  354. package/src/components/colors-gradients/style.scss +51 -23
  355. package/src/components/default-block-appender/style.scss +1 -2
  356. package/src/components/duotone-control/index.js +8 -1
  357. package/src/components/duotone-control/style.scss +1 -7
  358. package/src/components/gradients/README.md +29 -0
  359. package/src/components/image-editor/use-save-image.js +2 -1
  360. package/src/components/image-size-control/README.md +1 -1
  361. package/src/components/index.js +1 -3
  362. package/src/components/inserter/index.native.js +60 -25
  363. package/src/components/inserter/style.native.scss +25 -3
  364. package/src/components/inserter/style.scss +2 -1
  365. package/src/components/link-control/constants.js +11 -0
  366. package/src/components/link-control/search-results.js +4 -5
  367. package/src/components/link-control/use-search-handler.js +11 -5
  368. package/src/components/list-view/block.js +24 -34
  369. package/src/components/list-view/branch.js +10 -20
  370. package/src/components/list-view/context.js +1 -4
  371. package/src/components/list-view/drop-indicator.js +0 -1
  372. package/src/components/list-view/index.js +11 -41
  373. package/src/components/list-view/style.scss +2 -1
  374. package/src/components/navigable-toolbar/README.md +16 -0
  375. package/src/components/navigable-toolbar/index.js +12 -2
  376. package/src/components/preview-options/style.scss +0 -4
  377. package/src/components/rich-text/format-toolbar-container.js +0 -1
  378. package/src/components/rich-text/index.js +1 -3
  379. package/src/components/rich-text/index.native.js +0 -4
  380. package/src/components/rich-text/style.scss +2 -8
  381. package/src/components/url-input/index.js +9 -4
  382. package/src/components/use-block-display-information/index.js +2 -0
  383. package/src/components/use-block-drop-zone/index.native.js +173 -0
  384. package/src/components/use-on-block-drop/index.native.js +119 -0
  385. package/src/components/use-setting/index.js +57 -21
  386. package/src/hooks/anchor.js +1 -1
  387. package/src/hooks/border.js +429 -72
  388. package/src/hooks/color-panel.js +13 -9
  389. package/src/hooks/color.scss +0 -62
  390. package/src/hooks/dimensions.js +44 -38
  391. package/src/hooks/index.js +2 -1
  392. package/src/hooks/margin.js +64 -15
  393. package/src/hooks/padding.js +60 -15
  394. package/src/hooks/padding.scss +12 -0
  395. package/src/hooks/settings.js +32 -0
  396. package/src/hooks/style.js +25 -39
  397. package/src/hooks/test/settings.js +48 -0
  398. package/src/hooks/typography.js +2 -0
  399. package/src/hooks/use-border-props.js +15 -32
  400. package/src/store/actions.js +14 -2
  401. package/src/store/defaults.js +0 -1
  402. package/src/store/reducer.js +0 -21
  403. package/src/store/selectors.js +46 -15
  404. package/src/store/test/actions.js +0 -18
  405. package/src/store/test/reducer.js +0 -19
  406. package/src/store/test/selectors.js +17 -19
  407. package/src/style.scss +2 -3
  408. package/tsconfig.tsbuildinfo +1 -1
  409. package/build/components/block-mobile-toolbar/index.js +0 -42
  410. package/build/components/block-mobile-toolbar/index.js.map +0 -1
  411. package/build/components/block-tools/block-popover.js +0 -327
  412. package/build/components/block-tools/block-popover.js.map +0 -1
  413. package/build/components/block-tools/use-popover-scroll.js.map +0 -1
  414. package/build/components/border-style-control/index.js +0 -60
  415. package/build/components/border-style-control/index.js.map +0 -1
  416. package/build/components/colors-gradients/tools-panel-color-dropdown.js +0 -89
  417. package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  418. package/build/components/list-view/appender.js +0 -93
  419. package/build/components/list-view/appender.js.map +0 -1
  420. package/build/components/list-view/list-item.js +0 -62
  421. package/build/components/list-view/list-item.js.map +0 -1
  422. package/build/components/rich-text/use-caret-in-format.js +0 -43
  423. package/build/components/rich-text/use-caret-in-format.js.map +0 -1
  424. package/build/hooks/border-color.js +0 -302
  425. package/build/hooks/border-color.js.map +0 -1
  426. package/build/hooks/border-style.js +0 -96
  427. package/build/hooks/border-style.js.map +0 -1
  428. package/build/hooks/border-width.js +0 -162
  429. package/build/hooks/border-width.js.map +0 -1
  430. package/build-module/components/block-mobile-toolbar/index.js +0 -31
  431. package/build-module/components/block-mobile-toolbar/index.js.map +0 -1
  432. package/build-module/components/block-tools/block-popover.js +0 -306
  433. package/build-module/components/block-tools/block-popover.js.map +0 -1
  434. package/build-module/components/block-tools/use-popover-scroll.js.map +0 -1
  435. package/build-module/components/border-style-control/index.js +0 -50
  436. package/build-module/components/border-style-control/index.js.map +0 -1
  437. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +0 -75
  438. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  439. package/build-module/components/list-view/appender.js +0 -76
  440. package/build-module/components/list-view/appender.js.map +0 -1
  441. package/build-module/components/list-view/list-item.js +0 -47
  442. package/build-module/components/list-view/list-item.js.map +0 -1
  443. package/build-module/components/rich-text/use-caret-in-format.js +0 -33
  444. package/build-module/components/rich-text/use-caret-in-format.js.map +0 -1
  445. package/build-module/hooks/border-color.js +0 -276
  446. package/build-module/hooks/border-color.js.map +0 -1
  447. package/build-module/hooks/border-style.js +0 -78
  448. package/build-module/hooks/border-style.js.map +0 -1
  449. package/build-module/hooks/border-width.js +0 -143
  450. package/build-module/hooks/border-width.js.map +0 -1
  451. package/src/components/block-alignment-matrix-control/style.scss +0 -10
  452. package/src/components/block-mobile-toolbar/index.js +0 -24
  453. package/src/components/block-mobile-toolbar/style.scss +0 -29
  454. package/src/components/border-style-control/index.js +0 -47
  455. package/src/components/border-style-control/style.scss +0 -18
  456. package/src/components/colors-gradients/tools-panel-color-dropdown.js +0 -85
  457. package/src/components/list-view/appender.js +0 -82
  458. package/src/components/list-view/list-item.js +0 -59
  459. package/src/components/rich-text/use-caret-in-format.js +0 -28
  460. package/src/hooks/border-color.js +0 -315
  461. package/src/hooks/border-style.js +0 -64
  462. package/src/hooks/border-width.js +0 -139
@@ -0,0 +1,449 @@
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
+ }, children({
301
+ onScroll: scrollHandler
302
+ })), createElement(Animated.View, {
303
+ onLayout: onChipLayout,
304
+ style: chipStyles,
305
+ pointerEvents: "none"
306
+ }, draggedBlockIcon && createElement(Animated.View, {
307
+ entering: ZoomInEasyDown.duration(200),
308
+ exiting: exitingAnimation
309
+ }, createElement(DraggableChip, {
310
+ icon: draggedBlockIcon
311
+ }))));
312
+ };
313
+ /**
314
+ * Block draggable component
315
+ *
316
+ * This component serves for animating the block when it is being dragged.
317
+ * Hence, it should be wrapped around the rendering of a block.
318
+ *
319
+ * @param {Object} props Component props.
320
+ * @param {JSX.Element} props.children Children to be rendered.
321
+ * @param {string} props.clientId Client id of the block.
322
+ * @param {string} [props.draggingClientId] Client id to use for dragging. If not defined, the value from `clientId` will be used.
323
+ * @param {boolean} [props.enabled] Enables the draggable trigger.
324
+ *
325
+ * @return {Function} Render function which includes the parameter `isDraggable` to determine if the block can be dragged.
326
+ */
327
+
328
+
329
+ const BlockDraggable = _ref9 => {
330
+ let {
331
+ clientId,
332
+ children,
333
+ draggingClientId,
334
+ enabled = true
335
+ } = _ref9;
336
+ const wasBeingDragged = useRef(false);
337
+ const [isEditingText, setIsEditingText] = useState(false);
338
+ const [isScreenReaderEnabled, setIsScreenReaderEnabled] = useState(false);
339
+ const draggingAnimation = {
340
+ opacity: useSharedValue(1)
341
+ };
342
+
343
+ const startDraggingBlock = () => {
344
+ draggingAnimation.opacity.value = withTiming(0.4, BLOCK_OPACITY_ANIMATION_CONFIG);
345
+ };
346
+
347
+ const stopDraggingBlock = () => {
348
+ draggingAnimation.opacity.value = withDelay(BLOCK_OPACITY_ANIMATION_DELAY, withTiming(1, BLOCK_OPACITY_ANIMATION_CONFIG));
349
+ };
350
+
351
+ const {
352
+ isDraggable,
353
+ isBeingDragged,
354
+ isBlockSelected
355
+ } = useSelect(_select => {
356
+ const {
357
+ getBlockRootClientId,
358
+ getTemplateLock,
359
+ isBlockBeingDragged,
360
+ getSelectedBlockClientId
361
+ } = _select(blockEditorStore);
362
+
363
+ const rootClientId = getBlockRootClientId(clientId);
364
+ const templateLock = rootClientId ? getTemplateLock(rootClientId) : null;
365
+ const selectedBlockClientId = getSelectedBlockClientId();
366
+ return {
367
+ isBeingDragged: isBlockBeingDragged(clientId),
368
+ isDraggable: 'all' !== templateLock,
369
+ isBlockSelected: selectedBlockClientId && selectedBlockClientId === clientId
370
+ };
371
+ }, [clientId]);
372
+ useEffect(() => {
373
+ if (isBeingDragged !== wasBeingDragged.current) {
374
+ if (isBeingDragged) {
375
+ startDraggingBlock();
376
+ } else {
377
+ stopDraggingBlock();
378
+ }
379
+ }
380
+
381
+ wasBeingDragged.current = isBeingDragged;
382
+ }, [isBeingDragged]);
383
+ const onFocusChangeAztec = useCallback(_ref10 => {
384
+ let {
385
+ isFocused
386
+ } = _ref10;
387
+ setIsEditingText(isFocused);
388
+ }, []);
389
+ useEffect(() => {
390
+ let mounted = true;
391
+ const isAnyAztecInputFocused = RCTAztecView.InputState.isFocused();
392
+
393
+ if (isAnyAztecInputFocused) {
394
+ setIsEditingText(isAnyAztecInputFocused);
395
+ }
396
+
397
+ RCTAztecView.InputState.addFocusChangeListener(onFocusChangeAztec);
398
+ const screenReaderChangedListener = AccessibilityInfo.addEventListener('screenReaderChanged', setIsScreenReaderEnabled);
399
+ AccessibilityInfo.isScreenReaderEnabled().then(screenReaderEnabled => {
400
+ if (mounted) {
401
+ setIsScreenReaderEnabled(screenReaderEnabled);
402
+ }
403
+ });
404
+ return () => {
405
+ mounted = false;
406
+ RCTAztecView.InputState.removeFocusChangeListener(onFocusChangeAztec);
407
+ screenReaderChangedListener.remove();
408
+ };
409
+ }, []);
410
+ const onLongPressDraggable = useCallback(() => {
411
+ // Ensure that no text input is focused when starting the dragging gesture in order to prevent conflicts with text editing.
412
+ RCTAztecView.InputState.blurCurrentFocusedElement();
413
+ }, []);
414
+ const animatedWrapperStyles = useAnimatedStyle(() => {
415
+ return {
416
+ opacity: draggingAnimation.opacity.value
417
+ };
418
+ });
419
+ const wrapperStyles = [animatedWrapperStyles, styles['draggable-wrapper__container']];
420
+ const canDragBlock = enabled && !isScreenReaderEnabled && (!isBlockSelected || !isEditingText);
421
+
422
+ if (!isDraggable) {
423
+ return children({
424
+ isDraggable: false
425
+ });
426
+ }
427
+
428
+ return createElement(DraggableTrigger, {
429
+ id: draggingClientId || clientId,
430
+ enabled: enabled && canDragBlock,
431
+ minDuration: Platform.select({
432
+ // On iOS, using a lower min duration than the default
433
+ // value prevents the long-press gesture from being
434
+ // triggered in underneath elements. This is required to
435
+ // prevent enabling text editing when dragging is available.
436
+ ios: canDragBlock ? DEFAULT_IOS_LONG_PRESS_MIN_DURATION : DEFAULT_LONG_PRESS_MIN_DURATION,
437
+ android: DEFAULT_LONG_PRESS_MIN_DURATION
438
+ }),
439
+ onLongPress: onLongPressDraggable
440
+ }, createElement(Animated.View, {
441
+ style: wrapperStyles
442
+ }, children({
443
+ isDraggable: true
444
+ })));
445
+ };
446
+
447
+ export { BlockDraggableWrapper };
448
+ export default BlockDraggable;
449
+ //# 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","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>\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,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"]}