@wordpress/components 35.0.0 → 35.1.1-next.v.202606191442.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 (434) hide show
  1. package/CHANGELOG.md +47 -1
  2. package/build/alignment-matrix-control/cell.cjs +1 -1
  3. package/build/alignment-matrix-control/cell.cjs.map +2 -2
  4. package/build/alignment-matrix-control/index.cjs +1 -1
  5. package/build/alignment-matrix-control/index.cjs.map +2 -2
  6. package/build/angle-picker-control/angle-circle.cjs +1 -1
  7. package/build/angle-picker-control/angle-circle.cjs.map +2 -2
  8. package/build/angle-picker-control/index.cjs +2 -2
  9. package/build/autocomplete/get-autocomplete-match.cjs.map +1 -1
  10. package/build/autocomplete/index.cjs.map +1 -1
  11. package/build/base-control/styles/base-control-styles.cjs +6 -6
  12. package/build/base-control/styles/base-control-styles.cjs.map +2 -2
  13. package/build/border-control/styles.cjs +17 -14
  14. package/build/border-control/styles.cjs.map +2 -2
  15. package/build/button/index.cjs +3 -7
  16. package/build/button/index.cjs.map +2 -2
  17. package/build/card/card-divider/hook.cjs.map +2 -2
  18. package/build/color-palette/index.cjs +3 -0
  19. package/build/color-palette/index.cjs.map +2 -2
  20. package/build/color-picker/component.cjs.map +1 -1
  21. package/build/custom-gradient-picker/gradient-bar/index.cjs.map +2 -2
  22. package/build/date-time/utils.cjs.map +1 -1
  23. package/build/draggable/index.cjs +1 -1
  24. package/build/draggable/index.cjs.map +2 -2
  25. package/build/external-link/index.cjs +1 -1
  26. package/build/external-link/index.cjs.map +1 -1
  27. package/build/menu/popover.cjs.map +1 -1
  28. package/build/menu/styles.cjs +17 -17
  29. package/build/menu/styles.cjs.map +2 -2
  30. package/build/modal/index.cjs.map +1 -1
  31. package/build/modal/use-modal-exit-animation.cjs +37 -52
  32. package/build/modal/use-modal-exit-animation.cjs.map +2 -2
  33. package/build/navigable-container/container.cjs +15 -21
  34. package/build/navigable-container/container.cjs.map +2 -2
  35. package/build/palette-edit/index.cjs +1 -1
  36. package/build/progress-bar/index.cjs +1 -1
  37. package/build/progress-bar/index.cjs.map +2 -2
  38. package/build/query-controls/index.cjs +2 -2
  39. package/build/query-controls/index.cjs.map +2 -2
  40. package/build/range-control/index.cjs.map +1 -1
  41. package/build/sandbox/index.cjs +7 -1
  42. package/build/sandbox/index.cjs.map +2 -2
  43. package/build/snackbar/index.cjs +1 -1
  44. package/build/spinner/styles.cjs +4 -4
  45. package/build/spinner/styles.cjs.map +2 -2
  46. package/build/tabs/index.cjs +0 -18
  47. package/build/tabs/index.cjs.map +2 -2
  48. package/build/tabs/tablist.cjs +5 -15
  49. package/build/tabs/tablist.cjs.map +2 -2
  50. package/build/tools-panel/styles.cjs +13 -13
  51. package/build/tools-panel/styles.cjs.map +2 -2
  52. package/build/tools-panel/tools-panel/hook.cjs.map +1 -1
  53. package/build/tree-select/index.cjs +1 -1
  54. package/build/tree-select/index.cjs.map +1 -1
  55. package/build/truncate/utils.cjs +1 -1
  56. package/build/truncate/utils.cjs.map +1 -1
  57. package/build/unit-control/utils.cjs +33 -35
  58. package/build/unit-control/utils.cjs.map +2 -2
  59. package/build/utils/colors-values.cjs +12 -12
  60. package/build/utils/colors-values.cjs.map +2 -2
  61. package/build/utils/config-values.cjs +2 -2
  62. package/build/utils/config-values.cjs.map +2 -2
  63. package/build/utils/dropdown-motion.cjs.map +2 -2
  64. package/build/utils/strings.cjs.map +1 -1
  65. package/build-module/alignment-matrix-control/cell.mjs +1 -1
  66. package/build-module/alignment-matrix-control/cell.mjs.map +2 -2
  67. package/build-module/alignment-matrix-control/index.mjs +1 -1
  68. package/build-module/alignment-matrix-control/index.mjs.map +2 -2
  69. package/build-module/angle-picker-control/angle-circle.mjs +1 -1
  70. package/build-module/angle-picker-control/angle-circle.mjs.map +2 -2
  71. package/build-module/angle-picker-control/index.mjs +2 -2
  72. package/build-module/autocomplete/get-autocomplete-match.mjs.map +1 -1
  73. package/build-module/autocomplete/index.mjs.map +1 -1
  74. package/build-module/base-control/styles/base-control-styles.mjs +6 -6
  75. package/build-module/base-control/styles/base-control-styles.mjs.map +2 -2
  76. package/build-module/border-control/styles.mjs +17 -14
  77. package/build-module/border-control/styles.mjs.map +2 -2
  78. package/build-module/button/index.mjs +2 -5
  79. package/build-module/button/index.mjs.map +2 -2
  80. package/build-module/card/card-divider/hook.mjs.map +2 -2
  81. package/build-module/color-palette/index.mjs +3 -0
  82. package/build-module/color-palette/index.mjs.map +2 -2
  83. package/build-module/color-picker/component.mjs.map +1 -1
  84. package/build-module/custom-gradient-picker/gradient-bar/index.mjs.map +2 -2
  85. package/build-module/date-time/utils.mjs.map +1 -1
  86. package/build-module/draggable/index.mjs +1 -1
  87. package/build-module/draggable/index.mjs.map +2 -2
  88. package/build-module/external-link/index.mjs +1 -1
  89. package/build-module/external-link/index.mjs.map +1 -1
  90. package/build-module/menu/popover.mjs.map +1 -1
  91. package/build-module/menu/styles.mjs +17 -17
  92. package/build-module/menu/styles.mjs.map +2 -2
  93. package/build-module/modal/index.mjs.map +1 -1
  94. package/build-module/modal/use-modal-exit-animation.mjs +37 -52
  95. package/build-module/modal/use-modal-exit-animation.mjs.map +2 -2
  96. package/build-module/navigable-container/container.mjs +16 -22
  97. package/build-module/navigable-container/container.mjs.map +2 -2
  98. package/build-module/palette-edit/index.mjs +1 -1
  99. package/build-module/progress-bar/index.mjs +1 -1
  100. package/build-module/progress-bar/index.mjs.map +2 -2
  101. package/build-module/query-controls/index.mjs +2 -2
  102. package/build-module/query-controls/index.mjs.map +2 -2
  103. package/build-module/range-control/index.mjs.map +1 -1
  104. package/build-module/sandbox/index.mjs +3 -1
  105. package/build-module/sandbox/index.mjs.map +2 -2
  106. package/build-module/snackbar/index.mjs +1 -1
  107. package/build-module/spinner/styles.mjs +4 -4
  108. package/build-module/spinner/styles.mjs.map +2 -2
  109. package/build-module/tabs/index.mjs +1 -19
  110. package/build-module/tabs/index.mjs.map +2 -2
  111. package/build-module/tabs/tablist.mjs +5 -15
  112. package/build-module/tabs/tablist.mjs.map +2 -2
  113. package/build-module/tools-panel/styles.mjs +13 -13
  114. package/build-module/tools-panel/styles.mjs.map +2 -2
  115. package/build-module/tools-panel/tools-panel/hook.mjs.map +1 -1
  116. package/build-module/tree-select/index.mjs +1 -1
  117. package/build-module/tree-select/index.mjs.map +1 -1
  118. package/build-module/truncate/utils.mjs +1 -1
  119. package/build-module/truncate/utils.mjs.map +1 -1
  120. package/build-module/unit-control/utils.mjs +33 -35
  121. package/build-module/unit-control/utils.mjs.map +2 -2
  122. package/build-module/utils/colors-values.mjs +12 -12
  123. package/build-module/utils/colors-values.mjs.map +2 -2
  124. package/build-module/utils/config-values.mjs +2 -2
  125. package/build-module/utils/config-values.mjs.map +2 -2
  126. package/build-module/utils/dropdown-motion.mjs.map +2 -2
  127. package/build-module/utils/strings.mjs.map +1 -1
  128. package/build-style/style-rtl.css +122 -91
  129. package/build-style/style.css +122 -91
  130. package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
  131. package/build-types/border-control/styles.d.ts.map +1 -1
  132. package/build-types/button/index.d.ts +0 -2
  133. package/build-types/button/index.d.ts.map +1 -1
  134. package/build-types/card/card-divider/hook.d.ts +1 -274
  135. package/build-types/card/card-divider/hook.d.ts.map +1 -1
  136. package/build-types/color-palette/index.d.ts.map +1 -1
  137. package/build-types/composite/stories/index.story.d.ts.map +1 -1
  138. package/build-types/confirm-dialog/stories/index.story.d.ts.map +1 -1
  139. package/build-types/custom-gradient-picker/gradient-bar/index.d.ts.map +1 -1
  140. package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
  141. package/build-types/menu/styles.d.ts.map +1 -1
  142. package/build-types/menu/types.d.ts +2 -2
  143. package/build-types/navigable-container/container.d.ts.map +1 -1
  144. package/build-types/sandbox/index.d.ts +15 -0
  145. package/build-types/sandbox/index.d.ts.map +1 -1
  146. package/build-types/spinner/styles.d.ts.map +1 -1
  147. package/build-types/tabs/index.d.ts.map +1 -1
  148. package/build-types/tabs/tablist.d.ts.map +1 -1
  149. package/build-types/tools-panel/styles.d.ts.map +1 -1
  150. package/build-types/unit-control/utils.d.ts.map +1 -1
  151. package/build-types/utils/colors-values.d.ts.map +1 -1
  152. package/build-types/utils/dropdown-motion.d.ts.map +1 -1
  153. package/build-types/validated-form-controls/components/combobox-control.d.ts +1 -1
  154. package/package.json +44 -36
  155. package/src/angle-picker-control/angle-circle.tsx +3 -3
  156. package/src/base-control/README.md +2 -2
  157. package/src/base-control/styles/base-control-styles.ts +1 -0
  158. package/src/border-control/styles.ts +1 -0
  159. package/src/button/index.tsx +2 -4
  160. package/src/button/style.scss +3 -3
  161. package/src/card/card/README.md +4 -4
  162. package/src/card/card-divider/hook.ts +5 -1
  163. package/src/card/test/__snapshots__/index.tsx.snap +3 -3
  164. package/src/checkbox-control/README.md +1 -1
  165. package/src/clipboard-button/README.md +4 -4
  166. package/src/color-palette/index.tsx +5 -0
  167. package/src/color-palette/test/index.tsx +30 -0
  168. package/src/combobox-control/README.md +1 -1
  169. package/src/composite/stories/index.story.tsx +5 -0
  170. package/src/confirm-dialog/README.md +1 -1
  171. package/src/confirm-dialog/stories/index.story.tsx +1 -0
  172. package/src/custom-gradient-picker/gradient-bar/index.tsx +1 -1
  173. package/src/dropdown/stories/index.story.tsx +5 -0
  174. package/src/dropdown-menu/style.scss +1 -1
  175. package/src/external-link/style.scss +4 -4
  176. package/src/flex/flex/README.md +1 -1
  177. package/src/form-toggle/style.scss +1 -1
  178. package/src/heading/test/__snapshots__/index.tsx.snap +4 -4
  179. package/src/menu/README.md +2 -2
  180. package/src/menu/styles.ts +2 -0
  181. package/src/menu/test/index.tsx +120 -87
  182. package/src/menu/types.ts +2 -2
  183. package/src/modal/style.scss +1 -1
  184. package/src/modal/use-modal-exit-animation.ts +2 -2
  185. package/src/navigable-container/container.tsx +22 -30
  186. package/src/notice/style.scss +11 -13
  187. package/src/panel/README.md +2 -0
  188. package/src/panel/stories/index.story.tsx +2 -2
  189. package/src/panel/style.scss +1 -1
  190. package/src/popover/README.md +1 -1
  191. package/src/radio-control/style.scss +1 -1
  192. package/src/sandbox/index.tsx +18 -1
  193. package/src/sandbox/test/index.tsx +44 -1
  194. package/src/scrollable/README.md +1 -1
  195. package/src/spinner/styles.ts +1 -0
  196. package/src/tab-panel/style.scss +6 -6
  197. package/src/tabs/index.tsx +1 -26
  198. package/src/tabs/tablist.tsx +5 -21
  199. package/src/tabs/test/index.tsx +16 -27
  200. package/src/text/test/__snapshots__/index.tsx.snap +3 -3
  201. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +34 -26
  202. package/src/toolbar/toolbar-group/style.scss +2 -2
  203. package/src/tools-panel/styles.ts +1 -1
  204. package/src/tooltip/stories/index.story.tsx +2 -2
  205. package/src/tooltip/style.scss +1 -1
  206. package/src/unit-control/utils.ts +33 -52
  207. package/src/utils/colors-values.js +36 -16
  208. package/src/utils/config-values.js +2 -2
  209. package/src/utils/dropdown-motion.ts +6 -4
  210. package/src/utils/theme-variables.scss +18 -13
  211. package/build/mobile/image/constants.cjs +0 -34
  212. package/build/mobile/image/constants.cjs.map +0 -7
  213. package/build-module/mobile/image/constants.mjs +0 -9
  214. package/build-module/mobile/image/constants.mjs.map +0 -7
  215. package/build-types/mobile/image/constants.d.ts +0 -5
  216. package/build-types/mobile/image/constants.d.ts.map +0 -1
  217. package/src/autocomplete/autocompleter-ui.native.js +0 -211
  218. package/src/autocomplete/background-view.android.js +0 -25
  219. package/src/autocomplete/background-view.ios.js +0 -23
  220. package/src/autocomplete/style.android.scss +0 -7
  221. package/src/autocomplete/style.native.scss +0 -74
  222. package/src/base-control/index.native.js +0 -14
  223. package/src/button/index.native.js +0 -236
  224. package/src/button/style.native.scss +0 -9
  225. package/src/color-control/index.native.js +0 -24
  226. package/src/color-indicator/index.native.js +0 -80
  227. package/src/color-indicator/style.native.scss +0 -51
  228. package/src/color-palette/index.native.js +0 -360
  229. package/src/color-palette/style.native.scss +0 -49
  230. package/src/color-picker/hsv-color-picker.native.js +0 -88
  231. package/src/color-picker/hue-picker.native.js +0 -198
  232. package/src/color-picker/index.native.js +0 -215
  233. package/src/color-picker/saturation-picker.native.js +0 -167
  234. package/src/color-picker/style.native.scss +0 -87
  235. package/src/custom-gradient-picker/index.native.js +0 -110
  236. package/src/custom-gradient-picker/style.native.scss +0 -3
  237. package/src/dashicon/index.native.js +0 -18
  238. package/src/disabled/index.native.js +0 -10
  239. package/src/draggable/index.native.js +0 -234
  240. package/src/draggable/style.native.scss +0 -3
  241. package/src/draggable/test/index.native.js +0 -138
  242. package/src/dropdown/index.native.js +0 -59
  243. package/src/dropdown-menu/index.native.js +0 -152
  244. package/src/external-link/index.native.js +0 -25
  245. package/src/focal-point-picker/focal-point.native.js +0 -30
  246. package/src/focal-point-picker/index.native.js +0 -281
  247. package/src/focal-point-picker/tooltip/index.native.js +0 -144
  248. package/src/focal-point-picker/tooltip/style.native.scss +0 -42
  249. package/src/font-size-picker/index.native.js +0 -190
  250. package/src/font-size-picker/style.native.scss +0 -6
  251. package/src/footer-message-control/index.native.js +0 -14
  252. package/src/higher-order/with-focus-outside/index.native.js +0 -38
  253. package/src/index.native.js +0 -134
  254. package/src/keyboard-shortcuts/index.native.js +0 -2
  255. package/src/mobile/README.md +0 -3
  256. package/src/mobile/autocompletion-items.native.js +0 -11
  257. package/src/mobile/badge/README.md +0 -31
  258. package/src/mobile/badge/index.native.js +0 -27
  259. package/src/mobile/badge/style.scss +0 -18
  260. package/src/mobile/bottom-sheet/borderStyles.android.scss +0 -8
  261. package/src/mobile/bottom-sheet/borderStyles.ios.scss +0 -9
  262. package/src/mobile/bottom-sheet/bottom-sheet-context.native.js +0 -40
  263. package/src/mobile/bottom-sheet/bottom-sheet-navigation/README.md +0 -101
  264. package/src/mobile/bottom-sheet/bottom-sheet-navigation/bottom-sheet-navigation-context.native.js +0 -16
  265. package/src/mobile/bottom-sheet/bottom-sheet-navigation/navigation-container.native.js +0 -193
  266. package/src/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +0 -146
  267. package/src/mobile/bottom-sheet/bottom-sheet-navigation/styles.native.scss +0 -11
  268. package/src/mobile/bottom-sheet/bottom-sheet-navigation/test/navigation-container.native.js +0 -197
  269. package/src/mobile/bottom-sheet/button.native.js +0 -19
  270. package/src/mobile/bottom-sheet/cell.native.js +0 -464
  271. package/src/mobile/bottom-sheet/cellStyles.android.scss +0 -15
  272. package/src/mobile/bottom-sheet/cellStyles.ios.scss +0 -19
  273. package/src/mobile/bottom-sheet/chevron-back.native.js +0 -18
  274. package/src/mobile/bottom-sheet/color-cell.native.js +0 -35
  275. package/src/mobile/bottom-sheet/cycle-picker-cell.native.js +0 -31
  276. package/src/mobile/bottom-sheet/footer-message-cell.native.js +0 -23
  277. package/src/mobile/bottom-sheet/footer-message-link/README.md +0 -37
  278. package/src/mobile/bottom-sheet/footer-message-link/footer-message-link.native.js +0 -26
  279. package/src/mobile/bottom-sheet/footer-message-link/styles.native.scss +0 -7
  280. package/src/mobile/bottom-sheet/index.native.js +0 -646
  281. package/src/mobile/bottom-sheet/keyboard-avoiding-view.native.js +0 -125
  282. package/src/mobile/bottom-sheet/link-cell.native.js +0 -35
  283. package/src/mobile/bottom-sheet/link-suggestion-item-cell.native.js +0 -92
  284. package/src/mobile/bottom-sheet/link-suggestion-styles.native.scss +0 -27
  285. package/src/mobile/bottom-sheet/lock-icon/index.native.js +0 -19
  286. package/src/mobile/bottom-sheet/lock-icon/styles.native.scss +0 -8
  287. package/src/mobile/bottom-sheet/nav-bar/README.md +0 -63
  288. package/src/mobile/bottom-sheet/nav-bar/action-button.native.js +0 -30
  289. package/src/mobile/bottom-sheet/nav-bar/apply-button.native.js +0 -53
  290. package/src/mobile/bottom-sheet/nav-bar/back-button.native.js +0 -94
  291. package/src/mobile/bottom-sheet/nav-bar/heading.native.js +0 -33
  292. package/src/mobile/bottom-sheet/nav-bar/index.native.js +0 -23
  293. package/src/mobile/bottom-sheet/nav-bar/styles.native.scss +0 -69
  294. package/src/mobile/bottom-sheet/picker-cell.native.js +0 -40
  295. package/src/mobile/bottom-sheet/radio-cell.native.js +0 -39
  296. package/src/mobile/bottom-sheet/range-cell.native.js +0 -274
  297. package/src/mobile/bottom-sheet/range-cell.native.scss +0 -40
  298. package/src/mobile/bottom-sheet/range-text-input.native.js +0 -248
  299. package/src/mobile/bottom-sheet/ripple.native.js +0 -83
  300. package/src/mobile/bottom-sheet/ripple.native.scss +0 -11
  301. package/src/mobile/bottom-sheet/stepper-cell/index.native.js +0 -264
  302. package/src/mobile/bottom-sheet/stepper-cell/stepper.android.js +0 -78
  303. package/src/mobile/bottom-sheet/stepper-cell/stepper.ios.js +0 -64
  304. package/src/mobile/bottom-sheet/stepper-cell/style.native.scss +0 -89
  305. package/src/mobile/bottom-sheet/styles.native.scss +0 -333
  306. package/src/mobile/bottom-sheet/sub-sheet/README.md +0 -90
  307. package/src/mobile/bottom-sheet/sub-sheet/index.native.js +0 -49
  308. package/src/mobile/bottom-sheet/switch-cell.native.js +0 -75
  309. package/src/mobile/bottom-sheet/test/index.native.js +0 -24
  310. package/src/mobile/bottom-sheet/test/range-cell.native.js +0 -73
  311. package/src/mobile/bottom-sheet-select-control/README.md +0 -97
  312. package/src/mobile/bottom-sheet-select-control/index.native.js +0 -124
  313. package/src/mobile/bottom-sheet-select-control/style.native.scss +0 -3
  314. package/src/mobile/bottom-sheet-text-control/README.md +0 -98
  315. package/src/mobile/bottom-sheet-text-control/index.native.js +0 -104
  316. package/src/mobile/bottom-sheet-text-control/styles.scss +0 -25
  317. package/src/mobile/clipboard/index.native.js +0 -18
  318. package/src/mobile/color-settings/gradient-picker-screen.native.js +0 -37
  319. package/src/mobile/color-settings/index.native.js +0 -88
  320. package/src/mobile/color-settings/palette.screen.native.js +0 -232
  321. package/src/mobile/color-settings/picker-screen.native.js +0 -60
  322. package/src/mobile/color-settings/style.native.scss +0 -62
  323. package/src/mobile/color-settings/utils.native.js +0 -36
  324. package/src/mobile/cycle-select-control/README.md +0 -3
  325. package/src/mobile/cycle-select-control/index.native.js +0 -39
  326. package/src/mobile/dashicons/index.native.js +0 -22
  327. package/src/mobile/focal-point-settings-panel/index.native.js +0 -84
  328. package/src/mobile/focal-point-settings-panel/styles.native.scss +0 -3
  329. package/src/mobile/gradient/index.native.js +0 -188
  330. package/src/mobile/gradient/style.native.scss +0 -8
  331. package/src/mobile/gradient/test/index.native.js +0 -114
  332. package/src/mobile/gridicons/index.native.js +0 -39
  333. package/src/mobile/html-text-input/index.native.js +0 -169
  334. package/src/mobile/html-text-input/style.android.scss +0 -8
  335. package/src/mobile/html-text-input/style.ios.scss +0 -10
  336. package/src/mobile/html-text-input/style.scss +0 -45
  337. package/src/mobile/html-text-input/test/__snapshots__/index.native.js.snap +0 -48
  338. package/src/mobile/html-text-input/test/index.native.js +0 -118
  339. package/src/mobile/image/constants.js +0 -1
  340. package/src/mobile/image/icon-customize.native.js +0 -10
  341. package/src/mobile/image/icon-retry.native.js +0 -11
  342. package/src/mobile/image/image-editing-button.native.js +0 -63
  343. package/src/mobile/image/index.native.js +0 -401
  344. package/src/mobile/image/style.native.scss +0 -179
  345. package/src/mobile/image/utils/index.native.js +0 -58
  346. package/src/mobile/keyboard-avoiding-view/index.android.js +0 -8
  347. package/src/mobile/keyboard-avoiding-view/index.ios.js +0 -143
  348. package/src/mobile/keyboard-avoiding-view/styles.native.scss +0 -9
  349. package/src/mobile/keyboard-aware-flat-list/index.android.js +0 -81
  350. package/src/mobile/keyboard-aware-flat-list/index.ios.js +0 -147
  351. package/src/mobile/keyboard-aware-flat-list/shared.native.js +0 -26
  352. package/src/mobile/keyboard-aware-flat-list/styles.native.scss +0 -8
  353. package/src/mobile/keyboard-aware-flat-list/test/use-keyboard-offset.native.js +0 -203
  354. package/src/mobile/keyboard-aware-flat-list/test/use-scroll-to-section.native.js +0 -142
  355. package/src/mobile/keyboard-aware-flat-list/test/use-scroll.native.js +0 -71
  356. package/src/mobile/keyboard-aware-flat-list/test/use-text-input-caret-position.native.js +0 -82
  357. package/src/mobile/keyboard-aware-flat-list/test/use-text-input-offset.native.js +0 -147
  358. package/src/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +0 -87
  359. package/src/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +0 -41
  360. package/src/mobile/keyboard-aware-flat-list/use-scroll-to-section.native.js +0 -100
  361. package/src/mobile/keyboard-aware-flat-list/use-scroll.native.js +0 -100
  362. package/src/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +0 -36
  363. package/src/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +0 -54
  364. package/src/mobile/layout-animation/index.native.js +0 -16
  365. package/src/mobile/link-picker/index.native.js +0 -160
  366. package/src/mobile/link-picker/link-picker-results.native.js +0 -129
  367. package/src/mobile/link-picker/link-picker-screen.native.js +0 -60
  368. package/src/mobile/link-picker/styles.native.scss +0 -45
  369. package/src/mobile/link-picker/test/performance/index.native.js +0 -35
  370. package/src/mobile/link-settings/index.native.js +0 -332
  371. package/src/mobile/link-settings/link-rel.native.js +0 -10
  372. package/src/mobile/link-settings/link-settings-navigation.native.js +0 -50
  373. package/src/mobile/link-settings/link-settings-screen.native.js +0 -44
  374. package/src/mobile/link-settings/style.native.scss +0 -4
  375. package/src/mobile/link-settings/test/edit.native.js +0 -325
  376. package/src/mobile/link-settings/test/link-settings-navigation.native.js +0 -94
  377. package/src/mobile/media-edit/index.native.js +0 -125
  378. package/src/mobile/picker/index.android.js +0 -104
  379. package/src/mobile/picker/index.ios.js +0 -96
  380. package/src/mobile/picker/styles.native.scss +0 -29
  381. package/src/mobile/segmented-control/index.native.js +0 -186
  382. package/src/mobile/segmented-control/style.native.scss +0 -99
  383. package/src/mobile/utils/alignments.native.js +0 -78
  384. package/src/mobile/utils/get-px-from-css-unit.native.js +0 -329
  385. package/src/mobile/utils/index.native.js +0 -12
  386. package/src/mobile/utils/test/get-px-from-css-unit.native.js +0 -172
  387. package/src/mobile/utils/test/index.native.js +0 -134
  388. package/src/mobile/utils/use-is-floating-keyboard.native.js +0 -31
  389. package/src/mobile/utils/use-unit-converter-to-mobile.native.js +0 -90
  390. package/src/notice/index.native.js +0 -123
  391. package/src/notice/list.native.js +0 -55
  392. package/src/notice/style.native.scss +0 -60
  393. package/src/panel/actions.native.js +0 -46
  394. package/src/panel/actions.native.scss +0 -12
  395. package/src/panel/body.native.js +0 -29
  396. package/src/panel/body.native.scss +0 -11
  397. package/src/panel/bottom-separator-cover.native.js +0 -27
  398. package/src/panel/bottom-separator-cover.native.scss +0 -9
  399. package/src/private-apis.native.js +0 -13
  400. package/src/query-controls/index.native.js +0 -103
  401. package/src/radio-control/index.native.js +0 -24
  402. package/src/range-control/index.native.js +0 -73
  403. package/src/resizable-box/index.native.js +0 -32
  404. package/src/resizable-box/style.native.scss +0 -14
  405. package/src/sandbox/index.native.js +0 -392
  406. package/src/sandbox/style.native.scss +0 -7
  407. package/src/search-control/index.native.js +0 -274
  408. package/src/search-control/platform-style.android.scss +0 -57
  409. package/src/search-control/platform-style.ios.scss +0 -43
  410. package/src/search-control/style.native.scss +0 -63
  411. package/src/select-control/index.native.js +0 -41
  412. package/src/slot-fill/index.native.js +0 -25
  413. package/src/spinner/index.native.js +0 -22
  414. package/src/spinner/style.native.scss +0 -4
  415. package/src/style-provider/index.native.js +0 -3
  416. package/src/text/index.native.js +0 -13
  417. package/src/text/styles/emotion-css.native.js +0 -6
  418. package/src/text/styles/font-family.native.js +0 -1
  419. package/src/text/styles/text-mixins.native.js +0 -163
  420. package/src/text-control/index.native.js +0 -41
  421. package/src/textarea-control/index.native.js +0 -26
  422. package/src/toggle-control/index.native.js +0 -31
  423. package/src/toolbar/toolbar/style.native.scss +0 -11
  424. package/src/toolbar/toolbar/toolbar-container.native.js +0 -8
  425. package/src/toolbar/toolbar-button/toolbar-button-container.native.js +0 -8
  426. package/src/toolbar/toolbar-group/style.native.scss +0 -10
  427. package/src/toolbar/toolbar-group/toolbar-group-collapsed.native.js +0 -36
  428. package/src/toolbar/toolbar-group/toolbar-group-container.native.js +0 -26
  429. package/src/toolbar/toolbar-item/index.native.js +0 -17
  430. package/src/tooltip/index.native.js +0 -292
  431. package/src/tooltip/style.native.scss +0 -39
  432. package/src/tooltip/test/index.native.js +0 -98
  433. package/src/unit-control/index.native.js +0 -202
  434. package/src/unit-control/style.native.scss +0 -19
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { View } from 'react-native';
5
- /**
6
- * WordPress dependencies
7
- */
8
- import { withPreferredColorScheme } from '@wordpress/compose';
9
- /**
10
- * Internal dependencies
11
- */
12
- import styles from './style.scss';
13
-
14
- function ResizableBox( props ) {
15
- const { size, showHandle = true, getStylesFromColorScheme } = props;
16
- const { height } = size;
17
- const defaultStyle = getStylesFromColorScheme(
18
- styles.staticSpacer,
19
- styles.staticDarkSpacer
20
- );
21
- return (
22
- <View
23
- style={ [
24
- defaultStyle,
25
- showHandle && styles.selectedSpacer,
26
- { height },
27
- ] }
28
- ></View>
29
- );
30
- }
31
-
32
- export default withPreferredColorScheme( ResizableBox );
@@ -1,14 +0,0 @@
1
- .staticSpacer {
2
- height: 20px;
3
- background-color: transparent;
4
- border: $border-width dashed $light-gray-500;
5
- border-radius: 1px;
6
- }
7
-
8
- .staticDarkSpacer {
9
- border: $border-width dashed rgba($color: $light-gray-500, $alpha: 0.3);
10
- }
11
-
12
- .selectedSpacer {
13
- border: $border-width * 2 solid $blue-30;
14
- }
@@ -1,392 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { Dimensions, StyleSheet } from 'react-native';
5
- import { WebView } from 'react-native-webview';
6
-
7
- /**
8
- * WordPress dependencies
9
- */
10
- import {
11
- Platform,
12
- renderToString,
13
- memo,
14
- useRef,
15
- useState,
16
- useEffect,
17
- forwardRef,
18
- useCallback,
19
- } from '@wordpress/element';
20
- import { usePreferredColorScheme } from '@wordpress/compose';
21
-
22
- /**
23
- * Internal dependencies
24
- */
25
- import sandboxStyles from './style.scss';
26
-
27
- const observeAndResizeJS = `
28
- (function() {
29
- const { MutationObserver } = window;
30
-
31
- if ( ! MutationObserver || ! document.body || ! window.parent ) {
32
- return;
33
- }
34
-
35
- function sendResize() {
36
- const clientBoundingRect = document.body.getBoundingClientRect();
37
-
38
- // The function postMessage is exposed by the react-native-webview library
39
- // to communicate between React Native and the WebView, in this case,
40
- // we use it for notifying resize changes.
41
- window.ReactNativeWebView.postMessage(
42
- JSON.stringify( {
43
- action: 'resize',
44
- width: clientBoundingRect.width,
45
- height: clientBoundingRect.height,
46
- } )
47
- );
48
- }
49
-
50
- const observer = new MutationObserver( sendResize );
51
- observer.observe( document.body, {
52
- attributes: true,
53
- attributeOldValue: false,
54
- characterData: true,
55
- characterDataOldValue: false,
56
- childList: true,
57
- subtree: true,
58
- } );
59
-
60
- window.addEventListener( 'load', sendResize, true );
61
-
62
- // Hack: Remove viewport unit styles, as these are relative
63
- // the iframe root and interfere with our mechanism for
64
- // determining the unconstrained page bounds.
65
- function removeViewportStyles( ruleOrNode ) {
66
- if ( ruleOrNode.style ) {
67
- [ 'width', 'height', 'minHeight', 'maxHeight' ].forEach( function (
68
- style
69
- ) {
70
- if (
71
- /^\\d+(vw|vh|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)$/.test( ruleOrNode.style[ style ] )
72
- ) {
73
- ruleOrNode.style[ style ] = '';
74
- }
75
- } );
76
- }
77
- }
78
-
79
- Array.prototype.forEach.call(
80
- document.querySelectorAll( '[style]' ),
81
- removeViewportStyles
82
- );
83
- Array.prototype.forEach.call(
84
- document.styleSheets,
85
- function ( stylesheet ) {
86
- Array.prototype.forEach.call(
87
- stylesheet.cssRules || stylesheet.rules,
88
- removeViewportStyles
89
- );
90
- }
91
- );
92
-
93
- document.body.style.position = 'absolute';
94
- document.body.style.width = '100%';
95
- document.body.setAttribute( 'data-resizable-iframe-connected', '' );
96
-
97
- sendResize();
98
-
99
- // Resize events can change the width of elements with 100% width, but we don't
100
- // get an DOM mutations for that, so do the resize when the window is resized, too.
101
- window.addEventListener( 'resize', sendResize, true );
102
- window.addEventListener( 'orientationchange', sendResize, true );
103
- })();
104
- `;
105
-
106
- const style = `
107
- body {
108
- margin: 0;
109
- }
110
- html,
111
- body,
112
- body > div,
113
- body > div iframe {
114
- width: 100%;
115
- }
116
- body > div > * {
117
- margin-top: 0 !important; /* Has to have !important to override inline styles. */
118
- margin-bottom: 0 !important;
119
- }
120
-
121
- .wp-block-embed__wrapper {
122
- position: relative;
123
- }
124
-
125
- body.wp-has-aspect-ratio > div iframe {
126
- height: 100%;
127
- overflow: hidden; /* If it has an aspect ratio, it shouldn't scroll. */
128
- }
129
-
130
- /**
131
- * Add responsiveness to embeds with aspect ratios.
132
- *
133
- * These styles have been copied from the web version (https://github.com/WordPress/gutenberg/blob/7901895ca20cf61e402925e31571d659dab64721/packages/block-library/src/embed/style.scss#L42-L89) and
134
- * adapted for the native version.
135
- */
136
- .wp-has-aspect-ratio.wp-block-embed__wrapper::before {
137
- content: "";
138
- display: block;
139
- padding-top: 50%; // Default to 2:1 aspect ratio.
140
- }
141
- .wp-has-aspect-ratio iframe {
142
- position: absolute;
143
- top: 0;
144
- right: 0;
145
- bottom: 0;
146
- left: 0;
147
- height: 100%;
148
- width: 100%;
149
- }
150
- .wp-embed-aspect-21-9.wp-block-embed__wrapper::before {
151
- padding-top: 42.85%; // 9 / 21 * 100
152
- }
153
- .wp-embed-aspect-18-9.wp-block-embed__wrapper::before {
154
- padding-top: 50%; // 9 / 18 * 100
155
- }
156
- .wp-embed-aspect-16-9.wp-block-embed__wrapper::before {
157
- padding-top: 56.25%; // 9 / 16 * 100
158
- }
159
- .wp-embed-aspect-4-3.wp-block-embed__wrapper::before {
160
- padding-top: 75%; // 3 / 4 * 100
161
- }
162
- .wp-embed-aspect-1-1.wp-block-embed__wrapper::before {
163
- padding-top: 100%; // 1 / 1 * 100
164
- }
165
- .wp-embed-aspect-9-16.wp-block-embed__wrapper::before {
166
- padding-top: 177.77%; // 16 / 9 * 100
167
- }
168
- .wp-embed-aspect-1-2.wp-block-embed__wrapper::before {
169
- padding-top: 200%; // 2 / 1 * 100
170
- }
171
- `;
172
-
173
- const EMPTY_ARRAY = [];
174
-
175
- const Sandbox = forwardRef( function UnforwardedSandbox(
176
- {
177
- containerStyle,
178
- customJS,
179
- html = '',
180
- lang = 'en',
181
- providerUrl = '',
182
- scripts = EMPTY_ARRAY,
183
- styles = EMPTY_ARRAY,
184
- title = '',
185
- type,
186
- url,
187
- onWindowEvents = {},
188
- viewportProps = '',
189
- onLoadEnd = () => {},
190
- testID,
191
- },
192
- ref
193
- ) {
194
- const colorScheme = usePreferredColorScheme();
195
- const [ height, setHeight ] = useState( 0 );
196
- const [ contentHtml, setContentHtml ] = useState( getHtmlDoc() );
197
-
198
- const windowSize = Dimensions.get( 'window' );
199
- const [ isLandscape, setIsLandscape ] = useState(
200
- windowSize.width >= windowSize.height
201
- );
202
- const wasLandscape = useRef( isLandscape );
203
- // On Android, we need to recreate the WebView on any of the following actions, otherwise it disappears:
204
- // - Device rotation
205
- // - Light/dark mode changes
206
- // For this purpose, the key prop used in the WebView will be updated with the value of the actions.
207
- const key = Platform.select( {
208
- android: `${ url }-${
209
- isLandscape ? 'landscape' : 'portrait'
210
- }-${ colorScheme }`,
211
- ios: url,
212
- } );
213
-
214
- function getHtmlDoc() {
215
- // Put the html snippet into a html document, and update the state to refresh the WebView,
216
- // we can use this in the future to inject custom styles or scripts.
217
- // Scripts go into the body rather than the head, to support embedded content such as Instagram
218
- // that expect the scripts to be part of the body.
219
-
220
- // Avoid comma issues with props.viewportProps.
221
- const addViewportProps = viewportProps
222
- .trim()
223
- .replace( /(^[^,])/, ', $1' );
224
-
225
- const htmlDoc = (
226
- <html lang={ lang }>
227
- <head>
228
- <title>{ title }</title>
229
- <meta
230
- name="viewport"
231
- content={ `width=device-width, initial-scale=1${ addViewportProps }` }
232
- ></meta>
233
- <style dangerouslySetInnerHTML={ { __html: style } } />
234
- { styles.map( ( rules, i ) => (
235
- <style
236
- key={ i }
237
- dangerouslySetInnerHTML={ { __html: rules } }
238
- />
239
- ) ) }
240
- </head>
241
- <body
242
- data-resizable-iframe-connected="data-resizable-iframe-connected"
243
- className={ type }
244
- >
245
- <div dangerouslySetInnerHTML={ { __html: html } } />
246
- { scripts.map( ( src ) => (
247
- <script key={ src } src={ src } />
248
- ) ) }
249
- </body>
250
- </html>
251
- );
252
- return '<!DOCTYPE html>' + renderToString( htmlDoc );
253
- }
254
-
255
- const getInjectedJavaScript = useCallback( () => {
256
- // Allow parent to override the resize observers with prop.customJS (legacy support)
257
- let injectedJS = customJS || observeAndResizeJS;
258
-
259
- // Add any event listeners that were passed in.
260
- Object.keys( onWindowEvents ).forEach( ( eventType ) => {
261
- injectedJS += `
262
- window.addEventListener( '${ eventType }', function( event ) {
263
- window.ReactNativeWebView.postMessage( JSON.stringify( { type: '${ eventType }', ...event.data } ) );
264
- });`;
265
- } );
266
-
267
- return injectedJS;
268
- }, [ customJS, onWindowEvents ] );
269
-
270
- function updateContentHtml( forceRerender = false ) {
271
- const newContentHtml = getHtmlDoc();
272
-
273
- if ( forceRerender && contentHtml === newContentHtml ) {
274
- // The re-render is forced by updating the state with empty HTML,
275
- // waiting for the JS code to be executed with "setImmediate" and then
276
- // setting the content HTML again.
277
- setContentHtml( '' );
278
- setImmediate( () => setContentHtml( newContentHtml ) );
279
- } else {
280
- setContentHtml( newContentHtml );
281
- }
282
- }
283
-
284
- function getSizeStyle() {
285
- const contentHeight = Math.ceil( height );
286
-
287
- return contentHeight ? { height: contentHeight } : { aspectRatio: 1 };
288
- }
289
-
290
- function onChangeDimensions( dimensions ) {
291
- setIsLandscape( dimensions.window.width >= dimensions.window.height );
292
- }
293
-
294
- const onMessage = useCallback(
295
- ( message ) => {
296
- let data = message?.nativeEvent?.data;
297
-
298
- try {
299
- data = JSON.parse( data );
300
- } catch {
301
- return;
302
- }
303
-
304
- // check for resize event
305
- if ( 'resize' === data?.action ) {
306
- setHeight( data.height );
307
- }
308
-
309
- // Forward the event to parent event listeners
310
- Object.keys( onWindowEvents ).forEach( ( eventType ) => {
311
- if ( data?.type === eventType ) {
312
- try {
313
- onWindowEvents[ eventType ]( data );
314
- } catch ( e ) {
315
- // eslint-disable-next-line no-console
316
- console.warn(
317
- `Error handling event ${ eventType }`,
318
- e
319
- );
320
- }
321
- }
322
- } );
323
- },
324
- [ onWindowEvents ]
325
- );
326
-
327
- useEffect( () => {
328
- const dimensionsChangeSubscription = Dimensions.addEventListener(
329
- 'change',
330
- onChangeDimensions
331
- );
332
- return () => {
333
- dimensionsChangeSubscription.remove();
334
- };
335
- }, [] );
336
-
337
- useEffect( () => {
338
- updateContentHtml();
339
- // See https://github.com/WordPress/gutenberg/pull/41166
340
- }, [ html, title, type, styles, scripts ] );
341
-
342
- useEffect( () => {
343
- // When device orientation changes we have to recalculate the size,
344
- // for this purpose we reset the current size value.
345
- if ( wasLandscape.current !== isLandscape ) {
346
- setHeight( 0 );
347
- }
348
- wasLandscape.current = isLandscape;
349
- }, [ isLandscape ] );
350
-
351
- return (
352
- <WebView
353
- containerStyle={ [
354
- sandboxStyles[ 'sandbox-webview__container' ],
355
- containerStyle,
356
- ] }
357
- injectedJavaScript={ getInjectedJavaScript() }
358
- key={ key }
359
- ref={ ref }
360
- source={ { baseUrl: providerUrl, html: contentHtml } }
361
- // Wildcard value is required for static HTML
362
- // Reference: https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#source
363
- originWhitelist={ [ '*' ] }
364
- style={ [
365
- sandboxStyles[ 'sandbox-webview__content' ],
366
- getSizeStyle(),
367
- Platform.isAndroid && workaroundStyles.webView,
368
- ] }
369
- onMessage={ onMessage }
370
- scrollEnabled={ false }
371
- setBuiltInZoomControls={ false }
372
- showsHorizontalScrollIndicator={ false }
373
- showsVerticalScrollIndicator={ false }
374
- mediaPlaybackRequiresUserAction={ false }
375
- onLoadEnd={ onLoadEnd }
376
- testID={ testID }
377
- />
378
- );
379
- } );
380
-
381
- const workaroundStyles = StyleSheet.create( {
382
- webView: {
383
- /**
384
- * The slight opacity below is a workaround for an Android crash caused from combining Android
385
- * 12's new scroll overflow behavior and webviews.
386
- * https://github.com/react-native-webview/react-native-webview/issues/1915#issuecomment-808869253
387
- */
388
- opacity: 0.99,
389
- },
390
- } );
391
-
392
- export default memo( Sandbox );
@@ -1,7 +0,0 @@
1
- .sandbox-webview__container {
2
- width: 100%;
3
- }
4
-
5
- .sandbox-webview__content {
6
- background-color: transparent;
7
- }
@@ -1,274 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import {
5
- TextInput,
6
- Text,
7
- View,
8
- TouchableOpacity,
9
- Platform,
10
- useColorScheme,
11
- Keyboard,
12
- } from 'react-native';
13
-
14
- /**
15
- * WordPress dependencies
16
- */
17
- import {
18
- useState,
19
- useRef,
20
- useMemo,
21
- useEffect,
22
- useCallback,
23
- } from '@wordpress/element';
24
- import { __ } from '@wordpress/i18n';
25
- import {
26
- Icon,
27
- cancelCircleFilled as cancelCircleFilledIcon,
28
- arrowLeft as arrowLeftIcon,
29
- close as closeIcon,
30
- } from '@wordpress/icons';
31
-
32
- /**
33
- * Internal dependencies
34
- */
35
- import allStyles from './style.scss';
36
- import platformStyles from './platform-style.scss';
37
- import Button from '../button';
38
- import Gridicons from '../mobile/gridicons';
39
-
40
- // Merge platform specific styles with the default styles.
41
- const baseStyles = { ...allStyles };
42
- for ( const selector in platformStyles ) {
43
- baseStyles[ selector ] = {
44
- ...baseStyles[ selector ],
45
- ...platformStyles[ selector ],
46
- };
47
- }
48
-
49
- function selectModifiedStyles( styles, modifier ) {
50
- const modifierMatcher = new RegExp( `--${ modifier }$` );
51
- const modifierSelectors = Object.keys( styles ).filter( ( selector ) =>
52
- selector.match( modifierMatcher )
53
- );
54
-
55
- return modifierSelectors.reduce( ( modifiedStyles, modifierSelector ) => {
56
- const blockElementSelector = modifierSelector.split( '--' )[ 0 ];
57
- modifiedStyles[ blockElementSelector ] = styles[ modifierSelector ];
58
- return modifiedStyles;
59
- }, {} );
60
- }
61
-
62
- function mergeStyles( styles, updateStyles, selectors ) {
63
- selectors.forEach( ( selector ) => {
64
- styles[ selector ] = {
65
- ...styles[ selector ],
66
- ...updateStyles[ selector ],
67
- };
68
- } );
69
-
70
- return styles;
71
- }
72
-
73
- function SearchControl( {
74
- value,
75
- onChange,
76
- placeholder = __( 'Search blocks' ),
77
- } ) {
78
- const [ isActive, setIsActive ] = useState( false );
79
- const [ currentStyles, setCurrentStyles ] = useState( baseStyles );
80
-
81
- const isDark = useColorScheme() === 'dark';
82
- const inputRef = useRef();
83
- const onCancelTimer = useRef();
84
-
85
- const isIOS = Platform.OS === 'ios';
86
-
87
- const darkStyles = useMemo( () => {
88
- return selectModifiedStyles( baseStyles, 'dark' );
89
- }, [] );
90
-
91
- const activeStyles = useMemo( () => {
92
- return selectModifiedStyles( baseStyles, 'active' );
93
- }, [] );
94
-
95
- const activeDarkStyles = useMemo( () => {
96
- return selectModifiedStyles( baseStyles, 'active-dark' );
97
- }, [] );
98
-
99
- useEffect( () => {
100
- let futureStyles = { ...baseStyles };
101
-
102
- function mergeFutureStyles( modifiedStyles, shouldUseConditions ) {
103
- const shouldUseModified = shouldUseConditions.every(
104
- ( should ) => should
105
- );
106
-
107
- const updatedStyles = shouldUseModified
108
- ? modifiedStyles
109
- : futureStyles;
110
-
111
- const selectors = Object.keys( modifiedStyles );
112
-
113
- futureStyles = mergeStyles(
114
- futureStyles,
115
- updatedStyles,
116
- selectors
117
- );
118
- }
119
-
120
- mergeFutureStyles( activeStyles, [ isActive ] );
121
- mergeFutureStyles( darkStyles, [ isDark ] );
122
- mergeFutureStyles( activeDarkStyles, [ isActive, isDark ] );
123
-
124
- setCurrentStyles( futureStyles );
125
- // See https://github.com/WordPress/gutenberg/pull/41166
126
- }, [ isActive, isDark ] );
127
-
128
- const clearInput = useCallback( () => {
129
- onChange( '' );
130
- }, [ onChange ] );
131
-
132
- const onPress = useCallback( () => {
133
- setIsActive( true );
134
- inputRef.current?.focus();
135
- }, [] );
136
-
137
- const onFocus = useCallback( () => {
138
- setIsActive( true );
139
- }, [] );
140
-
141
- const onCancel = useCallback( () => {
142
- clearTimeout( onCancelTimer.current );
143
- onCancelTimer.current = setTimeout( () => {
144
- inputRef.current?.blur();
145
- clearInput();
146
- setIsActive( false );
147
- }, 0 );
148
- }, [ clearInput ] );
149
-
150
- const onKeyboardDidHide = useCallback( () => {
151
- if ( ! isIOS ) {
152
- onCancel();
153
- }
154
- }, [ isIOS, onCancel ] );
155
-
156
- useEffect( () => {
157
- const keyboardHideSubscription = Keyboard.addListener(
158
- 'keyboardDidHide',
159
- onKeyboardDidHide
160
- );
161
- return () => {
162
- clearTimeout( onCancelTimer.current );
163
- keyboardHideSubscription.remove();
164
- };
165
- }, [ onKeyboardDidHide ] );
166
-
167
- const {
168
- 'search-control__container': containerStyle,
169
- 'search-control__inner-container': innerContainerStyle,
170
- 'search-control__input-container': inputContainerStyle,
171
- 'search-control__form-input': formInputStyle,
172
- 'search-control__form-input-placeholder': placeholderStyle,
173
- 'search-control__input-button': inputButtonStyle,
174
- 'search-control__input-button-left': inputButtonLeftStyle,
175
- 'search-control__input-button-right': inputButtonRightStyle,
176
- 'search-control__cancel-button': cancelButtonStyle,
177
- 'search-control__cancel-button-text': cancelButtonTextStyle,
178
- 'search-control__icon': iconStyle,
179
- 'search-control__right-icon': rightIconStyle,
180
- } = currentStyles;
181
-
182
- function renderLeftButton() {
183
- const button =
184
- ! isIOS && isActive ? (
185
- <Button
186
- label={ __( 'Cancel search' ) }
187
- icon={ arrowLeftIcon }
188
- onClick={ onCancel }
189
- style={ iconStyle }
190
- />
191
- ) : (
192
- <Icon icon={ Gridicons.search } fill={ iconStyle?.color } />
193
- );
194
-
195
- return (
196
- <View style={ [ inputButtonStyle, inputButtonLeftStyle ] }>
197
- { button }
198
- </View>
199
- );
200
- }
201
-
202
- function renderRightButton() {
203
- let button;
204
-
205
- // Add a View element to properly center the input placeholder via flexbox.
206
- if ( isIOS && ! isActive ) {
207
- button = <View />;
208
- }
209
-
210
- if ( !! value ) {
211
- button = (
212
- <Button
213
- label={ __( 'Clear search' ) }
214
- icon={ isIOS ? cancelCircleFilledIcon : closeIcon }
215
- onClick={ clearInput }
216
- style={ [ iconStyle, rightIconStyle ] }
217
- />
218
- );
219
- }
220
-
221
- return (
222
- <View style={ [ inputButtonStyle, inputButtonRightStyle ] }>
223
- { button }
224
- </View>
225
- );
226
- }
227
-
228
- function renderCancel() {
229
- if ( ! isIOS ) {
230
- return null;
231
- }
232
- return (
233
- <View style={ cancelButtonStyle }>
234
- <Text
235
- onPress={ onCancel }
236
- style={ cancelButtonTextStyle }
237
- accessible
238
- accessibilityRole="button"
239
- accessibilityLabel={ __( 'Cancel search' ) }
240
- accessibilityHint={ __( 'Cancel search' ) }
241
- >
242
- { __( 'Cancel' ) }
243
- </Text>
244
- </View>
245
- );
246
- }
247
-
248
- return (
249
- <TouchableOpacity
250
- style={ containerStyle }
251
- onPress={ onPress }
252
- activeOpacity={ 1 }
253
- >
254
- <View style={ innerContainerStyle }>
255
- <View style={ inputContainerStyle }>
256
- { renderLeftButton() }
257
- <TextInput
258
- ref={ inputRef }
259
- style={ formInputStyle }
260
- placeholderTextColor={ placeholderStyle?.color }
261
- onChangeText={ onChange }
262
- onFocus={ onFocus }
263
- value={ value }
264
- placeholder={ placeholder }
265
- />
266
- { renderRightButton() }
267
- </View>
268
- { isActive && renderCancel() }
269
- </View>
270
- </TouchableOpacity>
271
- );
272
- }
273
-
274
- export default SearchControl;