@wordpress/components 19.12.0 → 19.13.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 (717) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/CONTRIBUTING.md +94 -12
  3. package/build/alignment-matrix-control/index.js +3 -3
  4. package/build/alignment-matrix-control/index.js.map +1 -1
  5. package/build/angle-picker-control/index.js +2 -2
  6. package/build/angle-picker-control/index.js.map +1 -1
  7. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  8. package/build/border-box-control/utils.js.map +1 -1
  9. package/build/border-control/border-control/hook.js.map +1 -1
  10. package/build/box-control/all-input-control.js +6 -10
  11. package/build/box-control/all-input-control.js.map +1 -1
  12. package/build/box-control/axial-input-controls.js.map +1 -1
  13. package/build/box-control/index.js +3 -7
  14. package/build/box-control/index.js.map +1 -1
  15. package/build/box-control/input-controls.js +6 -10
  16. package/build/box-control/input-controls.js.map +1 -1
  17. package/build/box-control/unit-control.js +4 -4
  18. package/build/box-control/unit-control.js.map +1 -1
  19. package/build/button/index.native.js +1 -3
  20. package/build/button/index.native.js.map +1 -1
  21. package/build/checkbox-control/index.js.map +1 -1
  22. package/build/color-picker/index.native.js.map +1 -1
  23. package/build/combobox-control/index.js +4 -2
  24. package/build/combobox-control/index.js.map +1 -1
  25. package/build/confirm-dialog/component.js.map +1 -1
  26. package/build/custom-gradient-bar/constants.js +1 -3
  27. package/build/custom-gradient-bar/constants.js.map +1 -1
  28. package/build/custom-gradient-bar/control-points.js +15 -8
  29. package/build/custom-gradient-bar/control-points.js.map +1 -1
  30. package/build/custom-gradient-bar/index.js +5 -5
  31. package/build/custom-gradient-bar/index.js.map +1 -1
  32. package/build/custom-gradient-bar/utils.js +5 -7
  33. package/build/custom-gradient-bar/utils.js.map +1 -1
  34. package/build/custom-gradient-picker/utils.js.map +1 -1
  35. package/build/custom-select-control/index.js.map +1 -1
  36. package/build/date-time/date/index.js +4 -4
  37. package/build/date-time/date/index.js.map +1 -1
  38. package/build/date-time/date-time/index.js +3 -3
  39. package/build/date-time/date-time/index.js.map +1 -1
  40. package/build/dimension-control/index.js +1 -3
  41. package/build/dimension-control/index.js.map +1 -1
  42. package/build/divider/styles.js +5 -5
  43. package/build/divider/styles.js.map +1 -1
  44. package/build/draggable/index.js.map +1 -1
  45. package/build/draggable/index.native.js +6 -1
  46. package/build/draggable/index.native.js.map +1 -1
  47. package/build/drop-zone/provider.js.map +1 -1
  48. package/build/dropdown/index.js +2 -2
  49. package/build/dropdown/index.js.map +1 -1
  50. package/build/dropdown-menu/index.js +13 -2
  51. package/build/dropdown-menu/index.js.map +1 -1
  52. package/build/dropdown-menu/index.native.js +13 -2
  53. package/build/dropdown-menu/index.native.js.map +1 -1
  54. package/build/external-link/index.js +20 -8
  55. package/build/external-link/index.js.map +1 -1
  56. package/build/external-link/styles/external-link-styles.js +3 -3
  57. package/build/external-link/styles/external-link-styles.js.map +1 -1
  58. package/build/external-link/types.js +6 -0
  59. package/build/external-link/types.js.map +1 -0
  60. package/build/flex/flex/hook.js +9 -5
  61. package/build/flex/flex/hook.js.map +1 -1
  62. package/build/focal-point-picker/controls.js +3 -7
  63. package/build/focal-point-picker/controls.js.map +1 -1
  64. package/build/focal-point-picker/index.js.map +1 -1
  65. package/build/focal-point-picker/media.js +4 -8
  66. package/build/focal-point-picker/media.js.map +1 -1
  67. package/build/font-size-picker/index.js +1 -1
  68. package/build/font-size-picker/index.js.map +1 -1
  69. package/build/form-toggle/index.js +6 -4
  70. package/build/form-toggle/index.js.map +1 -1
  71. package/build/form-token-field/index.js +328 -359
  72. package/build/form-token-field/index.js.map +1 -1
  73. package/build/form-token-field/suggestions-list.js +26 -20
  74. package/build/form-token-field/suggestions-list.js.map +1 -1
  75. package/build/form-token-field/token-input.js +39 -53
  76. package/build/form-token-field/token-input.js.map +1 -1
  77. package/build/form-token-field/token.js +3 -3
  78. package/build/form-token-field/token.js.map +1 -1
  79. package/build/form-token-field/types.js +6 -0
  80. package/build/form-token-field/types.js.map +1 -0
  81. package/build/gradient-picker/index.js.map +1 -1
  82. package/build/heading/hook.js.map +1 -1
  83. package/build/higher-order/navigate-regions/index.js.map +1 -1
  84. package/build/higher-order/with-focus-return/index.js.map +1 -1
  85. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  86. package/build/icon/index.js.map +1 -1
  87. package/build/input-control/index.js +5 -5
  88. package/build/input-control/index.js.map +1 -1
  89. package/build/input-control/input-field.js +10 -10
  90. package/build/input-control/input-field.js.map +1 -1
  91. package/build/input-control/reducer/reducer.js.map +1 -1
  92. package/build/input-control/utils.js +1 -1
  93. package/build/input-control/utils.js.map +1 -1
  94. package/build/menu-items-choice/index.js +3 -7
  95. package/build/menu-items-choice/index.js.map +1 -1
  96. package/build/mobile/bottom-sheet/bottom-sheet-context.native.js.map +1 -1
  97. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  98. package/build/mobile/bottom-sheet/cycle-picker-cell.native.js +1 -7
  99. package/build/mobile/bottom-sheet/cycle-picker-cell.native.js.map +1 -1
  100. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  101. package/build/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  102. package/build/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  103. package/build/mobile/color-settings/index.native.js.map +1 -1
  104. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  105. package/build/mobile/gradient/index.native.js.map +1 -1
  106. package/build/mobile/html-text-input/index.native.js.map +1 -1
  107. package/build/mobile/inserter-button/index.native.js.map +1 -1
  108. package/build/mobile/link-settings/image-link-destinations-screen.native.js.map +1 -1
  109. package/build/mobile/media-edit/index.native.js.map +1 -1
  110. package/build/mobile/segmented-control/index.native.js +1 -1
  111. package/build/mobile/segmented-control/index.native.js.map +1 -1
  112. package/build/modal/index.js +1 -1
  113. package/build/modal/index.js.map +1 -1
  114. package/build/navigable-container/container.js +4 -2
  115. package/build/navigable-container/container.js.map +1 -1
  116. package/build/navigation/context.js +12 -16
  117. package/build/navigation/context.js.map +1 -1
  118. package/build/navigation/index.js +3 -3
  119. package/build/navigation/index.js.map +1 -1
  120. package/build/navigation/item/index.js +3 -3
  121. package/build/navigation/item/index.js.map +1 -1
  122. package/build/navigator/navigator-back-button/hook.js.map +1 -1
  123. package/build/navigator/navigator-button/hook.js.map +1 -1
  124. package/build/navigator/navigator-provider/component.js +1 -1
  125. package/build/navigator/navigator-provider/component.js.map +1 -1
  126. package/build/navigator/navigator-screen/component.js +1 -1
  127. package/build/navigator/navigator-screen/component.js.map +1 -1
  128. package/build/notice/index.js +5 -5
  129. package/build/notice/index.js.map +1 -1
  130. package/build/notice/list.js +4 -2
  131. package/build/notice/list.js.map +1 -1
  132. package/build/panel/body.js +3 -3
  133. package/build/panel/body.js.map +1 -1
  134. package/build/placeholder/index.js +26 -12
  135. package/build/placeholder/index.js.map +1 -1
  136. package/build/radio-control/index.js +43 -7
  137. package/build/radio-control/index.js.map +1 -1
  138. package/build/radio-control/types.js +6 -0
  139. package/build/radio-control/types.js.map +1 -0
  140. package/build/range-control/index.js +8 -6
  141. package/build/range-control/index.js.map +1 -1
  142. package/build/range-control/input-range.js +6 -10
  143. package/build/range-control/input-range.js.map +1 -1
  144. package/build/range-control/utils.js +7 -5
  145. package/build/range-control/utils.js.map +1 -1
  146. package/build/resizable-box/resize-tooltip/index.js +3 -3
  147. package/build/resizable-box/resize-tooltip/index.js.map +1 -1
  148. package/build/resizable-box/resize-tooltip/utils.js +4 -7
  149. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  150. package/build/responsive-wrapper/index.js.map +1 -1
  151. package/build/select-control/index.js +5 -3
  152. package/build/select-control/index.js.map +1 -1
  153. package/build/slot-fill/fill.js +1 -7
  154. package/build/slot-fill/fill.js.map +1 -1
  155. package/build/slot-fill/slot.js +14 -3
  156. package/build/slot-fill/slot.js.map +1 -1
  157. package/build/snackbar/index.js +7 -7
  158. package/build/snackbar/index.js.map +1 -1
  159. package/build/snackbar/list.js +3 -1
  160. package/build/snackbar/list.js.map +1 -1
  161. package/build/tab-panel/index.js +3 -1
  162. package/build/tab-panel/index.js.map +1 -1
  163. package/build/text/hook.js +4 -4
  164. package/build/text/hook.js.map +1 -1
  165. package/build/text/utils.js.map +1 -1
  166. package/build/toggle-control/index.js +1 -3
  167. package/build/toggle-control/index.js.map +1 -1
  168. package/build/toggle-control/index.native.js +1 -7
  169. package/build/toggle-control/index.native.js.map +1 -1
  170. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
  171. package/build/toolbar/index.js.map +1 -1
  172. package/build/tools-panel/tools-panel/hook.js.map +1 -1
  173. package/build/tools-panel/tools-panel-header/hook.js.map +1 -1
  174. package/build/tooltip/index.js +2 -1
  175. package/build/tooltip/index.js.map +1 -1
  176. package/build/tree-grid/roving-tab-index-item.js.map +1 -1
  177. package/build/tree-select/index.js +57 -4
  178. package/build/tree-select/index.js.map +1 -1
  179. package/build/tree-select/types.js +6 -0
  180. package/build/tree-select/types.js.map +1 -0
  181. package/build/ui/form-group/form-group-content.js.map +1 -1
  182. package/build/unit-control/index.js.map +1 -1
  183. package/build/utils/unit-values.js.map +1 -1
  184. package/build/utils/values.js.map +1 -1
  185. package/build/z-stack/component.js +22 -3
  186. package/build/z-stack/component.js.map +1 -1
  187. package/build/z-stack/types.js +6 -0
  188. package/build/z-stack/types.js.map +1 -0
  189. package/build-module/alignment-matrix-control/index.js +2 -1
  190. package/build-module/alignment-matrix-control/index.js.map +1 -1
  191. package/build-module/angle-picker-control/index.js +1 -1
  192. package/build-module/angle-picker-control/index.js.map +1 -1
  193. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  194. package/build-module/border-box-control/utils.js.map +1 -1
  195. package/build-module/border-control/border-control/hook.js.map +1 -1
  196. package/build-module/box-control/all-input-control.js +3 -5
  197. package/build-module/box-control/all-input-control.js.map +1 -1
  198. package/build-module/box-control/axial-input-controls.js.map +1 -1
  199. package/build-module/box-control/index.js +2 -5
  200. package/build-module/box-control/index.js.map +1 -1
  201. package/build-module/box-control/input-controls.js +3 -5
  202. package/build-module/box-control/input-controls.js.map +1 -1
  203. package/build-module/box-control/unit-control.js +3 -1
  204. package/build-module/box-control/unit-control.js.map +1 -1
  205. package/build-module/button/index.native.js +1 -2
  206. package/build-module/button/index.native.js.map +1 -1
  207. package/build-module/checkbox-control/index.js.map +1 -1
  208. package/build-module/color-picker/index.native.js.map +1 -1
  209. package/build-module/combobox-control/index.js +5 -2
  210. package/build-module/combobox-control/index.js.map +1 -1
  211. package/build-module/confirm-dialog/component.js.map +1 -1
  212. package/build-module/custom-gradient-bar/constants.js +0 -1
  213. package/build-module/custom-gradient-bar/constants.js.map +1 -1
  214. package/build-module/custom-gradient-bar/control-points.js +16 -9
  215. package/build-module/custom-gradient-bar/control-points.js.map +1 -1
  216. package/build-module/custom-gradient-bar/index.js +6 -6
  217. package/build-module/custom-gradient-bar/index.js.map +1 -1
  218. package/build-module/custom-gradient-bar/utils.js +6 -8
  219. package/build-module/custom-gradient-bar/utils.js.map +1 -1
  220. package/build-module/custom-gradient-picker/utils.js.map +1 -1
  221. package/build-module/custom-select-control/index.js.map +1 -1
  222. package/build-module/date-time/date/index.js +4 -3
  223. package/build-module/date-time/date/index.js.map +1 -1
  224. package/build-module/date-time/date-time/index.js +2 -1
  225. package/build-module/date-time/date-time/index.js.map +1 -1
  226. package/build-module/dimension-control/index.js +1 -2
  227. package/build-module/dimension-control/index.js.map +1 -1
  228. package/build-module/divider/styles.js +5 -5
  229. package/build-module/divider/styles.js.map +1 -1
  230. package/build-module/draggable/index.js.map +1 -1
  231. package/build-module/draggable/index.native.js +6 -1
  232. package/build-module/draggable/index.native.js.map +1 -1
  233. package/build-module/drop-zone/provider.js.map +1 -1
  234. package/build-module/dropdown/index.js +2 -2
  235. package/build-module/dropdown/index.js.map +1 -1
  236. package/build-module/dropdown-menu/index.js +12 -1
  237. package/build-module/dropdown-menu/index.js.map +1 -1
  238. package/build-module/dropdown-menu/index.native.js +12 -1
  239. package/build-module/dropdown-menu/index.native.js.map +1 -1
  240. package/build-module/external-link/index.js +22 -7
  241. package/build-module/external-link/index.js.map +1 -1
  242. package/build-module/external-link/styles/external-link-styles.js +3 -3
  243. package/build-module/external-link/styles/external-link-styles.js.map +1 -1
  244. package/build-module/external-link/types.js +2 -0
  245. package/build-module/external-link/types.js.map +1 -0
  246. package/build-module/flex/flex/hook.js +7 -5
  247. package/build-module/flex/flex/hook.js.map +1 -1
  248. package/build-module/focal-point-picker/controls.js +3 -5
  249. package/build-module/focal-point-picker/controls.js.map +1 -1
  250. package/build-module/focal-point-picker/index.js.map +1 -1
  251. package/build-module/focal-point-picker/media.js +3 -5
  252. package/build-module/focal-point-picker/media.js.map +1 -1
  253. package/build-module/font-size-picker/index.js +1 -1
  254. package/build-module/font-size-picker/index.js.map +1 -1
  255. package/build-module/form-toggle/index.js +1 -1
  256. package/build-module/form-toggle/index.js.map +1 -1
  257. package/build-module/form-token-field/index.js +329 -361
  258. package/build-module/form-token-field/index.js.map +1 -1
  259. package/build-module/form-token-field/suggestions-list.js +32 -23
  260. package/build-module/form-token-field/suggestions-list.js.map +1 -1
  261. package/build-module/form-token-field/token-input.js +43 -58
  262. package/build-module/form-token-field/token-input.js.map +1 -1
  263. package/build-module/form-token-field/token.js +3 -1
  264. package/build-module/form-token-field/token.js.map +1 -1
  265. package/build-module/form-token-field/types.js +2 -0
  266. package/build-module/form-token-field/types.js.map +1 -0
  267. package/build-module/gradient-picker/index.js.map +1 -1
  268. package/build-module/heading/hook.js.map +1 -1
  269. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  270. package/build-module/higher-order/with-focus-return/index.js.map +1 -1
  271. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  272. package/build-module/icon/index.js.map +1 -1
  273. package/build-module/input-control/index.js +2 -1
  274. package/build-module/input-control/index.js.map +1 -1
  275. package/build-module/input-control/input-field.js +2 -1
  276. package/build-module/input-control/input-field.js.map +1 -1
  277. package/build-module/input-control/reducer/reducer.js.map +1 -1
  278. package/build-module/input-control/utils.js +1 -1
  279. package/build-module/input-control/utils.js.map +1 -1
  280. package/build-module/menu-items-choice/index.js +3 -5
  281. package/build-module/menu-items-choice/index.js.map +1 -1
  282. package/build-module/mobile/bottom-sheet/bottom-sheet-context.native.js.map +1 -1
  283. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  284. package/build-module/mobile/bottom-sheet/cycle-picker-cell.native.js +1 -6
  285. package/build-module/mobile/bottom-sheet/cycle-picker-cell.native.js.map +1 -1
  286. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  287. package/build-module/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  288. package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  289. package/build-module/mobile/color-settings/index.native.js.map +1 -1
  290. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  291. package/build-module/mobile/gradient/index.native.js.map +1 -1
  292. package/build-module/mobile/html-text-input/index.native.js.map +1 -1
  293. package/build-module/mobile/inserter-button/index.native.js.map +1 -1
  294. package/build-module/mobile/link-settings/image-link-destinations-screen.native.js.map +1 -1
  295. package/build-module/mobile/media-edit/index.native.js.map +1 -1
  296. package/build-module/mobile/segmented-control/index.native.js +2 -2
  297. package/build-module/mobile/segmented-control/index.native.js.map +1 -1
  298. package/build-module/modal/index.js +1 -1
  299. package/build-module/modal/index.js.map +1 -1
  300. package/build-module/navigable-container/container.js +5 -2
  301. package/build-module/navigable-container/container.js.map +1 -1
  302. package/build-module/navigation/context.js +3 -5
  303. package/build-module/navigation/context.js.map +1 -1
  304. package/build-module/navigation/index.js +3 -1
  305. package/build-module/navigation/index.js.map +1 -1
  306. package/build-module/navigation/item/index.js +3 -1
  307. package/build-module/navigation/item/index.js.map +1 -1
  308. package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
  309. package/build-module/navigator/navigator-button/hook.js.map +1 -1
  310. package/build-module/navigator/navigator-provider/component.js +1 -1
  311. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  312. package/build-module/navigator/navigator-screen/component.js +1 -1
  313. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  314. package/build-module/notice/index.js +2 -1
  315. package/build-module/notice/index.js.map +1 -1
  316. package/build-module/notice/list.js +4 -1
  317. package/build-module/notice/list.js.map +1 -1
  318. package/build-module/panel/body.js +3 -1
  319. package/build-module/panel/body.js.map +1 -1
  320. package/build-module/placeholder/index.js +24 -11
  321. package/build-module/placeholder/index.js.map +1 -1
  322. package/build-module/radio-control/index.js +40 -7
  323. package/build-module/radio-control/index.js.map +1 -1
  324. package/build-module/radio-control/types.js +2 -0
  325. package/build-module/radio-control/types.js.map +1 -0
  326. package/build-module/range-control/index.js +4 -2
  327. package/build-module/range-control/index.js.map +1 -1
  328. package/build-module/range-control/input-range.js +2 -5
  329. package/build-module/range-control/input-range.js.map +1 -1
  330. package/build-module/range-control/utils.js +4 -1
  331. package/build-module/range-control/utils.js.map +1 -1
  332. package/build-module/resizable-box/resize-tooltip/index.js +2 -1
  333. package/build-module/resizable-box/resize-tooltip/index.js.map +1 -1
  334. package/build-module/resizable-box/resize-tooltip/utils.js +3 -5
  335. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  336. package/build-module/responsive-wrapper/index.js.map +1 -1
  337. package/build-module/select-control/index.js +3 -1
  338. package/build-module/select-control/index.js.map +1 -1
  339. package/build-module/slot-fill/fill.js +1 -6
  340. package/build-module/slot-fill/fill.js.map +1 -1
  341. package/build-module/slot-fill/slot.js +12 -2
  342. package/build-module/slot-fill/slot.js.map +1 -1
  343. package/build-module/snackbar/index.js +3 -1
  344. package/build-module/snackbar/index.js.map +1 -1
  345. package/build-module/snackbar/list.js +4 -1
  346. package/build-module/snackbar/list.js.map +1 -1
  347. package/build-module/tab-panel/index.js +3 -1
  348. package/build-module/tab-panel/index.js.map +1 -1
  349. package/build-module/text/hook.js +4 -4
  350. package/build-module/text/hook.js.map +1 -1
  351. package/build-module/text/utils.js.map +1 -1
  352. package/build-module/toggle-control/index.js +1 -2
  353. package/build-module/toggle-control/index.js.map +1 -1
  354. package/build-module/toggle-control/index.native.js +1 -6
  355. package/build-module/toggle-control/index.native.js.map +1 -1
  356. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
  357. package/build-module/toolbar/index.js.map +1 -1
  358. package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
  359. package/build-module/tools-panel/tools-panel-header/hook.js.map +1 -1
  360. package/build-module/tooltip/index.js +2 -1
  361. package/build-module/tooltip/index.js.map +1 -1
  362. package/build-module/tree-grid/roving-tab-index-item.js.map +1 -1
  363. package/build-module/tree-select/index.js +53 -3
  364. package/build-module/tree-select/index.js.map +1 -1
  365. package/build-module/tree-select/types.js +2 -0
  366. package/build-module/tree-select/types.js.map +1 -0
  367. package/build-module/ui/form-group/form-group-content.js.map +1 -1
  368. package/build-module/unit-control/index.js.map +1 -1
  369. package/build-module/utils/unit-values.js.map +1 -1
  370. package/build-module/utils/values.js.map +1 -1
  371. package/build-module/z-stack/component.js +21 -2
  372. package/build-module/z-stack/component.js.map +1 -1
  373. package/build-module/z-stack/types.js +2 -0
  374. package/build-module/z-stack/types.js.map +1 -0
  375. package/build-style/style-rtl.css +32 -3
  376. package/build-style/style.css +32 -4
  377. package/build-types/base-control/stories/index.d.ts.map +1 -1
  378. package/build-types/base-field/hook.d.ts +0 -1
  379. package/build-types/base-field/hook.d.ts.map +1 -1
  380. package/build-types/border-box-control/border-box-control/hook.d.ts +0 -1
  381. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  382. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -1
  383. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +0 -1
  384. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
  385. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +0 -1
  386. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  387. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +0 -1
  388. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
  389. package/build-types/border-box-control/utils.d.ts.map +1 -1
  390. package/build-types/border-control/border-control/hook.d.ts +0 -1
  391. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  392. package/build-types/border-control/border-control-dropdown/hook.d.ts +0 -1
  393. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  394. package/build-types/border-control/border-control-style-picker/hook.d.ts +0 -1
  395. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -1
  396. package/build-types/button-group/index.d.ts +1 -1
  397. package/build-types/button-group/index.d.ts.map +1 -1
  398. package/build-types/card/card/hook.d.ts +0 -1
  399. package/build-types/card/card/hook.d.ts.map +1 -1
  400. package/build-types/card/card-body/hook.d.ts +0 -1
  401. package/build-types/card/card-body/hook.d.ts.map +1 -1
  402. package/build-types/card/card-divider/hook.d.ts +0 -1
  403. package/build-types/card/card-divider/hook.d.ts.map +1 -1
  404. package/build-types/card/card-footer/hook.d.ts +0 -1
  405. package/build-types/card/card-footer/hook.d.ts.map +1 -1
  406. package/build-types/card/card-header/hook.d.ts +0 -1
  407. package/build-types/card/card-header/hook.d.ts.map +1 -1
  408. package/build-types/card/card-media/hook.d.ts +0 -1
  409. package/build-types/card/card-media/hook.d.ts.map +1 -1
  410. package/build-types/checkbox-control/index.d.ts.map +1 -1
  411. package/build-types/checkbox-control/stories/index.d.ts.map +1 -1
  412. package/build-types/color-picker/styles.d.ts +7 -7
  413. package/build-types/confirm-dialog/component.d.ts.map +1 -1
  414. package/build-types/date-time/date/index.d.ts.map +1 -1
  415. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  416. package/build-types/date-time/stories/date-time.d.ts.map +1 -1
  417. package/build-types/date-time/stories/date.d.ts.map +1 -1
  418. package/build-types/date-time/time/styles.d.ts +1 -1
  419. package/build-types/divider/styles.d.ts.map +1 -1
  420. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  421. package/build-types/elevation/hook.d.ts +0 -1
  422. package/build-types/elevation/hook.d.ts.map +1 -1
  423. package/build-types/external-link/index.d.ts +17 -0
  424. package/build-types/external-link/index.d.ts.map +1 -0
  425. package/build-types/external-link/stories/index.d.ts +12 -0
  426. package/build-types/external-link/stories/index.d.ts.map +1 -0
  427. package/build-types/external-link/styles/external-link-styles.d.ts +10 -0
  428. package/build-types/external-link/styles/external-link-styles.d.ts.map +1 -0
  429. package/build-types/external-link/types.d.ts +15 -0
  430. package/build-types/external-link/types.d.ts.map +1 -0
  431. package/build-types/flex/flex/hook.d.ts +0 -1
  432. package/build-types/flex/flex/hook.d.ts.map +1 -1
  433. package/build-types/flex/flex-block/hook.d.ts +0 -1
  434. package/build-types/flex/flex-block/hook.d.ts.map +1 -1
  435. package/build-types/flex/flex-item/hook.d.ts +0 -1
  436. package/build-types/flex/flex-item/hook.d.ts.map +1 -1
  437. package/build-types/form-token-field/index.d.ts +15 -0
  438. package/build-types/form-token-field/index.d.ts.map +1 -0
  439. package/build-types/form-token-field/stories/index.d.ts +13 -0
  440. package/build-types/form-token-field/stories/index.d.ts.map +1 -0
  441. package/build-types/form-token-field/suggestions-list.d.ts +10 -0
  442. package/build-types/form-token-field/suggestions-list.d.ts.map +1 -0
  443. package/build-types/form-token-field/test/lib/fixtures.d.ts +26 -0
  444. package/build-types/form-token-field/test/lib/fixtures.d.ts.map +1 -0
  445. package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts +18 -0
  446. package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts.map +1 -0
  447. package/build-types/form-token-field/token-input.d.ts +12 -0
  448. package/build-types/form-token-field/token-input.d.ts.map +1 -0
  449. package/build-types/form-token-field/token.d.ts +4 -0
  450. package/build-types/form-token-field/token.d.ts.map +1 -0
  451. package/build-types/form-token-field/types.d.ts +176 -0
  452. package/build-types/form-token-field/types.d.ts.map +1 -0
  453. package/build-types/grid/hook.d.ts +0 -1
  454. package/build-types/grid/hook.d.ts.map +1 -1
  455. package/build-types/h-stack/hook.d.ts +0 -1
  456. package/build-types/h-stack/hook.d.ts.map +1 -1
  457. package/build-types/heading/hook.d.ts +0 -1
  458. package/build-types/heading/hook.d.ts.map +1 -1
  459. package/build-types/higher-order/with-focus-outside/index.d.ts +1 -1
  460. package/build-types/input-control/index.d.ts +1 -1
  461. package/build-types/input-control/index.d.ts.map +1 -1
  462. package/build-types/input-control/input-field.d.ts +1 -1
  463. package/build-types/input-control/input-field.d.ts.map +1 -1
  464. package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
  465. package/build-types/input-control/stories/index.d.ts +5 -5
  466. package/build-types/input-control/stories/index.d.ts.map +1 -1
  467. package/build-types/item-group/item/hook.d.ts +0 -1
  468. package/build-types/item-group/item/hook.d.ts.map +1 -1
  469. package/build-types/item-group/item-group/hook.d.ts +0 -1
  470. package/build-types/item-group/item-group/hook.d.ts.map +1 -1
  471. package/build-types/navigator/navigator-back-button/hook.d.ts +0 -1
  472. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  473. package/build-types/navigator/navigator-button/hook.d.ts +0 -1
  474. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  475. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  476. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  477. package/build-types/radio-control/index.d.ts +31 -0
  478. package/build-types/radio-control/index.d.ts.map +1 -0
  479. package/build-types/radio-control/stories/index.d.ts +12 -0
  480. package/build-types/radio-control/stories/index.d.ts.map +1 -0
  481. package/build-types/radio-control/types.d.ts +29 -0
  482. package/build-types/radio-control/types.d.ts.map +1 -0
  483. package/build-types/range-control/index.d.ts +5 -5
  484. package/build-types/range-control/index.d.ts.map +1 -1
  485. package/build-types/range-control/input-range.d.ts +4 -4
  486. package/build-types/range-control/input-range.d.ts.map +1 -1
  487. package/build-types/range-control/utils.d.ts.map +1 -1
  488. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  489. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  490. package/build-types/scrollable/hook.d.ts +0 -1
  491. package/build-types/scrollable/hook.d.ts.map +1 -1
  492. package/build-types/select-control/index.d.ts +1 -1
  493. package/build-types/select-control/index.d.ts.map +1 -1
  494. package/build-types/select-control/stories/index.d.ts +3 -3
  495. package/build-types/select-control/stories/index.d.ts.map +1 -1
  496. package/build-types/slot-fill/fill.d.ts.map +1 -1
  497. package/build-types/slot-fill/slot.d.ts.map +1 -1
  498. package/build-types/spacer/hook.d.ts +0 -1
  499. package/build-types/spacer/hook.d.ts.map +1 -1
  500. package/build-types/surface/hook.d.ts +0 -1
  501. package/build-types/surface/hook.d.ts.map +1 -1
  502. package/build-types/text/hook.d.ts +0 -1
  503. package/build-types/text/hook.d.ts.map +1 -1
  504. package/build-types/text/utils.d.ts.map +1 -1
  505. package/build-types/text-control/index.d.ts +1 -1
  506. package/build-types/text-control/index.d.ts.map +1 -1
  507. package/build-types/text-control/stories/index.d.ts.map +1 -1
  508. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -1
  509. package/build-types/tools-panel/tools-panel/hook.d.ts +0 -1
  510. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  511. package/build-types/tools-panel/tools-panel-header/hook.d.ts +0 -1
  512. package/build-types/tools-panel/tools-panel-header/hook.d.ts.map +1 -1
  513. package/build-types/tools-panel/tools-panel-item/hook.d.ts +0 -1
  514. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  515. package/build-types/tooltip/index.d.ts.map +1 -1
  516. package/build-types/tree-select/index.d.ts +53 -0
  517. package/build-types/tree-select/index.d.ts.map +1 -0
  518. package/build-types/tree-select/stories/index.d.ts +12 -0
  519. package/build-types/tree-select/stories/index.d.ts.map +1 -0
  520. package/build-types/tree-select/types.d.ts +30 -0
  521. package/build-types/tree-select/types.d.ts.map +1 -0
  522. package/build-types/truncate/hook.d.ts +0 -1
  523. package/build-types/truncate/hook.d.ts.map +1 -1
  524. package/build-types/ui/context/wordpress-component.d.ts.map +1 -1
  525. package/build-types/ui/control-group/hook.d.ts +0 -1
  526. package/build-types/ui/control-group/hook.d.ts.map +1 -1
  527. package/build-types/ui/control-label/hook.d.ts +0 -1
  528. package/build-types/ui/control-label/hook.d.ts.map +1 -1
  529. package/build-types/ui/form-group/use-form-group.d.ts +0 -2
  530. package/build-types/ui/form-group/use-form-group.d.ts.map +1 -1
  531. package/build-types/unit-control/index.d.ts +1 -1
  532. package/build-types/unit-control/index.d.ts.map +1 -1
  533. package/build-types/unit-control/stories/index.d.ts.map +1 -1
  534. package/build-types/utils/unit-values.d.ts.map +1 -1
  535. package/build-types/utils/values.d.ts.map +1 -1
  536. package/build-types/v-stack/hook.d.ts +0 -1
  537. package/build-types/v-stack/hook.d.ts.map +1 -1
  538. package/build-types/z-stack/component.d.ts +18 -28
  539. package/build-types/z-stack/component.d.ts.map +1 -1
  540. package/build-types/z-stack/stories/index.d.ts +6 -0
  541. package/build-types/z-stack/stories/index.d.ts.map +1 -0
  542. package/build-types/z-stack/types.d.ts +33 -0
  543. package/build-types/z-stack/types.d.ts.map +1 -0
  544. package/package.json +17 -17
  545. package/src/alignment-matrix-control/index.js +2 -1
  546. package/src/angle-picker-control/index.js +1 -1
  547. package/src/base-control/stories/index.tsx +2 -3
  548. package/src/border-box-control/border-box-control-linked-button/component.tsx +2 -5
  549. package/src/border-box-control/utils.ts +5 -2
  550. package/src/border-control/border-control/hook.ts +2 -3
  551. package/src/box-control/all-input-control.js +2 -4
  552. package/src/box-control/axial-input-controls.js +4 -6
  553. package/src/box-control/index.js +2 -5
  554. package/src/box-control/input-controls.js +33 -36
  555. package/src/box-control/unit-control.js +2 -1
  556. package/src/button/index.native.js +1 -2
  557. package/src/card/stories/index.js +10 -5
  558. package/src/checkbox-control/index.tsx +2 -3
  559. package/src/checkbox-control/stories/index.tsx +2 -3
  560. package/src/checkbox-control/test/index.tsx +2 -1
  561. package/src/color-picker/index.native.js +7 -4
  562. package/src/combobox-control/index.js +4 -2
  563. package/src/confirm-dialog/component.tsx +7 -8
  564. package/src/custom-gradient-bar/constants.js +2 -2
  565. package/src/custom-gradient-bar/control-points.js +20 -16
  566. package/src/custom-gradient-bar/index.js +11 -11
  567. package/src/custom-gradient-bar/test/utils.js +79 -0
  568. package/src/custom-gradient-bar/utils.js +6 -18
  569. package/src/custom-gradient-picker/style.scss +1 -3
  570. package/src/custom-gradient-picker/utils.js +4 -3
  571. package/src/custom-select-control/index.js +2 -1
  572. package/src/custom-select-control/stories/index.js +1 -2
  573. package/src/date-time/date/index.tsx +2 -2
  574. package/src/date-time/date/style.scss +10 -0
  575. package/src/date-time/date/test/index.tsx +1 -1
  576. package/src/date-time/date-time/index.tsx +6 -8
  577. package/src/date-time/stories/date-time.tsx +4 -6
  578. package/src/date-time/stories/date.tsx +2 -3
  579. package/src/date-time/time/test/index.tsx +12 -12
  580. package/src/dimension-control/index.js +1 -2
  581. package/src/divider/styles.ts +2 -3
  582. package/src/draggable/index.js +3 -3
  583. package/src/draggable/index.native.js +12 -4
  584. package/src/drop-zone/provider.js +1 -2
  585. package/src/dropdown/index.js +2 -2
  586. package/src/dropdown-menu/index.js +11 -1
  587. package/src/dropdown-menu/index.native.js +11 -1
  588. package/src/external-link/README.md +18 -0
  589. package/src/external-link/{index.js → index.tsx} +26 -6
  590. package/src/external-link/stories/index.tsx +36 -0
  591. package/src/external-link/styles/{external-link-styles.js → external-link-styles.ts} +0 -0
  592. package/src/external-link/types.ts +15 -0
  593. package/src/flex/flex/hook.js +4 -1
  594. package/src/focal-point-picker/controls.js +1 -5
  595. package/src/focal-point-picker/index.js +2 -8
  596. package/src/focal-point-picker/media.js +2 -5
  597. package/src/font-size-picker/index.js +3 -1
  598. package/src/form-toggle/index.js +2 -1
  599. package/src/form-toggle/test/index.js +1 -2
  600. package/src/form-token-field/index.tsx +694 -0
  601. package/src/form-token-field/stories/index.tsx +103 -0
  602. package/src/form-token-field/style.scss +2 -1
  603. package/src/form-token-field/{suggestions-list.js → suggestions-list.tsx} +45 -29
  604. package/src/form-token-field/test/index.js +64 -31
  605. package/src/form-token-field/test/lib/{token-field-wrapper.js → token-field-wrapper.tsx} +24 -9
  606. package/src/form-token-field/token-input.tsx +76 -0
  607. package/src/form-token-field/{token.js → token.tsx} +4 -2
  608. package/src/form-token-field/types.ts +178 -0
  609. package/src/gradient-picker/index.js +4 -3
  610. package/src/heading/hook.ts +5 -4
  611. package/src/higher-order/navigate-regions/index.js +7 -5
  612. package/src/higher-order/with-filters/test/index.js +43 -36
  613. package/src/higher-order/with-focus-return/index.js +14 -13
  614. package/src/higher-order/with-spoken-messages/index.js +8 -7
  615. package/src/higher-order/with-spoken-messages/test/index.js +1 -1
  616. package/src/icon/index.tsx +2 -2
  617. package/src/input-control/index.tsx +2 -1
  618. package/src/input-control/input-field.tsx +2 -1
  619. package/src/input-control/reducer/reducer.ts +23 -21
  620. package/src/input-control/utils.ts +1 -1
  621. package/src/item-group/stories/index.js +2 -1
  622. package/src/menu-item/test/index.js +2 -1
  623. package/src/menu-items-choice/index.js +2 -5
  624. package/src/mobile/bottom-sheet/bottom-sheet-context.native.js +2 -4
  625. package/src/mobile/bottom-sheet/cell.native.js +2 -3
  626. package/src/mobile/bottom-sheet/cycle-picker-cell.native.js +3 -5
  627. package/src/mobile/bottom-sheet/index.native.js +14 -17
  628. package/src/mobile/bottom-sheet/picker-cell.native.js +2 -7
  629. package/src/mobile/bottom-sheet/stepper-cell/index.native.js +4 -6
  630. package/src/mobile/color-settings/index.native.js +2 -4
  631. package/src/mobile/global-styles-context/index.native.js +8 -7
  632. package/src/mobile/gradient/index.native.js +12 -9
  633. package/src/mobile/gradient/test/index.native.js +1 -3
  634. package/src/mobile/html-text-input/index.native.js +2 -3
  635. package/src/mobile/inserter-button/index.native.js +2 -6
  636. package/src/mobile/link-settings/image-link-destinations-screen.native.js +6 -2
  637. package/src/mobile/media-edit/index.native.js +2 -3
  638. package/src/mobile/segmented-control/index.native.js +4 -5
  639. package/src/mobile/utils/test/index.native.js +3 -12
  640. package/src/modal/index.js +1 -1
  641. package/src/navigable-container/container.js +3 -2
  642. package/src/navigable-container/test/menu.js +1 -2
  643. package/src/navigable-container/test/tabbable.js +1 -2
  644. package/src/navigation/context.js +2 -5
  645. package/src/navigation/index.js +2 -1
  646. package/src/navigation/item/index.js +2 -1
  647. package/src/navigation/stories/controlled-state.js +1 -1
  648. package/src/navigation/stories/more-examples.js +2 -3
  649. package/src/navigation/test/index.js +252 -52
  650. package/src/navigator/navigator-back-button/hook.ts +14 -12
  651. package/src/navigator/navigator-button/hook.ts +14 -13
  652. package/src/navigator/navigator-provider/component.tsx +2 -6
  653. package/src/navigator/navigator-screen/component.tsx +3 -3
  654. package/src/notice/index.js +2 -1
  655. package/src/notice/list.js +3 -1
  656. package/src/panel/body.js +2 -1
  657. package/src/placeholder/README.md +7 -6
  658. package/src/placeholder/index.js +27 -10
  659. package/src/placeholder/style.scss +23 -0
  660. package/src/radio-control/README.md +17 -23
  661. package/src/radio-control/index.tsx +107 -0
  662. package/src/radio-control/stories/index.tsx +72 -0
  663. package/src/radio-control/types.ts +32 -0
  664. package/src/range-control/index.js +4 -2
  665. package/src/range-control/input-range.js +2 -5
  666. package/src/range-control/utils.js +3 -1
  667. package/src/resizable-box/resize-tooltip/index.tsx +2 -1
  668. package/src/resizable-box/resize-tooltip/utils.ts +1 -5
  669. package/src/responsive-wrapper/index.js +2 -4
  670. package/src/sandbox/test/index.js +4 -6
  671. package/src/select-control/index.tsx +3 -1
  672. package/src/select-control/stories/index.tsx +3 -4
  673. package/src/slot-fill/fill.js +1 -5
  674. package/src/slot-fill/slot.js +12 -2
  675. package/src/snackbar/index.js +1 -1
  676. package/src/snackbar/list.js +2 -1
  677. package/src/tab-panel/index.js +3 -1
  678. package/src/text/hook.js +4 -1
  679. package/src/text/utils.js +2 -3
  680. package/src/text-control/stories/index.tsx +4 -6
  681. package/src/toggle-control/index.js +1 -2
  682. package/src/toggle-control/index.native.js +2 -6
  683. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +2 -4
  684. package/src/toolbar/index.js +1 -2
  685. package/src/tools-panel/tools-panel/hook.ts +2 -4
  686. package/src/tools-panel/tools-panel-header/hook.ts +2 -5
  687. package/src/tooltip/index.js +1 -0
  688. package/src/tree-grid/roving-tab-index-item.js +2 -4
  689. package/src/tree-grid/test/index.js +2 -3
  690. package/src/tree-select/README.md +2 -2
  691. package/src/tree-select/index.tsx +99 -0
  692. package/src/tree-select/stories/index.tsx +80 -0
  693. package/src/tree-select/types.ts +35 -0
  694. package/src/ui/context/wordpress-component.ts +4 -5
  695. package/src/ui/form-group/form-group-content.js +4 -4
  696. package/src/unit-control/index.tsx +7 -9
  697. package/src/unit-control/stories/index.tsx +8 -12
  698. package/src/unit-control/test/index.tsx +4 -7
  699. package/src/utils/hooks/stories/use-cx.js +8 -7
  700. package/src/utils/hooks/test/use-controlled-state.js +2 -1
  701. package/src/utils/unit-values.ts +2 -1
  702. package/src/utils/values.js +2 -3
  703. package/src/z-stack/README.md +14 -3
  704. package/src/z-stack/component.tsx +24 -29
  705. package/src/z-stack/stories/index.tsx +76 -0
  706. package/src/z-stack/types.ts +33 -0
  707. package/tsconfig.json +5 -0
  708. package/tsconfig.tsbuildinfo +1 -1
  709. package/src/external-link/stories/index.js +0 -23
  710. package/src/form-token-field/index.js +0 -725
  711. package/src/form-token-field/stories/index.js +0 -102
  712. package/src/form-token-field/token-input.js +0 -81
  713. package/src/radio-control/index.js +0 -69
  714. package/src/radio-control/stories/index.js +0 -41
  715. package/src/tree-select/index.js +0 -48
  716. package/src/tree-select/stories/index.js +0 -80
  717. package/src/z-stack/stories/index.js +0 -70
@@ -5,10 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.FormTokenField = FormTokenField;
8
9
  exports.default = void 0;
9
10
 
10
11
  var _element = require("@wordpress/element");
11
12
 
13
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
+
12
15
  var _lodash = require("lodash");
13
16
 
14
17
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -17,6 +20,8 @@ var _i18n = require("@wordpress/i18n");
17
20
 
18
21
  var _compose = require("@wordpress/compose");
19
22
 
23
+ var _a11y = require("@wordpress/a11y");
24
+
20
25
  var _keycodes = require("@wordpress/keycodes");
21
26
 
22
27
  var _isShallowEqual = _interopRequireDefault(require("@wordpress/is-shallow-equal"));
@@ -27,8 +32,6 @@ var _tokenInput = _interopRequireDefault(require("./token-input"));
27
32
 
28
33
  var _suggestionsList = _interopRequireDefault(require("./suggestions-list"));
29
34
 
30
- var _withSpokenMessages = _interopRequireDefault(require("../higher-order/with-spoken-messages"));
31
-
32
35
  /**
33
36
  * External dependencies
34
37
  */
@@ -40,154 +43,174 @@ var _withSpokenMessages = _interopRequireDefault(require("../higher-order/with-s
40
43
  /**
41
44
  * Internal dependencies
42
45
  */
43
- const initialState = {
44
- incompleteTokenValue: '',
45
- inputOffsetFromEnd: 0,
46
- isActive: false,
47
- isExpanded: false,
48
- selectedSuggestionIndex: -1,
49
- selectedSuggestionScroll: false
50
- };
51
-
52
- class FormTokenField extends _element.Component {
53
- constructor() {
54
- super(...arguments);
55
- this.state = initialState;
56
- this.onKeyDown = this.onKeyDown.bind(this);
57
- this.onKeyPress = this.onKeyPress.bind(this);
58
- this.onFocus = this.onFocus.bind(this);
59
- this.onBlur = this.onBlur.bind(this);
60
- this.deleteTokenBeforeInput = this.deleteTokenBeforeInput.bind(this);
61
- this.deleteTokenAfterInput = this.deleteTokenAfterInput.bind(this);
62
- this.addCurrentToken = this.addCurrentToken.bind(this);
63
- this.onContainerTouched = this.onContainerTouched.bind(this);
64
- this.renderToken = this.renderToken.bind(this);
65
- this.onTokenClickRemove = this.onTokenClickRemove.bind(this);
66
- this.onSuggestionHovered = this.onSuggestionHovered.bind(this);
67
- this.onSuggestionSelected = this.onSuggestionSelected.bind(this);
68
- this.onInputChange = this.onInputChange.bind(this);
69
- this.bindInput = this.bindInput.bind(this);
70
- this.bindTokensAndInput = this.bindTokensAndInput.bind(this);
71
- this.updateSuggestions = this.updateSuggestions.bind(this);
72
- }
73
-
74
- componentDidUpdate(prevProps) {
46
+
47
+ /**
48
+ * A `FormTokenField` is a field similar to the tags and categories fields in the interim editor chrome,
49
+ * or the "to" field in Mail on OS X. Tokens can be entered by typing them or selecting them from a list of suggested tokens.
50
+ *
51
+ * Up to one hundred suggestions that match what the user has typed so far will be shown from which the user can pick from (auto-complete).
52
+ * Tokens are separated by the "," character. Suggestions can be selected with the up or down arrows and added with the tab or enter key.
53
+ *
54
+ * The `value` property is handled in a manner similar to controlled form components.
55
+ * See [Forms](http://facebook.github.io/react/docs/forms.html) in the React Documentation for more information.
56
+ */
57
+ function FormTokenField(props) {
58
+ const {
59
+ autoCapitalize,
60
+ autoComplete,
61
+ maxLength,
62
+ placeholder,
63
+ label = (0, _i18n.__)('Add item'),
64
+ className,
65
+ suggestions = [],
66
+ maxSuggestions = 100,
67
+ value = [],
68
+ displayTransform = _lodash.identity,
69
+ saveTransform = token => token.trim(),
70
+ onChange = () => {},
71
+ onInputChange = () => {},
72
+ onFocus = undefined,
73
+ isBorderless = false,
74
+ disabled = false,
75
+ tokenizeOnSpace = false,
76
+ messages = {
77
+ added: (0, _i18n.__)('Item added.'),
78
+ removed: (0, _i18n.__)('Item removed.'),
79
+ remove: (0, _i18n.__)('Remove item'),
80
+ __experimentalInvalid: (0, _i18n.__)('Invalid item')
81
+ },
82
+ __experimentalExpandOnFocus = false,
83
+ __experimentalValidateInput = () => true,
84
+ __experimentalShowHowTo = true
85
+ } = props;
86
+ const instanceId = (0, _compose.useInstanceId)(FormTokenField); // We reset to these initial values again in the onBlur
87
+
88
+ const [incompleteTokenValue, setIncompleteTokenValue] = (0, _element.useState)('');
89
+ const [inputOffsetFromEnd, setInputOffsetFromEnd] = (0, _element.useState)(0);
90
+ const [isActive, setIsActive] = (0, _element.useState)(false);
91
+ const [isExpanded, setIsExpanded] = (0, _element.useState)(false);
92
+ const [selectedSuggestionIndex, setSelectedSuggestionIndex] = (0, _element.useState)(-1);
93
+ const [selectedSuggestionScroll, setSelectedSuggestionScroll] = (0, _element.useState)(false);
94
+ const prevSuggestions = (0, _compose.usePrevious)(suggestions);
95
+ const prevValue = (0, _compose.usePrevious)(value);
96
+ const input = (0, _element.useRef)(null);
97
+ const tokensAndInput = (0, _element.useRef)(null);
98
+ const debouncedSpeak = (0, _compose.useDebounce)(_a11y.speak, 500);
99
+ (0, _element.useEffect)(() => {
75
100
  // Make sure to focus the input when the isActive state is true.
76
- if (this.state.isActive && !this.input.hasFocus()) {
77
- this.input.focus();
101
+ if (isActive && !hasFocus()) {
102
+ focus();
78
103
  }
104
+ }, [isActive]);
105
+ (0, _element.useEffect)(() => {
106
+ const suggestionsDidUpdate = !(0, _isShallowEqual.default)(suggestions, prevSuggestions || []);
79
107
 
80
- const {
81
- suggestions,
82
- value
83
- } = this.props;
84
- const suggestionsDidUpdate = !(0, _isShallowEqual.default)(suggestions, prevProps.suggestions);
108
+ if (suggestionsDidUpdate || value !== prevValue) {
109
+ updateSuggestions(suggestionsDidUpdate);
110
+ } // TODO: updateSuggestions() should first be refactored so its actual deps are clearer.
111
+ // eslint-disable-next-line react-hooks/exhaustive-deps
85
112
 
86
- if (suggestionsDidUpdate || value !== prevProps.value) {
87
- this.updateSuggestions(suggestionsDidUpdate);
88
- }
113
+ }, [suggestions, prevSuggestions, value, prevValue]);
114
+ (0, _element.useEffect)(() => {
115
+ updateSuggestions(); // eslint-disable-next-line react-hooks/exhaustive-deps
116
+ }, [incompleteTokenValue]);
117
+
118
+ if (disabled && isActive) {
119
+ setIsActive(false);
120
+ setIncompleteTokenValue('');
89
121
  }
90
122
 
91
- static getDerivedStateFromProps(props, state) {
92
- if (!props.disabled || !state.isActive) {
93
- return null;
94
- }
123
+ function focus() {
124
+ var _input$current;
95
125
 
96
- return {
97
- isActive: false,
98
- incompleteTokenValue: ''
99
- };
126
+ (_input$current = input.current) === null || _input$current === void 0 ? void 0 : _input$current.focus();
100
127
  }
101
128
 
102
- bindInput(ref) {
103
- this.input = ref;
104
- }
129
+ function hasFocus() {
130
+ var _input$current2;
105
131
 
106
- bindTokensAndInput(ref) {
107
- this.tokensAndInput = ref;
132
+ return input.current === ((_input$current2 = input.current) === null || _input$current2 === void 0 ? void 0 : _input$current2.ownerDocument.activeElement);
108
133
  }
109
134
 
110
- onFocus(event) {
111
- const {
112
- __experimentalExpandOnFocus
113
- } = this.props; // If focus is on the input or on the container, set the isActive state to true.
114
-
115
- if (this.input.hasFocus() || event.target === this.tokensAndInput) {
116
- this.setState({
117
- isActive: true,
118
- isExpanded: !!__experimentalExpandOnFocus || this.state.isExpanded
119
- });
135
+ function onFocusHandler(event) {
136
+ // If focus is on the input or on the container, set the isActive state to true.
137
+ if (hasFocus() || event.target === tokensAndInput.current) {
138
+ setIsActive(true);
139
+ setIsExpanded(__experimentalExpandOnFocus || isExpanded);
120
140
  } else {
121
141
  /*
122
142
  * Otherwise, focus is on one of the token "remove" buttons and we
123
143
  * set the isActive state to false to prevent the input to be
124
144
  * re-focused, see componentDidUpdate().
125
145
  */
126
- this.setState({
127
- isActive: false
128
- });
146
+ setIsActive(false);
129
147
  }
130
148
 
131
- if ('function' === typeof this.props.onFocus) {
132
- this.props.onFocus(event);
149
+ if ('function' === typeof onFocus) {
150
+ onFocus(event);
133
151
  }
134
152
  }
135
153
 
136
- onBlur() {
137
- if (this.inputHasValidValue()) {
138
- this.setState({
139
- isActive: false
140
- });
154
+ function onBlur() {
155
+ if (inputHasValidValue()) {
156
+ setIsActive(false);
141
157
  } else {
142
- this.setState(initialState);
158
+ // Reset to initial state
159
+ setIncompleteTokenValue('');
160
+ setInputOffsetFromEnd(0);
161
+ setIsActive(false);
162
+ setIsExpanded(false);
163
+ setSelectedSuggestionIndex(-1);
164
+ setSelectedSuggestionScroll(false);
143
165
  }
144
166
  }
145
167
 
146
- onKeyDown(event) {
168
+ function onKeyDown(event) {
147
169
  let preventDefault = false;
148
170
 
149
171
  if (event.defaultPrevented) {
150
172
  return;
151
- }
173
+ } // TODO: replace to event.code;
174
+
152
175
 
153
176
  switch (event.keyCode) {
154
177
  case _keycodes.BACKSPACE:
155
- preventDefault = this.handleDeleteKey(this.deleteTokenBeforeInput);
178
+ preventDefault = handleDeleteKey(deleteTokenBeforeInput);
156
179
  break;
157
180
 
158
181
  case _keycodes.ENTER:
159
- preventDefault = this.addCurrentToken();
182
+ preventDefault = addCurrentToken();
160
183
  break;
161
184
 
162
185
  case _keycodes.LEFT:
163
- preventDefault = this.handleLeftArrowKey();
186
+ preventDefault = handleLeftArrowKey();
164
187
  break;
165
188
 
166
189
  case _keycodes.UP:
167
- preventDefault = this.handleUpArrowKey();
190
+ preventDefault = handleUpArrowKey();
168
191
  break;
169
192
 
170
193
  case _keycodes.RIGHT:
171
- preventDefault = this.handleRightArrowKey();
194
+ preventDefault = handleRightArrowKey();
172
195
  break;
173
196
 
174
197
  case _keycodes.DOWN:
175
- preventDefault = this.handleDownArrowKey();
198
+ preventDefault = handleDownArrowKey();
176
199
  break;
177
200
 
178
201
  case _keycodes.DELETE:
179
- preventDefault = this.handleDeleteKey(this.deleteTokenAfterInput);
202
+ preventDefault = handleDeleteKey(deleteTokenAfterInput);
180
203
  break;
181
204
 
182
205
  case _keycodes.SPACE:
183
- if (this.props.tokenizeOnSpace) {
184
- preventDefault = this.addCurrentToken();
206
+ if (tokenizeOnSpace) {
207
+ preventDefault = addCurrentToken();
185
208
  }
186
209
 
187
210
  break;
188
211
 
189
212
  case _keycodes.ESCAPE:
190
- preventDefault = this.handleEscapeKey(event);
213
+ preventDefault = handleEscapeKey(event);
191
214
  break;
192
215
 
193
216
  default:
@@ -199,13 +222,13 @@ class FormTokenField extends _element.Component {
199
222
  }
200
223
  }
201
224
 
202
- onKeyPress(event) {
203
- let preventDefault = false;
225
+ function onKeyPress(event) {
226
+ let preventDefault = false; // TODO: replace to event.code;
204
227
 
205
228
  switch (event.charCode) {
206
229
  case 44:
207
230
  // Comma.
208
- preventDefault = this.handleCommaKey();
231
+ preventDefault = handleCommaKey();
209
232
  break;
210
233
 
211
234
  default:
@@ -217,212 +240,201 @@ class FormTokenField extends _element.Component {
217
240
  }
218
241
  }
219
242
 
220
- onContainerTouched(event) {
243
+ function onContainerTouched(event) {
221
244
  // Prevent clicking/touching the tokensAndInput container from blurring
222
245
  // the input and adding the current token.
223
- if (event.target === this.tokensAndInput && this.state.isActive) {
246
+ if (event.target === tokensAndInput.current && isActive) {
224
247
  event.preventDefault();
225
248
  }
226
249
  }
227
250
 
228
- onTokenClickRemove(event) {
229
- this.deleteToken(event.value);
230
- this.input.focus();
251
+ function onTokenClickRemove(event) {
252
+ deleteToken(event.value);
253
+ focus();
231
254
  }
232
255
 
233
- onSuggestionHovered(suggestion) {
234
- const index = this.getMatchingSuggestions().indexOf(suggestion);
256
+ function onSuggestionHovered(suggestion) {
257
+ const index = getMatchingSuggestions().indexOf(suggestion);
235
258
 
236
259
  if (index >= 0) {
237
- this.setState({
238
- selectedSuggestionIndex: index,
239
- selectedSuggestionScroll: false
240
- });
260
+ setSelectedSuggestionIndex(index);
261
+ setSelectedSuggestionScroll(false);
241
262
  }
242
263
  }
243
264
 
244
- onSuggestionSelected(suggestion) {
245
- this.addNewToken(suggestion);
265
+ function onSuggestionSelected(suggestion) {
266
+ addNewToken(suggestion);
246
267
  }
247
268
 
248
- onInputChange(event) {
269
+ function onInputChangeHandler(event) {
249
270
  const text = event.value;
250
- const separator = this.props.tokenizeOnSpace ? /[ ,\t]+/ : /[,\t]+/;
271
+ const separator = tokenizeOnSpace ? /[ ,\t]+/ : /[,\t]+/;
251
272
  const items = text.split(separator);
252
273
  const tokenValue = (0, _lodash.last)(items) || '';
253
274
 
254
275
  if (items.length > 1) {
255
- this.addNewTokens(items.slice(0, -1));
276
+ addNewTokens(items.slice(0, -1));
256
277
  }
257
278
 
258
- this.setState({
259
- incompleteTokenValue: tokenValue
260
- }, this.updateSuggestions);
261
- this.props.onInputChange(tokenValue);
279
+ setIncompleteTokenValue(tokenValue);
280
+ onInputChange(tokenValue);
262
281
  }
263
282
 
264
- handleDeleteKey(deleteToken) {
283
+ function handleDeleteKey(_deleteToken) {
265
284
  let preventDefault = false;
266
285
 
267
- if (this.input.hasFocus() && this.isInputEmpty()) {
268
- deleteToken();
286
+ if (hasFocus() && isInputEmpty()) {
287
+ _deleteToken();
288
+
269
289
  preventDefault = true;
270
290
  }
271
291
 
272
292
  return preventDefault;
273
293
  }
274
294
 
275
- handleLeftArrowKey() {
295
+ function handleLeftArrowKey() {
276
296
  let preventDefault = false;
277
297
 
278
- if (this.isInputEmpty()) {
279
- this.moveInputBeforePreviousToken();
298
+ if (isInputEmpty()) {
299
+ moveInputBeforePreviousToken();
280
300
  preventDefault = true;
281
301
  }
282
302
 
283
303
  return preventDefault;
284
304
  }
285
305
 
286
- handleRightArrowKey() {
306
+ function handleRightArrowKey() {
287
307
  let preventDefault = false;
288
308
 
289
- if (this.isInputEmpty()) {
290
- this.moveInputAfterNextToken();
309
+ if (isInputEmpty()) {
310
+ moveInputAfterNextToken();
291
311
  preventDefault = true;
292
312
  }
293
313
 
294
314
  return preventDefault;
295
315
  }
296
316
 
297
- handleUpArrowKey() {
298
- this.setState((state, props) => ({
299
- selectedSuggestionIndex: (state.selectedSuggestionIndex === 0 ? this.getMatchingSuggestions(state.incompleteTokenValue, props.suggestions, props.value, props.maxSuggestions, props.saveTransform).length : state.selectedSuggestionIndex) - 1,
300
- selectedSuggestionScroll: true
301
- }));
317
+ function handleUpArrowKey() {
318
+ setSelectedSuggestionIndex(index => {
319
+ return (index === 0 ? getMatchingSuggestions(incompleteTokenValue, suggestions, value, maxSuggestions, saveTransform).length : index) - 1;
320
+ });
321
+ setSelectedSuggestionScroll(true);
302
322
  return true; // PreventDefault.
303
323
  }
304
324
 
305
- handleDownArrowKey() {
306
- this.setState((state, props) => ({
307
- selectedSuggestionIndex: (state.selectedSuggestionIndex + 1) % this.getMatchingSuggestions(state.incompleteTokenValue, props.suggestions, props.value, props.maxSuggestions, props.saveTransform).length,
308
- selectedSuggestionScroll: true
309
- }));
325
+ function handleDownArrowKey() {
326
+ setSelectedSuggestionIndex(index => {
327
+ return (index + 1) % getMatchingSuggestions(incompleteTokenValue, suggestions, value, maxSuggestions, saveTransform).length;
328
+ });
329
+ setSelectedSuggestionScroll(true);
310
330
  return true; // PreventDefault.
311
331
  }
312
332
 
313
- handleEscapeKey(event) {
314
- this.setState({
315
- incompleteTokenValue: event.target.value,
316
- isExpanded: false,
317
- selectedSuggestionIndex: -1,
318
- selectedSuggestionScroll: false
319
- });
333
+ function handleEscapeKey(event) {
334
+ if (event.target instanceof HTMLInputElement) {
335
+ setIncompleteTokenValue(event.target.value);
336
+ setIsExpanded(false);
337
+ setSelectedSuggestionIndex(-1);
338
+ setSelectedSuggestionScroll(false);
339
+ }
340
+
320
341
  return true; // PreventDefault.
321
342
  }
322
343
 
323
- handleCommaKey() {
324
- if (this.inputHasValidValue()) {
325
- this.addNewToken(this.state.incompleteTokenValue);
344
+ function handleCommaKey() {
345
+ if (inputHasValidValue()) {
346
+ addNewToken(incompleteTokenValue);
326
347
  }
327
348
 
328
349
  return true; // PreventDefault.
329
350
  }
330
351
 
331
- moveInputToIndex(index) {
332
- this.setState((state, props) => ({
333
- inputOffsetFromEnd: props.value.length - Math.max(index, -1) - 1
334
- }));
352
+ function moveInputToIndex(index) {
353
+ setInputOffsetFromEnd(value.length - Math.max(index, -1) - 1);
335
354
  }
336
355
 
337
- moveInputBeforePreviousToken() {
338
- this.setState((state, props) => ({
339
- inputOffsetFromEnd: Math.min(state.inputOffsetFromEnd + 1, props.value.length)
340
- }));
356
+ function moveInputBeforePreviousToken() {
357
+ setInputOffsetFromEnd(prevInputOffsetFromEnd => {
358
+ return Math.min(prevInputOffsetFromEnd + 1, value.length);
359
+ });
341
360
  }
342
361
 
343
- moveInputAfterNextToken() {
344
- this.setState(state => ({
345
- inputOffsetFromEnd: Math.max(state.inputOffsetFromEnd - 1, 0)
346
- }));
362
+ function moveInputAfterNextToken() {
363
+ setInputOffsetFromEnd(prevInputOffsetFromEnd => {
364
+ return Math.max(prevInputOffsetFromEnd - 1, 0);
365
+ });
347
366
  }
348
367
 
349
- deleteTokenBeforeInput() {
350
- const index = this.getIndexOfInput() - 1;
368
+ function deleteTokenBeforeInput() {
369
+ const index = getIndexOfInput() - 1;
351
370
 
352
371
  if (index > -1) {
353
- this.deleteToken(this.props.value[index]);
372
+ deleteToken(value[index]);
354
373
  }
355
374
  }
356
375
 
357
- deleteTokenAfterInput() {
358
- const index = this.getIndexOfInput();
376
+ function deleteTokenAfterInput() {
377
+ const index = getIndexOfInput();
359
378
 
360
- if (index < this.props.value.length) {
361
- this.deleteToken(this.props.value[index]); // Update input offset since it's the offset from the last token.
379
+ if (index < value.length) {
380
+ deleteToken(value[index]); // Update input offset since it's the offset from the last token.
362
381
 
363
- this.moveInputToIndex(index);
382
+ moveInputToIndex(index);
364
383
  }
365
384
  }
366
385
 
367
- addCurrentToken() {
386
+ function addCurrentToken() {
368
387
  let preventDefault = false;
369
- const selectedSuggestion = this.getSelectedSuggestion();
388
+ const selectedSuggestion = getSelectedSuggestion();
370
389
 
371
390
  if (selectedSuggestion) {
372
- this.addNewToken(selectedSuggestion);
391
+ addNewToken(selectedSuggestion);
373
392
  preventDefault = true;
374
- } else if (this.inputHasValidValue()) {
375
- this.addNewToken(this.state.incompleteTokenValue);
393
+ } else if (inputHasValidValue()) {
394
+ addNewToken(incompleteTokenValue);
376
395
  preventDefault = true;
377
396
  }
378
397
 
379
398
  return preventDefault;
380
399
  }
381
400
 
382
- addNewTokens(tokens) {
383
- const tokensToAdd = (0, _lodash.uniq)(tokens.map(this.props.saveTransform).filter(Boolean).filter(token => !this.valueContainsToken(token)));
401
+ function addNewTokens(tokens) {
402
+ const tokensToAdd = (0, _lodash.uniq)(tokens.map(saveTransform).filter(Boolean).filter(token => !valueContainsToken(token)));
384
403
 
385
404
  if (tokensToAdd.length > 0) {
386
- const newValue = (0, _lodash.clone)(this.props.value);
387
- newValue.splice.apply(newValue, [this.getIndexOfInput(), 0].concat(tokensToAdd));
388
- this.props.onChange(newValue);
405
+ const newValue = (0, _lodash.clone)(value);
406
+ newValue.splice(getIndexOfInput(), 0, ...tokensToAdd);
407
+ onChange(newValue);
389
408
  }
390
409
  }
391
410
 
392
- addNewToken(token) {
393
- const {
394
- __experimentalExpandOnFocus,
395
- __experimentalValidateInput
396
- } = this.props;
397
-
411
+ function addNewToken(token) {
398
412
  if (!__experimentalValidateInput(token)) {
399
- this.props.speak(this.props.messages.__experimentalInvalid, 'assertive');
413
+ (0, _a11y.speak)(messages.__experimentalInvalid, 'assertive');
400
414
  return;
401
415
  }
402
416
 
403
- this.addNewTokens([token]);
404
- this.props.speak(this.props.messages.added, 'assertive');
405
- this.setState({
406
- incompleteTokenValue: '',
407
- selectedSuggestionIndex: -1,
408
- selectedSuggestionScroll: false,
409
- isExpanded: !__experimentalExpandOnFocus
410
- });
417
+ addNewTokens([token]);
418
+ (0, _a11y.speak)(messages.added, 'assertive');
419
+ setIncompleteTokenValue('');
420
+ setSelectedSuggestionIndex(-1);
421
+ setSelectedSuggestionScroll(false);
422
+ setIsExpanded(!__experimentalExpandOnFocus);
411
423
 
412
- if (this.state.isActive) {
413
- this.input.focus();
424
+ if (isActive) {
425
+ focus();
414
426
  }
415
427
  }
416
428
 
417
- deleteToken(token) {
418
- const newTokens = this.props.value.filter(item => {
419
- return this.getTokenValue(item) !== this.getTokenValue(token);
429
+ function deleteToken(token) {
430
+ const newTokens = value.filter(item => {
431
+ return getTokenValue(item) !== getTokenValue(token);
420
432
  });
421
- this.props.onChange(newTokens);
422
- this.props.speak(this.props.messages.removed, 'assertive');
433
+ onChange(newTokens);
434
+ (0, _a11y.speak)(messages.removed, 'assertive');
423
435
  }
424
436
 
425
- getTokenValue(token) {
437
+ function getTokenValue(token) {
426
438
  if ('object' === typeof token) {
427
439
  return token.value;
428
440
  }
@@ -430,24 +442,39 @@ class FormTokenField extends _element.Component {
430
442
  return token;
431
443
  }
432
444
 
433
- getMatchingSuggestions() {
434
- let searchValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state.incompleteTokenValue;
435
- let suggestions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.props.suggestions;
436
- let value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.props.value;
437
- let maxSuggestions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.props.maxSuggestions;
438
- let saveTransform = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.props.saveTransform;
439
- let match = saveTransform(searchValue);
445
+ function getMatchingSuggestions() {
446
+ let searchValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : incompleteTokenValue;
447
+
448
+ let _suggestions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : suggestions;
449
+
450
+ let _value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : value;
451
+
452
+ let _maxSuggestions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : maxSuggestions;
453
+
454
+ let _saveTransform = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : saveTransform;
455
+
456
+ let match = _saveTransform(searchValue);
457
+
440
458
  const startsWithMatch = [];
441
459
  const containsMatch = [];
442
460
 
461
+ const normalizedValue = _value.map(item => {
462
+ if (typeof item === 'string') {
463
+ return item;
464
+ }
465
+
466
+ return item.value;
467
+ });
468
+
443
469
  if (match.length === 0) {
444
- suggestions = (0, _lodash.difference)(suggestions, value);
470
+ _suggestions = (0, _lodash.difference)(_suggestions, normalizedValue);
445
471
  } else {
446
472
  match = match.toLocaleLowerCase();
447
- (0, _lodash.each)(suggestions, suggestion => {
473
+
474
+ _suggestions.forEach(suggestion => {
448
475
  const index = suggestion.toLocaleLowerCase().indexOf(match);
449
476
 
450
- if (value.indexOf(suggestion) === -1) {
477
+ if (normalizedValue.indexOf(suggestion) === -1) {
451
478
  if (index === 0) {
452
479
  startsWithMatch.push(suggestion);
453
480
  } else if (index > 0) {
@@ -455,62 +482,52 @@ class FormTokenField extends _element.Component {
455
482
  }
456
483
  }
457
484
  });
458
- suggestions = startsWithMatch.concat(containsMatch);
485
+
486
+ _suggestions = startsWithMatch.concat(containsMatch);
459
487
  }
460
488
 
461
- return (0, _lodash.take)(suggestions, maxSuggestions);
489
+ return _suggestions.slice(0, _maxSuggestions);
462
490
  }
463
491
 
464
- getSelectedSuggestion() {
465
- if (this.state.selectedSuggestionIndex !== -1) {
466
- return this.getMatchingSuggestions()[this.state.selectedSuggestionIndex];
492
+ function getSelectedSuggestion() {
493
+ if (selectedSuggestionIndex !== -1) {
494
+ return getMatchingSuggestions()[selectedSuggestionIndex];
467
495
  }
496
+
497
+ return undefined;
468
498
  }
469
499
 
470
- valueContainsToken(token) {
471
- return (0, _lodash.some)(this.props.value, item => {
472
- return this.getTokenValue(token) === this.getTokenValue(item);
500
+ function valueContainsToken(token) {
501
+ return (0, _lodash.some)(value, item => {
502
+ return getTokenValue(token) === getTokenValue(item);
473
503
  });
474
504
  }
475
505
 
476
- getIndexOfInput() {
477
- return this.props.value.length - this.state.inputOffsetFromEnd;
506
+ function getIndexOfInput() {
507
+ return value.length - inputOffsetFromEnd;
478
508
  }
479
509
 
480
- isInputEmpty() {
481
- return this.state.incompleteTokenValue.length === 0;
510
+ function isInputEmpty() {
511
+ return incompleteTokenValue.length === 0;
482
512
  }
483
513
 
484
- inputHasValidValue() {
485
- return this.props.saveTransform(this.state.incompleteTokenValue).length > 0;
514
+ function inputHasValidValue() {
515
+ return saveTransform(incompleteTokenValue).length > 0;
486
516
  }
487
517
 
488
- updateSuggestions() {
518
+ function updateSuggestions() {
489
519
  let resetSelectedSuggestion = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
490
- const {
491
- __experimentalExpandOnFocus
492
- } = this.props;
493
- const {
494
- incompleteTokenValue
495
- } = this.state;
496
520
  const inputHasMinimumChars = incompleteTokenValue.trim().length > 1;
497
- const matchingSuggestions = this.getMatchingSuggestions(incompleteTokenValue);
521
+ const matchingSuggestions = getMatchingSuggestions(incompleteTokenValue);
498
522
  const hasMatchingSuggestions = matchingSuggestions.length > 0;
499
- const newState = {
500
- isExpanded: __experimentalExpandOnFocus || inputHasMinimumChars && hasMatchingSuggestions
501
- };
523
+ setIsExpanded(__experimentalExpandOnFocus || inputHasMinimumChars && hasMatchingSuggestions);
502
524
 
503
525
  if (resetSelectedSuggestion) {
504
- newState.selectedSuggestionIndex = -1;
505
- newState.selectedSuggestionScroll = false;
526
+ setSelectedSuggestionIndex(-1);
527
+ setSelectedSuggestionScroll(false);
506
528
  }
507
529
 
508
- this.setState(newState);
509
-
510
530
  if (inputHasMinimumChars) {
511
- const {
512
- debouncedSpeak
513
- } = this.props;
514
531
  const message = hasMatchingSuggestions ? (0, _i18n.sprintf)(
515
532
  /* translators: %d: number of results. */
516
533
  (0, _i18n._n)('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', matchingSuggestions.length), matchingSuggestions.length) : (0, _i18n.__)('No results.');
@@ -518,150 +535,102 @@ class FormTokenField extends _element.Component {
518
535
  }
519
536
  }
520
537
 
521
- renderTokensAndInput() {
522
- const components = (0, _lodash.map)(this.props.value, this.renderToken);
523
- components.splice(this.getIndexOfInput(), 0, this.renderInput());
538
+ function renderTokensAndInput() {
539
+ const components = (0, _lodash.map)(value, renderToken);
540
+ components.splice(getIndexOfInput(), 0, renderInput());
524
541
  return components;
525
542
  }
526
543
 
527
- renderToken(token, index, tokens) {
528
- const value = this.getTokenValue(token);
529
- const status = token.status ? token.status : undefined;
544
+ function renderToken(token, index, tokens) {
545
+ const _value = getTokenValue(token);
546
+
547
+ const status = typeof token !== 'string' ? token.status : undefined;
530
548
  const termPosition = index + 1;
531
549
  const termsCount = tokens.length;
532
550
  return (0, _element.createElement)(_token.default, {
533
- key: 'token-' + value,
534
- value: value,
551
+ key: 'token-' + _value,
552
+ value: _value,
535
553
  status: status,
536
- title: token.title,
537
- displayTransform: this.props.displayTransform,
538
- onClickRemove: this.onTokenClickRemove,
539
- isBorderless: token.isBorderless || this.props.isBorderless,
540
- onMouseEnter: token.onMouseEnter,
541
- onMouseLeave: token.onMouseLeave,
542
- disabled: 'error' !== status && this.props.disabled,
543
- messages: this.props.messages,
554
+ title: typeof token !== 'string' ? token.title : undefined,
555
+ displayTransform: displayTransform,
556
+ onClickRemove: onTokenClickRemove,
557
+ isBorderless: typeof token !== 'string' && token.isBorderless || isBorderless,
558
+ onMouseEnter: typeof token !== 'string' ? token.onMouseEnter : undefined,
559
+ onMouseLeave: typeof token !== 'string' ? token.onMouseLeave : undefined,
560
+ disabled: 'error' !== status && disabled,
561
+ messages: messages,
544
562
  termsCount: termsCount,
545
563
  termPosition: termPosition
546
564
  });
547
565
  }
548
566
 
549
- renderInput() {
550
- const {
551
- autoCapitalize,
552
- autoComplete,
553
- maxLength,
554
- placeholder,
555
- value,
556
- instanceId
557
- } = this.props;
558
- let props = {
567
+ function renderInput() {
568
+ const inputProps = {
559
569
  instanceId,
560
570
  autoCapitalize,
561
571
  autoComplete,
562
572
  placeholder: value.length === 0 ? placeholder : '',
563
- ref: this.bindInput,
564
573
  key: 'input',
565
- disabled: this.props.disabled,
566
- value: this.state.incompleteTokenValue,
567
- onBlur: this.onBlur,
568
- isExpanded: this.state.isExpanded,
569
- selectedSuggestionIndex: this.state.selectedSuggestionIndex
570
- };
571
-
572
- if (!(maxLength && value.length >= maxLength)) {
573
- props = { ...props,
574
- onChange: this.onInputChange
575
- };
576
- }
577
-
578
- return (0, _element.createElement)(_tokenInput.default, props);
579
- }
580
-
581
- render() {
582
- const {
583
574
  disabled,
584
- label = (0, _i18n.__)('Add item'),
585
- instanceId,
586
- className,
587
- __experimentalShowHowTo
588
- } = this.props;
589
- const {
590
- isExpanded
591
- } = this.state;
592
- const classes = (0, _classnames.default)(className, 'components-form-token-field__input-container', {
593
- 'is-active': this.state.isActive,
594
- 'is-disabled': disabled
595
- });
596
- let tokenFieldProps = {
597
- className: 'components-form-token-field',
598
- tabIndex: '-1'
575
+ value: incompleteTokenValue,
576
+ onBlur,
577
+ isExpanded,
578
+ selectedSuggestionIndex
599
579
  };
600
- const matchingSuggestions = this.getMatchingSuggestions();
601
-
602
- if (!disabled) {
603
- tokenFieldProps = Object.assign({}, tokenFieldProps, {
604
- onKeyDown: this.onKeyDown,
605
- onKeyPress: this.onKeyPress,
606
- onFocus: this.onFocus
607
- });
608
- } // Disable reason: There is no appropriate role which describes the
609
- // input container intended accessible usability.
610
- // TODO: Refactor click detection to use blur to stop propagation.
611
-
612
- /* eslint-disable jsx-a11y/no-static-element-interactions */
613
-
614
-
615
- return (0, _element.createElement)("div", tokenFieldProps, (0, _element.createElement)("label", {
616
- htmlFor: `components-form-token-input-${instanceId}`,
617
- className: "components-form-token-field__label"
618
- }, label), (0, _element.createElement)("div", {
619
- ref: this.bindTokensAndInput,
620
- className: classes,
621
- tabIndex: "-1",
622
- onMouseDown: this.onContainerTouched,
623
- onTouchStart: this.onContainerTouched
624
- }, this.renderTokensAndInput(), isExpanded && (0, _element.createElement)(_suggestionsList.default, {
625
- instanceId: instanceId,
626
- match: this.props.saveTransform(this.state.incompleteTokenValue),
627
- displayTransform: this.props.displayTransform,
628
- suggestions: matchingSuggestions,
629
- selectedIndex: this.state.selectedSuggestionIndex,
630
- scrollIntoView: this.state.selectedSuggestionScroll,
631
- onHover: this.onSuggestionHovered,
632
- onSelect: this.onSuggestionSelected
633
- })), __experimentalShowHowTo && (0, _element.createElement)("p", {
634
- id: `components-form-token-suggestions-howto-${instanceId}`,
635
- className: "components-form-token-field__help"
636
- }, this.props.tokenizeOnSpace ? (0, _i18n.__)('Separate with commas, spaces, or the Enter key.') : (0, _i18n.__)('Separate with commas or the Enter key.')));
637
- /* eslint-enable jsx-a11y/no-static-element-interactions */
580
+ return (0, _element.createElement)(_tokenInput.default, (0, _extends2.default)({}, inputProps, {
581
+ onChange: !(maxLength && value.length >= maxLength) ? onInputChangeHandler : undefined,
582
+ ref: input
583
+ }));
638
584
  }
639
585
 
586
+ const classes = (0, _classnames.default)(className, 'components-form-token-field__input-container', {
587
+ 'is-active': isActive,
588
+ 'is-disabled': disabled
589
+ });
590
+ let tokenFieldProps = {
591
+ className: 'components-form-token-field',
592
+ tabIndex: -1
593
+ };
594
+ const matchingSuggestions = getMatchingSuggestions();
595
+
596
+ if (!disabled) {
597
+ tokenFieldProps = Object.assign({}, tokenFieldProps, {
598
+ onKeyDown,
599
+ onKeyPress,
600
+ onFocus: onFocusHandler
601
+ });
602
+ } // Disable reason: There is no appropriate role which describes the
603
+ // input container intended accessible usability.
604
+ // TODO: Refactor click detection to use blur to stop propagation.
605
+
606
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
607
+
608
+
609
+ return (0, _element.createElement)("div", tokenFieldProps, (0, _element.createElement)("label", {
610
+ htmlFor: `components-form-token-input-${instanceId}`,
611
+ className: "components-form-token-field__label"
612
+ }, label), (0, _element.createElement)("div", {
613
+ ref: tokensAndInput,
614
+ className: classes,
615
+ tabIndex: -1,
616
+ onMouseDown: onContainerTouched,
617
+ onTouchStart: onContainerTouched
618
+ }, renderTokensAndInput(), isExpanded && (0, _element.createElement)(_suggestionsList.default, {
619
+ instanceId: instanceId,
620
+ match: saveTransform(incompleteTokenValue),
621
+ displayTransform: displayTransform,
622
+ suggestions: matchingSuggestions,
623
+ selectedIndex: selectedSuggestionIndex,
624
+ scrollIntoView: selectedSuggestionScroll,
625
+ onHover: onSuggestionHovered,
626
+ onSelect: onSuggestionSelected
627
+ })), __experimentalShowHowTo && (0, _element.createElement)("p", {
628
+ id: `components-form-token-suggestions-howto-${instanceId}`,
629
+ className: "components-form-token-field__help"
630
+ }, tokenizeOnSpace ? (0, _i18n.__)('Separate with commas, spaces, or the Enter key.') : (0, _i18n.__)('Separate with commas or the Enter key.')));
631
+ /* eslint-enable jsx-a11y/no-static-element-interactions */
640
632
  }
641
633
 
642
- FormTokenField.defaultProps = {
643
- suggestions: Object.freeze([]),
644
- maxSuggestions: 100,
645
- value: Object.freeze([]),
646
- displayTransform: _lodash.identity,
647
- saveTransform: token => token.trim(),
648
- onChange: () => {},
649
- onInputChange: () => {},
650
- isBorderless: false,
651
- disabled: false,
652
- tokenizeOnSpace: false,
653
- messages: {
654
- added: (0, _i18n.__)('Item added.'),
655
- removed: (0, _i18n.__)('Item removed.'),
656
- remove: (0, _i18n.__)('Remove item'),
657
- __experimentalInvalid: (0, _i18n.__)('Invalid item')
658
- },
659
- __experimentalExpandOnFocus: false,
660
- __experimentalValidateInput: () => true,
661
- __experimentalShowHowTo: true
662
- };
663
-
664
- var _default = (0, _withSpokenMessages.default)((0, _compose.withInstanceId)(FormTokenField));
665
-
634
+ var _default = FormTokenField;
666
635
  exports.default = _default;
667
636
  //# sourceMappingURL=index.js.map