@wordpress/components 27.4.0 → 27.5.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 (474) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/build/alignment-matrix-control/index.js +3 -1
  3. package/build/alignment-matrix-control/index.js.map +1 -1
  4. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +8 -8
  5. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  6. package/build/alignment-matrix-control/utils.js +6 -2
  7. package/build/alignment-matrix-control/utils.js.map +1 -1
  8. package/build/autocomplete/autocompleter-ui.js +3 -1
  9. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  10. package/build/autocomplete/index.js +21 -7
  11. package/build/autocomplete/index.js.map +1 -1
  12. package/build/checkbox-control/index.js +9 -2
  13. package/build/checkbox-control/index.js.map +1 -1
  14. package/build/color-picker/hex-input.js +3 -1
  15. package/build/color-picker/hex-input.js.map +1 -1
  16. package/build/color-picker/hue-picker.native.js +6 -2
  17. package/build/color-picker/hue-picker.native.js.map +1 -1
  18. package/build/color-picker/index.native.js +9 -3
  19. package/build/color-picker/index.native.js.map +1 -1
  20. package/build/color-picker/saturation-picker.native.js +6 -2
  21. package/build/color-picker/saturation-picker.native.js.map +1 -1
  22. package/build/color-picker/use-deprecated-props.js +9 -3
  23. package/build/color-picker/use-deprecated-props.js.map +1 -1
  24. package/build/context/context-connect.js +6 -2
  25. package/build/context/context-connect.js.map +1 -1
  26. package/build/custom-select-control-v2/legacy-component/index.js +3 -1
  27. package/build/custom-select-control-v2/legacy-component/index.js.map +1 -1
  28. package/build/drop-zone/index.js +72 -64
  29. package/build/drop-zone/index.js.map +1 -1
  30. package/build/dropdown/styles.js +5 -3
  31. package/build/dropdown/styles.js.map +1 -1
  32. package/build/duotone-picker/utils.js +3 -1
  33. package/build/duotone-picker/utils.js.map +1 -1
  34. package/build/elevation/hook.js +5 -6
  35. package/build/elevation/hook.js.map +1 -1
  36. package/build/focal-point-picker/controls.js +3 -1
  37. package/build/focal-point-picker/controls.js.map +1 -1
  38. package/build/focal-point-picker/index.js +21 -7
  39. package/build/focal-point-picker/index.js.map +1 -1
  40. package/build/focal-point-picker/styles/focal-point-picker-style.js +12 -12
  41. package/build/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
  42. package/build/focal-point-picker/tooltip/index.native.js +3 -8
  43. package/build/focal-point-picker/tooltip/index.native.js.map +1 -1
  44. package/build/focal-point-picker/utils.js +3 -1
  45. package/build/focal-point-picker/utils.js.map +1 -1
  46. package/build/font-size-picker/index.js +3 -2
  47. package/build/font-size-picker/index.js.map +1 -1
  48. package/build/font-size-picker/types.js.map +1 -1
  49. package/build/input-control/input-field.js +3 -1
  50. package/build/input-control/input-field.js.map +1 -1
  51. package/build/input-control/label.js +3 -1
  52. package/build/input-control/label.js.map +1 -1
  53. package/build/input-control/styles/input-control-styles.js +31 -23
  54. package/build/input-control/styles/input-control-styles.js.map +1 -1
  55. package/build/input-control/utils.js +8 -4
  56. package/build/input-control/utils.js.map +1 -1
  57. package/build/item-group/item/hook.js +0 -4
  58. package/build/item-group/item/hook.js.map +1 -1
  59. package/build/mobile/gradient/index.native.js +3 -1
  60. package/build/mobile/gradient/index.native.js.map +1 -1
  61. package/build/mobile/keyboard-aware-flat-list/index.android.js +9 -3
  62. package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  63. package/build/mobile/keyboard-aware-flat-list/index.ios.js +15 -13
  64. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  65. package/build/mobile/keyboard-aware-flat-list/shared.native.js +33 -0
  66. package/build/mobile/keyboard-aware-flat-list/shared.native.js.map +1 -0
  67. package/build/modal/aria-helper.js +9 -3
  68. package/build/modal/aria-helper.js.map +1 -1
  69. package/build/modal/index.js +6 -2
  70. package/build/modal/index.js.map +1 -1
  71. package/build/navigation/styles/navigation-styles.js +12 -12
  72. package/build/navigation/styles/navigation-styles.js.map +1 -1
  73. package/build/panel/body.js +3 -1
  74. package/build/panel/body.js.map +1 -1
  75. package/build/popover/index.js +3 -1
  76. package/build/popover/index.js.map +1 -1
  77. package/build/popover/overlay-middlewares.js +3 -1
  78. package/build/popover/overlay-middlewares.js.map +1 -1
  79. package/build/query-controls/author-select.js +3 -1
  80. package/build/query-controls/author-select.js.map +1 -1
  81. package/build/range-control/rail.js +1 -1
  82. package/build/range-control/rail.js.map +1 -1
  83. package/build/range-control/styles/range-control-styles.js +29 -29
  84. package/build/range-control/styles/range-control-styles.js.map +1 -1
  85. package/build/resizable-box/resize-tooltip/index.js +3 -1
  86. package/build/resizable-box/resize-tooltip/index.js.map +1 -1
  87. package/build/resizable-box/resize-tooltip/label.js +3 -1
  88. package/build/resizable-box/resize-tooltip/label.js.map +1 -1
  89. package/build/resizable-box/resize-tooltip/utils.js +12 -4
  90. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  91. package/build/select-control/index.js +3 -1
  92. package/build/select-control/index.js.map +1 -1
  93. package/build/select-control/styles/select-control-styles.js +8 -6
  94. package/build/select-control/styles/select-control-styles.js.map +1 -1
  95. package/build/slot-fill/bubbles-virtually/slot-fill-context.js +3 -3
  96. package/build/slot-fill/bubbles-virtually/slot-fill-context.js.map +1 -1
  97. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js +3 -3
  98. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  99. package/build/slot-fill/bubbles-virtually/use-slot-fills.js +2 -2
  100. package/build/slot-fill/bubbles-virtually/use-slot-fills.js.map +1 -1
  101. package/build/slot-fill/bubbles-virtually/use-slot.js +2 -2
  102. package/build/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  103. package/build/slot-fill/types.js.map +1 -1
  104. package/build/text/get-line-height.js +6 -2
  105. package/build/text/get-line-height.js.map +1 -1
  106. package/build/text/utils.js +6 -2
  107. package/build/text/utils.js.map +1 -1
  108. package/build/theme/color-algorithms.js +6 -2
  109. package/build/theme/color-algorithms.js.map +1 -1
  110. package/build/toggle-group-control/toggle-group-control-option-base/component.js +3 -1
  111. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  112. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
  113. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  114. package/build/tree-grid/roving-tab-index-item.js +3 -1
  115. package/build/tree-grid/roving-tab-index-item.js.map +1 -1
  116. package/build/unit-control/index.js +3 -1
  117. package/build/unit-control/index.js.map +1 -1
  118. package/build/utils/colors.js +21 -7
  119. package/build/utils/colors.js.map +1 -1
  120. package/build/utils/font-size.js +3 -1
  121. package/build/utils/font-size.js.map +1 -1
  122. package/build/utils/get-valid-children.js +3 -1
  123. package/build/utils/get-valid-children.js.map +1 -1
  124. package/build/utils/input/base.js +2 -3
  125. package/build/utils/input/base.js.map +1 -1
  126. package/build/utils/strings.js +11 -57
  127. package/build/utils/strings.js.map +1 -1
  128. package/build/utils/use-responsive-value.js +3 -1
  129. package/build/utils/use-responsive-value.js.map +1 -1
  130. package/build/view/component.js +26 -8
  131. package/build/view/component.js.map +1 -1
  132. package/build-module/alignment-matrix-control/index.js +3 -1
  133. package/build-module/alignment-matrix-control/index.js.map +1 -1
  134. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +9 -9
  135. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  136. package/build-module/alignment-matrix-control/utils.js +6 -2
  137. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  138. package/build-module/autocomplete/autocompleter-ui.js +3 -1
  139. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  140. package/build-module/autocomplete/index.js +21 -7
  141. package/build-module/autocomplete/index.js.map +1 -1
  142. package/build-module/checkbox-control/index.js +9 -2
  143. package/build-module/checkbox-control/index.js.map +1 -1
  144. package/build-module/color-picker/hex-input.js +3 -1
  145. package/build-module/color-picker/hex-input.js.map +1 -1
  146. package/build-module/color-picker/hue-picker.native.js +6 -2
  147. package/build-module/color-picker/hue-picker.native.js.map +1 -1
  148. package/build-module/color-picker/index.native.js +9 -3
  149. package/build-module/color-picker/index.native.js.map +1 -1
  150. package/build-module/color-picker/saturation-picker.native.js +6 -2
  151. package/build-module/color-picker/saturation-picker.native.js.map +1 -1
  152. package/build-module/color-picker/use-deprecated-props.js +9 -3
  153. package/build-module/color-picker/use-deprecated-props.js.map +1 -1
  154. package/build-module/context/context-connect.js +6 -2
  155. package/build-module/context/context-connect.js.map +1 -1
  156. package/build-module/custom-select-control-v2/legacy-component/index.js +3 -1
  157. package/build-module/custom-select-control-v2/legacy-component/index.js.map +1 -1
  158. package/build-module/drop-zone/index.js +72 -64
  159. package/build-module/drop-zone/index.js.map +1 -1
  160. package/build-module/dropdown/styles.js +5 -3
  161. package/build-module/dropdown/styles.js.map +1 -1
  162. package/build-module/duotone-picker/utils.js +3 -1
  163. package/build-module/duotone-picker/utils.js.map +1 -1
  164. package/build-module/elevation/hook.js +6 -7
  165. package/build-module/elevation/hook.js.map +1 -1
  166. package/build-module/focal-point-picker/controls.js +3 -1
  167. package/build-module/focal-point-picker/controls.js.map +1 -1
  168. package/build-module/focal-point-picker/index.js +21 -7
  169. package/build-module/focal-point-picker/index.js.map +1 -1
  170. package/build-module/focal-point-picker/styles/focal-point-picker-style.js +13 -13
  171. package/build-module/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
  172. package/build-module/focal-point-picker/tooltip/index.native.js +3 -8
  173. package/build-module/focal-point-picker/tooltip/index.native.js.map +1 -1
  174. package/build-module/focal-point-picker/utils.js +3 -1
  175. package/build-module/focal-point-picker/utils.js.map +1 -1
  176. package/build-module/font-size-picker/index.js +3 -2
  177. package/build-module/font-size-picker/index.js.map +1 -1
  178. package/build-module/font-size-picker/types.js.map +1 -1
  179. package/build-module/input-control/input-field.js +3 -1
  180. package/build-module/input-control/input-field.js.map +1 -1
  181. package/build-module/input-control/label.js +3 -1
  182. package/build-module/input-control/label.js.map +1 -1
  183. package/build-module/input-control/styles/input-control-styles.js +31 -23
  184. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  185. package/build-module/input-control/utils.js +8 -4
  186. package/build-module/input-control/utils.js.map +1 -1
  187. package/build-module/item-group/item/hook.js +0 -4
  188. package/build-module/item-group/item/hook.js.map +1 -1
  189. package/build-module/mobile/gradient/index.native.js +3 -1
  190. package/build-module/mobile/gradient/index.native.js.map +1 -1
  191. package/build-module/mobile/keyboard-aware-flat-list/index.android.js +9 -3
  192. package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  193. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +16 -15
  194. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  195. package/build-module/mobile/keyboard-aware-flat-list/shared.native.js +27 -0
  196. package/build-module/mobile/keyboard-aware-flat-list/shared.native.js.map +1 -0
  197. package/build-module/modal/aria-helper.js +9 -3
  198. package/build-module/modal/aria-helper.js.map +1 -1
  199. package/build-module/modal/index.js +6 -2
  200. package/build-module/modal/index.js.map +1 -1
  201. package/build-module/navigation/styles/navigation-styles.js +13 -13
  202. package/build-module/navigation/styles/navigation-styles.js.map +1 -1
  203. package/build-module/panel/body.js +3 -1
  204. package/build-module/panel/body.js.map +1 -1
  205. package/build-module/popover/index.js +3 -1
  206. package/build-module/popover/index.js.map +1 -1
  207. package/build-module/popover/overlay-middlewares.js +3 -1
  208. package/build-module/popover/overlay-middlewares.js.map +1 -1
  209. package/build-module/query-controls/author-select.js +3 -1
  210. package/build-module/query-controls/author-select.js.map +1 -1
  211. package/build-module/range-control/rail.js +1 -1
  212. package/build-module/range-control/rail.js.map +1 -1
  213. package/build-module/range-control/styles/range-control-styles.js +30 -30
  214. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  215. package/build-module/resizable-box/resize-tooltip/index.js +3 -1
  216. package/build-module/resizable-box/resize-tooltip/index.js.map +1 -1
  217. package/build-module/resizable-box/resize-tooltip/label.js +3 -1
  218. package/build-module/resizable-box/resize-tooltip/label.js.map +1 -1
  219. package/build-module/resizable-box/resize-tooltip/utils.js +12 -4
  220. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  221. package/build-module/select-control/index.js +3 -1
  222. package/build-module/select-control/index.js.map +1 -1
  223. package/build-module/select-control/styles/select-control-styles.js +8 -6
  224. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  225. package/build-module/slot-fill/bubbles-virtually/slot-fill-context.js +2 -1
  226. package/build-module/slot-fill/bubbles-virtually/slot-fill-context.js.map +1 -1
  227. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js +1 -1
  228. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  229. package/build-module/slot-fill/bubbles-virtually/use-slot-fills.js +1 -1
  230. package/build-module/slot-fill/bubbles-virtually/use-slot-fills.js.map +1 -1
  231. package/build-module/slot-fill/bubbles-virtually/use-slot.js +1 -1
  232. package/build-module/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  233. package/build-module/slot-fill/types.js.map +1 -1
  234. package/build-module/text/get-line-height.js +6 -2
  235. package/build-module/text/get-line-height.js.map +1 -1
  236. package/build-module/text/utils.js +6 -2
  237. package/build-module/text/utils.js.map +1 -1
  238. package/build-module/theme/color-algorithms.js +6 -2
  239. package/build-module/theme/color-algorithms.js.map +1 -1
  240. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +3 -1
  241. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  242. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +10 -10
  243. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  244. package/build-module/tree-grid/roving-tab-index-item.js +3 -1
  245. package/build-module/tree-grid/roving-tab-index-item.js.map +1 -1
  246. package/build-module/unit-control/index.js +3 -1
  247. package/build-module/unit-control/index.js.map +1 -1
  248. package/build-module/utils/colors.js +21 -7
  249. package/build-module/utils/colors.js.map +1 -1
  250. package/build-module/utils/font-size.js +3 -1
  251. package/build-module/utils/font-size.js.map +1 -1
  252. package/build-module/utils/get-valid-children.js +3 -1
  253. package/build-module/utils/get-valid-children.js.map +1 -1
  254. package/build-module/utils/input/base.js +2 -3
  255. package/build-module/utils/input/base.js.map +1 -1
  256. package/build-module/utils/strings.js +12 -57
  257. package/build-module/utils/strings.js.map +1 -1
  258. package/build-module/utils/use-responsive-value.js +3 -1
  259. package/build-module/utils/use-responsive-value.js.map +1 -1
  260. package/build-module/view/component.js +26 -8
  261. package/build-module/view/component.js.map +1 -1
  262. package/build-style/style-rtl.css +39 -36
  263. package/build-style/style.css +39 -36
  264. package/build-types/alignment-matrix-control/index.d.ts.map +1 -1
  265. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -1
  266. package/build-types/alignment-matrix-control/utils.d.ts.map +1 -1
  267. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  268. package/build-types/autocomplete/index.d.ts.map +1 -1
  269. package/build-types/border-box-control/border-box-control/hook.d.ts +4 -4
  270. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +4 -4
  271. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +4 -4
  272. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +4 -4
  273. package/build-types/border-control/border-control/hook.d.ts +4 -4
  274. package/build-types/border-control/border-control-dropdown/hook.d.ts +4 -4
  275. package/build-types/box-control/stories/index.story.d.ts +24 -24
  276. package/build-types/card/card/hook.d.ts +4 -4
  277. package/build-types/card/card-body/hook.d.ts +4 -4
  278. package/build-types/card/card-divider/hook.d.ts +4 -4
  279. package/build-types/card/card-footer/hook.d.ts +4 -4
  280. package/build-types/card/card-header/hook.d.ts +4 -4
  281. package/build-types/card/card-media/hook.d.ts +4 -4
  282. package/build-types/checkbox-control/index.d.ts.map +1 -1
  283. package/build-types/color-picker/hex-input.d.ts.map +1 -1
  284. package/build-types/color-picker/use-deprecated-props.d.ts.map +1 -1
  285. package/build-types/context/context-connect.d.ts.map +1 -1
  286. package/build-types/custom-select-control-v2/legacy-component/index.d.ts.map +1 -1
  287. package/build-types/drop-zone/index.d.ts.map +1 -1
  288. package/build-types/dropdown/styles.d.ts.map +1 -1
  289. package/build-types/duotone-picker/utils.d.ts.map +1 -1
  290. package/build-types/elevation/hook.d.ts +4 -4
  291. package/build-types/elevation/hook.d.ts.map +1 -1
  292. package/build-types/flex/flex/hook.d.ts +4 -4
  293. package/build-types/flex/flex-block/hook.d.ts +4 -4
  294. package/build-types/flex/flex-item/hook.d.ts +4 -4
  295. package/build-types/focal-point-picker/controls.d.ts.map +1 -1
  296. package/build-types/focal-point-picker/index.d.ts.map +1 -1
  297. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
  298. package/build-types/focal-point-picker/utils.d.ts.map +1 -1
  299. package/build-types/font-size-picker/index.d.ts.map +1 -1
  300. package/build-types/font-size-picker/stories/index.story.d.ts.map +1 -1
  301. package/build-types/font-size-picker/types.d.ts +2 -0
  302. package/build-types/font-size-picker/types.d.ts.map +1 -1
  303. package/build-types/grid/hook.d.ts +4 -4
  304. package/build-types/h-stack/hook.d.ts +4 -4
  305. package/build-types/heading/hook.d.ts +4 -4
  306. package/build-types/input-control/input-field.d.ts.map +1 -1
  307. package/build-types/input-control/label.d.ts.map +1 -1
  308. package/build-types/input-control/stories/index.story.d.ts +2 -1
  309. package/build-types/input-control/stories/index.story.d.ts.map +1 -1
  310. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  311. package/build-types/input-control/utils.d.ts.map +1 -1
  312. package/build-types/item-group/item/hook.d.ts +5 -5
  313. package/build-types/item-group/item/hook.d.ts.map +1 -1
  314. package/build-types/item-group/item-group/hook.d.ts +4 -4
  315. package/build-types/modal/aria-helper.d.ts.map +1 -1
  316. package/build-types/modal/index.d.ts.map +1 -1
  317. package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -1
  318. package/build-types/navigator/navigator-back-button/hook.d.ts +4 -4
  319. package/build-types/navigator/navigator-button/hook.d.ts +4 -4
  320. package/build-types/palette-edit/styles.d.ts +749 -10
  321. package/build-types/palette-edit/styles.d.ts.map +1 -1
  322. package/build-types/panel/body.d.ts.map +1 -1
  323. package/build-types/popover/index.d.ts.map +1 -1
  324. package/build-types/popover/overlay-middlewares.d.ts.map +1 -1
  325. package/build-types/popover/stories/index.story.d.ts.map +1 -1
  326. package/build-types/query-controls/author-select.d.ts.map +1 -1
  327. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  328. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  329. package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
  330. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  331. package/build-types/scrollable/hook.d.ts +4 -4
  332. package/build-types/select-control/index.d.ts.map +1 -1
  333. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  334. package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts.map +1 -1
  335. package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts.map +1 -1
  336. package/build-types/slot-fill/bubbles-virtually/use-slot-fills.d.ts.map +1 -1
  337. package/build-types/slot-fill/bubbles-virtually/use-slot.d.ts.map +1 -1
  338. package/build-types/slot-fill/types.d.ts +2 -2
  339. package/build-types/slot-fill/types.d.ts.map +1 -1
  340. package/build-types/spacer/hook.d.ts +4 -4
  341. package/build-types/surface/hook.d.ts +4 -4
  342. package/build-types/text/get-line-height.d.ts.map +1 -1
  343. package/build-types/text/hook.d.ts +4 -4
  344. package/build-types/text/utils.d.ts.map +1 -1
  345. package/build-types/text-control/index.d.ts +1 -1
  346. package/build-types/theme/color-algorithms.d.ts.map +1 -1
  347. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  348. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  349. package/build-types/tools-panel/tools-panel/hook.d.ts +4 -4
  350. package/build-types/tools-panel/tools-panel-header/hook.d.ts +4 -4
  351. package/build-types/tools-panel/tools-panel-item/hook.d.ts +4 -4
  352. package/build-types/tree-grid/roving-tab-index-item.d.ts.map +1 -1
  353. package/build-types/truncate/hook.d.ts +4 -4
  354. package/build-types/unit-control/index.d.ts.map +1 -1
  355. package/build-types/utils/colors.d.ts.map +1 -1
  356. package/build-types/utils/font-size.d.ts.map +1 -1
  357. package/build-types/utils/get-valid-children.d.ts.map +1 -1
  358. package/build-types/utils/input/base.d.ts.map +1 -1
  359. package/build-types/utils/strings.d.ts.map +1 -1
  360. package/build-types/utils/use-responsive-value.d.ts.map +1 -1
  361. package/build-types/v-stack/hook.d.ts +4 -4
  362. package/build-types/view/component.d.ts +253 -7
  363. package/build-types/view/component.d.ts.map +1 -1
  364. package/package.json +19 -19
  365. package/src/alignment-matrix-control/index.tsx +3 -1
  366. package/src/alignment-matrix-control/styles/alignment-matrix-control-styles.ts +4 -3
  367. package/src/alignment-matrix-control/utils.tsx +6 -2
  368. package/src/autocomplete/autocompleter-ui.tsx +3 -1
  369. package/src/autocomplete/index.tsx +21 -7
  370. package/src/autocomplete/style.scss +10 -4
  371. package/src/box-control/test/index.tsx +22 -0
  372. package/src/card/test/__snapshots__/index.tsx.snap +44 -47
  373. package/src/checkbox-control/index.tsx +44 -35
  374. package/src/checkbox-control/style.scss +12 -1
  375. package/src/checkbox-control/test/__snapshots__/index.tsx.snap +27 -26
  376. package/src/checkbox-control/test/index.tsx +5 -0
  377. package/src/color-picker/hex-input.tsx +3 -1
  378. package/src/color-picker/hue-picker.native.js +6 -2
  379. package/src/color-picker/index.native.js +9 -3
  380. package/src/color-picker/saturation-picker.native.js +6 -2
  381. package/src/color-picker/use-deprecated-props.ts +9 -3
  382. package/src/context/context-connect.ts +6 -2
  383. package/src/custom-select-control-v2/README.md +0 -4
  384. package/src/custom-select-control-v2/legacy-component/index.tsx +3 -1
  385. package/src/custom-select-control-v2/stories/default.story.tsx +1 -1
  386. package/src/custom-select-control-v2/stories/legacy.story.tsx +1 -1
  387. package/src/drop-zone/index.tsx +66 -66
  388. package/src/dropdown/styles.ts +3 -1
  389. package/src/duotone-picker/utils.ts +3 -1
  390. package/src/elevation/hook.ts +6 -3
  391. package/src/elevation/test/__snapshots__/index.tsx.snap +18 -24
  392. package/src/flex/test/__snapshots__/index.tsx.snap +4 -4
  393. package/src/focal-point-picker/controls.tsx +3 -1
  394. package/src/focal-point-picker/index.tsx +20 -7
  395. package/src/focal-point-picker/styles/focal-point-picker-style.ts +4 -3
  396. package/src/focal-point-picker/tooltip/index.native.js +1 -7
  397. package/src/focal-point-picker/utils.ts +3 -1
  398. package/src/font-size-picker/README.md +1 -0
  399. package/src/font-size-picker/index.tsx +4 -2
  400. package/src/font-size-picker/stories/index.story.tsx +0 -1
  401. package/src/font-size-picker/types.ts +2 -0
  402. package/src/higher-order/navigate-regions/style.scss +3 -3
  403. package/src/input-control/input-field.tsx +3 -1
  404. package/src/input-control/label.tsx +3 -1
  405. package/src/input-control/stories/index.story.tsx +31 -1
  406. package/src/input-control/styles/input-control-styles.tsx +12 -4
  407. package/src/input-control/test/index.js +8 -4
  408. package/src/input-control/utils.ts +3 -2
  409. package/src/item-group/item/hook.ts +1 -10
  410. package/src/item-group/test/__snapshots__/index.js.snap +16 -16
  411. package/src/mobile/gradient/index.native.js +3 -1
  412. package/src/mobile/keyboard-aware-flat-list/index.android.js +11 -2
  413. package/src/mobile/keyboard-aware-flat-list/index.ios.js +30 -19
  414. package/src/mobile/keyboard-aware-flat-list/shared.native.js +26 -0
  415. package/src/mobile/keyboard-aware-flat-list/styles.native.scss +8 -0
  416. package/src/modal/aria-helper.ts +8 -3
  417. package/src/modal/index.tsx +6 -2
  418. package/src/modal/test/index.tsx +11 -4
  419. package/src/navigation/styles/navigation-styles.tsx +4 -3
  420. package/src/panel/body.tsx +3 -1
  421. package/src/panel/style.scss +1 -0
  422. package/src/placeholder/style.scss +12 -34
  423. package/src/popover/index.tsx +2 -1
  424. package/src/popover/overlay-middlewares.tsx +3 -1
  425. package/src/popover/stories/index.story.tsx +0 -2
  426. package/src/query-controls/author-select.tsx +3 -1
  427. package/src/range-control/rail.tsx +1 -1
  428. package/src/range-control/styles/range-control-styles.ts +5 -3
  429. package/src/resizable-box/resize-tooltip/index.tsx +3 -1
  430. package/src/resizable-box/resize-tooltip/label.tsx +3 -1
  431. package/src/resizable-box/resize-tooltip/utils.ts +12 -4
  432. package/src/select-control/index.tsx +3 -1
  433. package/src/select-control/styles/select-control-styles.ts +3 -1
  434. package/src/slot-fill/bubbles-virtually/slot-fill-context.ts +2 -1
  435. package/src/slot-fill/bubbles-virtually/slot-fill-provider.tsx +1 -1
  436. package/src/slot-fill/bubbles-virtually/use-slot-fills.ts +1 -1
  437. package/src/slot-fill/bubbles-virtually/use-slot.ts +1 -1
  438. package/src/slot-fill/types.ts +2 -2
  439. package/src/surface/test/__snapshots__/index.tsx.snap +10 -10
  440. package/src/text/get-line-height.ts +6 -2
  441. package/src/text/utils.ts +6 -2
  442. package/src/theme/color-algorithms.ts +6 -2
  443. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +18 -24
  444. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +3 -1
  445. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +7 -6
  446. package/src/toolbar/toolbar/style.scss +2 -2
  447. package/src/tree-grid/roving-tab-index-item.tsx +3 -1
  448. package/src/unit-control/index.tsx +5 -1
  449. package/src/utils/colors.js +21 -7
  450. package/src/utils/font-size.ts +3 -1
  451. package/src/utils/get-valid-children.ts +3 -1
  452. package/src/utils/input/base.js +4 -3
  453. package/src/utils/strings.ts +11 -59
  454. package/src/utils/test/strings.js +62 -0
  455. package/src/utils/use-responsive-value.ts +2 -1
  456. package/src/view/component.tsx +18 -11
  457. package/tsconfig.json +1 -2
  458. package/tsconfig.tsbuildinfo +1 -1
  459. package/build/slot-fill/bubbles-virtually/observable-map.js +0 -68
  460. package/build/slot-fill/bubbles-virtually/observable-map.js.map +0 -1
  461. package/build/view/types.js +0 -6
  462. package/build/view/types.js.map +0 -1
  463. package/build-module/slot-fill/bubbles-virtually/observable-map.js +0 -60
  464. package/build-module/slot-fill/bubbles-virtually/observable-map.js.map +0 -1
  465. package/build-module/view/types.js +0 -2
  466. package/build-module/view/types.js.map +0 -1
  467. package/build-types/slot-fill/bubbles-virtually/observable-map.d.ts +0 -19
  468. package/build-types/slot-fill/bubbles-virtually/observable-map.d.ts.map +0 -1
  469. package/build-types/view/types.d.ts +0 -8
  470. package/build-types/view/types.d.ts.map +0 -1
  471. package/src/slot-fill/bubbles-virtually/observable-map.ts +0 -79
  472. package/src/slot-fill/test/observable-map.js +0 -83
  473. package/src/utils/hooks/stories/use-cx.js +0 -157
  474. package/src/view/types.ts +0 -6
@@ -54,7 +54,7 @@ function Tooltip( { children, onPress, style, visible } ) {
54
54
  );
55
55
  }
56
56
 
57
- function Label( { align, text, xOffset, yOffset } ) {
57
+ function Label( { align = 'center', text, xOffset = 0, yOffset = 0 } ) {
58
58
  const animationValue = useRef( new Animated.Value( 0 ) ).current;
59
59
  const [ dimensions, setDimensions ] = useState( null );
60
60
  const visible = useContext( TooltipContext );
@@ -139,12 +139,6 @@ function Label( { align, text, xOffset, yOffset } ) {
139
139
  );
140
140
  }
141
141
 
142
- Label.defaultProps = {
143
- align: 'center',
144
- xOffset: 0,
145
- yOffset: 0,
146
- };
147
-
148
142
  Tooltip.Label = Label;
149
143
 
150
144
  export default Tooltip;
@@ -34,7 +34,9 @@ export function getExtension( filename = '' ): string {
34
34
  * @return Whether the file is a video.
35
35
  */
36
36
  export function isVideoType( filename: string = '' ): boolean {
37
- if ( ! filename ) return false;
37
+ if ( ! filename ) {
38
+ return false;
39
+ }
38
40
  return (
39
41
  filename.startsWith( 'data:video/' ) ||
40
42
  VIDEO_EXTENSIONS.includes( getExtension( filename ) )
@@ -92,6 +92,7 @@ Size of the control.
92
92
  Available units for custom font size selection.
93
93
 
94
94
  - Required: No
95
+ - Default: `[ 'px', 'em', 'rem' ]`
95
96
 
96
97
  ### `value`: `number | string`
97
98
 
@@ -36,6 +36,8 @@ import FontSizePickerSelect from './font-size-picker-select';
36
36
  import FontSizePickerToggleGroup from './font-size-picker-toggle-group';
37
37
  import { T_SHIRT_NAMES } from './constants';
38
38
 
39
+ const DEFAULT_UNITS = [ 'px', 'em', 'rem' ];
40
+
39
41
  const UnforwardedFontSizePicker = (
40
42
  props: FontSizePickerProps,
41
43
  ref: ForwardedRef< any >
@@ -47,14 +49,14 @@ const UnforwardedFontSizePicker = (
47
49
  disableCustomFontSizes = false,
48
50
  onChange,
49
51
  size = 'default',
50
- units: unitsProp,
52
+ units: unitsProp = DEFAULT_UNITS,
51
53
  value,
52
54
  withSlider = false,
53
55
  withReset = true,
54
56
  } = props;
55
57
 
56
58
  const units = useCustomUnits( {
57
- availableUnits: unitsProp || [ 'px', 'em', 'rem' ],
59
+ availableUnits: unitsProp,
58
60
  } );
59
61
 
60
62
  const shouldUseSelectControl = fontSizes.length > 5;
@@ -84,7 +84,6 @@ Default.args = {
84
84
  size: 26,
85
85
  },
86
86
  ],
87
- units: [ 'px', 'em', 'rem' ],
88
87
  value: 16,
89
88
  withSlider: false,
90
89
  };
@@ -28,6 +28,8 @@ export type FontSizePickerProps = {
28
28
  ) => void;
29
29
  /**
30
30
  * Available units for custom font size selection.
31
+ *
32
+ * @default `[ 'px', 'em', 'rem' ]`
31
33
  */
32
34
  units?: string[];
33
35
  /**
@@ -29,9 +29,9 @@
29
29
 
30
30
  // Header top bar when Distraction free mode is on.
31
31
  &.is-distraction-free .interface-interface-skeleton__header .edit-post-header,
32
- .interface-interface-skeleton__sidebar .edit-post-layout__toggle-sidebar-panel,
33
- .interface-interface-skeleton__actions .edit-post-layout__toggle-publish-panel,
34
- .interface-interface-skeleton__actions .edit-post-layout__toggle-entities-saved-states-panel,
32
+ .interface-interface-skeleton__sidebar .editor-layout__toggle-sidebar-panel,
33
+ .interface-interface-skeleton__actions .editor-layout__toggle-publish-panel,
34
+ .interface-interface-skeleton__actions .editor-layout__toggle-entities-saved-states-panel,
35
35
  .editor-post-publish-panel {
36
36
  outline: 4px solid $components-color-accent;
37
37
  outline-offset: -4px;
@@ -155,7 +155,9 @@ function InputField(
155
155
  target,
156
156
  };
157
157
 
158
- if ( ! distance ) return;
158
+ if ( ! distance ) {
159
+ return;
160
+ }
159
161
  event.stopPropagation();
160
162
 
161
163
  /**
@@ -15,7 +15,9 @@ export default function Label( {
15
15
  htmlFor,
16
16
  ...props
17
17
  }: WordPressComponentProps< InputControlLabelProps, 'label', false > ) {
18
- if ( ! children ) return null;
18
+ if ( ! children ) {
19
+ return null;
20
+ }
19
21
 
20
22
  if ( hideLabelFromVision ) {
21
23
  return (
@@ -2,13 +2,18 @@
2
2
  * External dependencies
3
3
  */
4
4
  import type { Meta, StoryFn } from '@storybook/react';
5
-
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+ import { seen, unseen } from '@wordpress/icons';
9
+ import { useState } from '@wordpress/element';
6
10
  /**
7
11
  * Internal dependencies
8
12
  */
9
13
  import InputControl from '..';
10
14
  import { InputControlPrefixWrapper } from '../input-prefix-wrapper';
11
15
  import { InputControlSuffixWrapper } from '../input-suffix-wrapper';
16
+ import Button from '../../button';
12
17
 
13
18
  const meta: Meta< typeof InputControl > = {
14
19
  title: 'Components (Experimental)/InputControl',
@@ -82,3 +87,28 @@ WithEdgeLabel.args = {
82
87
  __unstableInputWidth: '20em',
83
88
  labelPosition: 'edge',
84
89
  };
90
+
91
+ export const ShowPassword: StoryFn< typeof InputControl > = ( args ) => {
92
+ const [ visible, setVisible ] = useState( false );
93
+ return (
94
+ <InputControl
95
+ type={ visible ? 'text' : 'password' }
96
+ label="Password"
97
+ suffix={
98
+ <InputControlSuffixWrapper>
99
+ <div style={ { display: 'flex' } }>
100
+ <Button
101
+ size="small"
102
+ icon={ visible ? unseen : seen }
103
+ onClick={ () => setVisible( ( value ) => ! value ) }
104
+ label={
105
+ visible ? 'Hide password' : 'Show password'
106
+ }
107
+ />
108
+ </div>
109
+ </InputControlSuffixWrapper>
110
+ }
111
+ { ...args }
112
+ />
113
+ );
114
+ };
@@ -107,9 +107,13 @@ const containerWidthStyles = ( {
107
107
  __unstableInputWidth,
108
108
  labelPosition,
109
109
  }: ContainerProps ) => {
110
- if ( ! __unstableInputWidth ) return css( { width: '100%' } );
110
+ if ( ! __unstableInputWidth ) {
111
+ return css( { width: '100%' } );
112
+ }
111
113
 
112
- if ( labelPosition === 'side' ) return '';
114
+ if ( labelPosition === 'side' ) {
115
+ return '';
116
+ }
113
117
 
114
118
  if ( labelPosition === 'edge' ) {
115
119
  return css( {
@@ -143,7 +147,9 @@ type InputProps = {
143
147
  };
144
148
 
145
149
  const disabledStyles = ( { disabled }: InputProps ) => {
146
- if ( ! disabled ) return '';
150
+ if ( ! disabled ) {
151
+ return '';
152
+ }
147
153
 
148
154
  return css( {
149
155
  color: COLORS.ui.textDisabled,
@@ -161,7 +167,9 @@ export const fontSizeStyles = ( { inputSize: size }: InputProps ) => {
161
167
  const fontSize = sizes[ size as Size ] || sizes.default;
162
168
  const fontSizeMobile = '16px';
163
169
 
164
- if ( ! fontSize ) return '';
170
+ if ( ! fontSize ) {
171
+ return '';
172
+ }
165
173
 
166
174
  return css`
167
175
  font-size: ${ fontSizeMobile };
@@ -112,10 +112,13 @@ describe( 'InputControl', () => {
112
112
  const onKeyDown = ( { key } ) => {
113
113
  heldKeySet.add( key );
114
114
  if ( key === 'Escape' ) {
115
- if ( heldKeySet.has( 'Meta' ) ) setState( 'qux' );
116
- else if ( heldKeySet.has( 'Alt' ) )
115
+ if ( heldKeySet.has( 'Meta' ) ) {
116
+ setState( 'qux' );
117
+ } else if ( heldKeySet.has( 'Alt' ) ) {
117
118
  setState( undefined );
118
- else setState( '' );
119
+ } else {
120
+ setState( '' );
121
+ }
119
122
  }
120
123
  };
121
124
  const onKeyUp = ( { key } ) => heldKeySet.delete( key );
@@ -204,8 +207,9 @@ describe( 'InputControl', () => {
204
207
  if (
205
208
  action.type === 'COMMIT' &&
206
209
  action.payload.event.type === 'blur'
207
- )
210
+ ) {
208
211
  value = value.replace( /\bnow\b/, 'meow' );
212
+ }
209
213
 
210
214
  return { ...state, value };
211
215
  } }
@@ -86,10 +86,11 @@ export function useDraft( props: {
86
86
  useLayoutEffect( () => {
87
87
  const { current: previousValue } = refPreviousValue;
88
88
  refPreviousValue.current = props.value;
89
- if ( draft.value !== undefined && ! draft.isStale )
89
+ if ( draft.value !== undefined && ! draft.isStale ) {
90
90
  setDraft( { ...draft, isStale: true } );
91
- else if ( draft.isStale && props.value !== previousValue )
91
+ } else if ( draft.isStale && props.value !== previousValue ) {
92
92
  setDraft( {} );
93
+ }
93
94
  }, [ props.value, draft ] );
94
95
 
95
96
  const onChange: InputChangeCallback = ( nextValue, extra ) => {
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import type { ElementType } from 'react';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -32,11 +27,7 @@ export function useItem( props: WordPressComponentProps< ItemProps, 'div' > ) {
32
27
 
33
28
  const size = sizeProp || contextSize;
34
29
 
35
- const as =
36
- asProp ||
37
- ( ( typeof onClick !== 'undefined'
38
- ? 'button'
39
- : 'div' ) as ElementType );
30
+ const as = asProp || ( typeof onClick !== 'undefined' ? 'button' : 'div' );
40
31
 
41
32
  const cx = useCx();
42
33
 
@@ -11,8 +11,8 @@ Snapshot Diff:
11
11
  role="listitem"
12
12
  >
13
13
  <div
14
- - class="components-item css-1n28wmo-View-medium-item-spacedAround e19lxcc00"
15
- + class="components-item css-gg7ygh-View-large-item-spacedAround e19lxcc00"
14
+ - class="components-item css-au4yox-PolymorphicDiv-medium-item-spacedAround e19lxcc00"
15
+ + class="components-item css-1h3jinl-PolymorphicDiv-large-item-spacedAround e19lxcc00"
16
16
  data-wp-c16t="true"
17
17
  data-wp-component="Item"
18
18
  >
@@ -24,8 +24,8 @@ Snapshot Diff:
24
24
  role="listitem"
25
25
  >
26
26
  <div
27
- - class="components-item css-1n28wmo-View-medium-item-spacedAround e19lxcc00"
28
- + class="components-item css-gg7ygh-View-large-item-spacedAround e19lxcc00"
27
+ - class="components-item css-au4yox-PolymorphicDiv-medium-item-spacedAround e19lxcc00"
28
+ + class="components-item css-1h3jinl-PolymorphicDiv-large-item-spacedAround e19lxcc00"
29
29
  data-wp-c16t="true"
30
30
  data-wp-component="Item"
31
31
  >
@@ -44,8 +44,8 @@ Snapshot Diff:
44
44
  role="listitem"
45
45
  >
46
46
  <div
47
- - class="components-item css-1lf4kzd-View-medium-item e19lxcc00"
48
- + class="components-item css-1vv4aem-View-large-item e19lxcc00"
47
+ - class="components-item css-tpom78-PolymorphicDiv-medium-item e19lxcc00"
48
+ + class="components-item css-vss65r-PolymorphicDiv-large-item e19lxcc00"
49
49
  data-wp-c16t="true"
50
50
  data-wp-component="Item"
51
51
  >
@@ -114,8 +114,8 @@ Snapshot Diff:
114
114
  @@ -1,18 +1,18 @@
115
115
  <div>
116
116
  <div
117
- - class="components-item-group css-kj8mvb-View-rounded e19lxcc00"
118
- + class="components-item-group css-18qvw1m-View-separated-rounded e19lxcc00"
117
+ - class="components-item-group css-1iattls-PolymorphicDiv-rounded e19lxcc00"
118
+ + class="components-item-group css-zgfros-PolymorphicDiv-separated-rounded e19lxcc00"
119
119
  data-wp-c16t="true"
120
120
  data-wp-component="ItemGroup"
121
121
  role="list"
@@ -125,8 +125,8 @@ Snapshot Diff:
125
125
  role="listitem"
126
126
  >
127
127
  <div
128
- - class="components-item css-1n28wmo-View-medium-item-spacedAround e19lxcc00"
129
- + class="components-item css-1lf4kzd-View-medium-item e19lxcc00"
128
+ - class="components-item css-au4yox-PolymorphicDiv-medium-item-spacedAround e19lxcc00"
129
+ + class="components-item css-tpom78-PolymorphicDiv-medium-item e19lxcc00"
130
130
  data-wp-c16t="true"
131
131
  data-wp-component="Item"
132
132
  >
@@ -142,8 +142,8 @@ Snapshot Diff:
142
142
  @@ -1,18 +1,18 @@
143
143
  <div>
144
144
  <div
145
- - class="components-item-group css-kj8mvb-View-rounded e19lxcc00"
146
- + class="components-item-group css-acyoj6-View-bordered-rounded e19lxcc00"
145
+ - class="components-item-group css-1iattls-PolymorphicDiv-rounded e19lxcc00"
146
+ + class="components-item-group css-1ibn92o-PolymorphicDiv-bordered-rounded e19lxcc00"
147
147
  data-wp-c16t="true"
148
148
  data-wp-component="ItemGroup"
149
149
  role="list"
@@ -153,8 +153,8 @@ Snapshot Diff:
153
153
  role="listitem"
154
154
  >
155
155
  <div
156
- - class="components-item css-1n28wmo-View-medium-item-spacedAround e19lxcc00"
157
- + class="components-item css-1lf4kzd-View-medium-item e19lxcc00"
156
+ - class="components-item css-au4yox-PolymorphicDiv-medium-item-spacedAround e19lxcc00"
157
+ + class="components-item css-tpom78-PolymorphicDiv-medium-item e19lxcc00"
158
158
  data-wp-c16t="true"
159
159
  data-wp-component="Item"
160
160
  >
@@ -170,8 +170,8 @@ Snapshot Diff:
170
170
  @@ -1,8 +1,8 @@
171
171
  <div>
172
172
  <div
173
- - class="components-item-group css-kj8mvb-View-rounded e19lxcc00"
174
- + class="components-item-group css-1mm2cvy-View e19lxcc00"
173
+ - class="components-item-group css-1iattls-PolymorphicDiv-rounded e19lxcc00"
174
+ + class="components-item-group css-161q9d5-PolymorphicDiv e19lxcc00"
175
175
  data-wp-c16t="true"
176
176
  data-wp-component="ItemGroup"
177
177
  role="list"
@@ -51,7 +51,9 @@ export function getGradientAngle( gradientValue ) {
51
51
  }
52
52
  } else if ( angleType === 'angle' ) {
53
53
  return parseFloat( angle );
54
- } else return 4 * angleBase;
54
+ } else {
55
+ return 4 * angleBase;
56
+ }
55
57
  }
56
58
 
57
59
  export function getGradientColorGroup( gradientValue ) {
@@ -18,8 +18,10 @@ import {
18
18
  */
19
19
  import useScroll from './use-scroll';
20
20
  import KeyboardAvoidingView from '../keyboard-avoiding-view';
21
+ import { OPTIMIZATION_ITEMS_THRESHOLD, OPTIMIZATION_PROPS } from './shared';
21
22
 
22
23
  const AnimatedFlatList = Animated.createAnimatedComponent( FlatList );
24
+ const EMPTY_OBJECT = {};
23
25
 
24
26
  export const KeyboardAwareFlatList = ( { onScroll, ...props }, ref ) => {
25
27
  const { extraScrollHeight, scrollEnabled, shouldPreventAutomaticScroll } =
@@ -41,8 +43,6 @@ export const KeyboardAwareFlatList = ( { onScroll, ...props }, ref ) => {
41
43
 
42
44
  const getFlatListRef = useCallback(
43
45
  ( flatListRef ) => {
44
- // On Android, we get the ref of the associated scroll
45
- // view to the FlatList.
46
46
  scrollViewRef.current = flatListRef?.getNativeScrollRef();
47
47
  },
48
48
  [ scrollViewRef ]
@@ -57,12 +57,21 @@ export const KeyboardAwareFlatList = ( { onScroll, ...props }, ref ) => {
57
57
  };
58
58
  } );
59
59
 
60
+ const optimizationProps =
61
+ props.data?.length > OPTIMIZATION_ITEMS_THRESHOLD
62
+ ? OPTIMIZATION_PROPS
63
+ : EMPTY_OBJECT;
64
+
60
65
  return (
61
66
  <KeyboardAvoidingView style={ { flex: 1 } }>
62
67
  <AnimatedFlatList
63
68
  ref={ getFlatListRef }
64
69
  onScroll={ scrollHandler }
65
70
  onContentSizeChange={ onContentSizeChange }
71
+ // Disable clipping to fix focus losing.
72
+ // See https://github.com/wordpress-mobile/gutenberg-mobile/pull/741#issuecomment-472746541
73
+ removeClippedSubviews={ false }
74
+ { ...optimizationProps }
66
75
  { ...props }
67
76
  />
68
77
  </KeyboardAvoidingView>
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
-
5
- import { ScrollView, FlatList } from 'react-native';
4
+ import { FlatList, View } from 'react-native';
6
5
  import Animated from 'react-native-reanimated';
7
6
 
8
7
  /**
@@ -22,9 +21,12 @@ import { useThrottle } from '@wordpress/compose';
22
21
  import useScroll from './use-scroll';
23
22
  import useTextInputOffset from './use-text-input-offset';
24
23
  import useTextInputCaretPosition from './use-text-input-caret-position';
24
+ import { OPTIMIZATION_ITEMS_THRESHOLD, OPTIMIZATION_PROPS } from './shared';
25
+ import styles from './styles.scss';
25
26
 
26
27
  const DEFAULT_FONT_SIZE = 16;
27
- const AnimatedScrollView = Animated.createAnimatedComponent( ScrollView );
28
+ const AnimatedFlatList = Animated.createAnimatedComponent( FlatList );
29
+ const EMPTY_OBJECT = {};
28
30
 
29
31
  /** @typedef {import('@wordpress/element').RefObject} RefObject */
30
32
  /**
@@ -35,7 +37,6 @@ const AnimatedScrollView = Animated.createAnimatedComponent( ScrollView );
35
37
  * @param {number} props.extraScrollHeight Extra scroll height for the content.
36
38
  * @param {Function} props.onScroll Function to be called when the list is scrolled.
37
39
  * @param {boolean} props.scrollEnabled Whether the list can be scrolled.
38
- * @param {Object} props.scrollViewStyle Additional style for the ScrollView component.
39
40
  * @param {boolean} props.shouldPreventAutomaticScroll Whether to prevent scrolling when there's a Keyboard offset set.
40
41
  * @param {Object} props... Other props to pass to the FlatList component.
41
42
  * @param {RefObject} ref
@@ -46,7 +47,6 @@ export const KeyboardAwareFlatList = (
46
47
  extraScrollHeight,
47
48
  onScroll,
48
49
  scrollEnabled,
49
- scrollViewStyle,
50
50
  shouldPreventAutomaticScroll,
51
51
  ...props
52
52
  },
@@ -105,7 +105,12 @@ export const KeyboardAwareFlatList = (
105
105
  // extra padding at the bottom.
106
106
  const contentInset = { bottom: keyboardOffset };
107
107
 
108
- const style = [ { flex: 1 }, scrollViewStyle ];
108
+ const getFlatListRef = useCallback(
109
+ ( flatListRef ) => {
110
+ scrollViewRef.current = flatListRef?.getNativeScrollRef();
111
+ },
112
+ [ scrollViewRef ]
113
+ );
109
114
 
110
115
  useImperativeHandle( ref, () => {
111
116
  return {
@@ -116,20 +121,26 @@ export const KeyboardAwareFlatList = (
116
121
  };
117
122
  } );
118
123
 
124
+ const optimizationProps =
125
+ props.data?.length > OPTIMIZATION_ITEMS_THRESHOLD
126
+ ? OPTIMIZATION_PROPS
127
+ : EMPTY_OBJECT;
128
+
119
129
  return (
120
- <AnimatedScrollView
121
- automaticallyAdjustContentInsets={ false }
122
- contentInset={ contentInset }
123
- keyboardShouldPersistTaps="handled"
124
- onContentSizeChange={ onContentSizeChange }
125
- onScroll={ scrollHandler }
126
- ref={ scrollViewRef }
127
- scrollEnabled={ scrollEnabled }
128
- scrollEventThrottle={ 16 }
129
- style={ style }
130
- >
131
- <FlatList { ...props } scrollEnabled={ false } />
132
- </AnimatedScrollView>
130
+ <View style={ styles.list__container }>
131
+ <AnimatedFlatList
132
+ ref={ getFlatListRef }
133
+ automaticallyAdjustContentInsets={ false }
134
+ contentInset={ contentInset }
135
+ keyboardShouldPersistTaps="handled"
136
+ onContentSizeChange={ onContentSizeChange }
137
+ onScroll={ scrollHandler }
138
+ scrollEventThrottle={ 16 }
139
+ style={ styles.list__content }
140
+ { ...optimizationProps }
141
+ { ...props }
142
+ />
143
+ </View>
133
144
  );
134
145
  };
135
146
 
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Optimization properties for FlatList.
3
+ * @typedef {Object} OptimizationProps
4
+ * @property {number} maxToRenderPerBatch - Controls the amount of items rendered per batch during scrolling.
5
+ * Increasing this number reduces visual blank areas but may affect responsiveness.
6
+ * Default: 10
7
+ * @property {number} windowSize - Measurement unit representing viewport height.
8
+ * Default: 21 (10 viewports above, 10 below, and 1 in between).
9
+ * Larger values reduce chances of seeing blank spaces while scrolling but increase memory consumption.
10
+ * Smaller values save memory but increase chances of seeing blank areas.
11
+ */
12
+
13
+ /**
14
+ * Threshold for applying optimization settings.
15
+ * @type {number}
16
+ */
17
+ export const OPTIMIZATION_ITEMS_THRESHOLD = 30;
18
+
19
+ /**
20
+ * Optimization properties for FlatList.
21
+ * @type {OptimizationProps}
22
+ */
23
+ export const OPTIMIZATION_PROPS = {
24
+ maxToRenderPerBatch: 15,
25
+ windowSize: 17,
26
+ };
@@ -0,0 +1,8 @@
1
+ .list__container {
2
+ flex-grow: 1;
3
+ align-items: stretch;
4
+ }
5
+
6
+ .list__content {
7
+ margin-bottom: $mobile-block-toolbar-height;
8
+ }
@@ -25,7 +25,9 @@ export function modalize( modalElement?: HTMLDivElement ) {
25
25
  const hiddenElements: Element[] = [];
26
26
  hiddenElementsByDepth.push( hiddenElements );
27
27
  for ( const element of elements ) {
28
- if ( element === modalElement ) continue;
28
+ if ( element === modalElement ) {
29
+ continue;
30
+ }
29
31
 
30
32
  if ( elementShouldBeHidden( element ) ) {
31
33
  element.setAttribute( 'aria-hidden', 'true' );
@@ -56,8 +58,11 @@ export function elementShouldBeHidden( element: Element ) {
56
58
  */
57
59
  export function unmodalize() {
58
60
  const hiddenElements = hiddenElementsByDepth.pop();
59
- if ( ! hiddenElements ) return;
61
+ if ( ! hiddenElements ) {
62
+ return;
63
+ }
60
64
 
61
- for ( const element of hiddenElements )
65
+ for ( const element of hiddenElements ) {
62
66
  element.removeAttribute( 'aria-hidden' );
67
+ }
63
68
  }
@@ -154,7 +154,9 @@ function UnforwardedModal(
154
154
  useEffect( () => {
155
155
  dismissers.push( refOnRequestClose );
156
156
  const [ first, second ] = dismissers;
157
- if ( second ) first?.current?.();
157
+ if ( second ) {
158
+ first?.current?.();
159
+ }
158
160
 
159
161
  const nested = nestedDismissers.current;
160
162
  return () => {
@@ -243,7 +245,9 @@ function UnforwardedModal(
243
245
  onPointerUp: ( { target, button } ) => {
244
246
  const isSameTarget = target === pressTarget;
245
247
  pressTarget = null;
246
- if ( button === 0 && isSameTarget ) onRequestClose();
248
+ if ( button === 0 && isSameTarget ) {
249
+ onRequestClose();
250
+ }
247
251
  },
248
252
  };
249
253
 
@@ -178,7 +178,9 @@ describe( 'Modal', () => {
178
178
  { isShown && (
179
179
  <Modal
180
180
  onKeyDown={ ( { key } ) => {
181
- if ( key === 'o' ) setIsShown( false );
181
+ if ( key === 'o' ) {
182
+ setIsShown( false );
183
+ }
182
184
  } }
183
185
  onRequestClose={ noop }
184
186
  >
@@ -402,12 +404,17 @@ describe( 'Modal', () => {
402
404
  metaKey,
403
405
  } ) => {
404
406
  if ( key === 'a' ) {
405
- if ( metaKey ) return setIsA1Shown( ( v ) => ! v );
407
+ if ( metaKey ) {
408
+ return setIsA1Shown( ( v ) => ! v );
409
+ }
406
410
  return setIsAShown( ( v ) => ! v );
407
411
  }
408
- if ( key === 'b' ) return setIsBShown( ( v ) => ! v );
409
- if ( key === 'c' )
412
+ if ( key === 'b' ) {
413
+ return setIsBShown( ( v ) => ! v );
414
+ }
415
+ if ( key === 'c' ) {
410
416
  return setIsClassOverriden( ( v ) => ! v );
417
+ }
411
418
  };
412
419
  document.addEventListener( 'keydown', toggles );
413
420
  return () =>
@@ -15,7 +15,7 @@ import { COLORS } from '../../utils/colors-values';
15
15
  import Button from '../../button';
16
16
  import { Text } from '../../text';
17
17
  import { Heading } from '../../heading';
18
- import { reduceMotion, rtl } from '../../utils';
18
+ import { rtl } from '../../utils';
19
19
  import { space } from '../../utils/space';
20
20
 
21
21
  export const NavigationUI = styled.div`
@@ -173,7 +173,6 @@ export const ItemBadgeUI = styled.span`
173
173
  display: inline-flex;
174
174
  padding: ${ space( 1 ) } ${ space( 3 ) };
175
175
  border-radius: 2px;
176
- animation: fade-in 250ms ease-out;
177
176
 
178
177
  @keyframes fade-in {
179
178
  from {
@@ -184,7 +183,9 @@ export const ItemBadgeUI = styled.span`
184
183
  }
185
184
  }
186
185
 
187
- ${ reduceMotion( 'animation' ) };
186
+ @media not ( prefers-reduced-motion ) {
187
+ animation: fade-in 250ms ease-out;
188
+ }
188
189
  `;
189
190
 
190
191
  export const ItemTitleUI = styled( Text )`