@wordpress/components 19.13.0 → 19.14.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 (398) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/build/alignment-matrix-control/utils.js +1 -7
  3. package/build/alignment-matrix-control/utils.js.map +1 -1
  4. package/build/autocomplete/autocompleter-ui.js +4 -2
  5. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  6. package/build/autocomplete/autocompleter-ui.native.js +9 -3
  7. package/build/autocomplete/autocompleter-ui.native.js.map +1 -1
  8. package/build/autocomplete/index.js +4 -2
  9. package/build/autocomplete/index.js.map +1 -1
  10. package/build/border-box-control/border-box-control/component.js +2 -1
  11. package/build/border-box-control/border-box-control/component.js.map +1 -1
  12. package/build/border-box-control/border-box-control-split-controls/component.js +2 -1
  13. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  14. package/build/border-control/border-control/component.js +40 -4
  15. package/build/border-control/border-control/component.js.map +1 -1
  16. package/build/box-control/utils.js +3 -3
  17. package/build/box-control/utils.js.map +1 -1
  18. package/build/color-indicator/index.js +27 -10
  19. package/build/color-indicator/index.js.map +1 -1
  20. package/build/color-indicator/types.js +6 -0
  21. package/build/color-indicator/types.js.map +1 -0
  22. package/build/color-palette/index.js +2 -1
  23. package/build/color-palette/index.js.map +1 -1
  24. package/build/color-picker/component.js +6 -9
  25. package/build/color-picker/component.js.map +1 -1
  26. package/build/color-picker/input-with-slider.js +1 -2
  27. package/build/color-picker/input-with-slider.js.map +1 -1
  28. package/build/color-picker/styles.js +34 -16
  29. package/build/color-picker/styles.js.map +1 -1
  30. package/build/custom-gradient-picker/index.js +8 -8
  31. package/build/custom-gradient-picker/index.js.map +1 -1
  32. package/build/custom-gradient-picker/index.native.js +8 -9
  33. package/build/custom-gradient-picker/index.native.js.map +1 -1
  34. package/build/custom-gradient-picker/serializer.js +4 -7
  35. package/build/custom-gradient-picker/serializer.js.map +1 -1
  36. package/build/date-time/date/index.js +3 -1
  37. package/build/date-time/date/index.js.map +1 -1
  38. package/build/date-time/date-time/index.js +3 -1
  39. package/build/date-time/date-time/index.js.map +1 -1
  40. package/build/duotone-picker/duotone-picker.js +42 -29
  41. package/build/duotone-picker/duotone-picker.js.map +1 -1
  42. package/build/elevation/hook.js +13 -13
  43. package/build/elevation/hook.js.map +1 -1
  44. package/build/focal-point-picker/index.native.js +4 -4
  45. package/build/focal-point-picker/index.native.js.map +1 -1
  46. package/build/form-toggle/index.js +28 -5
  47. package/build/form-toggle/index.js.map +1 -1
  48. package/build/form-toggle/types.js +6 -0
  49. package/build/form-toggle/types.js.map +1 -0
  50. package/build/h-stack/utils.js +3 -3
  51. package/build/h-stack/utils.js.map +1 -1
  52. package/build/heading/component.js +0 -1
  53. package/build/heading/component.js.map +1 -1
  54. package/build/heading/hook.js.map +1 -1
  55. package/build/heading/types.js +6 -0
  56. package/build/heading/types.js.map +1 -0
  57. package/build/mobile/bottom-sheet/keyboard-avoiding-view.native.js +0 -1
  58. package/build/mobile/bottom-sheet/keyboard-avoiding-view.native.js.map +1 -1
  59. package/build/mobile/link-picker/index.native.js +4 -4
  60. package/build/mobile/link-picker/index.native.js.map +1 -1
  61. package/build/mobile/segmented-control/index.native.js +2 -4
  62. package/build/mobile/segmented-control/index.native.js.map +1 -1
  63. package/build/navigation/group/index.js +4 -7
  64. package/build/navigation/group/index.js.map +1 -1
  65. package/build/navigation/item/base.js +3 -3
  66. package/build/navigation/item/base.js.map +1 -1
  67. package/build/navigation/item/use-navigation-tree-item.js +2 -1
  68. package/build/navigation/item/use-navigation-tree-item.js.map +1 -1
  69. package/build/navigation/menu/menu-title-search.js +1 -7
  70. package/build/navigation/menu/menu-title-search.js.map +1 -1
  71. package/build/navigation/menu/search-no-results-found.js +1 -7
  72. package/build/navigation/menu/search-no-results-found.js.map +1 -1
  73. package/build/navigation/use-navigation-tree-nodes.js +18 -10
  74. package/build/navigation/use-navigation-tree-nodes.js.map +1 -1
  75. package/build/navigation/utils.js +4 -2
  76. package/build/navigation/utils.js.map +1 -1
  77. package/build/range-control/index.js +3 -3
  78. package/build/range-control/index.js.map +1 -1
  79. package/build/range-control/utils.js +3 -7
  80. package/build/range-control/utils.js.map +1 -1
  81. package/build/spacer/component.js +5 -5
  82. package/build/spacer/component.js.map +1 -1
  83. package/build/spinner/index.js +26 -13
  84. package/build/spinner/index.js.map +1 -1
  85. package/build/spinner/styles.js +10 -10
  86. package/build/spinner/styles.js.map +1 -1
  87. package/build/truncate/component.js +7 -8
  88. package/build/truncate/component.js.map +1 -1
  89. package/build/truncate/hook.js +3 -10
  90. package/build/truncate/hook.js.map +1 -1
  91. package/build/truncate/index.js.map +1 -1
  92. package/build/truncate/styles.js +1 -1
  93. package/build/truncate/styles.js.map +1 -1
  94. package/build/truncate/utils.js +3 -16
  95. package/build/truncate/utils.js.map +1 -1
  96. package/build/utils/math.js +17 -7
  97. package/build/utils/math.js.map +1 -1
  98. package/build/v-stack/component.js +9 -9
  99. package/build/v-stack/component.js.map +1 -1
  100. package/build/v-stack/hook.js +0 -5
  101. package/build/v-stack/hook.js.map +1 -1
  102. package/build/v-stack/index.js.map +1 -1
  103. package/build-module/alignment-matrix-control/utils.js +1 -6
  104. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  105. package/build-module/autocomplete/autocompleter-ui.js +4 -2
  106. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  107. package/build-module/autocomplete/autocompleter-ui.native.js +9 -3
  108. package/build-module/autocomplete/autocompleter-ui.native.js.map +1 -1
  109. package/build-module/autocomplete/index.js +4 -2
  110. package/build-module/autocomplete/index.js.map +1 -1
  111. package/build-module/border-box-control/border-box-control/component.js +2 -1
  112. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  113. package/build-module/border-box-control/border-box-control-split-controls/component.js +2 -1
  114. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  115. package/build-module/border-control/border-control/component.js +38 -3
  116. package/build-module/border-control/border-control/component.js.map +1 -1
  117. package/build-module/box-control/utils.js +4 -4
  118. package/build-module/box-control/utils.js.map +1 -1
  119. package/build-module/color-indicator/index.js +29 -8
  120. package/build-module/color-indicator/index.js.map +1 -1
  121. package/build-module/color-indicator/types.js +2 -0
  122. package/build-module/color-indicator/types.js.map +1 -0
  123. package/build-module/color-palette/index.js +2 -1
  124. package/build-module/color-palette/index.js.map +1 -1
  125. package/build-module/color-picker/component.js +7 -8
  126. package/build-module/color-picker/component.js.map +1 -1
  127. package/build-module/color-picker/input-with-slider.js +1 -2
  128. package/build-module/color-picker/input-with-slider.js.map +1 -1
  129. package/build-module/color-picker/styles.js +28 -14
  130. package/build-module/color-picker/styles.js.map +1 -1
  131. package/build-module/custom-gradient-picker/index.js +8 -7
  132. package/build-module/custom-gradient-picker/index.js.map +1 -1
  133. package/build-module/custom-gradient-picker/index.native.js +8 -8
  134. package/build-module/custom-gradient-picker/index.native.js.map +1 -1
  135. package/build-module/custom-gradient-picker/serializer.js +4 -6
  136. package/build-module/custom-gradient-picker/serializer.js.map +1 -1
  137. package/build-module/date-time/date/index.js +3 -1
  138. package/build-module/date-time/date/index.js.map +1 -1
  139. package/build-module/date-time/date-time/index.js +3 -1
  140. package/build-module/date-time/date-time/index.js.map +1 -1
  141. package/build-module/duotone-picker/duotone-picker.js +42 -29
  142. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  143. package/build-module/elevation/hook.js +12 -12
  144. package/build-module/elevation/hook.js.map +1 -1
  145. package/build-module/focal-point-picker/index.native.js +1 -1
  146. package/build-module/focal-point-picker/index.native.js.map +1 -1
  147. package/build-module/form-toggle/index.js +30 -6
  148. package/build-module/form-toggle/index.js.map +1 -1
  149. package/build-module/form-toggle/types.js +2 -0
  150. package/build-module/form-toggle/types.js.map +1 -0
  151. package/build-module/h-stack/utils.js +3 -3
  152. package/build-module/h-stack/utils.js.map +1 -1
  153. package/build-module/heading/component.js +0 -1
  154. package/build-module/heading/component.js.map +1 -1
  155. package/build-module/heading/hook.js.map +1 -1
  156. package/build-module/heading/types.js +2 -0
  157. package/build-module/heading/types.js.map +1 -0
  158. package/build-module/mobile/bottom-sheet/keyboard-avoiding-view.native.js +0 -1
  159. package/build-module/mobile/bottom-sheet/keyboard-avoiding-view.native.js.map +1 -1
  160. package/build-module/mobile/link-picker/index.native.js +4 -3
  161. package/build-module/mobile/link-picker/index.native.js.map +1 -1
  162. package/build-module/mobile/segmented-control/index.native.js +2 -3
  163. package/build-module/mobile/segmented-control/index.native.js.map +1 -1
  164. package/build-module/navigation/group/index.js +3 -6
  165. package/build-module/navigation/group/index.js.map +1 -1
  166. package/build-module/navigation/item/base.js +2 -2
  167. package/build-module/navigation/item/base.js.map +1 -1
  168. package/build-module/navigation/item/use-navigation-tree-item.js +2 -1
  169. package/build-module/navigation/item/use-navigation-tree-item.js.map +1 -1
  170. package/build-module/navigation/menu/menu-title-search.js +1 -6
  171. package/build-module/navigation/menu/menu-title-search.js.map +1 -1
  172. package/build-module/navigation/menu/search-no-results-found.js +1 -6
  173. package/build-module/navigation/menu/search-no-results-found.js.map +1 -1
  174. package/build-module/navigation/use-navigation-tree-nodes.js +18 -9
  175. package/build-module/navigation/use-navigation-tree-nodes.js.map +1 -1
  176. package/build-module/navigation/utils.js +2 -2
  177. package/build-module/navigation/utils.js.map +1 -1
  178. package/build-module/range-control/index.js +1 -1
  179. package/build-module/range-control/index.js.map +1 -1
  180. package/build-module/range-control/utils.js +1 -5
  181. package/build-module/range-control/utils.js.map +1 -1
  182. package/build-module/spacer/component.js +3 -4
  183. package/build-module/spacer/component.js.map +1 -1
  184. package/build-module/spinner/index.js +22 -13
  185. package/build-module/spinner/index.js.map +1 -1
  186. package/build-module/spinner/styles.js +10 -10
  187. package/build-module/spinner/styles.js.map +1 -1
  188. package/build-module/truncate/component.js +7 -8
  189. package/build-module/truncate/component.js.map +1 -1
  190. package/build-module/truncate/hook.js +3 -10
  191. package/build-module/truncate/hook.js.map +1 -1
  192. package/build-module/truncate/index.js.map +1 -1
  193. package/build-module/truncate/styles.js +1 -1
  194. package/build-module/truncate/styles.js.map +1 -1
  195. package/build-module/truncate/utils.js +3 -16
  196. package/build-module/truncate/utils.js.map +1 -1
  197. package/build-module/utils/math.js +15 -6
  198. package/build-module/utils/math.js.map +1 -1
  199. package/build-module/v-stack/component.js +9 -9
  200. package/build-module/v-stack/component.js.map +1 -1
  201. package/build-module/v-stack/hook.js +0 -5
  202. package/build-module/v-stack/hook.js.map +1 -1
  203. package/build-module/v-stack/index.js.map +1 -1
  204. package/build-style/style-rtl.css +16 -0
  205. package/build-style/style.css +16 -0
  206. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  207. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  208. package/build-types/border-control/border-control/component.d.ts +36 -2
  209. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  210. package/build-types/border-control/stories/index.d.ts +33 -0
  211. package/build-types/border-control/stories/index.d.ts.map +1 -0
  212. package/build-types/color-indicator/index.d.ts +16 -5
  213. package/build-types/color-indicator/index.d.ts.map +1 -1
  214. package/build-types/color-indicator/stories/index.d.ts +12 -0
  215. package/build-types/color-indicator/stories/index.d.ts.map +1 -0
  216. package/build-types/color-indicator/test/index.d.ts +2 -0
  217. package/build-types/color-indicator/test/index.d.ts.map +1 -0
  218. package/build-types/color-indicator/types.d.ts +12 -0
  219. package/build-types/color-indicator/types.d.ts.map +1 -0
  220. package/build-types/color-palette/index.d.ts.map +1 -1
  221. package/build-types/color-palette/styles.d.ts +4 -2
  222. package/build-types/color-palette/styles.d.ts.map +1 -1
  223. package/build-types/color-picker/component.d.ts.map +1 -1
  224. package/build-types/color-picker/styles.d.ts +17 -0
  225. package/build-types/color-picker/styles.d.ts.map +1 -1
  226. package/build-types/date-time/date/index.d.ts +1 -1
  227. package/build-types/date-time/date/index.d.ts.map +1 -1
  228. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  229. package/build-types/date-time/types.d.ts +6 -0
  230. package/build-types/date-time/types.d.ts.map +1 -1
  231. package/build-types/form-toggle/index.d.ts +29 -0
  232. package/build-types/form-toggle/index.d.ts.map +1 -0
  233. package/build-types/form-toggle/stories/index.d.ts +12 -0
  234. package/build-types/form-toggle/stories/index.d.ts.map +1 -0
  235. package/build-types/form-toggle/test/index.d.ts +2 -0
  236. package/build-types/form-toggle/test/index.d.ts.map +1 -0
  237. package/build-types/form-toggle/types.d.ts +22 -0
  238. package/build-types/form-toggle/types.d.ts.map +1 -0
  239. package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts +3 -0
  240. package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts.map +1 -1
  241. package/build-types/heading/component.d.ts +1 -2
  242. package/build-types/heading/component.d.ts.map +1 -1
  243. package/build-types/heading/hook.d.ts +1 -28
  244. package/build-types/heading/hook.d.ts.map +1 -1
  245. package/build-types/heading/stories/index.d.ts.map +1 -1
  246. package/build-types/heading/test/index.d.ts +2 -0
  247. package/build-types/heading/test/index.d.ts.map +1 -0
  248. package/build-types/heading/types.d.ts +16 -0
  249. package/build-types/heading/types.d.ts.map +1 -0
  250. package/build-types/range-control/utils.d.ts.map +1 -1
  251. package/build-types/spacer/component.d.ts +2 -3
  252. package/build-types/spacer/component.d.ts.map +1 -1
  253. package/build-types/spacer/stories/index.d.ts +12 -0
  254. package/build-types/spacer/stories/index.d.ts.map +1 -0
  255. package/build-types/spinner/index.d.ts +16 -15
  256. package/build-types/spinner/index.d.ts.map +1 -1
  257. package/build-types/spinner/stories/index.d.ts +13 -0
  258. package/build-types/spinner/stories/index.d.ts.map +1 -0
  259. package/build-types/spinner/styles.d.ts +4 -3
  260. package/build-types/spinner/styles.d.ts.map +1 -1
  261. package/build-types/text/types.d.ts +1 -1
  262. package/build-types/text/types.d.ts.map +1 -1
  263. package/build-types/truncate/component.d.ts +3 -3
  264. package/build-types/truncate/component.d.ts.map +1 -1
  265. package/build-types/truncate/hook.d.ts +5 -2
  266. package/build-types/truncate/hook.d.ts.map +1 -1
  267. package/build-types/truncate/index.d.ts +2 -2
  268. package/build-types/truncate/index.d.ts.map +1 -1
  269. package/build-types/truncate/stories/index.d.ts +13 -0
  270. package/build-types/truncate/stories/index.d.ts.map +1 -0
  271. package/build-types/truncate/styles.d.ts +1 -1
  272. package/build-types/truncate/styles.d.ts.map +1 -1
  273. package/build-types/truncate/test/index.d.ts +2 -0
  274. package/build-types/truncate/test/index.d.ts.map +1 -0
  275. package/build-types/truncate/types.d.ts +22 -11
  276. package/build-types/truncate/types.d.ts.map +1 -1
  277. package/build-types/truncate/utils.d.ts +17 -28
  278. package/build-types/truncate/utils.d.ts.map +1 -1
  279. package/build-types/ui/form-group/use-form-group.d.ts +2 -2
  280. package/build-types/utils/math.d.ts +10 -0
  281. package/build-types/utils/math.d.ts.map +1 -1
  282. package/build-types/v-stack/component.d.ts +5 -4
  283. package/build-types/v-stack/component.d.ts.map +1 -1
  284. package/build-types/v-stack/hook.d.ts +5 -3
  285. package/build-types/v-stack/hook.d.ts.map +1 -1
  286. package/build-types/v-stack/index.d.ts +2 -2
  287. package/build-types/v-stack/index.d.ts.map +1 -1
  288. package/build-types/v-stack/stories/index.d.ts +9 -0
  289. package/build-types/v-stack/stories/index.d.ts.map +1 -0
  290. package/build-types/v-stack/test/index.d.ts +2 -0
  291. package/build-types/v-stack/test/index.d.ts.map +1 -0
  292. package/build-types/v-stack/types.d.ts +21 -1
  293. package/build-types/v-stack/types.d.ts.map +1 -1
  294. package/package.json +18 -17
  295. package/src/alignment-matrix-control/utils.js +1 -6
  296. package/src/autocomplete/autocompleter-ui.js +4 -1
  297. package/src/autocomplete/autocompleter-ui.native.js +8 -2
  298. package/src/autocomplete/index.js +4 -8
  299. package/src/border-box-control/border-box-control/component.tsx +1 -0
  300. package/src/border-box-control/border-box-control-split-controls/component.tsx +1 -0
  301. package/src/border-control/border-control/component.tsx +41 -4
  302. package/src/border-control/stories/index.tsx +150 -0
  303. package/src/box-control/utils.js +4 -4
  304. package/src/color-indicator/README.md +7 -9
  305. package/src/color-indicator/index.tsx +47 -0
  306. package/src/color-indicator/stories/index.tsx +37 -0
  307. package/src/color-indicator/test/__snapshots__/index.tsx.snap +11 -0
  308. package/src/color-indicator/test/{index.js → index.tsx} +4 -4
  309. package/src/color-indicator/types.ts +12 -0
  310. package/src/color-palette/index.js +5 -1
  311. package/src/color-picker/component.tsx +12 -11
  312. package/src/color-picker/input-with-slider.tsx +2 -2
  313. package/src/color-picker/styles.ts +20 -1
  314. package/src/custom-gradient-picker/index.js +4 -11
  315. package/src/custom-gradient-picker/index.native.js +3 -11
  316. package/src/custom-gradient-picker/serializer.js +5 -11
  317. package/src/date-time/README.md +7 -0
  318. package/src/date-time/date/index.tsx +2 -0
  319. package/src/date-time/date-time/index.tsx +2 -0
  320. package/src/date-time/types.ts +7 -0
  321. package/src/dimension-control/README.md +5 -2
  322. package/src/dimension-control/test/index.test.js +7 -7
  323. package/src/duotone-picker/duotone-picker.js +58 -37
  324. package/src/duotone-picker/style.scss +19 -0
  325. package/src/elevation/hook.js +8 -8
  326. package/src/flex/flex/README.md +5 -10
  327. package/src/flex/flex-item/README.md +1 -1
  328. package/src/focal-point-picker/index.native.js +1 -1
  329. package/src/form-toggle/README.md +10 -11
  330. package/src/form-toggle/index.tsx +71 -0
  331. package/src/form-toggle/stories/index.tsx +52 -0
  332. package/src/form-toggle/test/__snapshots__/index.tsx.snap +54 -0
  333. package/src/form-toggle/test/index.tsx +102 -0
  334. package/src/form-toggle/types.ts +22 -0
  335. package/src/form-token-field/test/index.js +6 -9
  336. package/src/form-token-field/test/lib/token-field-wrapper.tsx +2 -2
  337. package/src/h-stack/utils.js +3 -3
  338. package/src/heading/README.md +4 -3
  339. package/src/heading/component.tsx +2 -2
  340. package/src/heading/hook.ts +1 -42
  341. package/src/heading/stories/index.tsx +5 -1
  342. package/src/heading/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
  343. package/src/heading/test/index.tsx +68 -0
  344. package/src/heading/types.ts +29 -0
  345. package/src/input-control/test/index.js +106 -31
  346. package/src/mobile/bottom-sheet/keyboard-avoiding-view.native.js +2 -7
  347. package/src/mobile/link-picker/index.native.js +2 -3
  348. package/src/mobile/segmented-control/index.native.js +6 -5
  349. package/src/navigation/group/index.js +8 -3
  350. package/src/navigation/item/base.js +3 -2
  351. package/src/navigation/item/use-navigation-tree-item.js +2 -0
  352. package/src/navigation/menu/menu-title-search.js +3 -6
  353. package/src/navigation/menu/search-no-results-found.js +3 -6
  354. package/src/navigation/use-navigation-tree-nodes.js +11 -10
  355. package/src/navigation/utils.js +2 -2
  356. package/src/number-control/stories/index.js +24 -24
  357. package/src/range-control/index.js +1 -1
  358. package/src/range-control/utils.js +1 -4
  359. package/src/slot-fill/test/slot.js +2 -3
  360. package/src/spacer/component.tsx +3 -4
  361. package/src/spacer/stories/index.tsx +70 -0
  362. package/src/spinner/{index.js → index.tsx} +23 -9
  363. package/src/spinner/stories/index.tsx +32 -0
  364. package/src/spinner/{styles.js → styles.ts} +0 -0
  365. package/src/style.scss +1 -0
  366. package/src/text/types.ts +1 -1
  367. package/src/truncate/README.md +16 -12
  368. package/src/truncate/{component.js → component.tsx} +13 -9
  369. package/src/truncate/{hook.js → hook.ts} +8 -10
  370. package/src/truncate/{index.js → index.ts} +0 -0
  371. package/src/truncate/stories/index.tsx +49 -0
  372. package/src/truncate/{styles.js → styles.ts} +0 -0
  373. package/src/truncate/test/{index.js → index.tsx} +4 -4
  374. package/src/truncate/types.ts +28 -10
  375. package/src/truncate/{utils.js → utils.ts} +19 -19
  376. package/src/utils/math.js +14 -5
  377. package/src/utils/test/math.js +22 -1
  378. package/src/v-stack/README.md +6 -18
  379. package/src/v-stack/{component.js → component.tsx} +15 -10
  380. package/src/v-stack/{hook.js → hook.ts} +5 -6
  381. package/src/v-stack/{index.js → index.ts} +0 -0
  382. package/src/v-stack/stories/index.tsx +41 -0
  383. package/src/v-stack/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
  384. package/src/v-stack/test/{index.js → index.tsx} +0 -0
  385. package/src/v-stack/types.ts +21 -1
  386. package/tsconfig.json +1 -0
  387. package/tsconfig.tsbuildinfo +1 -1
  388. package/src/border-control/stories/index.js +0 -119
  389. package/src/color-indicator/index.js +0 -16
  390. package/src/color-indicator/stories/index.js +0 -22
  391. package/src/color-indicator/test/__snapshots__/index.js.snap +0 -13
  392. package/src/form-toggle/index.js +0 -38
  393. package/src/form-toggle/stories/index.js +0 -28
  394. package/src/form-toggle/test/index.js +0 -74
  395. package/src/heading/test/index.js +0 -67
  396. package/src/spacer/stories/index.js +0 -59
  397. package/src/spinner/stories/index.js +0 -43
  398. package/src/truncate/stories/index.js +0 -38
@@ -0,0 +1,54 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`FormToggle basic rendering should render a span element with an unchecked checkbox 1`] = `
4
+ <span
5
+ class="components-form-toggle"
6
+ >
7
+ <input
8
+ class="components-form-toggle__input"
9
+ type="checkbox"
10
+ />
11
+ <span
12
+ class="components-form-toggle__track"
13
+ />
14
+ <span
15
+ class="components-form-toggle__thumb"
16
+ />
17
+ </span>
18
+ `;
19
+
20
+ exports[`FormToggle basic rendering should render an id prop for the input checkbox 1`] = `
21
+ Snapshot Diff:
22
+ - First value
23
+ + Second value
24
+
25
+ @@ -2,10 +2,11 @@
26
+ <span
27
+ class="components-form-toggle"
28
+ >
29
+ <input
30
+ class="components-form-toggle__input"
31
+ + id="test"
32
+ type="checkbox"
33
+ />
34
+ <span
35
+ class="components-form-toggle__track"
36
+ />
37
+ `;
38
+
39
+ exports[`FormToggle basic rendering should render with an additional className 1`] = `
40
+ Snapshot Diff:
41
+ - First value
42
+ + Second value
43
+
44
+ @@ -1,8 +1,8 @@
45
+ <div>
46
+ <span
47
+ - class="components-form-toggle"
48
+ + class="components-form-toggle testing"
49
+ >
50
+ <input
51
+ class="components-form-toggle__input"
52
+ type="checkbox"
53
+ />
54
+ `;
@@ -0,0 +1,102 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import FormToggle, { noop } from '..';
16
+ import type { FormToggleProps } from '../types';
17
+
18
+ const getInput = () => screen.getByRole( 'checkbox' ) as HTMLInputElement;
19
+
20
+ const ControlledFormToggle = ( { onChange }: FormToggleProps ) => {
21
+ const [ isChecked, setChecked ] = useState( false );
22
+ return (
23
+ <FormToggle
24
+ checked={ isChecked }
25
+ onChange={ ( value ) => {
26
+ setChecked( ( state ) => ! state );
27
+ onChange( value );
28
+ } }
29
+ />
30
+ );
31
+ };
32
+
33
+ describe( 'FormToggle', () => {
34
+ describe( 'basic rendering', () => {
35
+ it( 'should render a span element with an unchecked checkbox', () => {
36
+ const { container } = render( <FormToggle onChange={ noop } /> );
37
+
38
+ expect( getInput() ).not.toBeChecked();
39
+ expect( container.firstChild ).toMatchSnapshot();
40
+ } );
41
+
42
+ it( 'should render a checked checkbox when providing checked prop', () => {
43
+ render( <FormToggle onChange={ noop } checked /> );
44
+
45
+ expect( getInput() ).toBeChecked();
46
+ } );
47
+
48
+ it( 'should render with an additional className', () => {
49
+ const { container: containerDefault } = render(
50
+ <FormToggle onChange={ noop } />
51
+ );
52
+
53
+ const { container: containerWithClassName } = render(
54
+ <FormToggle onChange={ noop } className="testing" />
55
+ );
56
+
57
+ // Expect the diff snapshot to be mostly about the className.
58
+ expect( containerDefault ).toMatchDiffSnapshot(
59
+ containerWithClassName
60
+ );
61
+ } );
62
+
63
+ it( 'should render an id prop for the input checkbox', () => {
64
+ const { container: containerDefault } = render(
65
+ <FormToggle onChange={ noop } />
66
+ );
67
+
68
+ const { container: containerWithID } = render(
69
+ // Disabled because of our rule restricting literal IDs, preferring
70
+ // `withInstanceId`. In this case, it's fine to use literal IDs.
71
+ // eslint-disable-next-line no-restricted-syntax
72
+ <FormToggle onChange={ noop } id="test" />
73
+ );
74
+
75
+ // Expect the diff snapshot to be mostly about the ID.
76
+ expect( containerDefault ).toMatchDiffSnapshot( containerWithID );
77
+ } );
78
+ } );
79
+
80
+ describe( 'Value', () => {
81
+ it( 'should flip the checked property when clicked', async () => {
82
+ const user = userEvent.setup( {
83
+ advanceTimers: jest.advanceTimersByTime,
84
+ } );
85
+
86
+ const onChange = jest.fn();
87
+ render( <ControlledFormToggle onChange={ onChange } /> );
88
+
89
+ const input = getInput();
90
+
91
+ await user.click( input );
92
+ expect( onChange.mock.calls[ 0 ][ 0 ].target ).toBeInTheDocument();
93
+ expect( input ).toBeChecked();
94
+
95
+ await user.click( input );
96
+ expect( onChange.mock.calls[ 1 ][ 0 ].target ).toBeInTheDocument();
97
+ expect( input ).not.toBeChecked();
98
+
99
+ expect( onChange ).toHaveBeenCalledTimes( 2 );
100
+ } );
101
+ } );
102
+ } );
@@ -0,0 +1,22 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ChangeEvent } from 'react';
5
+
6
+ export type FormToggleProps = {
7
+ /**
8
+ * If checked is true the toggle will be checked. If checked is false the
9
+ * toggle will be unchecked. If no value is passed the toggle will be
10
+ * unchecked.
11
+ */
12
+ checked?: boolean;
13
+ /**
14
+ * If disabled is true the toggle will be disabled and apply the appropriate
15
+ * styles.
16
+ */
17
+ disabled?: boolean;
18
+ /**
19
+ * A callback function invoked when the toggle is clicked.
20
+ */
21
+ onChange: ( event: ChangeEvent< HTMLInputElement > ) => void;
22
+ };
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { filter, map } from 'lodash';
5
4
  import TestUtils, { act } from 'react-dom/test-utils';
6
5
  import ReactDOM from 'react-dom';
7
6
 
@@ -56,7 +55,7 @@ describe( 'FormTokenField', () => {
56
55
  const textNodes = wrapperElement().querySelectorAll(
57
56
  '.components-form-token-field__token-text span[aria-hidden]'
58
57
  );
59
- return map( textNodes, ( node ) => node.innerHTML );
58
+ return Array.from( textNodes ).map( ( node ) => node.innerHTML );
60
59
  }
61
60
 
62
61
  function getSuggestionsText( selector ) {
@@ -64,7 +63,7 @@ describe( 'FormTokenField', () => {
64
63
  selector || '.components-form-token-field__suggestion'
65
64
  );
66
65
 
67
- return map( suggestionNodes, getSuggestionNodeText );
66
+ return Array.from( suggestionNodes ).map( getSuggestionNodeText );
68
67
  }
69
68
 
70
69
  function getSuggestionNodeText( node ) {
@@ -77,13 +76,11 @@ describe( 'FormTokenField', () => {
77
76
  // match).
78
77
  const div = document.createElement( 'div' );
79
78
  div.innerHTML = node.querySelector( 'span' ).outerHTML;
80
- return map(
81
- filter(
82
- div.firstChild.childNodes,
79
+ return Array.from( div.firstChild.childNodes )
80
+ .filter(
83
81
  ( childNode ) => childNode.nodeType !== childNode.COMMENT_NODE
84
- ),
85
- ( childNode ) => childNode.textContent
86
- );
82
+ )
83
+ .map( ( childNode ) => childNode.textContent );
87
84
  }
88
85
 
89
86
  function getSelectedSuggestion() {
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { unescape } from 'lodash';
5
4
  import type { ComponentProps } from 'react';
6
5
 
7
6
  /**
@@ -22,7 +21,8 @@ const {
22
21
 
23
22
  function unescapeAndFormatSpaces( str: string ) {
24
23
  const nbsp = String.fromCharCode( 160 );
25
- return unescape( str ).replace( / /g, nbsp );
24
+ const escaped = new DOMParser().parseFromString( str, 'text/html' );
25
+ return escaped.documentElement.textContent?.replace( / /g, nbsp ) ?? '';
26
26
  }
27
27
 
28
28
  class TokenFieldWrapper extends Component<
@@ -1,7 +1,7 @@
1
1
  /**
2
- * External dependencies
2
+ * Internal dependencies
3
3
  */
4
- import { isNil } from 'lodash';
4
+ import { isValueDefined } from '../utils/values';
5
5
 
6
6
  /** @type {import('./types').Alignments} */
7
7
  const ALIGNMENTS = {
@@ -41,7 +41,7 @@ const V_ALIGNMENTS = {
41
41
  */
42
42
  /* eslint-enable jsdoc/valid-types */
43
43
  export function getAlignmentProps( alignment, direction = 'row' ) {
44
- if ( isNil( alignment ) ) {
44
+ if ( ! isValueDefined( alignment ) ) {
45
45
  return {};
46
46
  }
47
47
  const isVertical = direction === 'column';
@@ -20,8 +20,9 @@ function Example() {
20
20
 
21
21
  `Heading` uses `Text` underneath, so we have access to all of `Text`'s props except for `size` which is replaced by `level`. For a complete list of those props, check out [`Text`](/packages/components/src/text/README.md#props).
22
22
 
23
- ##### level
24
-
25
- **Type**: `1 | 2 | 3 | 4 | 5 | 6`
23
+ ##### `level`: `1 | 2 | 3 | 4 | 5 | 6 | '1' | '2' | '3' | '4' | '5' | '6'`
26
24
 
27
25
  Passing any of the heading levels to `level` will both render the correct typographic text size as well as the semantic element corresponding to the level (`h1` for `1` for example).
26
+
27
+ - Required: No
28
+ - Default: `2`
@@ -8,7 +8,8 @@ import type { ForwardedRef } from 'react';
8
8
  */
9
9
  import { contextConnect, WordPressComponentProps } from '../ui/context';
10
10
  import { View } from '../view';
11
- import { useHeading, HeadingProps } from './hook';
11
+ import { useHeading } from './hook';
12
+ import type { HeadingProps } from './types';
12
13
 
13
14
  function UnconnectedHeading(
14
15
  props: WordPressComponentProps< HeadingProps, 'h1' >,
@@ -22,7 +23,6 @@ function UnconnectedHeading(
22
23
  /**
23
24
  * `Heading` renders headings and titles using the library's typography system.
24
25
  *
25
- * @example
26
26
  * ```jsx
27
27
  * import { __experimentalHeading as Heading } from "@wordpress/components";
28
28
  *
@@ -2,51 +2,10 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import { useContextSystem, WordPressComponentProps } from '../ui/context';
5
- import type { Props as TextProps } from '../text/types';
6
5
  import { useText } from '../text';
7
6
  import { getHeadingFontSize } from '../ui/utils/font-size';
8
7
  import { CONFIG, COLORS } from '../utils';
9
-
10
- export type HeadingSize =
11
- | 1
12
- | 2
13
- | 3
14
- | 4
15
- | 5
16
- | 6
17
- | '1'
18
- | '2'
19
- | '3'
20
- | '4'
21
- | '5'
22
- | '6';
23
-
24
- export interface HeadingProps extends Omit< TextProps, 'size' > {
25
- /**
26
- * `Heading` will typically render the sizes `1`, `2`, `3`, `4`, `5`, or `6`, which map to `h1`-`h6`.
27
- *
28
- * @default 2
29
- *
30
- * @example
31
- * ```jsx
32
- * import { __experimentalHeading as Heading } from `@wordpress/components`
33
- *
34
- * function Example() {
35
- * return (
36
- * <div>
37
- * <Heading level="1">Code is Poetry</Heading>
38
- * <Heading level="2">Code is Poetry</Heading>
39
- * <Heading level="3">Code is Poetry</Heading>
40
- * <Heading level="4">Code is Poetry</Heading>
41
- * <Heading level="5">Code is Poetry</Heading>
42
- * <Heading level="6">Code is Poetry</Heading>
43
- * </div>
44
- * );
45
- * }
46
- * ```
47
- */
48
- level: HeadingSize;
49
- }
8
+ import type { HeadingProps } from './types';
50
9
 
51
10
  export function useHeading(
52
11
  props: WordPressComponentProps< HeadingProps, 'h1' >
@@ -19,7 +19,11 @@ const meta: ComponentMeta< typeof Heading > = {
19
19
  letterSpacing: { control: { type: 'text' } },
20
20
  lineHeight: { control: { type: 'text' } },
21
21
  optimizeReadabilityFor: { control: { type: 'color' } },
22
- variant: { control: { type: 'radio' }, options: [ 'muted' ] },
22
+ variant: {
23
+ control: { type: 'radio' },
24
+ options: [ 'undefined', 'muted' ],
25
+ mapping: { undefined, muted: 'muted' },
26
+ },
23
27
  weight: { control: { type: 'text' } },
24
28
  },
25
29
  parameters: {
@@ -0,0 +1,68 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { Heading } from '../';
10
+
11
+ describe( 'props', () => {
12
+ test( 'should render correctly', () => {
13
+ render( <Heading>Code is Poetry</Heading> );
14
+ expect( screen.getByRole( 'heading' ) ).toMatchSnapshot();
15
+ } );
16
+
17
+ test( 'should render level as a number', () => {
18
+ render( <Heading>Code is Poetry</Heading> );
19
+ render( <Heading level={ 4 }>Code is Poetry</Heading> );
20
+ expect(
21
+ screen.getByRole( 'heading', { level: 4 } )
22
+ ).toMatchStyleDiffSnapshot(
23
+ screen.getByRole( 'heading', { level: 2 } )
24
+ );
25
+ } );
26
+
27
+ test( 'should render level as a string', () => {
28
+ render( <Heading>Code is Poetry</Heading> );
29
+ render( <Heading level="4">Code is Poetry</Heading> );
30
+ expect(
31
+ screen.getByRole( 'heading', { level: 4 } )
32
+ ).toMatchStyleDiffSnapshot(
33
+ screen.getByRole( 'heading', { level: 2 } )
34
+ );
35
+ } );
36
+
37
+ test( 'should allow as prop', () => {
38
+ render(
39
+ <Heading level="1" as="span">
40
+ Code is Poetry
41
+ </Heading>
42
+ );
43
+ expect( screen.getByRole( 'heading' ).tagName ).toBe( 'SPAN' );
44
+ } );
45
+
46
+ test( 'should render a11y props when not using a semantic element', () => {
47
+ render(
48
+ <Heading level="3" as="div">
49
+ Code is Poetry
50
+ </Heading>
51
+ );
52
+ expect(
53
+ screen.getByRole( 'heading', { level: 3 } )
54
+ ).toBeInTheDocument();
55
+ } );
56
+
57
+ test( 'should not render a11y props when using a semantic element', () => {
58
+ render(
59
+ <Heading level="1" as="h4">
60
+ Code is Poetry
61
+ </Heading>
62
+ );
63
+ expect( screen.getByRole( 'heading' ) ).not.toHaveAttribute( 'role' );
64
+ expect( screen.getByRole( 'heading' ) ).not.toHaveAttribute(
65
+ 'aria-level'
66
+ );
67
+ } );
68
+ } );
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import type { Props as TextProps } from '../text/types';
5
+
6
+ export type HeadingSize =
7
+ | 1
8
+ | 2
9
+ | 3
10
+ | 4
11
+ | 5
12
+ | 6
13
+ | '1'
14
+ | '2'
15
+ | '3'
16
+ | '4'
17
+ | '5'
18
+ | '6';
19
+
20
+ export type HeadingProps = Omit< TextProps, 'size' > & {
21
+ /**
22
+ * Passing any of the heading levels to `level` will both render the correct
23
+ * typographic text size as well as the semantic element corresponding to
24
+ * the level (`h1` for `1` for example).
25
+ *
26
+ * @default 2
27
+ */
28
+ level?: HeadingSize;
29
+ };
@@ -1,13 +1,24 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, screen, fireEvent } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
5
11
 
6
12
  /**
7
13
  * Internal dependencies
8
14
  */
9
15
  import BaseInputControl from '../';
10
16
 
17
+ const setupUser = () =>
18
+ userEvent.setup( {
19
+ advanceTimers: jest.advanceTimersByTime,
20
+ } );
21
+
11
22
  const getInput = () => screen.getByTestId( 'input' );
12
23
 
13
24
  describe( 'InputControl', () => {
@@ -42,49 +53,66 @@ describe( 'InputControl', () => {
42
53
  } );
43
54
 
44
55
  describe( 'Ensurance of focus for number inputs', () => {
45
- it( 'should focus its input on mousedown events', () => {
56
+ it( 'should focus its input on mousedown events', async () => {
57
+ const user = setupUser();
46
58
  const spy = jest.fn();
47
59
  render( <InputControl type="number" onFocus={ spy } /> );
60
+ const target = getInput();
48
61
 
49
- const input = getInput();
50
- fireEvent.mouseDown( input );
62
+ // Hovers the input and presses (without releasing) primary button.
63
+ await user.pointer( [
64
+ { target },
65
+ { keys: '[MouseLeft]', target },
66
+ ] );
51
67
 
52
68
  expect( spy ).toHaveBeenCalledTimes( 1 );
53
69
  } );
54
70
  } );
55
71
 
56
72
  describe( 'Value', () => {
57
- it( 'should update value onChange', () => {
73
+ it( 'should update value onChange', async () => {
74
+ const user = setupUser();
58
75
  const spy = jest.fn();
59
- render( <InputControl value="Hello" onChange={ spy } /> );
60
-
76
+ render(
77
+ <InputControl value="Hello" onChange={ ( v ) => spy( v ) } />
78
+ );
61
79
  const input = getInput();
62
- input.focus();
63
- fireEvent.change( input, { target: { value: 'There' } } );
64
80
 
65
- expect( input.value ).toBe( 'There' );
66
- expect( spy ).toHaveBeenCalledTimes( 1 );
81
+ await user.type( input, ' there' );
82
+
83
+ expect( input ).toHaveValue( 'Hello there' );
84
+ expect( spy ).toHaveBeenCalledTimes( ' there'.length );
85
+ expect( spy ).toHaveBeenLastCalledWith( 'Hello there' );
67
86
  } );
68
87
 
69
- it( 'should work as a controlled component', () => {
88
+ it( 'should work as a controlled component', async () => {
89
+ const user = setupUser();
70
90
  const spy = jest.fn();
71
- const { rerender } = render(
72
- <InputControl value="one" onChange={ spy } />
73
- );
74
-
91
+ const Example = () => {
92
+ const [ state, setState ] = useState( 'one' );
93
+ const onChange = ( value ) => {
94
+ setState( value );
95
+ spy( value );
96
+ };
97
+ const onKeyDown = ( { key } ) => {
98
+ if ( key === 'Escape' ) setState( 'three' );
99
+ };
100
+ return (
101
+ <InputControl
102
+ value={ state }
103
+ onChange={ onChange }
104
+ onKeyDown={ onKeyDown }
105
+ />
106
+ );
107
+ };
108
+ render( <Example /> );
75
109
  const input = getInput();
76
110
 
77
- input.focus();
78
- fireEvent.change( input, { target: { value: 'two' } } );
79
-
80
- // Ensuring <InputControl /> is controlled.
81
- fireEvent.blur( input );
82
-
83
- // Updating the value.
84
- rerender( <InputControl value="three" onChange={ spy } /> );
85
-
86
- expect( input.value ).toBe( 'three' );
111
+ await user.type( input, '2' );
112
+ // Make a controlled update.
113
+ await user.keyboard( '{Escape}' );
87
114
 
115
+ expect( input ).toHaveValue( 'three' );
88
116
  /*
89
117
  * onChange called only once. onChange is not called when a
90
118
  * parent component explicitly passed a (new value) change down to
@@ -98,21 +126,68 @@ describe( 'InputControl', () => {
98
126
  const { rerender } = render(
99
127
  <InputControl value="Original" onChange={ spy } />
100
128
  );
101
-
102
129
  const input = getInput();
103
130
 
104
- // Assuming <InputControl /> is controlled (not focused)
105
-
106
131
  // Updating the value.
107
132
  rerender( <InputControl value="New" onChange={ spy } /> );
108
133
 
109
- expect( input.value ).toBe( 'New' );
134
+ expect( input ).toHaveValue( 'New' );
110
135
 
111
136
  // Change it back to the original value.
112
137
  rerender( <InputControl value="Original" onChange={ spy } /> );
113
138
 
114
- expect( input.value ).toBe( 'Original' );
139
+ expect( input ).toHaveValue( 'Original' );
115
140
  expect( spy ).toHaveBeenCalledTimes( 0 );
116
141
  } );
142
+
143
+ it( 'should not commit value until blurred when isPressEnterToChange is true', async () => {
144
+ const user = setupUser();
145
+ const spy = jest.fn();
146
+ render(
147
+ <InputControl
148
+ value=""
149
+ onChange={ ( v ) => spy( v ) }
150
+ isPressEnterToChange
151
+ />
152
+ );
153
+ const input = getInput();
154
+
155
+ await user.type( input, 'that was then' );
156
+ // Clicking document.body to trigger a blur event on the input.
157
+ await user.click( document.body );
158
+
159
+ expect( spy ).toHaveBeenCalledTimes( 1 );
160
+ expect( spy ).toHaveBeenCalledWith( 'that was then' );
161
+ } );
162
+
163
+ it( 'should commit value when blurred if value is invalid', async () => {
164
+ const user = setupUser();
165
+ const spyChange = jest.fn();
166
+ render(
167
+ <InputControl
168
+ value="this is"
169
+ onChange={ ( v ) => spyChange( v ) }
170
+ // If the value contains 'now' it is not valid.
171
+ pattern="(?!.*now)^.*$"
172
+ __unstableStateReducer={ ( state, action ) => {
173
+ let { value } = state;
174
+ if (
175
+ action.type === 'COMMIT' &&
176
+ action.payload.event.type === 'blur'
177
+ )
178
+ value = value.replace( /\bnow\b/, 'meow' );
179
+
180
+ return { ...state, value };
181
+ } }
182
+ />
183
+ );
184
+ const input = getInput();
185
+
186
+ await user.type( input, ' now' );
187
+ // Clicking document.body to trigger a blur event on the input.
188
+ await user.click( document.body );
189
+
190
+ expect( spyChange ).toHaveBeenLastCalledWith( 'this is meow' );
191
+ } );
117
192
  } );
118
193
  } );
@@ -98,13 +98,8 @@ class KeyboardAvoidingView extends Component {
98
98
  }
99
99
 
100
100
  render() {
101
- const {
102
- children,
103
- enabled,
104
- keyboardVerticalOffset, // eslint-disable-line no-unused-vars
105
- style,
106
- ...props
107
- } = this.props;
101
+ const { children, enabled, keyboardVerticalOffset, style, ...props } =
102
+ this.props;
108
103
 
109
104
  let finalStyle = style;
110
105
  if ( Platform.OS === 'ios' ) {