@wordpress/components 32.5.0 → 32.6.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 (282) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +40 -0
  3. package/README.md +18 -4
  4. package/build/alignment-matrix-control/cell.cjs +3 -3
  5. package/build/alignment-matrix-control/cell.cjs.map +2 -2
  6. package/build/alignment-matrix-control/index.cjs +3 -3
  7. package/build/alignment-matrix-control/index.cjs.map +2 -2
  8. package/build/autocomplete/autocompleter-ui.cjs +75 -79
  9. package/build/autocomplete/autocompleter-ui.cjs.map +2 -2
  10. package/build/autocomplete/get-autocomplete-match.cjs +91 -0
  11. package/build/autocomplete/get-autocomplete-match.cjs.map +7 -0
  12. package/build/autocomplete/index.cjs +104 -107
  13. package/build/autocomplete/index.cjs.map +3 -3
  14. package/build/box-control/index.cjs +0 -8
  15. package/build/box-control/index.cjs.map +2 -2
  16. package/build/box-control/utils.cjs +1 -10
  17. package/build/box-control/utils.cjs.map +2 -2
  18. package/build/calendar/utils/use-localization-props.cjs +3 -2
  19. package/build/calendar/utils/use-localization-props.cjs.map +2 -2
  20. package/build/custom-gradient-picker/index.cjs.map +2 -2
  21. package/build/custom-select-control/index.cjs.map +3 -3
  22. package/build/custom-select-control-v2/custom-select.cjs +2 -2
  23. package/build/custom-select-control-v2/custom-select.cjs.map +2 -2
  24. package/build/custom-select-control-v2/index.cjs.map +3 -3
  25. package/build/date-time/{date → date-picker}/index.cjs +6 -6
  26. package/build/date-time/{date → date-picker}/index.cjs.map +2 -2
  27. package/build/date-time/{date → date-picker}/styles.cjs +17 -17
  28. package/build/date-time/{date → date-picker}/styles.cjs.map +2 -2
  29. package/build/date-time/{date → date-picker}/use-lilius/index.cjs +1 -1
  30. package/build/date-time/{date → date-picker}/use-lilius/index.cjs.map +1 -1
  31. package/build/date-time/date-time/index.cjs +6 -6
  32. package/build/date-time/date-time/index.cjs.map +2 -2
  33. package/build/date-time/index.cjs +4 -4
  34. package/build/date-time/index.cjs.map +2 -2
  35. package/build/date-time/{time → time-picker}/index.cjs +6 -6
  36. package/build/date-time/time-picker/index.cjs.map +7 -0
  37. package/build/date-time/{time → time-picker}/styles.cjs +21 -21
  38. package/build/date-time/{time → time-picker}/styles.cjs.map +2 -2
  39. package/build/date-time/{time → time-picker}/time-input/index.cjs +1 -1
  40. package/build/date-time/{time → time-picker}/time-input/index.cjs.map +1 -1
  41. package/build/date-time/{time → time-picker}/timezone.cjs +1 -1
  42. package/build/date-time/{time → time-picker}/timezone.cjs.map +1 -1
  43. package/build/modal/index.cjs.map +2 -2
  44. package/build/palette-edit/index.cjs.map +2 -2
  45. package/build/radio-control/index.cjs +2 -0
  46. package/build/radio-control/index.cjs.map +2 -2
  47. package/build/sandbox/index.cjs +127 -3
  48. package/build/sandbox/index.cjs.map +2 -2
  49. package/build/textarea-control/styles/textarea-control-styles.cjs +3 -3
  50. package/build/textarea-control/styles/textarea-control-styles.cjs.map +2 -2
  51. package/build/validated-form-controls/control-with-error.cjs +12 -8
  52. package/build/validated-form-controls/control-with-error.cjs.map +2 -2
  53. package/build-module/alignment-matrix-control/cell.mjs +3 -3
  54. package/build-module/alignment-matrix-control/cell.mjs.map +2 -2
  55. package/build-module/alignment-matrix-control/index.mjs +3 -3
  56. package/build-module/alignment-matrix-control/index.mjs.map +2 -2
  57. package/build-module/autocomplete/autocompleter-ui.mjs +74 -78
  58. package/build-module/autocomplete/autocompleter-ui.mjs.map +2 -2
  59. package/build-module/autocomplete/get-autocomplete-match.mjs +56 -0
  60. package/build-module/autocomplete/get-autocomplete-match.mjs.map +7 -0
  61. package/build-module/autocomplete/index.mjs +103 -107
  62. package/build-module/autocomplete/index.mjs.map +3 -3
  63. package/build-module/box-control/index.mjs +1 -9
  64. package/build-module/box-control/index.mjs.map +2 -2
  65. package/build-module/box-control/utils.mjs +1 -9
  66. package/build-module/box-control/utils.mjs.map +2 -2
  67. package/build-module/calendar/utils/use-localization-props.mjs +3 -2
  68. package/build-module/calendar/utils/use-localization-props.mjs.map +2 -2
  69. package/build-module/custom-gradient-picker/index.mjs.map +2 -2
  70. package/build-module/custom-select-control/index.mjs +2 -2
  71. package/build-module/custom-select-control/index.mjs.map +2 -2
  72. package/build-module/custom-select-control-v2/custom-select.mjs +2 -2
  73. package/build-module/custom-select-control-v2/custom-select.mjs.map +2 -2
  74. package/build-module/custom-select-control-v2/index.mjs +2 -2
  75. package/build-module/custom-select-control-v2/index.mjs.map +2 -2
  76. package/build-module/date-time/{date → date-picker}/index.mjs +3 -3
  77. package/build-module/date-time/{date → date-picker}/index.mjs.map +2 -2
  78. package/build-module/date-time/{date → date-picker}/styles.mjs +17 -17
  79. package/build-module/date-time/{date → date-picker}/styles.mjs.map +2 -2
  80. package/build-module/date-time/{date → date-picker}/use-lilius/index.mjs +1 -1
  81. package/build-module/date-time/{date → date-picker}/use-lilius/index.mjs.map +1 -1
  82. package/build-module/date-time/date-time/index.mjs +2 -2
  83. package/build-module/date-time/date-time/index.mjs.map +1 -1
  84. package/build-module/date-time/index.mjs +2 -2
  85. package/build-module/date-time/index.mjs.map +1 -1
  86. package/build-module/date-time/{time → time-picker}/index.mjs +3 -3
  87. package/build-module/date-time/time-picker/index.mjs.map +7 -0
  88. package/build-module/date-time/{time → time-picker}/styles.mjs +21 -21
  89. package/build-module/date-time/{time → time-picker}/styles.mjs.map +2 -2
  90. package/build-module/date-time/{time → time-picker}/time-input/index.mjs +1 -1
  91. package/build-module/date-time/{time → time-picker}/time-input/index.mjs.map +1 -1
  92. package/build-module/date-time/{time → time-picker}/timezone.mjs +1 -1
  93. package/build-module/date-time/{time → time-picker}/timezone.mjs.map +1 -1
  94. package/build-module/modal/index.mjs.map +2 -2
  95. package/build-module/palette-edit/index.mjs.map +2 -2
  96. package/build-module/radio-control/index.mjs +2 -0
  97. package/build-module/radio-control/index.mjs.map +2 -2
  98. package/build-module/sandbox/index.mjs +128 -4
  99. package/build-module/sandbox/index.mjs.map +2 -2
  100. package/build-module/textarea-control/styles/textarea-control-styles.mjs +3 -3
  101. package/build-module/textarea-control/styles/textarea-control-styles.mjs.map +2 -2
  102. package/build-module/validated-form-controls/control-with-error.mjs +12 -8
  103. package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
  104. package/build-style/style-rtl.css +83 -26
  105. package/build-style/style.css +83 -26
  106. package/build-types/autocomplete/autocompleter-ui.d.ts +2 -2
  107. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  108. package/build-types/autocomplete/get-autocomplete-match.d.ts +11 -0
  109. package/build-types/autocomplete/get-autocomplete-match.d.ts.map +1 -0
  110. package/build-types/autocomplete/index.d.ts +8 -0
  111. package/build-types/autocomplete/index.d.ts.map +1 -1
  112. package/build-types/autocomplete/test/get-autocomplete-match.d.ts +2 -0
  113. package/build-types/autocomplete/test/get-autocomplete-match.d.ts.map +1 -0
  114. package/build-types/autocomplete/types.d.ts +23 -9
  115. package/build-types/autocomplete/types.d.ts.map +1 -1
  116. package/build-types/box-control/index.d.ts.map +1 -1
  117. package/build-types/box-control/utils.d.ts +7 -16
  118. package/build-types/box-control/utils.d.ts.map +1 -1
  119. package/build-types/button/stories/index.story.d.ts +0 -1
  120. package/build-types/button/stories/index.story.d.ts.map +1 -1
  121. package/build-types/calendar/utils/use-localization-props.d.ts +3 -3
  122. package/build-types/calendar/utils/use-localization-props.d.ts.map +1 -1
  123. package/build-types/checkbox-control/types.d.ts +4 -0
  124. package/build-types/checkbox-control/types.d.ts.map +1 -1
  125. package/build-types/custom-gradient-picker/constants.d.ts +2 -2
  126. package/build-types/custom-gradient-picker/index.d.ts.map +1 -1
  127. package/build-types/custom-select-control-v2/custom-select.d.ts +3 -3
  128. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  129. package/build-types/custom-select-control-v2/types.d.ts +1 -1
  130. package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
  131. package/build-types/date-time/date-picker/index.d.ts.map +1 -0
  132. package/build-types/date-time/date-picker/styles.d.ts.map +1 -0
  133. package/build-types/date-time/date-picker/test/index.d.ts.map +1 -0
  134. package/build-types/date-time/date-picker/test/use-lilius.d.ts.map +1 -0
  135. package/build-types/date-time/date-picker/use-lilius/index.d.ts.map +1 -0
  136. package/build-types/date-time/date-time/index.d.ts +2 -2
  137. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  138. package/build-types/date-time/index.d.ts +2 -2
  139. package/build-types/date-time/index.d.ts.map +1 -1
  140. package/build-types/date-time/stories/date.story.d.ts +1 -1
  141. package/build-types/date-time/stories/date.story.d.ts.map +1 -1
  142. package/build-types/date-time/stories/time.story.d.ts +1 -1
  143. package/build-types/date-time/stories/time.story.d.ts.map +1 -1
  144. package/build-types/date-time/{time → time-picker}/index.d.ts +1 -1
  145. package/build-types/date-time/time-picker/index.d.ts.map +1 -0
  146. package/build-types/date-time/time-picker/styles.d.ts.map +1 -0
  147. package/build-types/date-time/time-picker/test/index.d.ts.map +1 -0
  148. package/build-types/date-time/time-picker/time-input/index.d.ts.map +1 -0
  149. package/build-types/date-time/time-picker/time-input/test/index.d.ts.map +1 -0
  150. package/build-types/date-time/time-picker/timezone.d.ts.map +1 -0
  151. package/build-types/date-time/types.d.ts +1 -1
  152. package/build-types/date-time/types.d.ts.map +1 -1
  153. package/build-types/font-size-picker/constants.d.ts +2 -2
  154. package/build-types/font-size-picker/constants.d.ts.map +1 -1
  155. package/build-types/modal/index.d.ts.map +1 -1
  156. package/build-types/palette-edit/index.d.ts +1 -1
  157. package/build-types/palette-edit/index.d.ts.map +1 -1
  158. package/build-types/radio-control/index.d.ts.map +1 -1
  159. package/build-types/radio-control/types.d.ts +6 -0
  160. package/build-types/radio-control/types.d.ts.map +1 -1
  161. package/build-types/sandbox/index.d.ts +1 -1
  162. package/build-types/sandbox/index.d.ts.map +1 -1
  163. package/build-types/sandbox/types.d.ts +11 -0
  164. package/build-types/sandbox/types.d.ts.map +1 -1
  165. package/build-types/textarea-control/stories/index.story.d.ts.map +1 -1
  166. package/build-types/textarea-control/styles/textarea-control-styles.d.ts.map +1 -1
  167. package/build-types/validated-form-controls/components/checkbox-control.d.ts +2 -1
  168. package/build-types/validated-form-controls/components/checkbox-control.d.ts.map +1 -1
  169. package/build-types/validated-form-controls/components/radio-control.d.ts +2 -1
  170. package/build-types/validated-form-controls/components/radio-control.d.ts.map +1 -1
  171. package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
  172. package/package.json +21 -21
  173. package/src/alignment-matrix-control/README.md +1 -1
  174. package/src/alignment-matrix-control/style.module.scss +1 -1
  175. package/src/angle-picker-control/style.module.scss +1 -0
  176. package/src/autocomplete/README.md +2 -2
  177. package/src/autocomplete/autocompleter-ui.native.js +166 -173
  178. package/src/autocomplete/autocompleter-ui.tsx +114 -116
  179. package/src/autocomplete/get-autocomplete-match.ts +115 -0
  180. package/src/autocomplete/index.tsx +129 -208
  181. package/src/autocomplete/test/get-autocomplete-match.ts +338 -0
  182. package/src/autocomplete/test/index.tsx +112 -4
  183. package/src/autocomplete/types.ts +17 -10
  184. package/src/box-control/index.tsx +1 -19
  185. package/src/box-control/utils.ts +1 -19
  186. package/src/button/README.md +1 -1
  187. package/src/button/stories/index.story.tsx +0 -1
  188. package/src/button/style.scss +1 -7
  189. package/src/calendar/style.scss +3 -3
  190. package/src/calendar/utils/use-localization-props.ts +3 -4
  191. package/src/checkbox-control/style.scss +17 -5
  192. package/src/checkbox-control/types.ts +4 -0
  193. package/src/circular-option-picker/style.scss +1 -1
  194. package/src/color-palette/style.scss +1 -1
  195. package/src/css.d.ts +1 -0
  196. package/src/custom-gradient-picker/index.tsx +1 -0
  197. package/src/custom-select-control/index.tsx +3 -3
  198. package/src/custom-select-control-v2/custom-select.tsx +4 -4
  199. package/src/custom-select-control-v2/index.tsx +2 -2
  200. package/src/custom-select-control-v2/types.ts +1 -1
  201. package/src/date-time/README.md +3 -3
  202. package/src/date-time/date-picker/README.md +65 -0
  203. package/src/date-time/date-time/index.tsx +2 -2
  204. package/src/date-time/index.ts +2 -2
  205. package/src/date-time/stories/date.story.tsx +1 -1
  206. package/src/date-time/stories/time.story.tsx +1 -1
  207. package/src/date-time/time-picker/README.md +119 -0
  208. package/src/date-time/{time → time-picker}/index.tsx +1 -1
  209. package/src/date-time/types.ts +1 -1
  210. package/src/divider/README.md +5 -6
  211. package/src/dropdown-menu/style.scss +1 -1
  212. package/src/flex/stories/index.story.tsx +1 -1
  213. package/src/form-file-upload/README.md +3 -3
  214. package/src/form-toggle/style.scss +35 -2
  215. package/src/form-token-field/style.scss +12 -3
  216. package/src/gradient-picker/README.md +2 -2
  217. package/src/h-stack/README.md +10 -15
  218. package/src/h-stack/stories/index.story.tsx +2 -2
  219. package/src/heading/stories/index.story.tsx +1 -1
  220. package/src/higher-order/with-focus-outside/index.native.js +21 -20
  221. package/src/icon/README.md +1 -1
  222. package/src/menu/README.md +2 -2
  223. package/src/mobile/utils/get-px-from-css-unit.native.js +1 -1
  224. package/src/modal/index.tsx +1 -0
  225. package/src/palette-edit/index.tsx +1 -0
  226. package/src/radio-control/index.tsx +2 -0
  227. package/src/radio-control/style.scss +21 -2
  228. package/src/radio-control/test/index.tsx +10 -0
  229. package/src/radio-control/types.ts +6 -0
  230. package/src/sandbox/index.native.js +2 -2
  231. package/src/sandbox/index.tsx +191 -11
  232. package/src/sandbox/test/index.tsx +65 -24
  233. package/src/sandbox/types.ts +11 -0
  234. package/src/snackbar/style.scss +2 -2
  235. package/src/tab-panel/style.scss +1 -1
  236. package/src/tabs/README.md +6 -6
  237. package/src/text/stories/index.story.tsx +1 -1
  238. package/src/textarea-control/stories/index.story.tsx +3 -0
  239. package/src/textarea-control/styles/textarea-control-styles.ts +6 -0
  240. package/src/toggle-control/style.scss +1 -1
  241. package/src/toggle-control/test/index.tsx +8 -2
  242. package/src/toolbar/toolbar-button/toolbar-button-container.native.js +3 -1
  243. package/src/tree-select/README.md +1 -1
  244. package/src/v-stack/README.md +10 -15
  245. package/src/v-stack/stories/index.story.tsx +2 -2
  246. package/src/validated-form-controls/control-with-error.tsx +17 -12
  247. package/src/validated-form-controls/test/control-with-error.tsx +28 -1
  248. package/src/view/README.md +2 -5
  249. package/build/date-time/time/index.cjs.map +0 -7
  250. package/build-module/date-time/time/index.mjs.map +0 -7
  251. package/build-types/date-time/date/index.d.ts.map +0 -1
  252. package/build-types/date-time/date/styles.d.ts.map +0 -1
  253. package/build-types/date-time/date/test/index.d.ts.map +0 -1
  254. package/build-types/date-time/date/test/use-lilius.d.ts.map +0 -1
  255. package/build-types/date-time/date/use-lilius/index.d.ts.map +0 -1
  256. package/build-types/date-time/time/index.d.ts.map +0 -1
  257. package/build-types/date-time/time/styles.d.ts.map +0 -1
  258. package/build-types/date-time/time/test/index.d.ts.map +0 -1
  259. package/build-types/date-time/time/time-input/index.d.ts.map +0 -1
  260. package/build-types/date-time/time/time-input/test/index.d.ts.map +0 -1
  261. package/build-types/date-time/time/timezone.d.ts.map +0 -1
  262. package/src/button/stories/style.css +0 -8
  263. /package/build-types/date-time/{date → date-picker}/index.d.ts +0 -0
  264. /package/build-types/date-time/{date → date-picker}/styles.d.ts +0 -0
  265. /package/build-types/date-time/{date → date-picker}/test/index.d.ts +0 -0
  266. /package/build-types/date-time/{date → date-picker}/test/use-lilius.d.ts +0 -0
  267. /package/build-types/date-time/{date → date-picker}/use-lilius/index.d.ts +0 -0
  268. /package/build-types/date-time/{time → time-picker}/styles.d.ts +0 -0
  269. /package/build-types/date-time/{time → time-picker}/test/index.d.ts +0 -0
  270. /package/build-types/date-time/{time → time-picker}/time-input/index.d.ts +0 -0
  271. /package/build-types/date-time/{time → time-picker}/time-input/test/index.d.ts +0 -0
  272. /package/build-types/date-time/{time → time-picker}/timezone.d.ts +0 -0
  273. /package/src/date-time/{date → date-picker}/index.tsx +0 -0
  274. /package/src/date-time/{date → date-picker}/styles.ts +0 -0
  275. /package/src/date-time/{date → date-picker}/test/index.tsx +0 -0
  276. /package/src/date-time/{date → date-picker}/test/use-lilius.ts +0 -0
  277. /package/src/date-time/{date → date-picker}/use-lilius/index.ts +0 -0
  278. /package/src/date-time/{time → time-picker}/styles.ts +0 -0
  279. /package/src/date-time/{time → time-picker}/test/index.tsx +0 -0
  280. /package/src/date-time/{time → time-picker}/time-input/index.tsx +0 -0
  281. /package/src/date-time/{time → time-picker}/time-input/test/index.tsx +0 -0
  282. /package/src/date-time/{time → time-picker}/timezone.tsx +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/components",
3
- "version": "32.5.0",
3
+ "version": "32.6.0",
4
4
  "description": "UI components for WordPress.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -64,24 +64,24 @@
64
64
  "@types/highlight-words-core": "1.2.1",
65
65
  "@types/react": "^18.3.27",
66
66
  "@use-gesture/react": "^10.3.1",
67
- "@wordpress/a11y": "^4.43.0",
68
- "@wordpress/base-styles": "^6.19.0",
69
- "@wordpress/compose": "^7.43.0",
70
- "@wordpress/date": "^5.43.0",
71
- "@wordpress/deprecated": "^4.43.0",
72
- "@wordpress/dom": "^4.43.0",
73
- "@wordpress/element": "^6.43.0",
74
- "@wordpress/escape-html": "^3.43.0",
75
- "@wordpress/hooks": "^4.43.0",
76
- "@wordpress/html-entities": "^4.43.0",
77
- "@wordpress/i18n": "^6.16.0",
78
- "@wordpress/icons": "^12.1.0",
79
- "@wordpress/is-shallow-equal": "^5.43.0",
80
- "@wordpress/keycodes": "^4.43.0",
81
- "@wordpress/primitives": "^4.43.0",
82
- "@wordpress/private-apis": "^1.43.0",
83
- "@wordpress/rich-text": "^7.43.0",
84
- "@wordpress/warning": "^3.43.0",
67
+ "@wordpress/a11y": "^4.44.0",
68
+ "@wordpress/base-styles": "^6.20.0",
69
+ "@wordpress/compose": "^7.44.0",
70
+ "@wordpress/date": "^5.44.0",
71
+ "@wordpress/deprecated": "^4.44.0",
72
+ "@wordpress/dom": "^4.44.0",
73
+ "@wordpress/element": "^6.44.0",
74
+ "@wordpress/escape-html": "^3.44.0",
75
+ "@wordpress/hooks": "^4.44.0",
76
+ "@wordpress/html-entities": "^4.44.0",
77
+ "@wordpress/i18n": "^6.17.0",
78
+ "@wordpress/icons": "^12.2.0",
79
+ "@wordpress/is-shallow-equal": "^5.44.0",
80
+ "@wordpress/keycodes": "^4.44.0",
81
+ "@wordpress/primitives": "^4.44.0",
82
+ "@wordpress/private-apis": "^1.44.0",
83
+ "@wordpress/rich-text": "^7.44.0",
84
+ "@wordpress/warning": "^3.44.0",
85
85
  "change-case": "^4.1.2",
86
86
  "clsx": "^2.1.1",
87
87
  "colord": "^2.7.0",
@@ -107,7 +107,7 @@
107
107
  "@storybook/react-vite": "^10.2.8",
108
108
  "@testing-library/jest-dom": "^6.9.1",
109
109
  "@types/jest": "^29.5.14",
110
- "@wordpress/jest-console": "^8.43.0",
110
+ "@wordpress/jest-console": "^8.44.0",
111
111
  "snapshot-diff": "^0.10.0",
112
112
  "storybook": "^10.2.8",
113
113
  "timezone-mock": "^1.3.6"
@@ -119,5 +119,5 @@
119
119
  "publishConfig": {
120
120
  "access": "public"
121
121
  },
122
- "gitHead": "2cea90674d11aa521ec3f71652fb3a6a4c383969"
122
+ "gitHead": "b862d8c84121a47bbeff882f6c87e61681ce2e0d"
123
123
  }
@@ -43,7 +43,7 @@ underlying `grid` widget.
43
43
 
44
44
  ### `onChange`
45
45
 
46
- - Type: `(newValue: AlignmentMatrixControlValue) => void`
46
+ - Type: `((newValue: AlignmentMatrixControlValue) => void)`
47
47
  - Required: No
48
48
 
49
49
  A function that receives the updated alignment value.
@@ -15,7 +15,7 @@
15
15
  border-radius: $radius-medium;
16
16
  outline: none;
17
17
 
18
- cursor: pointer;
18
+ cursor: var(--wpds-cursor-control);
19
19
  }
20
20
 
21
21
  .grid-row {
@@ -31,6 +31,7 @@
31
31
  border-radius: $radius-round;
32
32
  box-sizing: border-box;
33
33
  display: block;
34
+ /* stylelint-disable-next-line plugin/use-logical-properties-and-values -- Geometric centering */
34
35
  left: 50%;
35
36
  top: 4px;
36
37
  transform: translateX(-50%);
@@ -78,7 +78,7 @@ In addition, a completer may optionally declare:
78
78
 
79
79
  #### name
80
80
 
81
- The name of the completer. Useful for identifying a specific completer to be overridden via extensibility hooks.
81
+ The name of the completer. Useful for identifying a specific completer to be overridden via extensibility hooks. Each completer should have a unique name.
82
82
 
83
83
  - Type: `String`
84
84
  - Required: Yes
@@ -145,7 +145,7 @@ A class name to apply to the autocompletion popup menu.
145
145
 
146
146
  #### isDebounced
147
147
 
148
- Whether to apply debouncing for the autocompleter. Set to true to enable debouncing.
148
+ Whether to debounce the autocompleter. This setting only affects the `options` argument; it is ignored by the `useItems`.
149
149
 
150
150
  - Type: `Boolean`
151
151
  - Required: No
@@ -34,185 +34,178 @@ import { __unstableAutocompletionItemsFill as AutocompletionItemsFill } from '..
34
34
 
35
35
  const { compose: stylesCompose } = StyleSheet;
36
36
 
37
- export function getAutoCompleterUI( autocompleter ) {
37
+ export function AutocompleterUI( {
38
+ autocompleter,
39
+ filterValue,
40
+ selectedIndex,
41
+ onChangeOptions,
42
+ onSelect,
43
+ reset,
44
+ } ) {
45
+ // The useItems hook is derived from the autocompleter prop. This is safe
46
+ // because the parent renders this component with a key that triggers
47
+ // remount when the completer changes.
38
48
  const useItems = autocompleter.useItems
39
49
  ? autocompleter.useItems
40
50
  : getDefaultUseItems( autocompleter );
51
+ const [ items ] = useItems( filterValue );
52
+ const filteredItems = items.filter( ( item ) => ! item.isDisabled );
53
+ const scrollViewRef = useRef();
54
+ const animationValue = useRef( new Animated.Value( 0 ) ).current;
55
+ const [ isVisible, setIsVisible ] = useState( false );
56
+
57
+ useEffect( () => {
58
+ if ( ! isVisible && filterValue.length > 0 ) {
59
+ setIsVisible( true );
60
+ }
61
+ }, [ isVisible, filterValue ] );
41
62
 
42
- function AutocompleterUI( {
43
- filterValue,
44
- selectedIndex,
45
- onChangeOptions,
46
- onSelect,
47
- value,
48
- reset,
49
- } ) {
50
- const [ items ] = useItems( filterValue );
51
- const filteredItems = items.filter( ( item ) => ! item.isDisabled );
52
- const scrollViewRef = useRef();
53
- const animationValue = useRef( new Animated.Value( 0 ) ).current;
54
- const [ isVisible, setIsVisible ] = useState( false );
55
- const { text } = value;
56
-
57
- useEffect( () => {
58
- if ( ! isVisible && text.length > 0 ) {
59
- setIsVisible( true );
60
- }
61
- }, [ isVisible, text ] );
62
-
63
- useLayoutEffect( () => {
64
- onChangeOptions( items );
65
- scrollViewRef.current?.scrollTo( { x: 0, animated: false } );
66
-
67
- if ( isVisible && text.length > 0 ) {
68
- startAnimation( true );
69
- } else if ( isVisible && text.length === 0 ) {
70
- startAnimation( false );
71
- }
72
- // We want to avoid introducing unexpected side effects.
73
- // See https://github.com/WordPress/gutenberg/pull/41820
74
- }, [ items, isVisible, text ] );
75
-
76
- const activeItemStyles = usePreferredColorSchemeStyle(
77
- styles[ 'components-autocomplete__item-active' ],
78
- styles[ 'components-autocomplete__item-active-dark' ]
79
- );
80
-
81
- const iconStyles = usePreferredColorSchemeStyle(
82
- styles[ 'components-autocomplete__icon' ],
83
- styles[ 'components-autocomplete__icon-active-dark' ]
84
- );
85
-
86
- const activeIconStyles = usePreferredColorSchemeStyle(
87
- styles[ 'components-autocomplete__icon-active ' ],
88
- styles[ 'components-autocomplete__icon-active-dark' ]
89
- );
90
-
91
- const textStyles = usePreferredColorSchemeStyle(
92
- styles[ 'components-autocomplete__text' ],
93
- styles[ 'components-autocomplete__text-dark' ]
94
- );
95
-
96
- const activeTextStyles = usePreferredColorSchemeStyle(
97
- styles[ 'components-autocomplete__text-active' ],
98
- styles[ 'components-autocomplete__text-active-dark' ]
99
- );
100
-
101
- const startAnimation = useCallback(
102
- ( show ) => {
103
- Animated.timing( animationValue, {
104
- toValue: show ? 1 : 0,
105
- duration: show ? 200 : 100,
106
- useNativeDriver: true,
107
- } ).start( ( { finished } ) => {
108
- if ( finished && ! show && isVisible ) {
109
- setIsVisible( false );
110
- reset();
111
- }
112
- } );
113
- },
114
- // We want to avoid introducing unexpected side effects.
115
- // See https://github.com/WordPress/gutenberg/pull/41820
116
- [ isVisible ]
117
- );
118
-
119
- const contentStyles = {
120
- transform: [
121
- {
122
- translateY: animationValue.interpolate( {
123
- inputRange: [ 0, 1 ],
124
- outputRange: [
125
- styles[ 'components-autocomplete' ].height,
126
- 0,
127
- ],
128
- } ),
129
- },
130
- ],
131
- };
132
-
133
- if ( ! filteredItems.length > 0 || ! isVisible ) {
134
- return null;
63
+ useLayoutEffect( () => {
64
+ onChangeOptions( items );
65
+ scrollViewRef.current?.scrollTo( { x: 0, animated: false } );
66
+
67
+ if ( isVisible && filterValue.length > 0 ) {
68
+ startAnimation( true );
69
+ } else if ( isVisible && filterValue.length === 0 ) {
70
+ startAnimation( false );
135
71
  }
72
+ // We want to avoid introducing unexpected side effects.
73
+ // See https://github.com/WordPress/gutenberg/pull/41820
74
+ }, [ items, isVisible, filterValue ] );
75
+
76
+ const activeItemStyles = usePreferredColorSchemeStyle(
77
+ styles[ 'components-autocomplete__item-active' ],
78
+ styles[ 'components-autocomplete__item-active-dark' ]
79
+ );
80
+
81
+ const iconStyles = usePreferredColorSchemeStyle(
82
+ styles[ 'components-autocomplete__icon' ],
83
+ styles[ 'components-autocomplete__icon-active-dark' ]
84
+ );
85
+
86
+ const activeIconStyles = usePreferredColorSchemeStyle(
87
+ styles[ 'components-autocomplete__icon-active ' ],
88
+ styles[ 'components-autocomplete__icon-active-dark' ]
89
+ );
90
+
91
+ const textStyles = usePreferredColorSchemeStyle(
92
+ styles[ 'components-autocomplete__text' ],
93
+ styles[ 'components-autocomplete__text-dark' ]
94
+ );
95
+
96
+ const activeTextStyles = usePreferredColorSchemeStyle(
97
+ styles[ 'components-autocomplete__text-active' ],
98
+ styles[ 'components-autocomplete__text-active-dark' ]
99
+ );
100
+
101
+ const startAnimation = useCallback(
102
+ ( show ) => {
103
+ Animated.timing( animationValue, {
104
+ toValue: show ? 1 : 0,
105
+ duration: show ? 200 : 100,
106
+ useNativeDriver: true,
107
+ } ).start( ( { finished } ) => {
108
+ if ( finished && ! show && isVisible ) {
109
+ setIsVisible( false );
110
+ reset();
111
+ }
112
+ } );
113
+ },
114
+ // We want to avoid introducing unexpected side effects.
115
+ // See https://github.com/WordPress/gutenberg/pull/41820
116
+ [ isVisible ]
117
+ );
118
+
119
+ const contentStyles = {
120
+ transform: [
121
+ {
122
+ translateY: animationValue.interpolate( {
123
+ inputRange: [ 0, 1 ],
124
+ outputRange: [
125
+ styles[ 'components-autocomplete' ].height,
126
+ 0,
127
+ ],
128
+ } ),
129
+ },
130
+ ],
131
+ };
136
132
 
137
- return (
138
- <AutocompletionItemsFill>
139
- <View style={ styles[ 'components-autocomplete' ] }>
140
- <Animated.View style={ contentStyles }>
141
- <BackgroundView>
142
- <ScrollView
143
- testID="autocompleter"
144
- ref={ scrollViewRef }
145
- horizontal
146
- contentContainerStyle={
147
- styles[ 'components-autocomplete__content' ]
148
- }
149
- showsHorizontalScrollIndicator={ false }
150
- keyboardShouldPersistTaps="always"
151
- accessibilityLabel={
152
- // translators: Slash inserter autocomplete results
153
- __( 'Slash inserter results' )
154
- }
155
- >
156
- { filteredItems.map( ( option, index ) => {
157
- const isActive = index === selectedIndex;
158
- const itemStyle = stylesCompose(
159
- styles[
160
- 'components-autocomplete__item'
161
- ],
162
- isActive && activeItemStyles
163
- );
164
- const textStyle = stylesCompose(
165
- textStyles,
166
- isActive && activeTextStyles
167
- );
168
- const iconStyle = stylesCompose(
169
- iconStyles,
170
- isActive && activeIconStyles
171
- );
172
- const iconSource =
173
- option?.value?.icon?.src ||
174
- option?.value?.icon;
175
-
176
- return (
177
- <TouchableOpacity
178
- activeOpacity={ 0.5 }
179
- style={ itemStyle }
180
- key={ index }
181
- onPress={ () => onSelect( option ) }
182
- accessibilityLabel={ sprintf(
183
- // translators: %s: Block name e.g. "Image block"
184
- __( '%s block' ),
185
- option?.value?.title
186
- ) }
187
- >
188
- <View
189
- style={
190
- styles[
191
- 'components-autocomplete__icon'
192
- ]
193
- }
194
- >
195
- <Icon
196
- icon={ iconSource }
197
- size={ 24 }
198
- style={ iconStyle }
199
- />
200
- </View>
201
- <Text style={ textStyle }>
202
- { option?.value?.title }
203
- </Text>
204
- </TouchableOpacity>
205
- );
206
- } ) }
207
- </ScrollView>
208
- </BackgroundView>
209
- </Animated.View>
210
- </View>
211
- </AutocompletionItemsFill>
212
- );
133
+ if ( ! filteredItems.length > 0 || ! isVisible ) {
134
+ return null;
213
135
  }
214
136
 
215
- return AutocompleterUI;
137
+ return (
138
+ <AutocompletionItemsFill>
139
+ <View style={ styles[ 'components-autocomplete' ] }>
140
+ <Animated.View style={ contentStyles }>
141
+ <BackgroundView>
142
+ <ScrollView
143
+ testID="autocompleter"
144
+ ref={ scrollViewRef }
145
+ horizontal
146
+ contentContainerStyle={
147
+ styles[ 'components-autocomplete__content' ]
148
+ }
149
+ showsHorizontalScrollIndicator={ false }
150
+ keyboardShouldPersistTaps="always"
151
+ accessibilityLabel={
152
+ // translators: Slash inserter autocomplete results
153
+ __( 'Slash inserter results' )
154
+ }
155
+ >
156
+ { filteredItems.map( ( option, index ) => {
157
+ const isActive = index === selectedIndex;
158
+ const itemStyle = stylesCompose(
159
+ styles[ 'components-autocomplete__item' ],
160
+ isActive && activeItemStyles
161
+ );
162
+ const textStyle = stylesCompose(
163
+ textStyles,
164
+ isActive && activeTextStyles
165
+ );
166
+ const iconStyle = stylesCompose(
167
+ iconStyles,
168
+ isActive && activeIconStyles
169
+ );
170
+ const iconSource =
171
+ option?.value?.icon?.src ||
172
+ option?.value?.icon;
173
+
174
+ return (
175
+ <TouchableOpacity
176
+ activeOpacity={ 0.5 }
177
+ style={ itemStyle }
178
+ key={ index }
179
+ onPress={ () => onSelect( option ) }
180
+ accessibilityLabel={ sprintf(
181
+ // translators: %s: Block name e.g. "Image block"
182
+ __( '%s block' ),
183
+ option?.value?.title
184
+ ) }
185
+ >
186
+ <View
187
+ style={
188
+ styles[
189
+ 'components-autocomplete__icon'
190
+ ]
191
+ }
192
+ >
193
+ <Icon
194
+ icon={ iconSource }
195
+ size={ 24 }
196
+ style={ iconStyle }
197
+ />
198
+ </View>
199
+ <Text style={ textStyle }>
200
+ { option?.value?.title }
201
+ </Text>
202
+ </TouchableOpacity>
203
+ );
204
+ } ) }
205
+ </ScrollView>
206
+ </BackgroundView>
207
+ </Animated.View>
208
+ </View>
209
+ </AutocompletionItemsFill>
210
+ );
216
211
  }
217
-
218
- export default getAutoCompleterUI;