@wordpress/components 23.7.0 → 23.9.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 (274) hide show
  1. package/CHANGELOG.md +52 -6
  2. package/build/checkbox-control/index.js +2 -2
  3. package/build/checkbox-control/index.js.map +1 -1
  4. package/build/color-palette/index.native.js +12 -0
  5. package/build/color-palette/index.native.js.map +1 -1
  6. package/build/custom-gradient-picker/index.native.js +3 -1
  7. package/build/custom-gradient-picker/index.native.js.map +1 -1
  8. package/build/custom-gradient-picker/serializer.js +0 -4
  9. package/build/custom-gradient-picker/serializer.js.map +1 -1
  10. package/build/draggable/index.js +6 -1
  11. package/build/draggable/index.js.map +1 -1
  12. package/build/drop-zone/index.js +8 -8
  13. package/build/drop-zone/index.js.map +1 -1
  14. package/build/index.js.map +1 -1
  15. package/build/mobile/bottom-sheet/cell.native.js +6 -6
  16. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  17. package/build/mobile/color-settings/palette.screen.native.js +0 -8
  18. package/build/mobile/color-settings/palette.screen.native.js.map +1 -1
  19. package/build/mobile/global-styles-context/utils.native.js +21 -4
  20. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  21. package/build/mobile/keyboard-aware-flat-list/index.android.js +0 -4
  22. package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  23. package/build/mobile/keyboard-aware-flat-list/index.ios.js +100 -55
  24. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  25. package/build/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +82 -0
  26. package/build/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js.map +1 -0
  27. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js +85 -0
  28. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +1 -0
  29. package/build/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +44 -0
  30. package/build/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js.map +1 -0
  31. package/build/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +53 -0
  32. package/build/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js.map +1 -0
  33. package/build/mobile/segmented-control/index.native.js +4 -2
  34. package/build/mobile/segmented-control/index.native.js.map +1 -1
  35. package/build/navigator/navigator-provider/component.js +4 -2
  36. package/build/navigator/navigator-provider/component.js.map +1 -1
  37. package/build/navigator/navigator-screen/component.js +4 -3
  38. package/build/navigator/navigator-screen/component.js.map +1 -1
  39. package/build/popover/index.js +1 -8
  40. package/build/popover/index.js.map +1 -1
  41. package/build/private-apis.js +4 -1
  42. package/build/private-apis.js.map +1 -1
  43. package/build/query-controls/author-select.js +2 -1
  44. package/build/query-controls/author-select.js.map +1 -1
  45. package/build/query-controls/category-select.js +3 -1
  46. package/build/query-controls/category-select.js.map +1 -1
  47. package/build/query-controls/index.js +7 -1
  48. package/build/query-controls/index.js.map +1 -1
  49. package/build/sandbox/index.native.js +55 -29
  50. package/build/sandbox/index.native.js.map +1 -1
  51. package/build/slot-fill/index.js +20 -7
  52. package/build/slot-fill/index.js.map +1 -1
  53. package/build/spinner/styles.js +4 -4
  54. package/build/spinner/styles.js.map +1 -1
  55. package/build/tree-grid/index.js +3 -3
  56. package/build/tree-grid/index.js.map +1 -1
  57. package/build/view/component.js +1 -2
  58. package/build/view/component.js.map +1 -1
  59. package/build-module/checkbox-control/index.js +2 -2
  60. package/build-module/checkbox-control/index.js.map +1 -1
  61. package/build-module/color-palette/index.native.js +13 -1
  62. package/build-module/color-palette/index.native.js.map +1 -1
  63. package/build-module/custom-gradient-picker/index.native.js +3 -1
  64. package/build-module/custom-gradient-picker/index.native.js.map +1 -1
  65. package/build-module/custom-gradient-picker/serializer.js +0 -4
  66. package/build-module/custom-gradient-picker/serializer.js.map +1 -1
  67. package/build-module/draggable/index.js +6 -1
  68. package/build-module/draggable/index.js.map +1 -1
  69. package/build-module/drop-zone/index.js +8 -8
  70. package/build-module/drop-zone/index.js.map +1 -1
  71. package/build-module/index.js.map +1 -1
  72. package/build-module/mobile/bottom-sheet/cell.native.js +6 -5
  73. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  74. package/build-module/mobile/color-settings/palette.screen.native.js +0 -8
  75. package/build-module/mobile/color-settings/palette.screen.native.js.map +1 -1
  76. package/build-module/mobile/global-styles-context/utils.native.js +21 -3
  77. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  78. package/build-module/mobile/keyboard-aware-flat-list/index.android.js +0 -4
  79. package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  80. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +97 -54
  81. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  82. package/build-module/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +73 -0
  83. package/build-module/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js.map +1 -0
  84. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js +76 -0
  85. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +1 -0
  86. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +33 -0
  87. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js.map +1 -0
  88. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +40 -0
  89. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js.map +1 -0
  90. package/build-module/mobile/segmented-control/index.native.js +4 -2
  91. package/build-module/mobile/segmented-control/index.native.js.map +1 -1
  92. package/build-module/navigator/navigator-provider/component.js +4 -2
  93. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  94. package/build-module/navigator/navigator-screen/component.js +4 -3
  95. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  96. package/build-module/popover/index.js +1 -8
  97. package/build-module/popover/index.js.map +1 -1
  98. package/build-module/private-apis.js +3 -1
  99. package/build-module/private-apis.js.map +1 -1
  100. package/build-module/query-controls/author-select.js +2 -1
  101. package/build-module/query-controls/author-select.js.map +1 -1
  102. package/build-module/query-controls/category-select.js +3 -1
  103. package/build-module/query-controls/category-select.js.map +1 -1
  104. package/build-module/query-controls/index.js +7 -2
  105. package/build-module/query-controls/index.js.map +1 -1
  106. package/build-module/sandbox/index.native.js +56 -31
  107. package/build-module/sandbox/index.native.js.map +1 -1
  108. package/build-module/slot-fill/index.js +16 -6
  109. package/build-module/slot-fill/index.js.map +1 -1
  110. package/build-module/spinner/styles.js +4 -4
  111. package/build-module/spinner/styles.js.map +1 -1
  112. package/build-module/tree-grid/index.js +3 -3
  113. package/build-module/tree-grid/index.js.map +1 -1
  114. package/build-module/view/component.js +1 -2
  115. package/build-module/view/component.js.map +1 -1
  116. package/build-style/style-rtl.css +26 -16
  117. package/build-style/style.css +26 -16
  118. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts +1 -1
  119. package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
  120. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
  121. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
  122. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
  123. package/build-types/border-control/border-control/hook.d.ts +2 -2
  124. package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
  125. package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
  126. package/build-types/box-control/styles/box-control-styles.d.ts +5 -5
  127. package/build-types/button/deprecated.d.ts +8 -8
  128. package/build-types/card/card/hook.d.ts +2 -2
  129. package/build-types/card/card-body/hook.d.ts +2 -2
  130. package/build-types/card/card-divider/hook.d.ts +2 -2
  131. package/build-types/card/card-footer/hook.d.ts +2 -2
  132. package/build-types/card/card-header/hook.d.ts +2 -2
  133. package/build-types/card/card-media/hook.d.ts +2 -2
  134. package/build-types/checkbox-control/index.d.ts.map +1 -1
  135. package/build-types/color-palette/styles.d.ts +1 -1
  136. package/build-types/color-picker/styles.d.ts +7 -7
  137. package/build-types/combobox-control/styles.d.ts +1 -1
  138. package/build-types/custom-gradient-picker/serializer.d.ts +1 -5
  139. package/build-types/custom-gradient-picker/serializer.d.ts.map +1 -1
  140. package/build-types/custom-gradient-picker/types.d.ts +0 -2
  141. package/build-types/custom-gradient-picker/types.d.ts.map +1 -1
  142. package/build-types/date-time/date/styles.d.ts +2 -2
  143. package/build-types/date-time/date-time/styles.d.ts +1 -1
  144. package/build-types/date-time/time/styles.d.ts +8 -8
  145. package/build-types/draggable/index.d.ts +1 -1
  146. package/build-types/draggable/index.d.ts.map +1 -1
  147. package/build-types/draggable/stories/index.d.ts +8 -0
  148. package/build-types/draggable/stories/index.d.ts.map +1 -1
  149. package/build-types/draggable/types.d.ts +7 -0
  150. package/build-types/draggable/types.d.ts.map +1 -1
  151. package/build-types/drop-zone/index.d.ts.map +1 -1
  152. package/build-types/elevation/hook.d.ts +2 -2
  153. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  154. package/build-types/flex/flex/hook.d.ts +2 -2
  155. package/build-types/flex/flex-block/hook.d.ts +2 -2
  156. package/build-types/flex/flex-item/hook.d.ts +2 -2
  157. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -2
  158. package/build-types/form-token-field/styles.d.ts +1 -1
  159. package/build-types/grid/hook.d.ts +2 -2
  160. package/build-types/h-stack/hook.d.ts +2 -2
  161. package/build-types/heading/hook.d.ts +2 -2
  162. package/build-types/index.d.ts +129 -0
  163. package/build-types/index.d.ts.map +1 -0
  164. package/build-types/input-control/styles/input-control-styles.d.ts +2 -2
  165. package/build-types/item-group/item/hook.d.ts +2 -2
  166. package/build-types/item-group/item-group/hook.d.ts +2 -2
  167. package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
  168. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  169. package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
  170. package/build-types/navigator/navigator-button/component.d.ts +1 -1
  171. package/build-types/navigator/navigator-button/hook.d.ts +3 -3
  172. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  173. package/build-types/navigator/navigator-screen/component.d.ts +1 -1
  174. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  175. package/build-types/navigator/navigator-to-parent-button/component.d.ts +1 -1
  176. package/build-types/navigator/stories/index.d.ts +1 -0
  177. package/build-types/navigator/stories/index.d.ts.map +1 -1
  178. package/build-types/navigator/types.d.ts +2 -2
  179. package/build-types/navigator/types.d.ts.map +1 -1
  180. package/build-types/number-control/index.d.ts +2 -2
  181. package/build-types/number-control/stories/index.d.ts +2 -2
  182. package/build-types/palette-edit/styles.d.ts +18 -12
  183. package/build-types/palette-edit/styles.d.ts.map +1 -1
  184. package/build-types/popover/index.d.ts +1 -1
  185. package/build-types/popover/index.d.ts.map +1 -1
  186. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  187. package/build-types/private-apis.d.ts +2 -3
  188. package/build-types/private-apis.d.ts.map +1 -1
  189. package/build-types/query-controls/author-select.d.ts.map +1 -1
  190. package/build-types/query-controls/category-select.d.ts.map +1 -1
  191. package/build-types/query-controls/index.d.ts.map +1 -1
  192. package/build-types/range-control/index.d.ts +1 -1
  193. package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
  194. package/build-types/resizable-box/index.d.ts +1 -1
  195. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  196. package/build-types/resizable-box/stories/index.d.ts +2 -2
  197. package/build-types/scrollable/hook.d.ts +2 -2
  198. package/build-types/search-control/index.d.ts +1 -1
  199. package/build-types/search-control/stories/index.d.ts +2 -2
  200. package/build-types/slot-fill/index.d.ts +13 -1
  201. package/build-types/slot-fill/index.d.ts.map +1 -1
  202. package/build-types/spacer/hook.d.ts +2 -2
  203. package/build-types/spinner/index.d.ts +1 -1
  204. package/build-types/spinner/styles.d.ts.map +1 -1
  205. package/build-types/surface/hook.d.ts +2 -2
  206. package/build-types/text/hook.d.ts +2 -2
  207. package/build-types/text-control/index.d.ts +1 -1
  208. package/build-types/toolbar/toolbar-button/index.d.ts +8 -8
  209. package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
  210. package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
  211. package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
  212. package/build-types/tree-grid/index.d.ts.map +1 -1
  213. package/build-types/truncate/hook.d.ts +2 -2
  214. package/build-types/ui/context/wordpress-component.d.ts +1 -1
  215. package/build-types/ui/context/wordpress-component.d.ts.map +1 -1
  216. package/build-types/ui/control-group/hook.d.ts +2 -2
  217. package/build-types/ui/control-label/hook.d.ts +2 -2
  218. package/build-types/ui/form-group/form-group.d.ts +2 -2
  219. package/build-types/ui/form-group/use-form-group.d.ts +2 -2
  220. package/build-types/unit-control/index.d.ts +1 -1
  221. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
  222. package/build-types/v-stack/hook.d.ts +2 -2
  223. package/build-types/view/component.d.ts +1 -1
  224. package/build-types/view/component.d.ts.map +1 -1
  225. package/package.json +22 -22
  226. package/src/autocomplete/README.md +4 -2
  227. package/src/checkbox-control/index.tsx +6 -2
  228. package/src/color-palette/index.native.js +20 -1
  229. package/src/color-picker/test/index.tsx +99 -99
  230. package/src/custom-gradient-picker/index.native.js +1 -1
  231. package/src/custom-gradient-picker/serializer.ts +2 -6
  232. package/src/custom-gradient-picker/types.ts +0 -18
  233. package/src/dimension-control/README.md +1 -1
  234. package/src/draggable/README.md +8 -1
  235. package/src/draggable/index.tsx +6 -1
  236. package/src/draggable/stories/index.tsx +69 -33
  237. package/src/draggable/types.ts +7 -0
  238. package/src/drop-zone/index.tsx +12 -8
  239. package/src/drop-zone/style.scss +1 -1
  240. package/src/{index.js → index.ts} +1 -0
  241. package/src/mobile/bottom-sheet/cell.native.js +4 -5
  242. package/src/mobile/color-settings/palette.screen.native.js +0 -7
  243. package/src/mobile/global-styles-context/utils.native.js +18 -3
  244. package/src/mobile/keyboard-aware-flat-list/index.android.js +0 -4
  245. package/src/mobile/keyboard-aware-flat-list/index.ios.js +118 -67
  246. package/src/mobile/keyboard-aware-flat-list/test/use-keyboard-offset.native.js +203 -0
  247. package/src/mobile/keyboard-aware-flat-list/test/use-scroll-to-text-input.native.js +140 -0
  248. package/src/mobile/keyboard-aware-flat-list/test/use-text-input-caret-position.native.js +82 -0
  249. package/src/mobile/keyboard-aware-flat-list/test/use-text-input-offset.native.js +147 -0
  250. package/src/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +87 -0
  251. package/src/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js +105 -0
  252. package/src/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +36 -0
  253. package/src/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +54 -0
  254. package/src/mobile/segmented-control/index.native.js +2 -2
  255. package/src/modal/style.scss +20 -12
  256. package/src/navigator/navigator-provider/component.tsx +2 -0
  257. package/src/navigator/navigator-screen/component.tsx +5 -2
  258. package/src/navigator/stories/index.tsx +68 -0
  259. package/src/navigator/test/index.tsx +52 -0
  260. package/src/navigator/types.ts +2 -1
  261. package/src/popover/index.tsx +2 -15
  262. package/src/{private-apis.js → private-apis.ts} +2 -0
  263. package/src/query-controls/author-select.tsx +1 -0
  264. package/src/query-controls/category-select.tsx +1 -0
  265. package/src/query-controls/index.tsx +4 -2
  266. package/src/sandbox/index.native.js +78 -37
  267. package/src/slot-fill/index.js +14 -6
  268. package/src/snackbar/style.scss +2 -1
  269. package/src/spinner/styles.ts +2 -0
  270. package/src/tree-grid/index.tsx +7 -2
  271. package/src/ui/context/wordpress-component.ts +1 -1
  272. package/src/view/component.tsx +2 -2
  273. package/tsconfig.json +3 -4
  274. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/components/src/mobile/global-styles-context/utils.native.js"],"names":["camelCase","get","Dimensions","getPxFromCssUnit","useSetting","useMultipleOriginColorsAndGradients","BLOCK_STYLE_ATTRIBUTES","BLOCK_STYLE_ATTRIBUTES_MAPPING","textColor","text","background","link","placeholder","PADDING","UNKNOWN_VALUE","DEFAULT_FONT_SIZE","getBlockPaddings","mergedStyle","wrapperPropsStyle","blockStyleAttributes","blockColors","blockPaddings","padding","backgroundColor","undefined","getBlockColors","defaultColors","blockName","baseGlobalStyles","blockStyles","customBlockStyles","style","color","blockGlobalStyles","blocks","Object","entries","forEach","key","value","styleKey","styles","elements","linkColor","isCustomColor","startsWith","mappedColor","values","find","slug","getBlockTypography","fontSizes","typographyStyles","typography","parsedFontSizes","fontSize","lineHeight","parseInt","mappedFontSize","size","parseStylesVariables","mappedValues","customValues","stylesBase","variables","variable","regex","RegExp","varRegex","fontSizeRegex","replace","_$1","$2","path","split","mappedPresetValue","matchedValue","customValuesData","JSON","parse","reduce","prev","curr","slice","length","width","height","parsedFontSize","getMappedValues","features","palette","colors","theme","custom","default","normalizeFontSizes","normalizedFontSizes","dimensions","map","fontSizeObject","sizePx","useMobileGlobalStylesColors","type","colorGradientSettings","availableThemeColors","origin","concat","colorPalette","editorDefaultPalette","getColorsAndGradients","defaultEditorColors","defaultEditorGradients","rawFeatures","__experimentalGlobalStylesBaseStyles","__experimentalFeatures","gradients","defaultPalette","defaultGradients","getGlobalStyles","rawStyles","stringify","globalStyles","customLineHeight","spacing"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,aAA1B;AACA,SAASC,GAAT,QAAoB,QAApB;AACA,SAASC,UAAT,QAA2B,cAA3B;AAEA;AACA;AACA;;AACA,SACCC,gBADD,EAECC,UAFD,EAGCC,mCAHD,QAIO,yBAJP;AAMA,OAAO,MAAMC,sBAAsB,GAAG,CACrC,WADqC,EAErC,iBAFqC,EAGrC,OAHqC,EAIrC,OAJqC,EAKrC,UALqC,CAA/B,C,CAQP;;AACA,MAAMC,8BAA8B,GAAG;AACtCC,EAAAA,SAAS,EAAE,OAD2B;AAEtCC,EAAAA,IAAI,EAAE,OAFgC;AAGtCC,EAAAA,UAAU,EAAE,iBAH0B;AAItCC,EAAAA,IAAI,EAAE,WAJgC;AAKtCC,EAAAA,WAAW,EAAE;AALyB,CAAvC;AAQA,MAAMC,OAAO,GAAG,EAAhB,C,CAAoB;;AACpB,MAAMC,aAAa,GAAG,WAAtB;AACA,MAAMC,iBAAiB,GAAG,EAA1B;AAEA,OAAO,SAASC,gBAAT,CACNC,WADM,EAENC,iBAFM,EAGNC,oBAHM,EAINC,WAJM,EAKL;AACD,QAAMC,aAAa,GAAG,EAAtB;;AAEA,MACC,CAAEJ,WAAW,CAACK,OAAd,KACEJ,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,IAAAA,iBAAiB,CAAEK,eAAnB,IACDJ,oBADC,aACDA,oBADC,eACDA,oBAAoB,CAAEI,eADrB,IAEDH,WAFC,aAEDA,WAFC,eAEDA,WAAW,CAAEG,eAHd,CADD,EAKE;AACDF,IAAAA,aAAa,CAACC,OAAd,GAAwBT,OAAxB;AACA,WAAOQ,aAAP;AACA,GAXA,CAaD;;;AACA,MACCJ,WAAW,SAAX,IAAAA,WAAW,WAAX,IAAAA,WAAW,CAAEK,OAAb,IACA,EAAEJ,iBAAF,aAAEA,iBAAF,eAAEA,iBAAiB,CAAEK,eAArB,CADA,IAEA,EAAEJ,oBAAF,aAAEA,oBAAF,eAAEA,oBAAoB,CAAEI,eAAxB,CAFA,IAGA,EAAEH,WAAF,aAAEA,WAAF,eAAEA,WAAW,CAAEG,eAAf,CAJD,EAKE;AACDF,IAAAA,aAAa,CAACC,OAAd,GAAwBE,SAAxB;AACA;;AAED,SAAOH,aAAP;AACA;AAED,OAAO,SAASI,cAAT,CACNN,oBADM,EAENO,aAFM,EAGNC,SAHM,EAINC,gBAJM,EAKL;AAAA;;AACD,QAAMC,WAAW,GAAG,EAApB;AACA,QAAMC,iBAAiB,GAAG,CAAAX,oBAAoB,SAApB,IAAAA,oBAAoB,WAApB,qCAAAA,oBAAoB,CAAEY,KAAtB,gFAA6BC,KAA7B,KAAsC,EAAhE;AACA,QAAMC,iBAAiB,GAAGL,gBAAH,aAAGA,gBAAH,gDAAGA,gBAAgB,CAAEM,MAArB,0DAAG,sBAA4BP,SAA5B,CAA1B,CAHC,CAKD;;AACA,MAAKM,iBAAL,aAAKA,iBAAL,eAAKA,iBAAiB,CAAED,KAAxB,EAAgC;AAC/BG,IAAAA,MAAM,CAACC,OAAP,CAAgBH,iBAAiB,CAACD,KAAlC,EAA0CK,OAA1C,CACC,QAAsB;AAAA,UAApB,CAAEC,GAAF,EAAOC,KAAP,CAAoB;AACrB,YAAMC,QAAQ,GAAGjC,8BAA8B,CAAE+B,GAAF,CAA/C;;AAEA,UAAKE,QAAQ,IAAID,KAAK,KAAKzB,aAA3B,EAA2C;AAAA;;AAC1C,cAAMkB,KAAK,4BAAGF,iBAAiB,CAAEQ,GAAF,CAApB,yEAA+BC,KAA1C;AACAV,QAAAA,WAAW,CAAEW,QAAF,CAAX,GAA0BR,KAA1B;AACA;AACD,KARF;AAUA,GAXD,MAWO,IAAKJ,gBAAL,aAAKA,gBAAL,wCAAKA,gBAAgB,CAAEa,MAAvB,4EAAK,sBAA0BT,KAA/B,mDAAK,uBAAiCvB,IAAtC,EAA6C;AAAA;;AACnDoB,IAAAA,WAAW,CAAEtB,8BAA8B,CAACE,IAAjC,CAAX,GACCmB,gBADD,aACCA,gBADD,iDACCA,gBAAgB,CAAEa,MADnB,qFACC,uBAA0BT,KAD3B,2DACC,uBAAiCvB,IADlC;AAEA,GApBA,CAsBD;;;AACA,MAAKwB,iBAAL,aAAKA,iBAAL,eAAKA,iBAAiB,CAAES,QAAxB,EAAmC;AAAA;;AAClC,UAAMC,SAAS,4BAAGV,iBAAiB,CAACS,QAArB,oFAAG,sBAA4B/B,IAA/B,qFAAG,uBAAkCqB,KAArC,2DAAG,uBAAyCvB,IAA3D;AACA,UAAM+B,QAAQ,GAAGjC,8BAA8B,CAACI,IAAhD;;AAEA,QAAK6B,QAAQ,IAAIG,SAAZ,IAAyBA,SAAS,KAAK7B,aAA5C,EAA4D;AAC3De,MAAAA,WAAW,CAAEW,QAAF,CAAX,GAA0BG,SAA1B;AACA;AACD,GA9BA,CAgCD;;;AACAR,EAAAA,MAAM,CAACC,OAAP,CAAgBjB,oBAAhB,EAAuCkB,OAAvC,CAAgD,SAAsB;AAAA;;AAAA,QAApB,CAAEC,GAAF,EAAOC,KAAP,CAAoB;AACrE,UAAMK,aAAa,GAAGL,KAAH,aAAGA,KAAH,4CAAGA,KAAK,CAAEM,UAAV,sDAAG,uBAAAN,KAAK,EAAgB,GAAhB,CAA3B;AACA,QAAIC,QAAQ,GAAGF,GAAf;;AAEA,QAAK/B,8BAA8B,CAAEiC,QAAF,CAAnC,EAAkD;AACjDA,MAAAA,QAAQ,GAAGjC,8BAA8B,CAAEiC,QAAF,CAAzC;AACA;;AAED,QAAK,CAAEI,aAAP,EAAuB;AACtB,YAAME,WAAW,GAAGX,MAAM,CAACY,MAAP,CAAerB,aAAf,aAAeA,aAAf,cAAeA,aAAf,GAAgC,EAAhC,EAAqCsB,IAArC,CACnB;AAAA,YAAE;AAAEC,UAAAA;AAAF,SAAF;AAAA,eAAgBA,IAAI,KAAKV,KAAzB;AAAA,OADmB,CAApB;;AAIA,UAAKO,WAAL,EAAmB;AAClBjB,QAAAA,WAAW,CAAEW,QAAF,CAAX,GAA0BM,WAAW,CAACd,KAAtC;AACA;AACD,KARD,MAQO;AACNH,MAAAA,WAAW,CAAEW,QAAF,CAAX,GAA0BD,KAA1B;AACA;AACD,GAnBD,EAjCC,CAsDD;;AACA,MAAKV,WAAL,aAAKA,WAAL,eAAKA,WAAW,CAAEG,KAAlB,EAA0B;AACzBH,IAAAA,WAAW,CAAEtB,8BAA8B,CAACK,WAAjC,CAAX,GACCiB,WAAW,CAACG,KADb;AAEA;;AAED,SAAOH,WAAP;AACA;AAED,OAAO,SAASqB,kBAAT,CACN/B,oBADM,EAENgC,SAFM,EAGNxB,SAHM,EAINC,gBAJM,EAKL;AAAA;;AACD,QAAMwB,gBAAgB,GAAG,EAAzB;AACA,QAAMtB,iBAAiB,GAAG,CAAAX,oBAAoB,SAApB,IAAAA,oBAAoB,WAApB,sCAAAA,oBAAoB,CAAEY,KAAtB,kFAA6BsB,UAA7B,KAA2C,EAArE;AACA,QAAMpB,iBAAiB,GAAGL,gBAAH,aAAGA,gBAAH,iDAAGA,gBAAgB,CAAEM,MAArB,2DAAG,uBAA4BP,SAA5B,CAA1B;AACA,QAAM2B,eAAe,GAAGnB,MAAM,CAACY,MAAP,CAAeI,SAAf,aAAeA,SAAf,cAAeA,SAAf,GAA4B,EAA5B,CAAxB,CAJC,CAMD;;AACA,MAAKlB,iBAAL,aAAKA,iBAAL,eAAKA,iBAAiB,CAAEoB,UAAxB,EAAqC;AAAA;;AACpC,UAAME,QAAQ,GAAGtB,iBAAH,aAAGA,iBAAH,gDAAGA,iBAAiB,CAAEoB,UAAtB,0DAAG,sBAA+BE,QAAhD;AACA,UAAMC,UAAU,GAAGvB,iBAAH,aAAGA,iBAAH,iDAAGA,iBAAiB,CAAEoB,UAAtB,2DAAG,uBAA+BG,UAAlD;;AAEA,QAAKD,QAAL,EAAgB;AACf,UAAKE,QAAQ,CAAEF,QAAF,EAAY,EAAZ,CAAb,EAAgC;AAC/BH,QAAAA,gBAAgB,CAACG,QAAjB,GAA4BA,QAA5B;AACA,OAFD,MAEO;AACN,cAAMG,cAAc,GAAGJ,eAAe,CAACN,IAAhB,CACtB;AAAA,cAAE;AAAEC,YAAAA;AAAF,WAAF;AAAA,iBAAgBA,IAAI,KAAKM,QAAzB;AAAA,SADsB,CAAvB;;AAIA,YAAKG,cAAL,EAAsB;AACrBN,UAAAA,gBAAgB,CAACG,QAAjB,GAA4BG,cAA5B,aAA4BA,cAA5B,uBAA4BA,cAAc,CAAEC,IAA5C;AACA;AACD;AACD;;AAED,QAAKH,UAAL,EAAkB;AACjBJ,MAAAA,gBAAgB,CAACI,UAAjB,GAA8BA,UAA9B;AACA;AACD;;AAED,MAAKrC,oBAAoB,SAApB,IAAAA,oBAAoB,WAApB,IAAAA,oBAAoB,CAAEoC,QAAtB,IAAkC3B,gBAAvC,EAA0D;AACzD,UAAM8B,cAAc,GAAGJ,eAAe,CAACN,IAAhB,CACtB;AAAA,UAAE;AAAEC,QAAAA;AAAF,OAAF;AAAA,aAAgBA,IAAI,MAAK9B,oBAAL,aAAKA,oBAAL,uBAAKA,oBAAoB,CAAEoC,QAA3B,CAApB;AAAA,KADsB,CAAvB;;AAIA,QAAKG,cAAL,EAAsB;AACrBN,MAAAA,gBAAgB,CAACG,QAAjB,GAA4BG,cAA5B,aAA4BA,cAA5B,uBAA4BA,cAAc,CAAEC,IAA5C;AACA;AACD,GAtCA,CAwCD;;;AACA,MAAK7B,iBAAL,aAAKA,iBAAL,eAAKA,iBAAiB,CAAEyB,QAAxB,EAAmC;AAClCH,IAAAA,gBAAgB,CAACG,QAAjB,GAA4BzB,iBAA5B,aAA4BA,iBAA5B,uBAA4BA,iBAAiB,CAAEyB,QAA/C;AACA;;AAED,MAAKzB,iBAAL,aAAKA,iBAAL,eAAKA,iBAAiB,CAAE0B,UAAxB,EAAqC;AACpCJ,IAAAA,gBAAgB,CAACI,UAAjB,GAA8B1B,iBAA9B,aAA8BA,iBAA9B,uBAA8BA,iBAAiB,CAAE0B,UAAjD;AACA;;AAED,SAAOJ,gBAAP;AACA;AAED,OAAO,SAASQ,oBAAT,CAA+BnB,MAA/B,EAAuCoB,YAAvC,EAAqDC,YAArD,EAAoE;AAC1E,MAAIC,UAAU,GAAGtB,MAAjB;AACA,QAAMuB,SAAS,GAAG,CAAE,QAAF,EAAY,QAAZ,EAAsB,KAAtB,EAA6B,UAA7B,CAAlB;;AAEA,MAAK,CAAED,UAAP,EAAoB;AACnB,WAAOtB,MAAP;AACA;;AAEDuB,EAAAA,SAAS,CAAC3B,OAAV,CAAqB4B,QAAF,IAAgB;AAClC;AACA;AACA;AACA;AACA,UAAMC,KAAK,GAAG,IAAIC,MAAJ,CAAa,eAAeF,QAAU,YAAtC,EAAmD,GAAnD,CAAd;AACA,UAAMG,QAAQ,GAAG,gCAAjB;AACA,UAAMC,aAAa,GAAG,sBAAtB;;AAEA,QAAKJ,QAAQ,KAAK,QAAlB,EAA6B;AAC5BF,MAAAA,UAAU,GAAGA,UAAU,CAACO,OAAX,CAAoBJ,KAApB,EAA2B,CAAEK,GAAF,EAAOC,EAAP,KAAe;AACtD,cAAMC,IAAI,GAAGD,EAAE,CAACE,KAAH,CAAU,IAAV,CAAb;AACA,cAAMC,iBAAiB,GAAGd,YAAY,CAAEY,IAAI,CAAE,CAAF,CAAN,CAAtC;;AACA,YAAKE,iBAAiB,IAAIA,iBAAiB,CAAC1B,IAA5C,EAAmD;AAAA;;AAClD,gBAAM2B,YAAY,GAAGzC,MAAM,CAACY,MAAP,0BACpB4B,iBAAiB,CAAC5B,MADE,yEACQ,EADR,EAEnBC,IAFmB,CAEb;AAAA,gBAAE;AAAEC,cAAAA;AAAF,aAAF;AAAA,mBAAgBA,IAAI,KAAKwB,IAAI,CAAE,CAAF,CAA7B;AAAA,WAFa,CAArB;AAGA,iBAAOG,YAAP,aAAOA,YAAP,uBAAOA,YAAY,CAAID,iBAAiB,CAAC1B,IAAtB,CAAnB;AACA;;AACD,eAAOnC,aAAP;AACA,OAVY,CAAb;AAWA;;AACD,QAAKmD,QAAQ,KAAK,QAAlB,EAA6B;AAC5B,YAAMY,gBAAgB,GAAGf,YAAH,aAAGA,YAAH,cAAGA,YAAH,GAAmBgB,IAAI,CAACC,KAAL,CAAYhB,UAAZ,CAAzC;AACAA,MAAAA,UAAU,GAAGA,UAAU,CAACO,OAAX,CAAoBJ,KAApB,EAA2B,CAAEK,GAAF,EAAOC,EAAP,KAAe;AACtD,cAAMC,IAAI,GAAGD,EAAE,CAACE,KAAH,CAAU,IAAV,CAAb;;AACA,YACCD,IAAI,CAACO,MAAL,CACC,CAAEC,IAAF,EAAQC,IAAR,KAAkBD,IAAI,IAAIA,IAAI,CAAEC,IAAF,CAD/B,EAECL,gBAFD,CADD,EAKE;AACD,iBAAO5E,GAAG,CAAE4E,gBAAF,EAAoBJ,IAApB,CAAV;AACA,SATqD,CAWtD;;;AACA,eAAOxE,GAAG,CAAE4E,gBAAF,EAAoB,CAC7B,GAAGJ,IAAI,CAACU,KAAL,CAAY,CAAZ,EAAeV,IAAI,CAACW,MAAL,GAAc,CAA7B,CAD0B,EAE7BpF,SAAS,CAAEyE,IAAI,CAAEA,IAAI,CAACW,MAAL,GAAc,CAAhB,CAAN,CAFoB,CAApB,CAAV;AAIA,OAhBY,CAAb;AAiBA;;AAED,QAAKnB,QAAQ,KAAK,KAAlB,EAA0B;AACzBF,MAAAA,UAAU,GAAGA,UAAU,CAACO,OAAX,CAAoBF,QAApB,EAA8B,CAAEG,GAAF,EAAOC,EAAP,KAAe;AACzD,YAAKX,YAAL,aAAKA,YAAL,eAAKA,YAAY,CAAE7B,KAAnB,EAA2B;AAAA;;AAC1B,gBAAM4C,YAAY,0BAAGf,YAAY,CAAC7B,KAAhB,iFAAG,oBAAoBe,MAAvB,0DAAG,sBAA4BC,IAA5B,CACpB;AAAA,gBAAE;AAAEC,cAAAA;AAAF,aAAF;AAAA,mBAAgBA,IAAI,KAAKuB,EAAzB;AAAA,WADoB,CAArB;AAGA,iBAAQ,IAAII,YAAL,aAAKA,YAAL,uBAAKA,YAAY,CAAE5C,KAAO,GAAjC;AACA;;AACD,eAAOlB,aAAP;AACA,OARY,CAAb;AASA;;AAED,QAAKmD,QAAQ,KAAK,UAAlB,EAA+B;AAC9B,YAAM;AAAEoB,QAAAA,KAAF;AAASC,QAAAA;AAAT,UAAoBpF,UAAU,CAACD,GAAX,CAAgB,QAAhB,CAA1B;AAEA8D,MAAAA,UAAU,GAAGA,UAAU,CAACO,OAAX,CAAoBD,aAApB,EAAmC,CAAEE,GAAF,EAAOC,EAAP,KAAe;AAC9D,cAAMe,cAAc,GACnBpF,gBAAgB,CAAEqE,EAAF,EAAM;AACrBa,UAAAA,KADqB;AAErBC,UAAAA,MAFqB;AAGrB/B,UAAAA,QAAQ,EAAExC;AAHW,SAAN,CAAhB,IAIQ,GAAGA,iBAAmB,IAL/B;AAOA,eAAQ,eAAewE,cAAgB,GAAvC;AACA,OATY,CAAb;AAUA;AACD,GArED;AAuEA,SAAOT,IAAI,CAACC,KAAL,CAAYhB,UAAZ,CAAP;AACA;AAED,OAAO,SAASyB,eAAT,CAA0BC,QAA1B,EAAoCC,OAApC,EAA8C;AAAA;;AACpD,QAAMrC,UAAU,GAAGoC,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAEpC,UAA7B;AACA,QAAMsC,MAAM,GAAG,CACd,IAAK,CAAAD,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEE,KAAT,KAAkB,EAAvB,CADc,EAEd,IAAK,CAAAF,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEG,MAAT,KAAmB,EAAxB,CAFc,EAGd,IAAK,CAAAH,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEI,OAAT,KAAoB,EAAzB,CAHc,CAAf;AAMA,QAAM3C,SAAS,GAAG,EACjB,IAAGE,UAAH,aAAGA,UAAH,gDAAGA,UAAU,CAAEF,SAAf,0DAAG,sBAAuByC,KAA1B,CADiB;AAEjB,QAAGvC,UAAH,aAAGA,UAAH,iDAAGA,UAAU,CAAEF,SAAf,2DAAG,uBAAuB0C,MAA1B;AAFiB,GAAlB;AAIA,QAAMhC,YAAY,GAAG;AACpB7B,IAAAA,KAAK,EAAE;AACNe,MAAAA,MAAM,EAAE4C,MADF;AAEN1C,MAAAA,IAAI,EAAE;AAFA,KADa;AAKpB,iBAAa;AACZF,MAAAA,MAAM,EAAEI,SADI;AAEZF,MAAAA,IAAI,EAAE;AAFM;AALO,GAArB;AAUA,SAAOY,YAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,SAASkC,kBAAT,CAA6B5C,SAA7B,EAAyC;AACxC;AACA,MAAK,CAAEA,SAAP,EAAmB;AAClB,WAAOA,SAAP;AACA;;AACD,QAAM6C,mBAAmB,GAAG,EAA5B;AACA,QAAMC,UAAU,GAAG/F,UAAU,CAACD,GAAX,CAAgB,QAAhB,CAAnB;AAEA,GAAE,SAAF,EAAa,OAAb,EAAsB,QAAtB,EAAiCoC,OAAjC,CAA4CC,GAAF,IAAW;AACpD,QAAKa,SAAS,CAAEb,GAAF,CAAd,EAAwB;AAAA;;AACvB0D,MAAAA,mBAAmB,CAAE1D,GAAF,CAAnB,qBAA6Ba,SAAS,CAAEb,GAAF,CAAtC,mDAA6B,eAAkB4D,GAAlB,CAC1BC,cAAF,IAAsB;AACrBA,QAAAA,cAAc,CAACC,MAAf,GAAwBjG,gBAAgB,CACvCgG,cAAc,CAACxC,IADwB,EAEvC;AACC0B,UAAAA,KAAK,EAAEY,UAAU,CAACZ,KADnB;AAECC,UAAAA,MAAM,EAAEW,UAAU,CAACX,MAFpB;AAGC/B,UAAAA,QAAQ,EAAExC;AAHX,SAFuC,CAAxC;AAQA,eAAOoF,cAAP;AACA,OAX2B,CAA7B;AAaA;AACD,GAhBD;AAkBA,SAAOH,mBAAP;AACA;;AAED,OAAO,SAASK,2BAAT,GAAwD;AAAA;;AAAA,MAAlBC,IAAkB,uEAAX,QAAW;AAC9D,QAAMC,qBAAqB,GAAGlG,mCAAmC,EAAjE;AACA,QAAMmG,oBAAoB,GAAGD,qBAAH,aAAGA,qBAAH,gDAAGA,qBAAqB,CAAID,IAAJ,CAAxB,0DAAG,sBAAiCtB,MAAjC,CAC5B,CAAEW,MAAF,EAAUc,MAAV,KAAsBd,MAAM,CAACe,MAAP,CAAeD,MAAf,aAAeA,MAAf,uBAAeA,MAAM,CAAIH,IAAJ,CAArB,CADM,EAE5B,EAF4B,CAA7B,CAF8D,CAM9D;;AACA,QAAMK,YAAY,GACjBL,IAAI,KAAK,QAAT,GAAoB,eAApB,GAAsC,iBADvC;AAEA,QAAMM,oBAAoB,GAAGxG,UAAU,CAAEuG,YAAF,CAAvC;AAEA,SAAOH,oBAAoB,CAACpB,MAArB,IAA+B,CAA/B,GACJoB,oBADI,GAEJI,oBAFH;AAGA;AAED,OAAO,SAASC,qBAAT,GAIL;AAAA,MAHDC,mBAGC,uEAHqB,EAGrB;AAAA,MAFDC,sBAEC,uEAFwB,EAExB;AAAA,MADDC,WACC;AACD,QAAMvB,QAAQ,GAAGuB,WAAW,GAAGlC,IAAI,CAACC,KAAL,CAAYiC,WAAZ,CAAH,GAA+B,EAA3D;AAEA,SAAO;AACNC,IAAAA,oCAAoC,EAAE,IADhC;AAENC,IAAAA,sBAAsB,EAAE;AACvBlF,MAAAA,KAAK,EAAE,EACN,IAAK,EAAEyD,QAAF,aAAEA,QAAF,eAAEA,QAAQ,CAAEzD,KAAZ,IACF;AACAvB,UAAAA,IAAI,EAAE,IADN;AAEAC,UAAAA,UAAU,EAAE,IAFZ;AAGAgF,UAAAA,OAAO,EAAE;AACRI,YAAAA,OAAO,EAAEgB;AADD,WAHT;AAMAK,UAAAA,SAAS,EAAE;AACVrB,YAAAA,OAAO,EAAEiB;AADC;AANX,SADE,GAWFtB,QAXE,aAWFA,QAXE,uBAWFA,QAAQ,CAAEzD,KAXb,CADM;AAaNoF,QAAAA,cAAc,EAAE,CAAAN,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,YAAAA,mBAAmB,CAAE1B,MAArB,IAA8B,CAbxC;AAcNiC,QAAAA,gBAAgB,EAAE,CAAAN,sBAAsB,SAAtB,IAAAA,sBAAsB,WAAtB,YAAAA,sBAAsB,CAAE3B,MAAxB,IAAiC;AAd7C;AADgB;AAFlB,GAAP;AAqBA;AAED,OAAO,SAASkC,eAAT,CAA0BC,SAA1B,EAAqCP,WAArC,EAAmD;AAAA;;AACzD,QAAMvB,QAAQ,GAAGuB,WAAW,GAAGlC,IAAI,CAACC,KAAL,CAAYiC,WAAZ,CAAH,GAA+B,EAA3D;AACA,QAAMnD,YAAY,GAAG2B,eAAe,CAAEC,QAAF,EAAYA,QAAZ,aAAYA,QAAZ,0CAAYA,QAAQ,CAAEzD,KAAtB,oDAAY,gBAAiB0D,OAA7B,CAApC;AACA,QAAMC,MAAM,GAAG/B,oBAAoB,CAClCkB,IAAI,CAAC0C,SAAL,CAAgB/B,QAAhB,aAAgBA,QAAhB,uBAAgBA,QAAQ,CAAEzD,KAA1B,CADkC,EAElC6B,YAFkC,CAAnC;AAIA,QAAMsD,SAAS,GAAGvD,oBAAoB,CACrCkB,IAAI,CAAC0C,SAAL,CAAgB/B,QAAhB,aAAgBA,QAAhB,2CAAgBA,QAAQ,CAAEzD,KAA1B,qDAAgB,iBAAiBmF,SAAjC,CADqC,EAErCtD,YAFqC,CAAtC;AAIA,QAAMC,YAAY,GAAGF,oBAAoB,CACxCkB,IAAI,CAAC0C,SAAL,CAAgB/B,QAAhB,aAAgBA,QAAhB,uBAAgBA,QAAQ,CAAEI,MAA1B,CADwC,EAExChC,YAFwC,CAAzC;AAIA,QAAM4D,YAAY,GAAG7D,oBAAoB,CACxC2D,SADwC,EAExC1D,YAFwC,EAGxCC,YAHwC,CAAzC;AAMA,QAAMX,SAAS,GAAG4C,kBAAkB,CAAEN,QAAF,aAAEA,QAAF,+CAAEA,QAAQ,CAAEpC,UAAZ,yDAAE,qBAAsBF,SAAxB,CAApC;AAEA,SAAO;AACN+D,IAAAA,sBAAsB,EAAE;AACvBlF,MAAAA,KAAK,EAAE;AACN0D,QAAAA,OAAO,EAAEC,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAED,OADX;AAENyB,QAAAA,SAFM;AAGN1G,QAAAA,IAAI,0BAAEgF,QAAF,aAAEA,QAAF,2CAAEA,QAAQ,CAAEzD,KAAZ,qDAAE,iBAAiBvB,IAAnB,uEAA2B,IAHzB;AAINC,QAAAA,UAAU,2BAAE+E,QAAF,aAAEA,QAAF,2CAAEA,QAAQ,CAAEzD,KAAZ,qDAAE,iBAAiBtB,UAAnB,yEAAiC,IAJrC;AAKN0G,QAAAA,cAAc,2BAAE3B,QAAF,aAAEA,QAAF,2CAAEA,QAAQ,CAAEzD,KAAZ,qDAAE,iBAAiBoF,cAAnB,yEAAqC,IAL7C;AAMNC,QAAAA,gBAAgB,4BAAE5B,QAAF,aAAEA,QAAF,2CAAEA,QAAQ,CAAEzD,KAAZ,qDAAE,iBAAiBqF,gBAAnB,2EAAuC;AANjD,OADgB;AASvBhE,MAAAA,UAAU,EAAE;AACXF,QAAAA,SADW;AAEXuE,QAAAA,gBAAgB,EAAEjC,QAAF,aAAEA,QAAF,2CAAEA,QAAQ,CAAEI,MAAZ,qDAAE,iBAAoB,aAApB;AAFP,OATW;AAavB8B,MAAAA,OAAO,EAAElC,QAAF,aAAEA,QAAF,uBAAEA,QAAQ,CAAEkC;AAbI,KADlB;AAgBNV,IAAAA,oCAAoC,EAAEQ;AAhBhC,GAAP;AAkBA","sourcesContent":["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\nimport { get } from 'lodash';\nimport { Dimensions } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetPxFromCssUnit,\n\tuseSetting,\n\tuseMultipleOriginColorsAndGradients,\n} from '@wordpress/block-editor';\n\nexport const BLOCK_STYLE_ATTRIBUTES = [\n\t'textColor',\n\t'backgroundColor',\n\t'style',\n\t'color',\n\t'fontSize',\n];\n\n// Mapping style properties name to native.\nconst BLOCK_STYLE_ATTRIBUTES_MAPPING = {\n\ttextColor: 'color',\n\ttext: 'color',\n\tbackground: 'backgroundColor',\n\tlink: 'linkColor',\n\tplaceholder: 'placeholderColor',\n};\n\nconst PADDING = 12; // $solid-border-space\nconst UNKNOWN_VALUE = 'undefined';\nconst DEFAULT_FONT_SIZE = 16;\n\nexport function getBlockPaddings(\n\tmergedStyle,\n\twrapperPropsStyle,\n\tblockStyleAttributes,\n\tblockColors\n) {\n\tconst blockPaddings = {};\n\n\tif (\n\t\t! mergedStyle.padding &&\n\t\t( wrapperPropsStyle?.backgroundColor ||\n\t\t\tblockStyleAttributes?.backgroundColor ||\n\t\t\tblockColors?.backgroundColor )\n\t) {\n\t\tblockPaddings.padding = PADDING;\n\t\treturn blockPaddings;\n\t}\n\n\t// Prevent adding extra paddings to inner blocks without background colors.\n\tif (\n\t\tmergedStyle?.padding &&\n\t\t! wrapperPropsStyle?.backgroundColor &&\n\t\t! blockStyleAttributes?.backgroundColor &&\n\t\t! blockColors?.backgroundColor\n\t) {\n\t\tblockPaddings.padding = undefined;\n\t}\n\n\treturn blockPaddings;\n}\n\nexport function getBlockColors(\n\tblockStyleAttributes,\n\tdefaultColors,\n\tblockName,\n\tbaseGlobalStyles\n) {\n\tconst blockStyles = {};\n\tconst customBlockStyles = blockStyleAttributes?.style?.color || {};\n\tconst blockGlobalStyles = baseGlobalStyles?.blocks?.[ blockName ];\n\n\t// Global styles colors.\n\tif ( blockGlobalStyles?.color ) {\n\t\tObject.entries( blockGlobalStyles.color ).forEach(\n\t\t\t( [ key, value ] ) => {\n\t\t\t\tconst styleKey = BLOCK_STYLE_ATTRIBUTES_MAPPING[ key ];\n\n\t\t\t\tif ( styleKey && value !== UNKNOWN_VALUE ) {\n\t\t\t\t\tconst color = customBlockStyles[ key ] ?? value;\n\t\t\t\t\tblockStyles[ styleKey ] = color;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t} else if ( baseGlobalStyles?.styles?.color?.text ) {\n\t\tblockStyles[ BLOCK_STYLE_ATTRIBUTES_MAPPING.text ] =\n\t\t\tbaseGlobalStyles?.styles?.color?.text;\n\t}\n\n\t// Global styles elements.\n\tif ( blockGlobalStyles?.elements ) {\n\t\tconst linkColor = blockGlobalStyles.elements?.link?.color?.text;\n\t\tconst styleKey = BLOCK_STYLE_ATTRIBUTES_MAPPING.link;\n\n\t\tif ( styleKey && linkColor && linkColor !== UNKNOWN_VALUE ) {\n\t\t\tblockStyles[ styleKey ] = linkColor;\n\t\t}\n\t}\n\n\t// Custom colors.\n\tObject.entries( blockStyleAttributes ).forEach( ( [ key, value ] ) => {\n\t\tconst isCustomColor = value?.startsWith?.( '#' );\n\t\tlet styleKey = key;\n\n\t\tif ( BLOCK_STYLE_ATTRIBUTES_MAPPING[ styleKey ] ) {\n\t\t\tstyleKey = BLOCK_STYLE_ATTRIBUTES_MAPPING[ styleKey ];\n\t\t}\n\n\t\tif ( ! isCustomColor ) {\n\t\t\tconst mappedColor = Object.values( defaultColors ?? {} ).find(\n\t\t\t\t( { slug } ) => slug === value\n\t\t\t);\n\n\t\t\tif ( mappedColor ) {\n\t\t\t\tblockStyles[ styleKey ] = mappedColor.color;\n\t\t\t}\n\t\t} else {\n\t\t\tblockStyles[ styleKey ] = value;\n\t\t}\n\t} );\n\n\t// Color placeholder.\n\tif ( blockStyles?.color ) {\n\t\tblockStyles[ BLOCK_STYLE_ATTRIBUTES_MAPPING.placeholder ] =\n\t\t\tblockStyles.color;\n\t}\n\n\treturn blockStyles;\n}\n\nexport function getBlockTypography(\n\tblockStyleAttributes,\n\tfontSizes,\n\tblockName,\n\tbaseGlobalStyles\n) {\n\tconst typographyStyles = {};\n\tconst customBlockStyles = blockStyleAttributes?.style?.typography || {};\n\tconst blockGlobalStyles = baseGlobalStyles?.blocks?.[ blockName ];\n\tconst parsedFontSizes = Object.values( fontSizes ?? {} );\n\n\t// Global styles.\n\tif ( blockGlobalStyles?.typography ) {\n\t\tconst fontSize = blockGlobalStyles?.typography?.fontSize;\n\t\tconst lineHeight = blockGlobalStyles?.typography?.lineHeight;\n\n\t\tif ( fontSize ) {\n\t\t\tif ( parseInt( fontSize, 10 ) ) {\n\t\t\t\ttypographyStyles.fontSize = fontSize;\n\t\t\t} else {\n\t\t\t\tconst mappedFontSize = parsedFontSizes.find(\n\t\t\t\t\t( { slug } ) => slug === fontSize\n\t\t\t\t);\n\n\t\t\t\tif ( mappedFontSize ) {\n\t\t\t\t\ttypographyStyles.fontSize = mappedFontSize?.size;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( lineHeight ) {\n\t\t\ttypographyStyles.lineHeight = lineHeight;\n\t\t}\n\t}\n\n\tif ( blockStyleAttributes?.fontSize && baseGlobalStyles ) {\n\t\tconst mappedFontSize = parsedFontSizes.find(\n\t\t\t( { slug } ) => slug === blockStyleAttributes?.fontSize\n\t\t);\n\n\t\tif ( mappedFontSize ) {\n\t\t\ttypographyStyles.fontSize = mappedFontSize?.size;\n\t\t}\n\t}\n\n\t// Custom styles.\n\tif ( customBlockStyles?.fontSize ) {\n\t\ttypographyStyles.fontSize = customBlockStyles?.fontSize;\n\t}\n\n\tif ( customBlockStyles?.lineHeight ) {\n\t\ttypographyStyles.lineHeight = customBlockStyles?.lineHeight;\n\t}\n\n\treturn typographyStyles;\n}\n\nexport function parseStylesVariables( styles, mappedValues, customValues ) {\n\tlet stylesBase = styles;\n\tconst variables = [ 'preset', 'custom', 'var', 'fontSize' ];\n\n\tif ( ! stylesBase ) {\n\t\treturn styles;\n\t}\n\n\tvariables.forEach( ( variable ) => {\n\t\t// Examples\n\t\t// var(--wp--preset--color--gray)\n\t\t// var(--wp--custom--body--typography--font-family)\n\t\t// var:preset|color|custom-color-2\n\t\tconst regex = new RegExp( `var\\\\(--wp--${ variable }--(.*?)\\\\)`, 'g' );\n\t\tconst varRegex = /\\\"var:preset\\|color\\|(.*?)\\\"/gm;\n\t\tconst fontSizeRegex = /\"fontSize\":\"(.*?)\"/gm;\n\n\t\tif ( variable === 'preset' ) {\n\t\t\tstylesBase = stylesBase.replace( regex, ( _$1, $2 ) => {\n\t\t\t\tconst path = $2.split( '--' );\n\t\t\t\tconst mappedPresetValue = mappedValues[ path[ 0 ] ];\n\t\t\t\tif ( mappedPresetValue && mappedPresetValue.slug ) {\n\t\t\t\t\tconst matchedValue = Object.values(\n\t\t\t\t\t\tmappedPresetValue.values ?? {}\n\t\t\t\t\t).find( ( { slug } ) => slug === path[ 1 ] );\n\t\t\t\t\treturn matchedValue?.[ mappedPresetValue.slug ];\n\t\t\t\t}\n\t\t\t\treturn UNKNOWN_VALUE;\n\t\t\t} );\n\t\t}\n\t\tif ( variable === 'custom' ) {\n\t\t\tconst customValuesData = customValues ?? JSON.parse( stylesBase );\n\t\t\tstylesBase = stylesBase.replace( regex, ( _$1, $2 ) => {\n\t\t\t\tconst path = $2.split( '--' );\n\t\t\t\tif (\n\t\t\t\t\tpath.reduce(\n\t\t\t\t\t\t( prev, curr ) => prev && prev[ curr ],\n\t\t\t\t\t\tcustomValuesData\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn get( customValuesData, path );\n\t\t\t\t}\n\n\t\t\t\t// Check for camelcase properties.\n\t\t\t\treturn get( customValuesData, [\n\t\t\t\t\t...path.slice( 0, path.length - 1 ),\n\t\t\t\t\tcamelCase( path[ path.length - 1 ] ),\n\t\t\t\t] );\n\t\t\t} );\n\t\t}\n\n\t\tif ( variable === 'var' ) {\n\t\t\tstylesBase = stylesBase.replace( varRegex, ( _$1, $2 ) => {\n\t\t\t\tif ( mappedValues?.color ) {\n\t\t\t\t\tconst matchedValue = mappedValues.color?.values?.find(\n\t\t\t\t\t\t( { slug } ) => slug === $2\n\t\t\t\t\t);\n\t\t\t\t\treturn `\"${ matchedValue?.color }\"`;\n\t\t\t\t}\n\t\t\t\treturn UNKNOWN_VALUE;\n\t\t\t} );\n\t\t}\n\n\t\tif ( variable === 'fontSize' ) {\n\t\t\tconst { width, height } = Dimensions.get( 'window' );\n\n\t\t\tstylesBase = stylesBase.replace( fontSizeRegex, ( _$1, $2 ) => {\n\t\t\t\tconst parsedFontSize =\n\t\t\t\t\tgetPxFromCssUnit( $2, {\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tfontSize: DEFAULT_FONT_SIZE,\n\t\t\t\t\t} ) || `${ DEFAULT_FONT_SIZE }px`;\n\n\t\t\t\treturn `\"fontSize\":\"${ parsedFontSize }\"`;\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn JSON.parse( stylesBase );\n}\n\nexport function getMappedValues( features, palette ) {\n\tconst typography = features?.typography;\n\tconst colors = [\n\t\t...( palette?.theme || [] ),\n\t\t...( palette?.custom || [] ),\n\t\t...( palette?.default || [] ),\n\t];\n\n\tconst fontSizes = {\n\t\t...typography?.fontSizes?.theme,\n\t\t...typography?.fontSizes?.custom,\n\t};\n\tconst mappedValues = {\n\t\tcolor: {\n\t\t\tvalues: colors,\n\t\t\tslug: 'color',\n\t\t},\n\t\t'font-size': {\n\t\t\tvalues: fontSizes,\n\t\t\tslug: 'size',\n\t\t},\n\t};\n\treturn mappedValues;\n}\n\n/**\n * Returns the normalized fontSizes to include the sizePx value for each of the different sizes.\n *\n * @param {Object} fontSizes found in global styles.\n * @return {Object} normalized sizes.\n */\nfunction normalizeFontSizes( fontSizes ) {\n\t// Adds normalized PX values for each of the different keys.\n\tif ( ! fontSizes ) {\n\t\treturn fontSizes;\n\t}\n\tconst normalizedFontSizes = {};\n\tconst dimensions = Dimensions.get( 'window' );\n\n\t[ 'default', 'theme', 'custom' ].forEach( ( key ) => {\n\t\tif ( fontSizes[ key ] ) {\n\t\t\tnormalizedFontSizes[ key ] = fontSizes[ key ]?.map(\n\t\t\t\t( fontSizeObject ) => {\n\t\t\t\t\tfontSizeObject.sizePx = getPxFromCssUnit(\n\t\t\t\t\t\tfontSizeObject.size,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: dimensions.width,\n\t\t\t\t\t\t\theight: dimensions.height,\n\t\t\t\t\t\t\tfontSize: DEFAULT_FONT_SIZE,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\treturn fontSizeObject;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn normalizedFontSizes;\n}\n\nexport function useMobileGlobalStylesColors( type = 'colors' ) {\n\tconst colorGradientSettings = useMultipleOriginColorsAndGradients();\n\tconst availableThemeColors = colorGradientSettings?.[ type ]?.reduce(\n\t\t( colors, origin ) => colors.concat( origin?.[ type ] ),\n\t\t[]\n\t);\n\t// Default editor colors/gradients if it's not a block-based theme.\n\tconst colorPalette =\n\t\ttype === 'colors' ? 'color.palette' : 'color.gradients';\n\tconst editorDefaultPalette = useSetting( colorPalette );\n\n\treturn availableThemeColors.length >= 1\n\t\t? availableThemeColors\n\t\t: editorDefaultPalette;\n}\n\nexport function getColorsAndGradients(\n\tdefaultEditorColors = [],\n\tdefaultEditorGradients = [],\n\trawFeatures\n) {\n\tconst features = rawFeatures ? JSON.parse( rawFeatures ) : {};\n\n\treturn {\n\t\t__experimentalGlobalStylesBaseStyles: null,\n\t\t__experimentalFeatures: {\n\t\t\tcolor: {\n\t\t\t\t...( ! features?.color\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttext: true,\n\t\t\t\t\t\t\tbackground: true,\n\t\t\t\t\t\t\tpalette: {\n\t\t\t\t\t\t\t\tdefault: defaultEditorColors,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgradients: {\n\t\t\t\t\t\t\t\tdefault: defaultEditorGradients,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t }\n\t\t\t\t\t: features?.color ),\n\t\t\t\tdefaultPalette: defaultEditorColors?.length > 0,\n\t\t\t\tdefaultGradients: defaultEditorGradients?.length > 0,\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function getGlobalStyles( rawStyles, rawFeatures ) {\n\tconst features = rawFeatures ? JSON.parse( rawFeatures ) : {};\n\tconst mappedValues = getMappedValues( features, features?.color?.palette );\n\tconst colors = parseStylesVariables(\n\t\tJSON.stringify( features?.color ),\n\t\tmappedValues\n\t);\n\tconst gradients = parseStylesVariables(\n\t\tJSON.stringify( features?.color?.gradients ),\n\t\tmappedValues\n\t);\n\tconst customValues = parseStylesVariables(\n\t\tJSON.stringify( features?.custom ),\n\t\tmappedValues\n\t);\n\tconst globalStyles = parseStylesVariables(\n\t\trawStyles,\n\t\tmappedValues,\n\t\tcustomValues\n\t);\n\n\tconst fontSizes = normalizeFontSizes( features?.typography?.fontSizes );\n\n\treturn {\n\t\t__experimentalFeatures: {\n\t\t\tcolor: {\n\t\t\t\tpalette: colors?.palette,\n\t\t\t\tgradients,\n\t\t\t\ttext: features?.color?.text ?? true,\n\t\t\t\tbackground: features?.color?.background ?? true,\n\t\t\t\tdefaultPalette: features?.color?.defaultPalette ?? true,\n\t\t\t\tdefaultGradients: features?.color?.defaultGradients ?? true,\n\t\t\t},\n\t\t\ttypography: {\n\t\t\t\tfontSizes,\n\t\t\t\tcustomLineHeight: features?.custom?.[ 'line-height' ],\n\t\t\t},\n\t\t\tspacing: features?.spacing,\n\t\t},\n\t\t__experimentalGlobalStylesBaseStyles: globalStyles,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/components/src/mobile/global-styles-context/utils.native.js"],"names":["camelCase","Dimensions","getPxFromCssUnit","useSetting","useMultipleOriginColorsAndGradients","BLOCK_STYLE_ATTRIBUTES","BLOCK_STYLE_ATTRIBUTES_MAPPING","textColor","text","background","link","placeholder","PADDING","UNKNOWN_VALUE","DEFAULT_FONT_SIZE","getBlockPaddings","mergedStyle","wrapperPropsStyle","blockStyleAttributes","blockColors","blockPaddings","padding","backgroundColor","undefined","getBlockColors","defaultColors","blockName","baseGlobalStyles","blockStyles","customBlockStyles","style","color","blockGlobalStyles","blocks","Object","entries","forEach","key","value","styleKey","styles","elements","linkColor","isCustomColor","startsWith","mappedColor","values","find","slug","getBlockTypography","fontSizes","typographyStyles","typography","parsedFontSizes","fontSize","lineHeight","parseInt","mappedFontSize","size","getValueFromObjectPath","object","path","fieldName","parseStylesVariables","mappedValues","customValues","stylesBase","variables","variable","regex","RegExp","varRegex","fontSizeRegex","replace","_$1","$2","split","mappedPresetValue","matchedValue","customValuesData","JSON","parse","reduce","prev","curr","slice","length","width","height","get","parsedFontSize","getMappedValues","features","palette","colors","theme","custom","default","normalizeFontSizes","normalizedFontSizes","dimensions","map","fontSizeObject","sizePx","useMobileGlobalStylesColors","type","colorGradientSettings","availableThemeColors","origin","concat","colorPalette","editorDefaultPalette","getColorsAndGradients","defaultEditorColors","defaultEditorGradients","rawFeatures","__experimentalGlobalStylesBaseStyles","__experimentalFeatures","gradients","defaultPalette","defaultGradients","getGlobalStyles","rawStyles","stringify","globalStyles","customLineHeight","spacing"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\nimport { Dimensions } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetPxFromCssUnit,\n\tuseSetting,\n\tuseMultipleOriginColorsAndGradients,\n} from '@wordpress/block-editor';\n\nexport const BLOCK_STYLE_ATTRIBUTES = [\n\t'textColor',\n\t'backgroundColor',\n\t'style',\n\t'color',\n\t'fontSize',\n];\n\n// Mapping style properties name to native.\nconst BLOCK_STYLE_ATTRIBUTES_MAPPING = {\n\ttextColor: 'color',\n\ttext: 'color',\n\tbackground: 'backgroundColor',\n\tlink: 'linkColor',\n\tplaceholder: 'placeholderColor',\n};\n\nconst PADDING = 12; // $solid-border-space\nconst UNKNOWN_VALUE = 'undefined';\nconst DEFAULT_FONT_SIZE = 16;\n\nexport function getBlockPaddings(\n\tmergedStyle,\n\twrapperPropsStyle,\n\tblockStyleAttributes,\n\tblockColors\n) {\n\tconst blockPaddings = {};\n\n\tif (\n\t\t! mergedStyle.padding &&\n\t\t( wrapperPropsStyle?.backgroundColor ||\n\t\t\tblockStyleAttributes?.backgroundColor ||\n\t\t\tblockColors?.backgroundColor )\n\t) {\n\t\tblockPaddings.padding = PADDING;\n\t\treturn blockPaddings;\n\t}\n\n\t// Prevent adding extra paddings to inner blocks without background colors.\n\tif (\n\t\tmergedStyle?.padding &&\n\t\t! wrapperPropsStyle?.backgroundColor &&\n\t\t! blockStyleAttributes?.backgroundColor &&\n\t\t! blockColors?.backgroundColor\n\t) {\n\t\tblockPaddings.padding = undefined;\n\t}\n\n\treturn blockPaddings;\n}\n\nexport function getBlockColors(\n\tblockStyleAttributes,\n\tdefaultColors,\n\tblockName,\n\tbaseGlobalStyles\n) {\n\tconst blockStyles = {};\n\tconst customBlockStyles = blockStyleAttributes?.style?.color || {};\n\tconst blockGlobalStyles = baseGlobalStyles?.blocks?.[ blockName ];\n\n\t// Global styles colors.\n\tif ( blockGlobalStyles?.color ) {\n\t\tObject.entries( blockGlobalStyles.color ).forEach(\n\t\t\t( [ key, value ] ) => {\n\t\t\t\tconst styleKey = BLOCK_STYLE_ATTRIBUTES_MAPPING[ key ];\n\n\t\t\t\tif ( styleKey && value !== UNKNOWN_VALUE ) {\n\t\t\t\t\tconst color = customBlockStyles[ key ] ?? value;\n\t\t\t\t\tblockStyles[ styleKey ] = color;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t} else if ( baseGlobalStyles?.styles?.color?.text ) {\n\t\tblockStyles[ BLOCK_STYLE_ATTRIBUTES_MAPPING.text ] =\n\t\t\tbaseGlobalStyles?.styles?.color?.text;\n\t}\n\n\t// Global styles elements.\n\tif ( blockGlobalStyles?.elements ) {\n\t\tconst linkColor = blockGlobalStyles.elements?.link?.color?.text;\n\t\tconst styleKey = BLOCK_STYLE_ATTRIBUTES_MAPPING.link;\n\n\t\tif ( styleKey && linkColor && linkColor !== UNKNOWN_VALUE ) {\n\t\t\tblockStyles[ styleKey ] = linkColor;\n\t\t}\n\t}\n\n\t// Custom colors.\n\tObject.entries( blockStyleAttributes ).forEach( ( [ key, value ] ) => {\n\t\tconst isCustomColor = value?.startsWith?.( '#' );\n\t\tlet styleKey = key;\n\n\t\tif ( BLOCK_STYLE_ATTRIBUTES_MAPPING[ styleKey ] ) {\n\t\t\tstyleKey = BLOCK_STYLE_ATTRIBUTES_MAPPING[ styleKey ];\n\t\t}\n\n\t\tif ( ! isCustomColor ) {\n\t\t\tconst mappedColor = Object.values( defaultColors ?? {} ).find(\n\t\t\t\t( { slug } ) => slug === value\n\t\t\t);\n\n\t\t\tif ( mappedColor ) {\n\t\t\t\tblockStyles[ styleKey ] = mappedColor.color;\n\t\t\t}\n\t\t} else {\n\t\t\tblockStyles[ styleKey ] = value;\n\t\t}\n\t} );\n\n\t// Color placeholder.\n\tif ( blockStyles?.color ) {\n\t\tblockStyles[ BLOCK_STYLE_ATTRIBUTES_MAPPING.placeholder ] =\n\t\t\tblockStyles.color;\n\t}\n\n\treturn blockStyles;\n}\n\nexport function getBlockTypography(\n\tblockStyleAttributes,\n\tfontSizes,\n\tblockName,\n\tbaseGlobalStyles\n) {\n\tconst typographyStyles = {};\n\tconst customBlockStyles = blockStyleAttributes?.style?.typography || {};\n\tconst blockGlobalStyles = baseGlobalStyles?.blocks?.[ blockName ];\n\tconst parsedFontSizes = Object.values( fontSizes ?? {} );\n\n\t// Global styles.\n\tif ( blockGlobalStyles?.typography ) {\n\t\tconst fontSize = blockGlobalStyles?.typography?.fontSize;\n\t\tconst lineHeight = blockGlobalStyles?.typography?.lineHeight;\n\n\t\tif ( fontSize ) {\n\t\t\tif ( parseInt( fontSize, 10 ) ) {\n\t\t\t\ttypographyStyles.fontSize = fontSize;\n\t\t\t} else {\n\t\t\t\tconst mappedFontSize = parsedFontSizes.find(\n\t\t\t\t\t( { slug } ) => slug === fontSize\n\t\t\t\t);\n\n\t\t\t\tif ( mappedFontSize ) {\n\t\t\t\t\ttypographyStyles.fontSize = mappedFontSize?.size;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( lineHeight ) {\n\t\t\ttypographyStyles.lineHeight = lineHeight;\n\t\t}\n\t}\n\n\tif ( blockStyleAttributes?.fontSize && baseGlobalStyles ) {\n\t\tconst mappedFontSize = parsedFontSizes.find(\n\t\t\t( { slug } ) => slug === blockStyleAttributes?.fontSize\n\t\t);\n\n\t\tif ( mappedFontSize ) {\n\t\t\ttypographyStyles.fontSize = mappedFontSize?.size;\n\t\t}\n\t}\n\n\t// Custom styles.\n\tif ( customBlockStyles?.fontSize ) {\n\t\ttypographyStyles.fontSize = customBlockStyles?.fontSize;\n\t}\n\n\tif ( customBlockStyles?.lineHeight ) {\n\t\ttypographyStyles.lineHeight = customBlockStyles?.lineHeight;\n\t}\n\n\treturn typographyStyles;\n}\n\n/**\n * Return a value from a certain path of the object.\n * Path is specified as an array of properties, like: [ 'parent', 'child' ].\n *\n * @param {Object} object Input object.\n * @param {Array} path Path to the object property.\n * @return {*} Value of the object property at the specified path.\n */\nconst getValueFromObjectPath = ( object, path ) => {\n\tlet value = object;\n\tpath.forEach( ( fieldName ) => {\n\t\tvalue = value?.[ fieldName ];\n\t} );\n\treturn value;\n};\n\nexport function parseStylesVariables( styles, mappedValues, customValues ) {\n\tlet stylesBase = styles;\n\tconst variables = [ 'preset', 'custom', 'var', 'fontSize' ];\n\n\tif ( ! stylesBase ) {\n\t\treturn styles;\n\t}\n\n\tvariables.forEach( ( variable ) => {\n\t\t// Examples\n\t\t// var(--wp--preset--color--gray)\n\t\t// var(--wp--custom--body--typography--font-family)\n\t\t// var:preset|color|custom-color-2\n\t\tconst regex = new RegExp( `var\\\\(--wp--${ variable }--(.*?)\\\\)`, 'g' );\n\t\tconst varRegex = /\\\"var:preset\\|color\\|(.*?)\\\"/gm;\n\t\tconst fontSizeRegex = /\"fontSize\":\"(.*?)\"/gm;\n\n\t\tif ( variable === 'preset' ) {\n\t\t\tstylesBase = stylesBase.replace( regex, ( _$1, $2 ) => {\n\t\t\t\tconst path = $2.split( '--' );\n\t\t\t\tconst mappedPresetValue = mappedValues[ path[ 0 ] ];\n\t\t\t\tif ( mappedPresetValue && mappedPresetValue.slug ) {\n\t\t\t\t\tconst matchedValue = Object.values(\n\t\t\t\t\t\tmappedPresetValue.values ?? {}\n\t\t\t\t\t).find( ( { slug } ) => slug === path[ 1 ] );\n\t\t\t\t\treturn matchedValue?.[ mappedPresetValue.slug ];\n\t\t\t\t}\n\t\t\t\treturn UNKNOWN_VALUE;\n\t\t\t} );\n\t\t}\n\t\tif ( variable === 'custom' ) {\n\t\t\tconst customValuesData = customValues ?? JSON.parse( stylesBase );\n\t\t\tstylesBase = stylesBase.replace( regex, ( _$1, $2 ) => {\n\t\t\t\tconst path = $2.split( '--' );\n\t\t\t\tif (\n\t\t\t\t\tpath.reduce(\n\t\t\t\t\t\t( prev, curr ) => prev && prev[ curr ],\n\t\t\t\t\t\tcustomValuesData\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn getValueFromObjectPath( customValuesData, path );\n\t\t\t\t}\n\n\t\t\t\t// Check for camelcase properties.\n\t\t\t\treturn getValueFromObjectPath( customValuesData, [\n\t\t\t\t\t...path.slice( 0, path.length - 1 ),\n\t\t\t\t\tcamelCase( path[ path.length - 1 ] ),\n\t\t\t\t] );\n\t\t\t} );\n\t\t}\n\n\t\tif ( variable === 'var' ) {\n\t\t\tstylesBase = stylesBase.replace( varRegex, ( _$1, $2 ) => {\n\t\t\t\tif ( mappedValues?.color ) {\n\t\t\t\t\tconst matchedValue = mappedValues.color?.values?.find(\n\t\t\t\t\t\t( { slug } ) => slug === $2\n\t\t\t\t\t);\n\t\t\t\t\treturn `\"${ matchedValue?.color }\"`;\n\t\t\t\t}\n\t\t\t\treturn UNKNOWN_VALUE;\n\t\t\t} );\n\t\t}\n\n\t\tif ( variable === 'fontSize' ) {\n\t\t\tconst { width, height } = Dimensions.get( 'window' );\n\n\t\t\tstylesBase = stylesBase.replace( fontSizeRegex, ( _$1, $2 ) => {\n\t\t\t\tconst parsedFontSize =\n\t\t\t\t\tgetPxFromCssUnit( $2, {\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tfontSize: DEFAULT_FONT_SIZE,\n\t\t\t\t\t} ) || `${ DEFAULT_FONT_SIZE }px`;\n\n\t\t\t\treturn `\"fontSize\":\"${ parsedFontSize }\"`;\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn JSON.parse( stylesBase );\n}\n\nexport function getMappedValues( features, palette ) {\n\tconst typography = features?.typography;\n\tconst colors = [\n\t\t...( palette?.theme || [] ),\n\t\t...( palette?.custom || [] ),\n\t\t...( palette?.default || [] ),\n\t];\n\n\tconst fontSizes = {\n\t\t...typography?.fontSizes?.theme,\n\t\t...typography?.fontSizes?.custom,\n\t};\n\tconst mappedValues = {\n\t\tcolor: {\n\t\t\tvalues: colors,\n\t\t\tslug: 'color',\n\t\t},\n\t\t'font-size': {\n\t\t\tvalues: fontSizes,\n\t\t\tslug: 'size',\n\t\t},\n\t};\n\treturn mappedValues;\n}\n\n/**\n * Returns the normalized fontSizes to include the sizePx value for each of the different sizes.\n *\n * @param {Object} fontSizes found in global styles.\n * @return {Object} normalized sizes.\n */\nfunction normalizeFontSizes( fontSizes ) {\n\t// Adds normalized PX values for each of the different keys.\n\tif ( ! fontSizes ) {\n\t\treturn fontSizes;\n\t}\n\tconst normalizedFontSizes = {};\n\tconst dimensions = Dimensions.get( 'window' );\n\n\t[ 'default', 'theme', 'custom' ].forEach( ( key ) => {\n\t\tif ( fontSizes[ key ] ) {\n\t\t\tnormalizedFontSizes[ key ] = fontSizes[ key ]?.map(\n\t\t\t\t( fontSizeObject ) => {\n\t\t\t\t\tfontSizeObject.sizePx = getPxFromCssUnit(\n\t\t\t\t\t\tfontSizeObject.size,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: dimensions.width,\n\t\t\t\t\t\t\theight: dimensions.height,\n\t\t\t\t\t\t\tfontSize: DEFAULT_FONT_SIZE,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\treturn fontSizeObject;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn normalizedFontSizes;\n}\n\nexport function useMobileGlobalStylesColors( type = 'colors' ) {\n\tconst colorGradientSettings = useMultipleOriginColorsAndGradients();\n\tconst availableThemeColors = colorGradientSettings?.[ type ]?.reduce(\n\t\t( colors, origin ) => colors.concat( origin?.[ type ] ),\n\t\t[]\n\t);\n\t// Default editor colors/gradients if it's not a block-based theme.\n\tconst colorPalette =\n\t\ttype === 'colors' ? 'color.palette' : 'color.gradients';\n\tconst editorDefaultPalette = useSetting( colorPalette );\n\n\treturn availableThemeColors.length >= 1\n\t\t? availableThemeColors\n\t\t: editorDefaultPalette;\n}\n\nexport function getColorsAndGradients(\n\tdefaultEditorColors = [],\n\tdefaultEditorGradients = [],\n\trawFeatures\n) {\n\tconst features = rawFeatures ? JSON.parse( rawFeatures ) : {};\n\n\treturn {\n\t\t__experimentalGlobalStylesBaseStyles: null,\n\t\t__experimentalFeatures: {\n\t\t\tcolor: {\n\t\t\t\t...( ! features?.color\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttext: true,\n\t\t\t\t\t\t\tbackground: true,\n\t\t\t\t\t\t\tpalette: {\n\t\t\t\t\t\t\t\tdefault: defaultEditorColors,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgradients: {\n\t\t\t\t\t\t\t\tdefault: defaultEditorGradients,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t }\n\t\t\t\t\t: features?.color ),\n\t\t\t\tdefaultPalette: defaultEditorColors?.length > 0,\n\t\t\t\tdefaultGradients: defaultEditorGradients?.length > 0,\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function getGlobalStyles( rawStyles, rawFeatures ) {\n\tconst features = rawFeatures ? JSON.parse( rawFeatures ) : {};\n\tconst mappedValues = getMappedValues( features, features?.color?.palette );\n\tconst colors = parseStylesVariables(\n\t\tJSON.stringify( features?.color ),\n\t\tmappedValues\n\t);\n\tconst gradients = parseStylesVariables(\n\t\tJSON.stringify( features?.color?.gradients ),\n\t\tmappedValues\n\t);\n\tconst customValues = parseStylesVariables(\n\t\tJSON.stringify( features?.custom ),\n\t\tmappedValues\n\t);\n\tconst globalStyles = parseStylesVariables(\n\t\trawStyles,\n\t\tmappedValues,\n\t\tcustomValues\n\t);\n\n\tconst fontSizes = normalizeFontSizes( features?.typography?.fontSizes );\n\n\treturn {\n\t\t__experimentalFeatures: {\n\t\t\tcolor: {\n\t\t\t\tpalette: colors?.palette,\n\t\t\t\tgradients,\n\t\t\t\ttext: features?.color?.text ?? true,\n\t\t\t\tbackground: features?.color?.background ?? true,\n\t\t\t\tdefaultPalette: features?.color?.defaultPalette ?? true,\n\t\t\t\tdefaultGradients: features?.color?.defaultGradients ?? true,\n\t\t\t},\n\t\t\ttypography: {\n\t\t\t\tfontSizes,\n\t\t\t\tcustomLineHeight: features?.custom?.[ 'line-height' ],\n\t\t\t},\n\t\t\tspacing: features?.spacing,\n\t\t},\n\t\t__experimentalGlobalStylesBaseStyles: globalStyles,\n\t};\n}\n"]}
@@ -30,9 +30,5 @@ export const KeyboardAwareFlatList = _ref => {
30
30
  onScroll: scrollHandler
31
31
  }, props)));
32
32
  };
33
-
34
- KeyboardAwareFlatList.handleCaretVerticalPositionChange = () => {// no need to handle on Android, it is system managed
35
- };
36
-
37
33
  export default KeyboardAwareFlatList;
38
34
  //# sourceMappingURL=index.android.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/index.android.js"],"names":["FlatList","Animated","useAnimatedScrollHandler","KeyboardAvoidingView","AnimatedFlatList","createAnimatedComponent","KeyboardAwareFlatList","innerRef","onScroll","props","scrollHandler","flex","handleCaretVerticalPositionChange"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,QAAT,QAAyB,cAAzB;AACA,OAAOC,QAAP,IAAmBC,wBAAnB,QAAmD,yBAAnD;AAEA;AACA;AACA;;AACA,OAAOC,oBAAP,MAAiC,2BAAjC;AAEA,MAAMC,gBAAgB,GAAGH,QAAQ,CAACI,uBAAT,CAAkCL,QAAlC,CAAzB;AAEA,OAAO,MAAMM,qBAAqB,GAAG,QAAwC;AAAA,MAAtC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,QAAZ;AAAsB,OAAGC;AAAzB,GAAsC;AAC5E,QAAMC,aAAa,GAAGR,wBAAwB,CAAE;AAAEM,IAAAA;AAAF,GAAF,CAA9C;AACA,SACC,cAAC,oBAAD;AAAsB,IAAA,KAAK,EAAG;AAAEG,MAAAA,IAAI,EAAE;AAAR;AAA9B,KACC,cAAC,gBAAD;AACC,IAAA,GAAG,EAAGJ,QADP;AAEC,IAAA,QAAQ,EAAGG;AAFZ,KAGMD,KAHN,EADD,CADD;AASA,CAXM;;AAaPH,qBAAqB,CAACM,iCAAtB,GAA0D,MAAM,CAC/D;AACA,CAFD;;AAIA,eAAeN,qBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { FlatList } from 'react-native';\nimport Animated, { useAnimatedScrollHandler } from 'react-native-reanimated';\n\n/**\n * Internal dependencies\n */\nimport KeyboardAvoidingView from '../keyboard-avoiding-view';\n\nconst AnimatedFlatList = Animated.createAnimatedComponent( FlatList );\n\nexport const KeyboardAwareFlatList = ( { innerRef, onScroll, ...props } ) => {\n\tconst scrollHandler = useAnimatedScrollHandler( { onScroll } );\n\treturn (\n\t\t<KeyboardAvoidingView style={ { flex: 1 } }>\n\t\t\t<AnimatedFlatList\n\t\t\t\tref={ innerRef }\n\t\t\t\tonScroll={ scrollHandler }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t</KeyboardAvoidingView>\n\t);\n};\n\nKeyboardAwareFlatList.handleCaretVerticalPositionChange = () => {\n\t// no need to handle on Android, it is system managed\n};\n\nexport default KeyboardAwareFlatList;\n"]}
1
+ {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/index.android.js"],"names":["FlatList","Animated","useAnimatedScrollHandler","KeyboardAvoidingView","AnimatedFlatList","createAnimatedComponent","KeyboardAwareFlatList","innerRef","onScroll","props","scrollHandler","flex"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,QAAT,QAAyB,cAAzB;AACA,OAAOC,QAAP,IAAmBC,wBAAnB,QAAmD,yBAAnD;AAEA;AACA;AACA;;AACA,OAAOC,oBAAP,MAAiC,2BAAjC;AAEA,MAAMC,gBAAgB,GAAGH,QAAQ,CAACI,uBAAT,CAAkCL,QAAlC,CAAzB;AAEA,OAAO,MAAMM,qBAAqB,GAAG,QAAwC;AAAA,MAAtC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,QAAZ;AAAsB,OAAGC;AAAzB,GAAsC;AAC5E,QAAMC,aAAa,GAAGR,wBAAwB,CAAE;AAAEM,IAAAA;AAAF,GAAF,CAA9C;AACA,SACC,cAAC,oBAAD;AAAsB,IAAA,KAAK,EAAG;AAAEG,MAAAA,IAAI,EAAE;AAAR;AAA9B,KACC,cAAC,gBAAD;AACC,IAAA,GAAG,EAAGJ,QADP;AAEC,IAAA,QAAQ,EAAGG;AAFZ,KAGMD,KAHN,EADD,CADD;AASA,CAXM;AAaP,eAAeH,qBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { FlatList } from 'react-native';\nimport Animated, { useAnimatedScrollHandler } from 'react-native-reanimated';\n\n/**\n * Internal dependencies\n */\nimport KeyboardAvoidingView from '../keyboard-avoiding-view';\n\nconst AnimatedFlatList = Animated.createAnimatedComponent( FlatList );\n\nexport const KeyboardAwareFlatList = ( { innerRef, onScroll, ...props } ) => {\n\tconst scrollHandler = useAnimatedScrollHandler( { onScroll } );\n\treturn (\n\t\t<KeyboardAvoidingView style={ { flex: 1 } }>\n\t\t\t<AnimatedFlatList\n\t\t\t\tref={ innerRef }\n\t\t\t\tonScroll={ scrollHandler }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t</KeyboardAvoidingView>\n\t);\n};\n\nexport default KeyboardAwareFlatList;\n"]}
@@ -3,86 +3,129 @@ import { createElement } from "@wordpress/element";
3
3
  /**
4
4
  * External dependencies
5
5
  */
6
- import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
7
- import { FlatList } from 'react-native';
8
- import fastDeepEqual from 'fast-deep-equal/es6';
6
+ import { ScrollView, FlatList, useWindowDimensions } from 'react-native';
9
7
  import Animated, { useAnimatedScrollHandler, useSharedValue } from 'react-native-reanimated';
10
8
  /**
11
9
  * WordPress dependencies
12
10
  */
13
11
 
14
- import { memo, useCallback, useRef } from '@wordpress/element';
15
- const List = memo(FlatList, fastDeepEqual);
16
- const AnimatedKeyboardAwareScrollView = Animated.createAnimatedComponent(KeyboardAwareScrollView);
12
+ import { useCallback, useEffect, useRef } from '@wordpress/element';
13
+ import { useThrottle } from '@wordpress/compose';
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+
18
+ import useTextInputOffset from './use-text-input-offset';
19
+ import useKeyboardOffset from './use-keyboard-offset';
20
+ import useScrollToTextInput from './use-scroll-to-text-input';
21
+ import useTextInputCaretPosition from './use-text-input-caret-position';
22
+ const AnimatedScrollView = Animated.createAnimatedComponent(ScrollView);
23
+ /**
24
+ * React component that provides a FlatList that is aware of the keyboard state and can scroll
25
+ * to the currently focused TextInput.
26
+ *
27
+ * @param {Object} props Component props.
28
+ * @param {number} props.extraScrollHeight Extra scroll height for the content.
29
+ * @param {Function} props.innerRef Function to pass the ScrollView ref to the parent component.
30
+ * @param {Function} props.onScroll Function to be called when the list is scrolled.
31
+ * @param {boolean} props.scrollEnabled Whether the list can be scrolled.
32
+ * @param {Object} props.scrollViewStyle Additional style for the ScrollView component.
33
+ * @param {boolean} props.shouldPreventAutomaticScroll Whether to prevent scrolling when there's a Keyboard offset set.
34
+ * @param {Object} props... Other props to pass to the FlatList component.
35
+ * @return {WPComponent} KeyboardAwareFlatList component.
36
+ */
37
+
17
38
  export const KeyboardAwareFlatList = _ref => {
18
39
  let {
19
40
  extraScrollHeight,
20
- shouldPreventAutomaticScroll,
21
41
  innerRef,
22
- autoScroll,
23
- scrollViewStyle,
24
- inputAccessoryViewHeight,
25
42
  onScroll,
26
- ...listProps
43
+ scrollEnabled,
44
+ scrollViewStyle,
45
+ shouldPreventAutomaticScroll,
46
+ ...props
27
47
  } = _ref;
28
48
  const scrollViewRef = useRef();
29
- const keyboardWillShowIndicator = useRef();
30
- const latestContentOffsetY = useSharedValue(-1);
49
+ const scrollViewMeasurements = useRef();
50
+ const scrollViewYOffset = useSharedValue(-1);
51
+ const {
52
+ height: windowHeight,
53
+ width: windowWidth
54
+ } = useWindowDimensions();
55
+ const isLandscape = windowWidth >= windowHeight;
56
+ const [keyboardOffset] = useKeyboardOffset(scrollEnabled, shouldPreventAutomaticScroll);
57
+ const [currentCaretData] = useTextInputCaretPosition(scrollEnabled);
58
+ const [getTextInputOffset] = useTextInputOffset(scrollEnabled, scrollViewRef);
59
+ const [scrollToTextInputOffset] = useScrollToTextInput(extraScrollHeight, keyboardOffset, scrollEnabled, scrollViewMeasurements, scrollViewRef, scrollViewYOffset);
60
+ const onScrollToTextInput = useThrottle(useCallback(async caret => {
61
+ const textInputOffset = await getTextInputOffset(caret);
62
+ const hasTextInputOffset = textInputOffset !== null;
63
+
64
+ if (hasTextInputOffset) {
65
+ scrollToTextInputOffset(caret, textInputOffset);
66
+ }
67
+ }, [getTextInputOffset, scrollToTextInputOffset]), 200, {
68
+ leading: false
69
+ });
70
+ useEffect(() => {
71
+ onScrollToTextInput(currentCaretData);
72
+ }, [currentCaretData, onScrollToTextInput]); // When the orientation changes, the ScrollView measurements
73
+ // need to be re-calculated.
74
+
75
+ useEffect(() => {
76
+ scrollViewMeasurements.current = null;
77
+ }, [isLandscape]);
31
78
  const scrollHandler = useAnimatedScrollHandler({
32
79
  onScroll: event => {
33
80
  const {
34
81
  contentOffset
35
82
  } = event;
36
- latestContentOffsetY.value = contentOffset.y;
83
+ scrollViewYOffset.value = contentOffset.y;
37
84
  onScroll(event);
38
85
  }
39
86
  });
87
+ const measureScrollView = useCallback(() => {
88
+ if (scrollViewRef.current) {
89
+ const scrollRef = scrollViewRef.current.getNativeScrollRef();
90
+ scrollRef.measureInWindow((_x, y, width, height) => {
91
+ scrollViewMeasurements.current = {
92
+ y,
93
+ width,
94
+ height
95
+ };
96
+ });
97
+ }
98
+ }, []);
99
+ const onContentSizeChange = useCallback(() => {
100
+ onScrollToTextInput(currentCaretData); // Sets the first values when the content size changes.
101
+
102
+ if (!scrollViewMeasurements.current) {
103
+ measureScrollView();
104
+ }
105
+ }, [measureScrollView, onScrollToTextInput, currentCaretData]);
40
106
  const getRef = useCallback(ref => {
41
107
  scrollViewRef.current = ref;
42
108
  innerRef(ref);
43
- }, [innerRef]);
44
- const onKeyboardWillHide = useCallback(() => {
45
- keyboardWillShowIndicator.current = false;
46
- }, []);
47
- const onKeyboardDidHide = useCallback(() => {
48
- setTimeout(() => {
49
- if (!keyboardWillShowIndicator.current && latestContentOffsetY.value !== -1 && !shouldPreventAutomaticScroll()) {
50
- var _scrollViewRef$curren;
109
+ }, [innerRef]); // Adds content insets when the keyboard is opened to have
110
+ // extra padding at the bottom.
51
111
 
52
- // Reset the content position if keyboard is still closed.
53
- (_scrollViewRef$curren = scrollViewRef.current) === null || _scrollViewRef$curren === void 0 ? void 0 : _scrollViewRef$curren.scrollToPosition(0, latestContentOffsetY.value, true);
54
- }
55
- }, 50);
56
- }, [latestContentOffsetY, shouldPreventAutomaticScroll]);
57
- const onKeyboardWillShow = useCallback(() => {
58
- keyboardWillShowIndicator.current = true;
59
- }, []);
60
- return createElement(AnimatedKeyboardAwareScrollView, {
61
- style: [{
62
- flex: 1
63
- }, scrollViewStyle],
64
- keyboardDismissMode: "none",
65
- enableResetScrollToCoords: false,
112
+ const contentInset = {
113
+ bottom: keyboardOffset
114
+ };
115
+ const style = [{
116
+ flex: 1
117
+ }, scrollViewStyle];
118
+ return createElement(AnimatedScrollView, {
119
+ automaticallyAdjustContentInsets: false,
120
+ contentInset: contentInset,
66
121
  keyboardShouldPersistTaps: "handled",
67
- extraScrollHeight: extraScrollHeight,
68
- extraHeight: 0,
69
- inputAccessoryViewHeight: inputAccessoryViewHeight,
70
- enableAutomaticScroll: autoScroll === undefined ? false : autoScroll,
122
+ onContentSizeChange: onContentSizeChange,
123
+ onScroll: scrollHandler,
71
124
  ref: getRef,
72
- onKeyboardWillHide: onKeyboardWillHide,
73
- onKeyboardDidHide: onKeyboardDidHide,
74
- onKeyboardWillShow: onKeyboardWillShow,
75
- scrollEnabled: listProps.scrollEnabled,
76
- onScroll: scrollHandler
77
- }, createElement(List, listProps));
125
+ scrollEnabled: scrollEnabled,
126
+ scrollEventThrottle: 16,
127
+ style: style
128
+ }, createElement(FlatList, props));
78
129
  };
79
-
80
- KeyboardAwareFlatList.handleCaretVerticalPositionChange = (scrollView, targetId, caretY, previousCaretY) => {
81
- if (previousCaretY) {
82
- // If this is not the first tap.
83
- scrollView.refreshScrollForField(targetId);
84
- }
85
- };
86
-
87
130
  export default KeyboardAwareFlatList;
88
131
  //# sourceMappingURL=index.ios.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/index.ios.js"],"names":["KeyboardAwareScrollView","FlatList","fastDeepEqual","Animated","useAnimatedScrollHandler","useSharedValue","memo","useCallback","useRef","List","AnimatedKeyboardAwareScrollView","createAnimatedComponent","KeyboardAwareFlatList","extraScrollHeight","shouldPreventAutomaticScroll","innerRef","autoScroll","scrollViewStyle","inputAccessoryViewHeight","onScroll","listProps","scrollViewRef","keyboardWillShowIndicator","latestContentOffsetY","scrollHandler","event","contentOffset","value","y","getRef","ref","current","onKeyboardWillHide","onKeyboardDidHide","setTimeout","scrollToPosition","onKeyboardWillShow","flex","undefined","scrollEnabled","handleCaretVerticalPositionChange","scrollView","targetId","caretY","previousCaretY","refreshScrollForField"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport { FlatList } from 'react-native';\nimport fastDeepEqual from 'fast-deep-equal/es6';\nimport Animated, {\n\tuseAnimatedScrollHandler,\n\tuseSharedValue,\n} from 'react-native-reanimated';\n\n/**\n * WordPress dependencies\n */\nimport { memo, useCallback, useRef } from '@wordpress/element';\n\nconst List = memo( FlatList, fastDeepEqual );\nconst AnimatedKeyboardAwareScrollView = Animated.createAnimatedComponent(\n\tKeyboardAwareScrollView\n);\n\nexport const KeyboardAwareFlatList = ( {\n\textraScrollHeight,\n\tshouldPreventAutomaticScroll,\n\tinnerRef,\n\tautoScroll,\n\tscrollViewStyle,\n\tinputAccessoryViewHeight,\n\tonScroll,\n\t...listProps\n} ) => {\n\tconst scrollViewRef = useRef();\n\tconst keyboardWillShowIndicator = useRef();\n\n\tconst latestContentOffsetY = useSharedValue( -1 );\n\n\tconst scrollHandler = useAnimatedScrollHandler( {\n\t\tonScroll: ( event ) => {\n\t\t\tconst { contentOffset } = event;\n\t\t\tlatestContentOffsetY.value = contentOffset.y;\n\t\t\tonScroll( event );\n\t\t},\n\t} );\n\n\tconst getRef = useCallback(\n\t\t( ref ) => {\n\t\t\tscrollViewRef.current = ref;\n\t\t\tinnerRef( ref );\n\t\t},\n\t\t[ innerRef ]\n\t);\n\tconst onKeyboardWillHide = useCallback( () => {\n\t\tkeyboardWillShowIndicator.current = false;\n\t}, [] );\n\tconst onKeyboardDidHide = useCallback( () => {\n\t\tsetTimeout( () => {\n\t\t\tif (\n\t\t\t\t! keyboardWillShowIndicator.current &&\n\t\t\t\tlatestContentOffsetY.value !== -1 &&\n\t\t\t\t! shouldPreventAutomaticScroll()\n\t\t\t) {\n\t\t\t\t// Reset the content position if keyboard is still closed.\n\t\t\t\tscrollViewRef.current?.scrollToPosition(\n\t\t\t\t\t0,\n\t\t\t\t\tlatestContentOffsetY.value,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t}\n\t\t}, 50 );\n\t}, [ latestContentOffsetY, shouldPreventAutomaticScroll ] );\n\tconst onKeyboardWillShow = useCallback( () => {\n\t\tkeyboardWillShowIndicator.current = true;\n\t}, [] );\n\n\treturn (\n\t\t<AnimatedKeyboardAwareScrollView\n\t\t\tstyle={ [ { flex: 1 }, scrollViewStyle ] }\n\t\t\tkeyboardDismissMode=\"none\"\n\t\t\tenableResetScrollToCoords={ false }\n\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\textraScrollHeight={ extraScrollHeight }\n\t\t\textraHeight={ 0 }\n\t\t\tinputAccessoryViewHeight={ inputAccessoryViewHeight }\n\t\t\tenableAutomaticScroll={\n\t\t\t\tautoScroll === undefined ? false : autoScroll\n\t\t\t}\n\t\t\tref={ getRef }\n\t\t\tonKeyboardWillHide={ onKeyboardWillHide }\n\t\t\tonKeyboardDidHide={ onKeyboardDidHide }\n\t\t\tonKeyboardWillShow={ onKeyboardWillShow }\n\t\t\tscrollEnabled={ listProps.scrollEnabled }\n\t\t\tonScroll={ scrollHandler }\n\t\t>\n\t\t\t<List { ...listProps } />\n\t\t</AnimatedKeyboardAwareScrollView>\n\t);\n};\n\nKeyboardAwareFlatList.handleCaretVerticalPositionChange = (\n\tscrollView,\n\ttargetId,\n\tcaretY,\n\tpreviousCaretY\n) => {\n\tif ( previousCaretY ) {\n\t\t// If this is not the first tap.\n\t\tscrollView.refreshScrollForField( targetId );\n\t}\n};\n\nexport default KeyboardAwareFlatList;\n"]}
1
+ {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/index.ios.js"],"names":["ScrollView","FlatList","useWindowDimensions","Animated","useAnimatedScrollHandler","useSharedValue","useCallback","useEffect","useRef","useThrottle","useTextInputOffset","useKeyboardOffset","useScrollToTextInput","useTextInputCaretPosition","AnimatedScrollView","createAnimatedComponent","KeyboardAwareFlatList","extraScrollHeight","innerRef","onScroll","scrollEnabled","scrollViewStyle","shouldPreventAutomaticScroll","props","scrollViewRef","scrollViewMeasurements","scrollViewYOffset","height","windowHeight","width","windowWidth","isLandscape","keyboardOffset","currentCaretData","getTextInputOffset","scrollToTextInputOffset","onScrollToTextInput","caret","textInputOffset","hasTextInputOffset","leading","current","scrollHandler","event","contentOffset","value","y","measureScrollView","scrollRef","getNativeScrollRef","measureInWindow","_x","onContentSizeChange","getRef","ref","contentInset","bottom","style","flex"],"mappings":";;AAAA;AACA;AACA;AAEA,SAASA,UAAT,EAAqBC,QAArB,EAA+BC,mBAA/B,QAA0D,cAA1D;AACA,OAAOC,QAAP,IACCC,wBADD,EAECC,cAFD,QAGO,yBAHP;AAKA;AACA;AACA;;AACA,SAASC,WAAT,EAAsBC,SAAtB,EAAiCC,MAAjC,QAA+C,oBAA/C;AACA,SAASC,WAAT,QAA4B,oBAA5B;AAEA;AACA;AACA;;AACA,OAAOC,kBAAP,MAA+B,yBAA/B;AACA,OAAOC,iBAAP,MAA8B,uBAA9B;AACA,OAAOC,oBAAP,MAAiC,4BAAjC;AACA,OAAOC,yBAAP,MAAsC,iCAAtC;AAEA,MAAMC,kBAAkB,GAAGX,QAAQ,CAACY,uBAAT,CAAkCf,UAAlC,CAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMgB,qBAAqB,GAAG,QAQ9B;AAAA,MARgC;AACtCC,IAAAA,iBADsC;AAEtCC,IAAAA,QAFsC;AAGtCC,IAAAA,QAHsC;AAItCC,IAAAA,aAJsC;AAKtCC,IAAAA,eALsC;AAMtCC,IAAAA,4BANsC;AAOtC,OAAGC;AAPmC,GAQhC;AACN,QAAMC,aAAa,GAAGhB,MAAM,EAA5B;AACA,QAAMiB,sBAAsB,GAAGjB,MAAM,EAArC;AACA,QAAMkB,iBAAiB,GAAGrB,cAAc,CAAE,CAAC,CAAH,CAAxC;AAEA,QAAM;AAAEsB,IAAAA,MAAM,EAAEC,YAAV;AAAwBC,IAAAA,KAAK,EAAEC;AAA/B,MAA+C5B,mBAAmB,EAAxE;AACA,QAAM6B,WAAW,GAAGD,WAAW,IAAIF,YAAnC;AAEA,QAAM,CAAEI,cAAF,IAAqBrB,iBAAiB,CAC3CS,aAD2C,EAE3CE,4BAF2C,CAA5C;AAKA,QAAM,CAAEW,gBAAF,IAAuBpB,yBAAyB,CAAEO,aAAF,CAAtD;AAEA,QAAM,CAAEc,kBAAF,IAAyBxB,kBAAkB,CAChDU,aADgD,EAEhDI,aAFgD,CAAjD;AAKA,QAAM,CAAEW,uBAAF,IAA8BvB,oBAAoB,CACvDK,iBADuD,EAEvDe,cAFuD,EAGvDZ,aAHuD,EAIvDK,sBAJuD,EAKvDD,aALuD,EAMvDE,iBANuD,CAAxD;AASA,QAAMU,mBAAmB,GAAG3B,WAAW,CACtCH,WAAW,CACV,MAAQ+B,KAAR,IAAmB;AAClB,UAAMC,eAAe,GAAG,MAAMJ,kBAAkB,CAAEG,KAAF,CAAhD;AACA,UAAME,kBAAkB,GAAGD,eAAe,KAAK,IAA/C;;AAEA,QAAKC,kBAAL,EAA0B;AACzBJ,MAAAA,uBAAuB,CAAEE,KAAF,EAASC,eAAT,CAAvB;AACA;AACD,GARS,EASV,CAAEJ,kBAAF,EAAsBC,uBAAtB,CATU,CAD2B,EAYtC,GAZsC,EAatC;AAAEK,IAAAA,OAAO,EAAE;AAAX,GAbsC,CAAvC;AAgBAjC,EAAAA,SAAS,CAAE,MAAM;AAChB6B,IAAAA,mBAAmB,CAAEH,gBAAF,CAAnB;AACA,GAFQ,EAEN,CAAEA,gBAAF,EAAoBG,mBAApB,CAFM,CAAT,CA7CM,CAiDN;AACA;;AACA7B,EAAAA,SAAS,CAAE,MAAM;AAChBkB,IAAAA,sBAAsB,CAACgB,OAAvB,GAAiC,IAAjC;AACA,GAFQ,EAEN,CAAEV,WAAF,CAFM,CAAT;AAIA,QAAMW,aAAa,GAAGtC,wBAAwB,CAAE;AAC/Ce,IAAAA,QAAQ,EAAIwB,KAAF,IAAa;AACtB,YAAM;AAAEC,QAAAA;AAAF,UAAoBD,KAA1B;AACAjB,MAAAA,iBAAiB,CAACmB,KAAlB,GAA0BD,aAAa,CAACE,CAAxC;AACA3B,MAAAA,QAAQ,CAAEwB,KAAF,CAAR;AACA;AAL8C,GAAF,CAA9C;AAQA,QAAMI,iBAAiB,GAAGzC,WAAW,CAAE,MAAM;AAC5C,QAAKkB,aAAa,CAACiB,OAAnB,EAA6B;AAC5B,YAAMO,SAAS,GAAGxB,aAAa,CAACiB,OAAd,CAAsBQ,kBAAtB,EAAlB;AAEAD,MAAAA,SAAS,CAACE,eAAV,CAA2B,CAAEC,EAAF,EAAML,CAAN,EAASjB,KAAT,EAAgBF,MAAhB,KAA4B;AACtDF,QAAAA,sBAAsB,CAACgB,OAAvB,GAAiC;AAAEK,UAAAA,CAAF;AAAKjB,UAAAA,KAAL;AAAYF,UAAAA;AAAZ,SAAjC;AACA,OAFD;AAGA;AACD,GARoC,EAQlC,EARkC,CAArC;AAUA,QAAMyB,mBAAmB,GAAG9C,WAAW,CAAE,MAAM;AAC9C8B,IAAAA,mBAAmB,CAAEH,gBAAF,CAAnB,CAD8C,CAG9C;;AACA,QAAK,CAAER,sBAAsB,CAACgB,OAA9B,EAAwC;AACvCM,MAAAA,iBAAiB;AACjB;AACD,GAPsC,EAOpC,CAAEA,iBAAF,EAAqBX,mBAArB,EAA0CH,gBAA1C,CAPoC,CAAvC;AASA,QAAMoB,MAAM,GAAG/C,WAAW,CACvBgD,GAAF,IAAW;AACV9B,IAAAA,aAAa,CAACiB,OAAd,GAAwBa,GAAxB;AACApC,IAAAA,QAAQ,CAAEoC,GAAF,CAAR;AACA,GAJwB,EAKzB,CAAEpC,QAAF,CALyB,CAA1B,CAlFM,CA0FN;AACA;;AACA,QAAMqC,YAAY,GAAG;AAAEC,IAAAA,MAAM,EAAExB;AAAV,GAArB;AAEA,QAAMyB,KAAK,GAAG,CAAE;AAAEC,IAAAA,IAAI,EAAE;AAAR,GAAF,EAAerC,eAAf,CAAd;AAEA,SACC,cAAC,kBAAD;AACC,IAAA,gCAAgC,EAAG,KADpC;AAEC,IAAA,YAAY,EAAGkC,YAFhB;AAGC,IAAA,yBAAyB,EAAC,SAH3B;AAIC,IAAA,mBAAmB,EAAGH,mBAJvB;AAKC,IAAA,QAAQ,EAAGV,aALZ;AAMC,IAAA,GAAG,EAAGW,MANP;AAOC,IAAA,aAAa,EAAGjC,aAPjB;AAQC,IAAA,mBAAmB,EAAG,EARvB;AASC,IAAA,KAAK,EAAGqC;AATT,KAWC,cAAC,QAAD,EAAelC,KAAf,CAXD,CADD;AAeA,CAvHM;AAyHP,eAAeP,qBAAf","sourcesContent":["/**\n * External dependencies\n */\n\nimport { ScrollView, FlatList, useWindowDimensions } from 'react-native';\nimport Animated, {\n\tuseAnimatedScrollHandler,\n\tuseSharedValue,\n} from 'react-native-reanimated';\n\n/**\n * WordPress dependencies\n */\nimport { useCallback, useEffect, useRef } from '@wordpress/element';\nimport { useThrottle } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useTextInputOffset from './use-text-input-offset';\nimport useKeyboardOffset from './use-keyboard-offset';\nimport useScrollToTextInput from './use-scroll-to-text-input';\nimport useTextInputCaretPosition from './use-text-input-caret-position';\n\nconst AnimatedScrollView = Animated.createAnimatedComponent( ScrollView );\n\n/**\n * React component that provides a FlatList that is aware of the keyboard state and can scroll\n * to the currently focused TextInput.\n *\n * @param {Object} props Component props.\n * @param {number} props.extraScrollHeight Extra scroll height for the content.\n * @param {Function} props.innerRef Function to pass the ScrollView ref to the parent component.\n * @param {Function} props.onScroll Function to be called when the list is scrolled.\n * @param {boolean} props.scrollEnabled Whether the list can be scrolled.\n * @param {Object} props.scrollViewStyle Additional style for the ScrollView component.\n * @param {boolean} props.shouldPreventAutomaticScroll Whether to prevent scrolling when there's a Keyboard offset set.\n * @param {Object} props... Other props to pass to the FlatList component.\n * @return {WPComponent} KeyboardAwareFlatList component.\n */\nexport const KeyboardAwareFlatList = ( {\n\textraScrollHeight,\n\tinnerRef,\n\tonScroll,\n\tscrollEnabled,\n\tscrollViewStyle,\n\tshouldPreventAutomaticScroll,\n\t...props\n} ) => {\n\tconst scrollViewRef = useRef();\n\tconst scrollViewMeasurements = useRef();\n\tconst scrollViewYOffset = useSharedValue( -1 );\n\n\tconst { height: windowHeight, width: windowWidth } = useWindowDimensions();\n\tconst isLandscape = windowWidth >= windowHeight;\n\n\tconst [ keyboardOffset ] = useKeyboardOffset(\n\t\tscrollEnabled,\n\t\tshouldPreventAutomaticScroll\n\t);\n\n\tconst [ currentCaretData ] = useTextInputCaretPosition( scrollEnabled );\n\n\tconst [ getTextInputOffset ] = useTextInputOffset(\n\t\tscrollEnabled,\n\t\tscrollViewRef\n\t);\n\n\tconst [ scrollToTextInputOffset ] = useScrollToTextInput(\n\t\textraScrollHeight,\n\t\tkeyboardOffset,\n\t\tscrollEnabled,\n\t\tscrollViewMeasurements,\n\t\tscrollViewRef,\n\t\tscrollViewYOffset\n\t);\n\n\tconst onScrollToTextInput = useThrottle(\n\t\tuseCallback(\n\t\t\tasync ( caret ) => {\n\t\t\t\tconst textInputOffset = await getTextInputOffset( caret );\n\t\t\t\tconst hasTextInputOffset = textInputOffset !== null;\n\n\t\t\t\tif ( hasTextInputOffset ) {\n\t\t\t\t\tscrollToTextInputOffset( caret, textInputOffset );\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ getTextInputOffset, scrollToTextInputOffset ]\n\t\t),\n\t\t200,\n\t\t{ leading: false }\n\t);\n\n\tuseEffect( () => {\n\t\tonScrollToTextInput( currentCaretData );\n\t}, [ currentCaretData, onScrollToTextInput ] );\n\n\t// When the orientation changes, the ScrollView measurements\n\t// need to be re-calculated.\n\tuseEffect( () => {\n\t\tscrollViewMeasurements.current = null;\n\t}, [ isLandscape ] );\n\n\tconst scrollHandler = useAnimatedScrollHandler( {\n\t\tonScroll: ( event ) => {\n\t\t\tconst { contentOffset } = event;\n\t\t\tscrollViewYOffset.value = contentOffset.y;\n\t\t\tonScroll( event );\n\t\t},\n\t} );\n\n\tconst measureScrollView = useCallback( () => {\n\t\tif ( scrollViewRef.current ) {\n\t\t\tconst scrollRef = scrollViewRef.current.getNativeScrollRef();\n\n\t\t\tscrollRef.measureInWindow( ( _x, y, width, height ) => {\n\t\t\t\tscrollViewMeasurements.current = { y, width, height };\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\tconst onContentSizeChange = useCallback( () => {\n\t\tonScrollToTextInput( currentCaretData );\n\n\t\t// Sets the first values when the content size changes.\n\t\tif ( ! scrollViewMeasurements.current ) {\n\t\t\tmeasureScrollView();\n\t\t}\n\t}, [ measureScrollView, onScrollToTextInput, currentCaretData ] );\n\n\tconst getRef = useCallback(\n\t\t( ref ) => {\n\t\t\tscrollViewRef.current = ref;\n\t\t\tinnerRef( ref );\n\t\t},\n\t\t[ innerRef ]\n\t);\n\n\t// Adds content insets when the keyboard is opened to have\n\t// extra padding at the bottom.\n\tconst contentInset = { bottom: keyboardOffset };\n\n\tconst style = [ { flex: 1 }, scrollViewStyle ];\n\n\treturn (\n\t\t<AnimatedScrollView\n\t\t\tautomaticallyAdjustContentInsets={ false }\n\t\t\tcontentInset={ contentInset }\n\t\t\tkeyboardShouldPersistTaps=\"handled\"\n\t\t\tonContentSizeChange={ onContentSizeChange }\n\t\t\tonScroll={ scrollHandler }\n\t\t\tref={ getRef }\n\t\t\tscrollEnabled={ scrollEnabled }\n\t\t\tscrollEventThrottle={ 16 }\n\t\t\tstyle={ style }\n\t\t>\n\t\t\t<FlatList { ...props } />\n\t\t</AnimatedScrollView>\n\t);\n};\n\nexport default KeyboardAwareFlatList;\n"]}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { Keyboard } from 'react-native';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+
9
+ import { useEffect, useCallback, useState, useRef } from '@wordpress/element';
10
+ /**
11
+ * Hook that adds Keyboard listeners to get the offset space
12
+ * when the keyboard is opened, taking into account focused AztecViews.
13
+ *
14
+ * @param {boolean} scrollEnabled Whether the scroll is enabled or not.
15
+ * @param {Function} shouldPreventAutomaticScroll Whether to prevent scrolling when there's a Keyboard offset set.
16
+ * @return {[number]} Keyboard offset.
17
+ */
18
+
19
+ export default function useKeyboardOffset(scrollEnabled, shouldPreventAutomaticScroll) {
20
+ const [keyboardOffset, setKeyboardOffset] = useState(0);
21
+ const timeoutRef = useRef();
22
+ const onKeyboardDidHide = useCallback(() => {
23
+ if (shouldPreventAutomaticScroll()) {
24
+ clearTimeout(timeoutRef.current);
25
+ return;
26
+ } // A timeout is being used to delay resetting the offset in cases
27
+ // where the focus is changed to a different TextInput.
28
+
29
+
30
+ clearTimeout(timeoutRef.current);
31
+ timeoutRef.current = setTimeout(() => {
32
+ setKeyboardOffset(0);
33
+ }, 200);
34
+ }, [shouldPreventAutomaticScroll]);
35
+ const onKeyboardDidShow = useCallback(_ref => {
36
+ let {
37
+ endCoordinates
38
+ } = _ref;
39
+ clearTimeout(timeoutRef.current);
40
+ setKeyboardOffset(endCoordinates.height);
41
+ }, []);
42
+ const onKeyboardWillShow = useCallback(() => {
43
+ clearTimeout(timeoutRef.current);
44
+ }, []);
45
+ useEffect(() => {
46
+ let willShowSubscription;
47
+ let showSubscription;
48
+ let hideSubscription;
49
+
50
+ if (scrollEnabled) {
51
+ willShowSubscription = Keyboard.addListener('keyboardWillShow', onKeyboardWillShow);
52
+ showSubscription = Keyboard.addListener('keyboardDidShow', onKeyboardDidShow);
53
+ hideSubscription = Keyboard.addListener('keyboardDidHide', onKeyboardDidHide);
54
+ } else {
55
+ var _willShowSubscription, _showSubscription, _hideSubscription;
56
+
57
+ (_willShowSubscription = willShowSubscription) === null || _willShowSubscription === void 0 ? void 0 : _willShowSubscription.remove();
58
+ (_showSubscription = showSubscription) === null || _showSubscription === void 0 ? void 0 : _showSubscription.remove();
59
+ (_hideSubscription = hideSubscription) === null || _hideSubscription === void 0 ? void 0 : _hideSubscription.remove();
60
+ }
61
+
62
+ return () => {
63
+ var _willShowSubscription2, _showSubscription2, _hideSubscription2;
64
+
65
+ clearTimeout(timeoutRef.current);
66
+ (_willShowSubscription2 = willShowSubscription) === null || _willShowSubscription2 === void 0 ? void 0 : _willShowSubscription2.remove();
67
+ (_showSubscription2 = showSubscription) === null || _showSubscription2 === void 0 ? void 0 : _showSubscription2.remove();
68
+ (_hideSubscription2 = hideSubscription) === null || _hideSubscription2 === void 0 ? void 0 : _hideSubscription2.remove();
69
+ };
70
+ }, [onKeyboardDidHide, onKeyboardDidShow, onKeyboardWillShow, scrollEnabled]);
71
+ return [keyboardOffset];
72
+ }
73
+ //# sourceMappingURL=use-keyboard-offset.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js"],"names":["Keyboard","useEffect","useCallback","useState","useRef","useKeyboardOffset","scrollEnabled","shouldPreventAutomaticScroll","keyboardOffset","setKeyboardOffset","timeoutRef","onKeyboardDidHide","clearTimeout","current","setTimeout","onKeyboardDidShow","endCoordinates","height","onKeyboardWillShow","willShowSubscription","showSubscription","hideSubscription","addListener","remove"],"mappings":"AAAA;AACA;AACA;AAEA,SAASA,QAAT,QAAyB,cAAzB;AAEA;AACA;AACA;;AACA,SAASC,SAAT,EAAoBC,WAApB,EAAiCC,QAAjC,EAA2CC,MAA3C,QAAyD,oBAAzD;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,iBAAT,CACdC,aADc,EAEdC,4BAFc,EAGb;AACD,QAAM,CAAEC,cAAF,EAAkBC,iBAAlB,IAAwCN,QAAQ,CAAE,CAAF,CAAtD;AACA,QAAMO,UAAU,GAAGN,MAAM,EAAzB;AAEA,QAAMO,iBAAiB,GAAGT,WAAW,CAAE,MAAM;AAC5C,QAAKK,4BAA4B,EAAjC,EAAsC;AACrCK,MAAAA,YAAY,CAAEF,UAAU,CAACG,OAAb,CAAZ;AACA;AACA,KAJ2C,CAM5C;AACA;;;AACAD,IAAAA,YAAY,CAAEF,UAAU,CAACG,OAAb,CAAZ;AACAH,IAAAA,UAAU,CAACG,OAAX,GAAqBC,UAAU,CAAE,MAAM;AACtCL,MAAAA,iBAAiB,CAAE,CAAF,CAAjB;AACA,KAF8B,EAE5B,GAF4B,CAA/B;AAGA,GAZoC,EAYlC,CAAEF,4BAAF,CAZkC,CAArC;AAcA,QAAMQ,iBAAiB,GAAGb,WAAW,CAAE,QAA0B;AAAA,QAAxB;AAAEc,MAAAA;AAAF,KAAwB;AAChEJ,IAAAA,YAAY,CAAEF,UAAU,CAACG,OAAb,CAAZ;AACAJ,IAAAA,iBAAiB,CAAEO,cAAc,CAACC,MAAjB,CAAjB;AACA,GAHoC,EAGlC,EAHkC,CAArC;AAKA,QAAMC,kBAAkB,GAAGhB,WAAW,CAAE,MAAM;AAC7CU,IAAAA,YAAY,CAAEF,UAAU,CAACG,OAAb,CAAZ;AACA,GAFqC,EAEnC,EAFmC,CAAtC;AAIAZ,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAIkB,oBAAJ;AACA,QAAIC,gBAAJ;AACA,QAAIC,gBAAJ;;AAEA,QAAKf,aAAL,EAAqB;AACpBa,MAAAA,oBAAoB,GAAGnB,QAAQ,CAACsB,WAAT,CACtB,kBADsB,EAEtBJ,kBAFsB,CAAvB;AAIAE,MAAAA,gBAAgB,GAAGpB,QAAQ,CAACsB,WAAT,CAClB,iBADkB,EAElBP,iBAFkB,CAAnB;AAIAM,MAAAA,gBAAgB,GAAGrB,QAAQ,CAACsB,WAAT,CAClB,iBADkB,EAElBX,iBAFkB,CAAnB;AAIA,KAbD,MAaO;AAAA;;AACN,+BAAAQ,oBAAoB,UAApB,sEAAsBI,MAAtB;AACA,2BAAAH,gBAAgB,UAAhB,8DAAkBG,MAAlB;AACA,2BAAAF,gBAAgB,UAAhB,8DAAkBE,MAAlB;AACA;;AAED,WAAO,MAAM;AAAA;;AACZX,MAAAA,YAAY,CAAEF,UAAU,CAACG,OAAb,CAAZ;AACA,gCAAAM,oBAAoB,UAApB,wEAAsBI,MAAtB;AACA,4BAAAH,gBAAgB,UAAhB,gEAAkBG,MAAlB;AACA,4BAAAF,gBAAgB,UAAhB,gEAAkBE,MAAlB;AACA,KALD;AAMA,GA9BQ,EA8BN,CACFZ,iBADE,EAEFI,iBAFE,EAGFG,kBAHE,EAIFZ,aAJE,CA9BM,CAAT;AAoCA,SAAO,CAAEE,cAAF,CAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\n\nimport { Keyboard } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useCallback, useState, useRef } from '@wordpress/element';\n\n/**\n * Hook that adds Keyboard listeners to get the offset space\n * when the keyboard is opened, taking into account focused AztecViews.\n *\n * @param {boolean} scrollEnabled Whether the scroll is enabled or not.\n * @param {Function} shouldPreventAutomaticScroll Whether to prevent scrolling when there's a Keyboard offset set.\n * @return {[number]} Keyboard offset.\n */\nexport default function useKeyboardOffset(\n\tscrollEnabled,\n\tshouldPreventAutomaticScroll\n) {\n\tconst [ keyboardOffset, setKeyboardOffset ] = useState( 0 );\n\tconst timeoutRef = useRef();\n\n\tconst onKeyboardDidHide = useCallback( () => {\n\t\tif ( shouldPreventAutomaticScroll() ) {\n\t\t\tclearTimeout( timeoutRef.current );\n\t\t\treturn;\n\t\t}\n\n\t\t// A timeout is being used to delay resetting the offset in cases\n\t\t// where the focus is changed to a different TextInput.\n\t\tclearTimeout( timeoutRef.current );\n\t\ttimeoutRef.current = setTimeout( () => {\n\t\t\tsetKeyboardOffset( 0 );\n\t\t}, 200 );\n\t}, [ shouldPreventAutomaticScroll ] );\n\n\tconst onKeyboardDidShow = useCallback( ( { endCoordinates } ) => {\n\t\tclearTimeout( timeoutRef.current );\n\t\tsetKeyboardOffset( endCoordinates.height );\n\t}, [] );\n\n\tconst onKeyboardWillShow = useCallback( () => {\n\t\tclearTimeout( timeoutRef.current );\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tlet willShowSubscription;\n\t\tlet showSubscription;\n\t\tlet hideSubscription;\n\n\t\tif ( scrollEnabled ) {\n\t\t\twillShowSubscription = Keyboard.addListener(\n\t\t\t\t'keyboardWillShow',\n\t\t\t\tonKeyboardWillShow\n\t\t\t);\n\t\t\tshowSubscription = Keyboard.addListener(\n\t\t\t\t'keyboardDidShow',\n\t\t\t\tonKeyboardDidShow\n\t\t\t);\n\t\t\thideSubscription = Keyboard.addListener(\n\t\t\t\t'keyboardDidHide',\n\t\t\t\tonKeyboardDidHide\n\t\t\t);\n\t\t} else {\n\t\t\twillShowSubscription?.remove();\n\t\t\tshowSubscription?.remove();\n\t\t\thideSubscription?.remove();\n\t\t}\n\n\t\treturn () => {\n\t\t\tclearTimeout( timeoutRef.current );\n\t\t\twillShowSubscription?.remove();\n\t\t\tshowSubscription?.remove();\n\t\t\thideSubscription?.remove();\n\t\t};\n\t}, [\n\t\tonKeyboardDidHide,\n\t\tonKeyboardDidShow,\n\t\tonKeyboardWillShow,\n\t\tscrollEnabled,\n\t] );\n\treturn [ keyboardOffset ];\n}\n"]}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+
9
+ import { useCallback } from '@wordpress/element';
10
+ const DEFAULT_FONT_SIZE = 16;
11
+ /** @typedef {import('@wordpress/element').RefObject} RefObject */
12
+
13
+ /** @typedef {import('react-native-reanimated').SharedValue} SharedValue */
14
+
15
+ /**
16
+ * Hook to scroll to the currently focused TextInput
17
+ * depending on where the caret is placed taking into
18
+ * account the Keyboard and the Header.
19
+ *
20
+ * @param {number} extraScrollHeight Extra space to not overlap the content.
21
+ * @param {number} keyboardOffset Keyboard space offset.
22
+ * @param {boolean} scrollEnabled Whether the scroll is enabled or not.
23
+ * @param {RefObject} scrollViewMeasurements ScrollView Layout measurements.
24
+ * @param {RefObject} scrollViewRef ScrollView reference.
25
+ * @param {SharedValue} scrollViewYOffset Current offset position of the ScrollView.
26
+ * @return {Function[]} Function to scroll to the current TextInput's offset.
27
+ */
28
+
29
+ export default function useScrollToTextInput(extraScrollHeight, keyboardOffset, scrollEnabled, scrollViewMeasurements, scrollViewRef, scrollViewYOffset) {
30
+ const {
31
+ top,
32
+ bottom
33
+ } = useSafeAreaInsets();
34
+ const insets = top + bottom;
35
+ /**
36
+ * Function to scroll to the current TextInput's offset.
37
+ *
38
+ * @param {Object} caret The caret position data of the currently focused TextInput.
39
+ * @param {number} caret.caretHeight The height of the caret.
40
+ * @param {number} textInputOffset The offset calculated with the caret's Y coordinate + the
41
+ * TextInput's Y coord or height value.
42
+ */
43
+
44
+ const scrollToTextInputOffset = useCallback((caret, textInputOffset) => {
45
+ const {
46
+ caretHeight = DEFAULT_FONT_SIZE
47
+ } = caret !== null && caret !== void 0 ? caret : {};
48
+
49
+ if (!scrollViewRef.current || !scrollEnabled || !scrollViewMeasurements.current) {
50
+ return;
51
+ }
52
+
53
+ const currentScrollViewYOffset = Math.max(0, scrollViewYOffset.value); // Scroll up.
54
+
55
+ if (textInputOffset < currentScrollViewYOffset) {
56
+ scrollViewRef.current.scrollTo({
57
+ y: textInputOffset,
58
+ animated: true
59
+ });
60
+ return;
61
+ }
62
+
63
+ const availableScreenSpace = Math.abs(Math.floor(scrollViewMeasurements.current.height - (keyboardOffset + extraScrollHeight + caretHeight)));
64
+ const maxOffset = Math.floor(currentScrollViewYOffset + availableScreenSpace);
65
+ const isAtTheTop = textInputOffset < scrollViewMeasurements.current.y + insets; // Scroll down.
66
+
67
+ if (textInputOffset > maxOffset && !isAtTheTop) {
68
+ scrollViewRef.current.scrollTo({
69
+ y: textInputOffset - availableScreenSpace,
70
+ animated: true
71
+ });
72
+ }
73
+ }, [extraScrollHeight, insets, keyboardOffset, scrollEnabled, scrollViewMeasurements, scrollViewRef, scrollViewYOffset]);
74
+ return [scrollToTextInputOffset];
75
+ }
76
+ //# sourceMappingURL=use-scroll-to-text-input.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js"],"names":["useSafeAreaInsets","useCallback","DEFAULT_FONT_SIZE","useScrollToTextInput","extraScrollHeight","keyboardOffset","scrollEnabled","scrollViewMeasurements","scrollViewRef","scrollViewYOffset","top","bottom","insets","scrollToTextInputOffset","caret","textInputOffset","caretHeight","current","currentScrollViewYOffset","Math","max","value","scrollTo","y","animated","availableScreenSpace","abs","floor","height","maxOffset","isAtTheTop"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,iBAAT,QAAkC,gCAAlC;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,oBAA5B;AAEA,MAAMC,iBAAiB,GAAG,EAA1B;AAEA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,oBAAT,CACdC,iBADc,EAEdC,cAFc,EAGdC,aAHc,EAIdC,sBAJc,EAKdC,aALc,EAMdC,iBANc,EAOb;AACD,QAAM;AAAEC,IAAAA,GAAF;AAAOC,IAAAA;AAAP,MAAkBX,iBAAiB,EAAzC;AACA,QAAMY,MAAM,GAAGF,GAAG,GAAGC,MAArB;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AACC,QAAME,uBAAuB,GAAGZ,WAAW,CAC1C,CAAEa,KAAF,EAASC,eAAT,KAA8B;AAC7B,UAAM;AAAEC,MAAAA,WAAW,GAAGd;AAAhB,QAAsCY,KAAtC,aAAsCA,KAAtC,cAAsCA,KAAtC,GAA+C,EAArD;;AAEA,QACC,CAAEN,aAAa,CAACS,OAAhB,IACA,CAAEX,aADF,IAEA,CAAEC,sBAAsB,CAACU,OAH1B,EAIE;AACD;AACA;;AACD,UAAMC,wBAAwB,GAAGC,IAAI,CAACC,GAAL,CAChC,CADgC,EAEhCX,iBAAiB,CAACY,KAFc,CAAjC,CAV6B,CAe7B;;AACA,QAAKN,eAAe,GAAGG,wBAAvB,EAAkD;AACjDV,MAAAA,aAAa,CAACS,OAAd,CAAsBK,QAAtB,CAAgC;AAC/BC,QAAAA,CAAC,EAAER,eAD4B;AAE/BS,QAAAA,QAAQ,EAAE;AAFqB,OAAhC;AAIA;AACA;;AAED,UAAMC,oBAAoB,GAAGN,IAAI,CAACO,GAAL,CAC5BP,IAAI,CAACQ,KAAL,CACCpB,sBAAsB,CAACU,OAAvB,CAA+BW,MAA/B,IACGvB,cAAc,GAAGD,iBAAjB,GAAqCY,WADxC,CADD,CAD4B,CAA7B;AAMA,UAAMa,SAAS,GAAGV,IAAI,CAACQ,KAAL,CACjBT,wBAAwB,GAAGO,oBADV,CAAlB;AAIA,UAAMK,UAAU,GACff,eAAe,GAAGR,sBAAsB,CAACU,OAAvB,CAA+BM,CAA/B,GAAmCX,MADtD,CAlC6B,CAqC7B;;AACA,QAAKG,eAAe,GAAGc,SAAlB,IAA+B,CAAEC,UAAtC,EAAmD;AAClDtB,MAAAA,aAAa,CAACS,OAAd,CAAsBK,QAAtB,CAAgC;AAC/BC,QAAAA,CAAC,EAAER,eAAe,GAAGU,oBADU;AAE/BD,QAAAA,QAAQ,EAAE;AAFqB,OAAhC;AAIA;AACD,GA7CyC,EA8C1C,CACCpB,iBADD,EAECQ,MAFD,EAGCP,cAHD,EAICC,aAJD,EAKCC,sBALD,EAMCC,aAND,EAOCC,iBAPD,CA9C0C,CAA3C;AAyDA,SAAO,CAAEI,uBAAF,CAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\n/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\n\nconst DEFAULT_FONT_SIZE = 16;\n\n/** @typedef {import('@wordpress/element').RefObject} RefObject */\n/** @typedef {import('react-native-reanimated').SharedValue} SharedValue */\n/**\n * Hook to scroll to the currently focused TextInput\n * depending on where the caret is placed taking into\n * account the Keyboard and the Header.\n *\n * @param {number} extraScrollHeight Extra space to not overlap the content.\n * @param {number} keyboardOffset Keyboard space offset.\n * @param {boolean} scrollEnabled Whether the scroll is enabled or not.\n * @param {RefObject} scrollViewMeasurements ScrollView Layout measurements.\n * @param {RefObject} scrollViewRef ScrollView reference.\n * @param {SharedValue} scrollViewYOffset Current offset position of the ScrollView.\n * @return {Function[]} Function to scroll to the current TextInput's offset.\n */\nexport default function useScrollToTextInput(\n\textraScrollHeight,\n\tkeyboardOffset,\n\tscrollEnabled,\n\tscrollViewMeasurements,\n\tscrollViewRef,\n\tscrollViewYOffset\n) {\n\tconst { top, bottom } = useSafeAreaInsets();\n\tconst insets = top + bottom;\n\n\t/**\n\t * Function to scroll to the current TextInput's offset.\n\t *\n\t * @param {Object} caret The caret position data of the currently focused TextInput.\n\t * @param {number} caret.caretHeight The height of the caret.\n\t * @param {number} textInputOffset The offset calculated with the caret's Y coordinate + the\n\t * TextInput's Y coord or height value.\n\t */\n\tconst scrollToTextInputOffset = useCallback(\n\t\t( caret, textInputOffset ) => {\n\t\t\tconst { caretHeight = DEFAULT_FONT_SIZE } = caret ?? {};\n\n\t\t\tif (\n\t\t\t\t! scrollViewRef.current ||\n\t\t\t\t! scrollEnabled ||\n\t\t\t\t! scrollViewMeasurements.current\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst currentScrollViewYOffset = Math.max(\n\t\t\t\t0,\n\t\t\t\tscrollViewYOffset.value\n\t\t\t);\n\n\t\t\t// Scroll up.\n\t\t\tif ( textInputOffset < currentScrollViewYOffset ) {\n\t\t\t\tscrollViewRef.current.scrollTo( {\n\t\t\t\t\ty: textInputOffset,\n\t\t\t\t\tanimated: true,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst availableScreenSpace = Math.abs(\n\t\t\t\tMath.floor(\n\t\t\t\t\tscrollViewMeasurements.current.height -\n\t\t\t\t\t\t( keyboardOffset + extraScrollHeight + caretHeight )\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst maxOffset = Math.floor(\n\t\t\t\tcurrentScrollViewYOffset + availableScreenSpace\n\t\t\t);\n\n\t\t\tconst isAtTheTop =\n\t\t\t\ttextInputOffset < scrollViewMeasurements.current.y + insets;\n\n\t\t\t// Scroll down.\n\t\t\tif ( textInputOffset > maxOffset && ! isAtTheTop ) {\n\t\t\t\tscrollViewRef.current.scrollTo( {\n\t\t\t\t\ty: textInputOffset - availableScreenSpace,\n\t\t\t\t\tanimated: true,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\textraScrollHeight,\n\t\t\tinsets,\n\t\t\tkeyboardOffset,\n\t\t\tscrollEnabled,\n\t\t\tscrollViewMeasurements,\n\t\t\tscrollViewRef,\n\t\t\tscrollViewYOffset,\n\t\t]\n\t);\n\n\treturn [ scrollToTextInputOffset ];\n}\n"]}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import RCTAztecView from '@wordpress/react-native-aztec';
5
+ import { useCallback, useEffect, useState } from '@wordpress/element';
6
+ /**
7
+ * Hook that listens to caret changes from AztecView TextInputs.
8
+ *
9
+ * @param {boolean} scrollEnabled Whether the scroll is enabled or not.
10
+ * @return {[number]} Current caret's data.
11
+ */
12
+
13
+ export default function useTextInputCaretPosition(scrollEnabled) {
14
+ const [currentCaretData, setCurrentCaretData] = useState();
15
+ const onCaretChange = useCallback(caret => {
16
+ setCurrentCaretData(caret);
17
+ }, []);
18
+ useEffect(() => {
19
+ if (scrollEnabled) {
20
+ RCTAztecView.InputState.addCaretChangeListener(onCaretChange);
21
+ } else {
22
+ RCTAztecView.InputState.removeCaretChangeListener(onCaretChange);
23
+ }
24
+
25
+ return () => {
26
+ if (scrollEnabled) {
27
+ RCTAztecView.InputState.removeCaretChangeListener(onCaretChange);
28
+ }
29
+ };
30
+ }, [scrollEnabled, onCaretChange]);
31
+ return [currentCaretData];
32
+ }
33
+ //# sourceMappingURL=use-text-input-caret-position.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/components/src/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js"],"names":["RCTAztecView","useCallback","useEffect","useState","useTextInputCaretPosition","scrollEnabled","currentCaretData","setCurrentCaretData","onCaretChange","caret","InputState","addCaretChangeListener","removeCaretChangeListener"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,YAAP,MAAyB,+BAAzB;AACA,SAASC,WAAT,EAAsBC,SAAtB,EAAiCC,QAAjC,QAAiD,oBAAjD;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,yBAAT,CAAoCC,aAApC,EAAoD;AAClE,QAAM,CAAEC,gBAAF,EAAoBC,mBAApB,IAA4CJ,QAAQ,EAA1D;AAEA,QAAMK,aAAa,GAAGP,WAAW,CAAIQ,KAAF,IAAa;AAC/CF,IAAAA,mBAAmB,CAAEE,KAAF,CAAnB;AACA,GAFgC,EAE9B,EAF8B,CAAjC;AAIAP,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAKG,aAAL,EAAqB;AACpBL,MAAAA,YAAY,CAACU,UAAb,CAAwBC,sBAAxB,CAAgDH,aAAhD;AACA,KAFD,MAEO;AACNR,MAAAA,YAAY,CAACU,UAAb,CAAwBE,yBAAxB,CAAmDJ,aAAnD;AACA;;AAED,WAAO,MAAM;AACZ,UAAKH,aAAL,EAAqB;AACpBL,QAAAA,YAAY,CAACU,UAAb,CAAwBE,yBAAxB,CACCJ,aADD;AAGA;AACD,KAND;AAOA,GAdQ,EAcN,CAAEH,aAAF,EAAiBG,aAAjB,CAdM,CAAT;AAeA,SAAO,CAAEF,gBAAF,CAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport RCTAztecView from '@wordpress/react-native-aztec';\nimport { useCallback, useEffect, useState } from '@wordpress/element';\n\n/**\n * Hook that listens to caret changes from AztecView TextInputs.\n *\n * @param {boolean} scrollEnabled Whether the scroll is enabled or not.\n * @return {[number]} Current caret's data.\n */\nexport default function useTextInputCaretPosition( scrollEnabled ) {\n\tconst [ currentCaretData, setCurrentCaretData ] = useState();\n\n\tconst onCaretChange = useCallback( ( caret ) => {\n\t\tsetCurrentCaretData( caret );\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( scrollEnabled ) {\n\t\t\tRCTAztecView.InputState.addCaretChangeListener( onCaretChange );\n\t\t} else {\n\t\t\tRCTAztecView.InputState.removeCaretChangeListener( onCaretChange );\n\t\t}\n\n\t\treturn () => {\n\t\t\tif ( scrollEnabled ) {\n\t\t\t\tRCTAztecView.InputState.removeCaretChangeListener(\n\t\t\t\t\tonCaretChange\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}, [ scrollEnabled, onCaretChange ] );\n\treturn [ currentCaretData ];\n}\n"]}