@wordpress/components 19.11.0 → 19.12.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 (385) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +1 -1
  3. package/build/alignment-matrix-control/index.js +5 -2
  4. package/build/alignment-matrix-control/index.js.map +1 -1
  5. package/build/autocomplete/autocompleter-ui.js +1 -1
  6. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  7. package/build/autocomplete/autocompleter-ui.native.js +2 -2
  8. package/build/autocomplete/autocompleter-ui.native.js.map +1 -1
  9. package/build/autocomplete/index.js +12 -10
  10. package/build/autocomplete/index.js.map +1 -1
  11. package/build/border-box-control/border-box-control/hook.js +2 -2
  12. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  13. package/build/border-box-control/border-box-control-split-controls/component.js +2 -0
  14. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  15. package/build/border-box-control/border-box-control-split-controls/hook.js +13 -4
  16. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  17. package/build/border-box-control/border-box-control-visualizer/hook.js +6 -2
  18. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  19. package/build/border-box-control/styles.js +21 -11
  20. package/build/border-box-control/styles.js.map +1 -1
  21. package/build/border-control/border-control/hook.js +2 -2
  22. package/build/border-control/border-control/hook.js.map +1 -1
  23. package/build/color-palette/index.js +9 -2
  24. package/build/color-palette/index.js.map +1 -1
  25. package/build/color-palette/index.native.js +4 -1
  26. package/build/color-palette/index.native.js.map +1 -1
  27. package/build/color-picker/color-copy-button.js +87 -0
  28. package/build/color-picker/color-copy-button.js.map +1 -0
  29. package/build/color-picker/component.js +5 -15
  30. package/build/color-picker/component.js.map +1 -1
  31. package/build/color-picker/hex-input.js +18 -1
  32. package/build/color-picker/hex-input.js.map +1 -1
  33. package/build/color-picker/styles.js +11 -11
  34. package/build/color-picker/styles.js.map +1 -1
  35. package/build/custom-gradient-picker/utils.js +1 -1
  36. package/build/custom-gradient-picker/utils.js.map +1 -1
  37. package/build/date-time/{date.js → date/index.js} +51 -12
  38. package/build/date-time/date/index.js.map +1 -0
  39. package/build/date-time/date/styles.js +70 -0
  40. package/build/date-time/date/styles.js.map +1 -0
  41. package/build/date-time/{utils.js → date/utils.js} +0 -0
  42. package/build/date-time/date/utils.js.map +1 -0
  43. package/build/date-time/date-time/index.js +175 -0
  44. package/build/date-time/date-time/index.js.map +1 -0
  45. package/build/date-time/date-time/styles.js +32 -0
  46. package/build/date-time/date-time/styles.js.map +1 -0
  47. package/build/date-time/index.js +2 -109
  48. package/build/date-time/index.js.map +1 -1
  49. package/build/date-time/time/index.js +322 -0
  50. package/build/date-time/time/index.js.map +1 -0
  51. package/build/date-time/time/styles.js +139 -0
  52. package/build/date-time/time/styles.js.map +1 -0
  53. package/build/date-time/{timezone.js → time/timezone.js} +4 -2
  54. package/build/date-time/time/timezone.js.map +1 -0
  55. package/build/draggable/index.native.js +10 -5
  56. package/build/draggable/index.native.js.map +1 -1
  57. package/build/dropdown/index.js +4 -1
  58. package/build/dropdown/index.js.map +1 -1
  59. package/build/input-control/index.js +9 -4
  60. package/build/input-control/index.js.map +1 -1
  61. package/build/input-control/input-field.js +1 -26
  62. package/build/input-control/input-field.js.map +1 -1
  63. package/build/input-control/reducer/reducer.js +36 -24
  64. package/build/input-control/reducer/reducer.js.map +1 -1
  65. package/build/input-control/reducer/state.js +0 -1
  66. package/build/input-control/reducer/state.js.map +1 -1
  67. package/build/input-control/utils.js +45 -0
  68. package/build/input-control/utils.js.map +1 -1
  69. package/build/popover/index.js +40 -33
  70. package/build/popover/index.js.map +1 -1
  71. package/build/search-control/index.js +4 -6
  72. package/build/search-control/index.js.map +1 -1
  73. package/build/select-control/index.js +3 -1
  74. package/build/select-control/index.js.map +1 -1
  75. package/build/spacer/hook.js +11 -3
  76. package/build/spacer/hook.js.map +1 -1
  77. package/build/surface/component.js +7 -7
  78. package/build/surface/component.js.map +1 -1
  79. package/build/surface/hook.js +8 -11
  80. package/build/surface/hook.js.map +1 -1
  81. package/build/surface/index.js.map +1 -1
  82. package/build/surface/styles.js +8 -48
  83. package/build/surface/styles.js.map +1 -1
  84. package/build/textarea-control/index.js +40 -6
  85. package/build/textarea-control/index.js.map +1 -1
  86. package/build/textarea-control/styles/textarea-control-styles.js +3 -3
  87. package/build/textarea-control/styles/textarea-control-styles.js.map +1 -1
  88. package/build/textarea-control/types.js +6 -0
  89. package/build/textarea-control/types.js.map +1 -0
  90. package/build/utils/hooks/index.js +0 -8
  91. package/build/utils/hooks/index.js.map +1 -1
  92. package/build-module/alignment-matrix-control/index.js +5 -2
  93. package/build-module/alignment-matrix-control/index.js.map +1 -1
  94. package/build-module/autocomplete/autocompleter-ui.js +1 -1
  95. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  96. package/build-module/autocomplete/autocompleter-ui.native.js +2 -2
  97. package/build-module/autocomplete/autocompleter-ui.native.js.map +1 -1
  98. package/build-module/autocomplete/index.js +13 -11
  99. package/build-module/autocomplete/index.js.map +1 -1
  100. package/build-module/border-box-control/border-box-control/hook.js +2 -2
  101. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  102. package/build-module/border-box-control/border-box-control-split-controls/component.js +2 -0
  103. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  104. package/build-module/border-box-control/border-box-control-split-controls/hook.js +11 -4
  105. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  106. package/build-module/border-box-control/border-box-control-visualizer/hook.js +4 -2
  107. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  108. package/build-module/border-box-control/styles.js +13 -8
  109. package/build-module/border-box-control/styles.js.map +1 -1
  110. package/build-module/border-control/border-control/hook.js +2 -2
  111. package/build-module/border-control/border-control/hook.js.map +1 -1
  112. package/build-module/color-palette/index.js +7 -5
  113. package/build-module/color-palette/index.js.map +1 -1
  114. package/build-module/color-palette/index.native.js +4 -1
  115. package/build-module/color-palette/index.native.js.map +1 -1
  116. package/build-module/color-picker/color-copy-button.js +73 -0
  117. package/build-module/color-picker/color-copy-button.js.map +1 -0
  118. package/build-module/color-picker/component.js +6 -15
  119. package/build-module/color-picker/component.js.map +1 -1
  120. package/build-module/color-picker/hex-input.js +18 -1
  121. package/build-module/color-picker/hex-input.js.map +1 -1
  122. package/build-module/color-picker/styles.js +9 -9
  123. package/build-module/color-picker/styles.js.map +1 -1
  124. package/build-module/custom-gradient-picker/utils.js +1 -1
  125. package/build-module/custom-gradient-picker/utils.js.map +1 -1
  126. package/build-module/date-time/{date.js → date/index.js} +46 -14
  127. package/build-module/date-time/date/index.js.map +1 -0
  128. package/build-module/date-time/date/styles.js +61 -0
  129. package/build-module/date-time/date/styles.js.map +1 -0
  130. package/build-module/date-time/{utils.js → date/utils.js} +0 -0
  131. package/build-module/date-time/date/utils.js.map +1 -0
  132. package/build-module/date-time/date-time/index.js +144 -0
  133. package/build-module/date-time/date-time/index.js.map +1 -0
  134. package/build-module/date-time/date-time/styles.js +22 -0
  135. package/build-module/date-time/date-time/styles.js.map +1 -0
  136. package/build-module/date-time/index.js +1 -105
  137. package/build-module/date-time/index.js.map +1 -1
  138. package/build-module/date-time/time/index.js +302 -0
  139. package/build-module/date-time/time/index.js.map +1 -0
  140. package/build-module/date-time/time/styles.js +118 -0
  141. package/build-module/date-time/time/styles.js.map +1 -0
  142. package/build-module/date-time/{timezone.js → time/timezone.js} +3 -2
  143. package/build-module/date-time/time/timezone.js.map +1 -0
  144. package/build-module/draggable/index.native.js +10 -5
  145. package/build-module/draggable/index.native.js.map +1 -1
  146. package/build-module/dropdown/index.js +4 -1
  147. package/build-module/dropdown/index.js.map +1 -1
  148. package/build-module/input-control/index.js +8 -4
  149. package/build-module/input-control/index.js.map +1 -1
  150. package/build-module/input-control/input-field.js +1 -25
  151. package/build-module/input-control/input-field.js.map +1 -1
  152. package/build-module/input-control/reducer/reducer.js +38 -26
  153. package/build-module/input-control/reducer/reducer.js.map +1 -1
  154. package/build-module/input-control/reducer/state.js +0 -1
  155. package/build-module/input-control/reducer/state.js.map +1 -1
  156. package/build-module/input-control/utils.js +48 -2
  157. package/build-module/input-control/utils.js.map +1 -1
  158. package/build-module/popover/index.js +40 -33
  159. package/build-module/popover/index.js.map +1 -1
  160. package/build-module/search-control/index.js +6 -7
  161. package/build-module/search-control/index.js.map +1 -1
  162. package/build-module/select-control/index.js +3 -1
  163. package/build-module/select-control/index.js.map +1 -1
  164. package/build-module/spacer/hook.js +10 -2
  165. package/build-module/spacer/hook.js.map +1 -1
  166. package/build-module/surface/component.js +7 -7
  167. package/build-module/surface/component.js.map +1 -1
  168. package/build-module/surface/hook.js +8 -11
  169. package/build-module/surface/hook.js.map +1 -1
  170. package/build-module/surface/index.js.map +1 -1
  171. package/build-module/surface/styles.js +8 -48
  172. package/build-module/surface/styles.js.map +1 -1
  173. package/build-module/textarea-control/index.js +36 -5
  174. package/build-module/textarea-control/index.js.map +1 -1
  175. package/build-module/textarea-control/styles/textarea-control-styles.js +3 -3
  176. package/build-module/textarea-control/styles/textarea-control-styles.js.map +1 -1
  177. package/build-module/textarea-control/types.js +2 -0
  178. package/build-module/textarea-control/types.js.map +1 -0
  179. package/build-module/utils/hooks/index.js +0 -1
  180. package/build-module/utils/hooks/index.js.map +1 -1
  181. package/build-style/style-rtl.css +13 -188
  182. package/build-style/style.css +13 -191
  183. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  184. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -0
  185. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  186. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
  187. package/build-types/border-box-control/styles.d.ts +3 -2
  188. package/build-types/border-box-control/styles.d.ts.map +1 -1
  189. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  190. package/build-types/card/types.d.ts +1 -1
  191. package/build-types/card/types.d.ts.map +1 -1
  192. package/build-types/checkbox-control/test/index.d.ts +2 -0
  193. package/build-types/checkbox-control/test/index.d.ts.map +1 -0
  194. package/build-types/color-palette/index.d.ts +1 -0
  195. package/build-types/color-palette/index.d.ts.map +1 -1
  196. package/build-types/{date-time → color-palette}/test/utils.d.ts +0 -0
  197. package/build-types/color-palette/test/utils.d.ts.map +1 -0
  198. package/build-types/color-picker/color-copy-button.d.ts +4 -0
  199. package/build-types/color-picker/color-copy-button.d.ts.map +1 -0
  200. package/build-types/color-picker/component.d.ts.map +1 -1
  201. package/build-types/color-picker/hex-input.d.ts.map +1 -1
  202. package/build-types/color-picker/styles.d.ts +1 -1
  203. package/build-types/color-picker/styles.d.ts.map +1 -1
  204. package/build-types/color-picker/types.d.ts +8 -0
  205. package/build-types/color-picker/types.d.ts.map +1 -1
  206. package/build-types/date-time/{date.d.ts → date/index.d.ts} +3 -2
  207. package/build-types/date-time/date/index.d.ts.map +1 -0
  208. package/build-types/date-time/date/styles.d.ts +23 -0
  209. package/build-types/date-time/date/styles.d.ts.map +1 -0
  210. package/build-types/date-time/date/test/index.d.ts +2 -0
  211. package/build-types/date-time/date/test/index.d.ts.map +1 -0
  212. package/build-types/date-time/date/test/utils.d.ts +2 -0
  213. package/build-types/date-time/date/test/utils.d.ts.map +1 -0
  214. package/build-types/date-time/{utils.d.ts → date/utils.d.ts} +0 -0
  215. package/build-types/date-time/date/utils.d.ts.map +1 -0
  216. package/build-types/date-time/date-time/index.d.ts +33 -0
  217. package/build-types/date-time/date-time/index.d.ts.map +1 -0
  218. package/build-types/date-time/date-time/styles.d.ts +6 -0
  219. package/build-types/date-time/date-time/styles.d.ts.map +1 -0
  220. package/build-types/date-time/index.d.ts +2 -28
  221. package/build-types/date-time/index.d.ts.map +1 -1
  222. package/build-types/date-time/stories/{index.d.ts → date-time.d.ts} +2 -2
  223. package/build-types/date-time/stories/date-time.d.ts.map +1 -0
  224. package/build-types/date-time/{time.d.ts → time/index.d.ts} +2 -2
  225. package/build-types/date-time/time/index.d.ts.map +1 -0
  226. package/build-types/date-time/time/styles.d.ts +111 -0
  227. package/build-types/date-time/time/styles.d.ts.map +1 -0
  228. package/build-types/date-time/time/test/index.d.ts +2 -0
  229. package/build-types/date-time/time/test/index.d.ts.map +1 -0
  230. package/build-types/date-time/{timezone.d.ts → time/timezone.d.ts} +0 -0
  231. package/build-types/date-time/time/timezone.d.ts.map +1 -0
  232. package/build-types/date-time/types.d.ts +14 -15
  233. package/build-types/date-time/types.d.ts.map +1 -1
  234. package/build-types/dropdown/index.d.ts.map +1 -1
  235. package/build-types/input-control/index.d.ts.map +1 -1
  236. package/build-types/input-control/input-field.d.ts.map +1 -1
  237. package/build-types/input-control/reducer/reducer.d.ts +5 -3
  238. package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
  239. package/build-types/input-control/reducer/state.d.ts +2 -2
  240. package/build-types/input-control/reducer/state.d.ts.map +1 -1
  241. package/build-types/input-control/utils.d.ts +17 -0
  242. package/build-types/input-control/utils.d.ts.map +1 -1
  243. package/build-types/popover/index.d.ts +1 -0
  244. package/build-types/popover/index.d.ts.map +1 -1
  245. package/build-types/select-control/index.d.ts.map +1 -1
  246. package/build-types/select-control/types.d.ts +1 -1
  247. package/build-types/select-control/types.d.ts.map +1 -1
  248. package/build-types/surface/component.d.ts +3 -2
  249. package/build-types/surface/component.d.ts.map +1 -1
  250. package/build-types/surface/hook.d.ts +4 -4
  251. package/build-types/surface/hook.d.ts.map +1 -1
  252. package/build-types/surface/index.d.ts +2 -2
  253. package/build-types/surface/index.d.ts.map +1 -1
  254. package/build-types/surface/stories/index.d.ts +12 -0
  255. package/build-types/surface/stories/index.d.ts.map +1 -0
  256. package/build-types/surface/styles.d.ts +10 -21
  257. package/build-types/surface/styles.d.ts.map +1 -1
  258. package/build-types/surface/test/index.d.ts +2 -0
  259. package/build-types/surface/test/index.d.ts.map +1 -0
  260. package/build-types/surface/types.d.ts +1 -1
  261. package/build-types/surface/types.d.ts.map +1 -1
  262. package/build-types/textarea-control/index.d.ts +29 -0
  263. package/build-types/textarea-control/index.d.ts.map +1 -0
  264. package/build-types/textarea-control/stories/index.d.ts +12 -0
  265. package/build-types/textarea-control/stories/index.d.ts.map +1 -0
  266. package/build-types/textarea-control/styles/textarea-control-styles.d.ts +6 -0
  267. package/build-types/textarea-control/styles/textarea-control-styles.d.ts.map +1 -0
  268. package/build-types/textarea-control/types.d.ts +26 -0
  269. package/build-types/textarea-control/types.d.ts.map +1 -0
  270. package/build-types/utils/hooks/index.d.ts +0 -1
  271. package/package.json +18 -18
  272. package/src/alignment-matrix-control/index.js +4 -2
  273. package/src/autocomplete/autocompleter-ui.js +1 -1
  274. package/src/autocomplete/autocompleter-ui.native.js +2 -2
  275. package/src/autocomplete/index.js +21 -9
  276. package/src/border-box-control/border-box-control/hook.ts +2 -2
  277. package/src/border-box-control/border-box-control-split-controls/component.tsx +2 -0
  278. package/src/border-box-control/border-box-control-split-controls/hook.ts +18 -4
  279. package/src/border-box-control/border-box-control-visualizer/hook.ts +5 -2
  280. package/src/border-box-control/styles.ts +6 -2
  281. package/src/border-control/border-control/hook.ts +8 -2
  282. package/src/box-control/test/index.js +120 -109
  283. package/src/card/types.ts +1 -1
  284. package/src/checkbox-control/test/__snapshots__/index.tsx.snap +42 -0
  285. package/src/checkbox-control/test/index.tsx +109 -0
  286. package/src/color-palette/index.js +11 -4
  287. package/src/color-palette/index.native.js +3 -0
  288. package/src/color-palette/stories/index.js +25 -1
  289. package/src/color-palette/test/utils.ts +24 -0
  290. package/src/color-picker/color-copy-button.tsx +76 -0
  291. package/src/color-picker/component.tsx +18 -38
  292. package/src/color-picker/hex-input.tsx +16 -0
  293. package/src/color-picker/styles.ts +5 -1
  294. package/src/color-picker/types.ts +9 -0
  295. package/src/custom-gradient-picker/utils.js +1 -1
  296. package/src/date-time/README.md +16 -0
  297. package/src/date-time/{datepicker.scss → date/datepicker.scss} +0 -0
  298. package/src/date-time/{date.tsx → date/index.tsx} +38 -15
  299. package/src/date-time/date/style.scss +75 -0
  300. package/src/date-time/date/styles.ts +55 -0
  301. package/src/date-time/{test/date.tsx → date/test/index.tsx} +1 -1
  302. package/src/date-time/{test → date/test}/utils.ts +0 -0
  303. package/src/date-time/{utils.ts → date/utils.ts} +0 -0
  304. package/src/date-time/date-time/index.tsx +217 -0
  305. package/src/date-time/date-time/styles.ts +8 -0
  306. package/src/date-time/index.ts +9 -0
  307. package/src/date-time/stories/{index.tsx → date-time.tsx} +1 -1
  308. package/src/date-time/style.scss +1 -262
  309. package/src/date-time/time/index.tsx +356 -0
  310. package/src/date-time/time/styles.ts +119 -0
  311. package/src/date-time/{test/time.tsx → time/test/index.tsx} +85 -38
  312. package/src/date-time/{timezone.tsx → time/timezone.tsx} +5 -2
  313. package/src/date-time/types.ts +16 -18
  314. package/src/draggable/index.native.js +14 -3
  315. package/src/draggable/test/index.native.js +130 -0
  316. package/src/dropdown/index.js +5 -1
  317. package/src/input-control/index.tsx +8 -2
  318. package/src/input-control/input-field.tsx +10 -30
  319. package/src/input-control/reducer/reducer.ts +40 -26
  320. package/src/input-control/reducer/state.ts +2 -3
  321. package/src/input-control/utils.ts +55 -1
  322. package/src/popover/index.js +42 -27
  323. package/src/query-controls/README.md +1 -1
  324. package/src/search-control/index.js +6 -7
  325. package/src/select-control/README.md +11 -0
  326. package/src/select-control/index.tsx +6 -1
  327. package/src/select-control/types.ts +1 -1
  328. package/src/slot-fill/README.md +1 -1
  329. package/src/spacer/hook.ts +13 -13
  330. package/src/surface/README.md +15 -15
  331. package/src/surface/{component.js → component.tsx} +13 -7
  332. package/src/surface/{hook.js → hook.ts} +13 -12
  333. package/src/surface/{index.js → index.ts} +0 -0
  334. package/src/surface/stories/index.tsx +40 -0
  335. package/src/surface/{styles.js → styles.ts} +15 -44
  336. package/src/surface/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
  337. package/src/surface/test/{index.js → index.tsx} +2 -1
  338. package/src/surface/types.ts +1 -1
  339. package/src/textarea-control/README.md +14 -20
  340. package/src/textarea-control/index.tsx +86 -0
  341. package/src/textarea-control/stories/index.tsx +58 -0
  342. package/src/textarea-control/styles/{textarea-control-styles.js → textarea-control-styles.ts} +0 -0
  343. package/src/textarea-control/types.ts +30 -0
  344. package/src/utils/hooks/index.js +0 -1
  345. package/tsconfig.json +1 -0
  346. package/tsconfig.tsbuildinfo +1 -1
  347. package/build/color-picker/color-display.js +0 -184
  348. package/build/color-picker/color-display.js.map +0 -1
  349. package/build/date-time/date.js.map +0 -1
  350. package/build/date-time/time.js +0 -289
  351. package/build/date-time/time.js.map +0 -1
  352. package/build/date-time/timezone.js.map +0 -1
  353. package/build/date-time/utils.js.map +0 -1
  354. package/build/utils/hooks/use-combined-ref.js +0 -32
  355. package/build/utils/hooks/use-combined-ref.js.map +0 -1
  356. package/build-module/color-picker/color-display.js +0 -170
  357. package/build-module/color-picker/color-display.js.map +0 -1
  358. package/build-module/date-time/date.js.map +0 -1
  359. package/build-module/date-time/time.js +0 -271
  360. package/build-module/date-time/time.js.map +0 -1
  361. package/build-module/date-time/timezone.js.map +0 -1
  362. package/build-module/date-time/utils.js.map +0 -1
  363. package/build-module/utils/hooks/use-combined-ref.js +0 -28
  364. package/build-module/utils/hooks/use-combined-ref.js.map +0 -1
  365. package/build-types/color-picker/color-display.d.ts +0 -14
  366. package/build-types/color-picker/color-display.d.ts.map +0 -1
  367. package/build-types/date-time/date.d.ts.map +0 -1
  368. package/build-types/date-time/stories/index.d.ts.map +0 -1
  369. package/build-types/date-time/test/date.d.ts +0 -2
  370. package/build-types/date-time/test/date.d.ts.map +0 -1
  371. package/build-types/date-time/test/time.d.ts +0 -2
  372. package/build-types/date-time/test/time.d.ts.map +0 -1
  373. package/build-types/date-time/test/utils.d.ts.map +0 -1
  374. package/build-types/date-time/time.d.ts.map +0 -1
  375. package/build-types/date-time/timezone.d.ts.map +0 -1
  376. package/build-types/date-time/utils.d.ts.map +0 -1
  377. package/build-types/utils/hooks/use-combined-ref.d.ts +0 -8
  378. package/build-types/utils/hooks/use-combined-ref.d.ts.map +0 -1
  379. package/src/color-picker/color-display.tsx +0 -169
  380. package/src/date-time/index.tsx +0 -196
  381. package/src/date-time/time.tsx +0 -321
  382. package/src/surface/stories/index.js +0 -46
  383. package/src/textarea-control/index.js +0 -45
  384. package/src/textarea-control/stories/index.js +0 -48
  385. package/src/utils/hooks/use-combined-ref.ts +0 -28
@@ -1,19 +1,29 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, fireEvent, screen } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
8
9
  */
9
10
  import { useState } from '@wordpress/element';
10
- import { ENTER } from '@wordpress/keycodes';
11
11
 
12
12
  /**
13
13
  * Internal dependencies
14
14
  */
15
15
  import BoxControl from '../';
16
16
 
17
+ const setupUser = () =>
18
+ userEvent.setup( {
19
+ advanceTimers: jest.advanceTimersByTime,
20
+ } );
21
+
22
+ const getInput = () =>
23
+ screen.getByLabelText( 'Box Control', { selector: 'input' } );
24
+ const getSelect = () => screen.getByLabelText( 'Select unit' );
25
+ const getReset = () => screen.getByText( /Reset/ );
26
+
17
27
  describe( 'BoxControl', () => {
18
28
  describe( 'Basic rendering', () => {
19
29
  it( 'should render', () => {
@@ -23,42 +33,41 @@ describe( 'BoxControl', () => {
23
33
  expect( input ).toBeTruthy();
24
34
  } );
25
35
 
26
- it( 'should update values when interacting with input', () => {
27
- const { container } = render( <BoxControl /> );
28
- const input = container.querySelector( 'input' );
29
- const unitSelect = container.querySelector( 'select' );
36
+ it( 'should update values when interacting with input', async () => {
37
+ const user = setupUser();
38
+ render( <BoxControl /> );
39
+ const input = getInput();
40
+ const select = getSelect();
30
41
 
31
- input.focus();
32
- fireEvent.change( input, { target: { value: '100%' } } );
33
- fireEvent.keyDown( input, { keyCode: ENTER } );
42
+ await user.type( input, '100%' );
43
+ await user.keyboard( '{Enter}' );
34
44
 
35
- expect( input.value ).toBe( '100' );
36
- expect( unitSelect.value ).toBe( '%' );
45
+ expect( input ).toHaveValue( '100' );
46
+ expect( select ).toHaveValue( '%' );
37
47
  } );
38
48
  } );
39
49
 
40
50
  describe( 'Reset', () => {
41
- it( 'should reset values when clicking Reset', () => {
42
- const { container, getByText } = render( <BoxControl /> );
43
- const input = container.querySelector( 'input' );
44
- const unitSelect = container.querySelector( 'select' );
45
- const reset = getByText( /Reset/ );
51
+ it( 'should reset values when clicking Reset', async () => {
52
+ const user = setupUser();
53
+ render( <BoxControl /> );
54
+ const input = getInput();
55
+ const select = getSelect();
56
+ const reset = getReset();
46
57
 
47
- input.focus();
48
- fireEvent.change( input, { target: { value: '100px' } } );
49
- fireEvent.keyDown( input, { keyCode: ENTER } );
58
+ await user.type( input, '100px' );
59
+ await user.keyboard( '{Enter}' );
50
60
 
51
- expect( input.value ).toBe( '100' );
52
- expect( unitSelect.value ).toBe( 'px' );
61
+ expect( input ).toHaveValue( '100' );
62
+ expect( select ).toHaveValue( 'px' );
53
63
 
54
- reset.focus();
55
- fireEvent.click( reset );
64
+ await user.click( reset );
56
65
 
57
- expect( input.value ).toBe( '' );
58
- expect( unitSelect.value ).toBe( 'px' );
66
+ expect( input ).toHaveValue( '' );
67
+ expect( select ).toHaveValue( 'px' );
59
68
  } );
60
69
 
61
- it( 'should reset values when clicking Reset, if controlled', () => {
70
+ it( 'should reset values when clicking Reset, if controlled', async () => {
62
71
  const Example = () => {
63
72
  const [ state, setState ] = useState();
64
73
 
@@ -69,26 +78,25 @@ describe( 'BoxControl', () => {
69
78
  />
70
79
  );
71
80
  };
72
- const { container, getByText } = render( <Example /> );
73
- const input = container.querySelector( 'input' );
74
- const unitSelect = container.querySelector( 'select' );
75
- const reset = getByText( /Reset/ );
81
+ const user = setupUser();
82
+ render( <Example /> );
83
+ const input = getInput();
84
+ const select = getSelect();
85
+ const reset = getReset();
76
86
 
77
- input.focus();
78
- fireEvent.change( input, { target: { value: '100px' } } );
79
- fireEvent.keyDown( input, { keyCode: ENTER } );
87
+ await user.type( input, '100px' );
88
+ await user.keyboard( '{Enter}' );
80
89
 
81
- expect( input.value ).toBe( '100' );
82
- expect( unitSelect.value ).toBe( 'px' );
90
+ expect( input ).toHaveValue( '100' );
91
+ expect( select ).toHaveValue( 'px' );
83
92
 
84
- reset.focus();
85
- fireEvent.click( reset );
93
+ await user.click( reset );
86
94
 
87
- expect( input.value ).toBe( '' );
88
- expect( unitSelect.value ).toBe( 'px' );
95
+ expect( input ).toHaveValue( '' );
96
+ expect( select ).toHaveValue( 'px' );
89
97
  } );
90
98
 
91
- it( 'should reset values when clicking Reset, if controlled <-> uncontrolled state changes', () => {
99
+ it( 'should reset values when clicking Reset, if controlled <-> uncontrolled state changes', async () => {
92
100
  const Example = () => {
93
101
  const [ state, setState ] = useState();
94
102
 
@@ -106,70 +114,78 @@ describe( 'BoxControl', () => {
106
114
  />
107
115
  );
108
116
  };
109
- const { container, getByText } = render( <Example /> );
110
- const input = container.querySelector( 'input' );
111
- const unitSelect = container.querySelector( 'select' );
112
- const reset = getByText( /Reset/ );
117
+ const user = setupUser();
118
+ render( <Example /> );
119
+ const input = getInput();
120
+ const select = getSelect();
121
+ const reset = getReset();
113
122
 
114
- input.focus();
115
- fireEvent.change( input, { target: { value: '100px' } } );
116
- fireEvent.keyDown( input, { keyCode: ENTER } );
123
+ await user.type( input, '100px' );
124
+ await user.keyboard( '{Enter}' );
117
125
 
118
- expect( input.value ).toBe( '100' );
119
- expect( unitSelect.value ).toBe( 'px' );
126
+ expect( input ).toHaveValue( '100' );
127
+ expect( select ).toHaveValue( 'px' );
120
128
 
121
- reset.focus();
122
- fireEvent.click( reset );
129
+ await user.click( reset );
123
130
 
124
- expect( input.value ).toBe( '' );
125
- expect( unitSelect.value ).toBe( 'px' );
131
+ expect( input ).toHaveValue( '' );
132
+ expect( select ).toHaveValue( 'px' );
126
133
  } );
127
134
 
128
- it( 'should persist cleared value when focus changes', () => {
129
- render( <BoxControl /> );
135
+ it( 'should persist cleared value when focus changes', async () => {
136
+ const user = setupUser();
137
+ const spyChange = jest.fn();
138
+ render( <BoxControl onChange={ ( v ) => spyChange( v ) } /> );
130
139
  const input = screen.getByLabelText( 'Box Control', {
131
140
  selector: 'input',
132
141
  } );
133
142
  const unitSelect = screen.getByLabelText( 'Select unit' );
134
143
 
135
- input.focus();
136
- fireEvent.change( input, { target: { value: '100%' } } );
137
- fireEvent.keyDown( input, { keyCode: ENTER } );
144
+ await user.type( input, '100%' );
145
+ await user.keyboard( '{Enter}' );
138
146
 
139
- expect( input.value ).toBe( '100' );
140
- expect( unitSelect.value ).toBe( '%' );
147
+ expect( input ).toHaveValue( '100' );
148
+ expect( unitSelect ).toHaveValue( '%' );
141
149
 
142
- fireEvent.change( input, { target: { value: '' } } );
143
- fireEvent.blur( input );
150
+ await user.clear( input );
151
+ expect( input ).toHaveValue( '' );
152
+ // Clicking document.body to trigger a blur event on the input.
153
+ await user.click( document.body );
144
154
 
145
- expect( input.value ).toBe( '' );
155
+ expect( input ).toHaveValue( '' );
156
+ expect( spyChange ).toHaveBeenLastCalledWith( {
157
+ top: undefined,
158
+ right: undefined,
159
+ bottom: undefined,
160
+ left: undefined,
161
+ } );
146
162
  } );
147
163
  } );
148
164
 
149
165
  describe( 'Unlinked Sides', () => {
150
- it( 'should update a single side value when unlinked', () => {
166
+ it( 'should update a single side value when unlinked', async () => {
151
167
  let state = {};
152
168
  const setState = ( newState ) => ( state = newState );
153
169
 
154
- const { container, getByLabelText } = render(
170
+ const { getAllByLabelText, getByLabelText } = render(
155
171
  <BoxControl
156
172
  values={ state }
157
173
  onChange={ ( next ) => setState( next ) }
158
174
  />
159
175
  );
160
-
176
+ const user = setupUser();
161
177
  const unlink = getByLabelText( /Unlink Sides/ );
162
- fireEvent.click( unlink );
163
178
 
164
- const input = container.querySelector( 'input' );
165
- const unitSelect = container.querySelector( 'select' );
179
+ await user.click( unlink );
180
+
181
+ const input = getByLabelText( /Top/ );
182
+ const select = getAllByLabelText( /Select unit/ )[ 0 ];
166
183
 
167
- input.focus();
168
- fireEvent.change( input, { target: { value: '100px' } } );
169
- fireEvent.keyDown( input, { keyCode: ENTER } );
184
+ await user.type( input, '100px' );
185
+ await user.keyboard( '{Enter}' );
170
186
 
171
- expect( input.value ).toBe( '100' );
172
- expect( unitSelect.value ).toBe( 'px' );
187
+ expect( input ).toHaveValue( '100' );
188
+ expect( select ).toHaveValue( 'px' );
173
189
 
174
190
  expect( state ).toEqual( {
175
191
  top: '100px',
@@ -179,30 +195,30 @@ describe( 'BoxControl', () => {
179
195
  } );
180
196
  } );
181
197
 
182
- it( 'should update a whole axis when value is changed when unlinked', () => {
198
+ it( 'should update a whole axis when value is changed when unlinked', async () => {
183
199
  let state = {};
184
200
  const setState = ( newState ) => ( state = newState );
185
201
 
186
- const { container, getByLabelText } = render(
202
+ const { getAllByLabelText, getByLabelText } = render(
187
203
  <BoxControl
188
204
  values={ state }
189
205
  onChange={ ( next ) => setState( next ) }
190
206
  splitOnAxis={ true }
191
207
  />
192
208
  );
193
-
209
+ const user = setupUser();
194
210
  const unlink = getByLabelText( /Unlink Sides/ );
195
- fireEvent.click( unlink );
196
211
 
197
- const input = container.querySelector( 'input' );
198
- const unitSelect = container.querySelector( 'select' );
212
+ await user.click( unlink );
213
+
214
+ const input = getByLabelText( /Vertical/ );
215
+ const select = getAllByLabelText( /Select unit/ )[ 0 ];
199
216
 
200
- input.focus();
201
- fireEvent.change( input, { target: { value: '100px' } } );
202
- fireEvent.keyDown( input, { keyCode: ENTER } );
217
+ await user.type( input, '100px' );
218
+ await user.keyboard( '{Enter}' );
203
219
 
204
- expect( input.value ).toBe( '100' );
205
- expect( unitSelect.value ).toBe( 'px' );
220
+ expect( input ).toHaveValue( '100' );
221
+ expect( select ).toHaveValue( 'px' );
206
222
 
207
223
  expect( state ).toEqual( {
208
224
  top: '100px',
@@ -214,36 +230,34 @@ describe( 'BoxControl', () => {
214
230
  } );
215
231
 
216
232
  describe( 'Unit selections', () => {
217
- it( 'should update unlinked controls unit selection based on all input control', () => {
233
+ it( 'should update unlinked controls unit selection based on all input control', async () => {
218
234
  // Render control.
219
235
  render( <BoxControl /> );
236
+ const user = setupUser();
220
237
 
221
238
  // Make unit selection on all input control.
222
- const allUnitSelect = screen.getByLabelText( 'Select unit' );
223
- allUnitSelect.focus();
224
- fireEvent.change( allUnitSelect, { target: { value: 'em' } } );
239
+ const allUnitSelect = getSelect();
240
+ await user.selectOptions( allUnitSelect, [ 'em' ] );
225
241
 
226
242
  // Unlink the controls.
227
- const unlink = screen.getByLabelText( /Unlink Sides/ );
228
- fireEvent.click( unlink );
243
+ await user.click( screen.getByLabelText( /Unlink Sides/ ) );
229
244
 
230
245
  // Confirm that each individual control has the selected unit
231
246
  const unlinkedSelects = screen.getAllByDisplayValue( 'em' );
232
247
  expect( unlinkedSelects.length ).toEqual( 4 );
233
248
  } );
234
249
 
235
- it( 'should use individual side attribute unit when available', () => {
250
+ it( 'should use individual side attribute unit when available', async () => {
236
251
  // Render control.
237
252
  const { rerender } = render( <BoxControl /> );
253
+ const user = setupUser();
238
254
 
239
255
  // Make unit selection on all input control.
240
- const allUnitSelect = screen.getByLabelText( 'Select unit' );
241
- allUnitSelect.focus();
242
- fireEvent.change( allUnitSelect, { target: { value: 'vw' } } );
256
+ const allUnitSelect = getSelect();
257
+ await user.selectOptions( allUnitSelect, [ 'vw' ] );
243
258
 
244
259
  // Unlink the controls.
245
- const unlink = screen.getByLabelText( /Unlink Sides/ );
246
- fireEvent.click( unlink );
260
+ await user.click( screen.getByLabelText( /Unlink Sides/ ) );
247
261
 
248
262
  // Confirm that each individual control has the selected unit
249
263
  const unlinkedSelects = screen.getAllByDisplayValue( 'vw' );
@@ -261,18 +275,15 @@ describe( 'BoxControl', () => {
261
275
  } );
262
276
 
263
277
  describe( 'onChange updates', () => {
264
- it( 'should call onChange when values contain more than just CSS units', () => {
278
+ it( 'should call onChange when values contain more than just CSS units', async () => {
265
279
  const setState = jest.fn();
266
280
 
267
281
  render( <BoxControl onChange={ setState } /> );
282
+ const user = setupUser();
283
+ const input = getInput();
268
284
 
269
- const input = screen.getByLabelText( 'Box Control', {
270
- selector: 'input',
271
- } );
272
-
273
- input.focus();
274
- fireEvent.change( input, { target: { value: '7.5rem' } } );
275
- fireEvent.keyDown( input, { keyCode: ENTER } );
285
+ await user.type( input, '7.5rem' );
286
+ await user.keyboard( '{Enter}' );
276
287
 
277
288
  expect( setState ).toHaveBeenCalledWith( {
278
289
  top: '7.5rem',
@@ -282,14 +293,14 @@ describe( 'BoxControl', () => {
282
293
  } );
283
294
  } );
284
295
 
285
- it( 'should not pass invalid CSS unit only values to onChange', () => {
296
+ it( 'should not pass invalid CSS unit only values to onChange', async () => {
286
297
  const setState = jest.fn();
287
298
 
288
299
  render( <BoxControl onChange={ setState } /> );
300
+ const user = setupUser();
289
301
 
290
- const allUnitSelect = screen.getByLabelText( 'Select unit' );
291
- allUnitSelect.focus();
292
- fireEvent.change( allUnitSelect, { target: { value: 'rem' } } );
302
+ const allUnitSelect = getSelect();
303
+ await user.selectOptions( allUnitSelect, 'rem' );
293
304
 
294
305
  expect( setState ).toHaveBeenCalledWith( {
295
306
  top: undefined,
package/src/card/types.ts CHANGED
@@ -6,7 +6,7 @@ import type { CSSProperties } from 'react';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import type { Props as SurfaceProps } from '../surface/types';
9
+ import type { SurfaceProps } from '../surface/types';
10
10
 
11
11
  type DeprecatedSizeOptions = 'extraSmall';
12
12
  export type SizeOptions = 'xSmall' | 'small' | 'medium' | 'large';
@@ -0,0 +1,42 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`CheckboxControl Basic rendering should render the indeterminate icon when in the indeterminate state 1`] = `
4
+ Snapshot Diff:
5
+ - First value
6
+ + Second value
7
+
8
+ @@ -8,17 +8,31 @@
9
+ <span
10
+ class="components-checkbox-control__input-container"
11
+ >
12
+ <input
13
+ class="components-checkbox-control__input"
14
+ - id="inspector-checkbox-control-5"
15
+ + id="inspector-checkbox-control-6"
16
+ type="checkbox"
17
+ value="1"
18
+ + />
19
+ + <svg
20
+ + aria-hidden="true"
21
+ + class="components-checkbox-control__indeterminate"
22
+ + focusable="false"
23
+ + height="24"
24
+ + role="presentation"
25
+ + viewBox="0 0 24 24"
26
+ + width="24"
27
+ + xmlns="http://www.w3.org/2000/svg"
28
+ + >
29
+ + <path
30
+ + d="M7 11.5h10V13H7z"
31
+ />
32
+ + </svg>
33
+ </span>
34
+ <label
35
+ class="components-checkbox-control__label"
36
+ - for="inspector-checkbox-control-5"
37
+ + for="inspector-checkbox-control-6"
38
+ />
39
+ </div>
40
+ </div>
41
+ </div>
42
+ `;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+ import { noop } from 'lodash';
7
+
8
+ /**
9
+ * WordPress dependencies
10
+ */
11
+ import { useState } from '@wordpress/element';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import BaseCheckboxControl from '..';
17
+ import type { CheckboxControlProps } from '../types';
18
+
19
+ const getInput = () => screen.getByRole( 'checkbox' ) as HTMLInputElement;
20
+
21
+ const CheckboxControl = ( props: Omit< CheckboxControlProps, 'onChange' > ) => {
22
+ return <BaseCheckboxControl onChange={ noop } { ...props } />;
23
+ };
24
+
25
+ const ControlledCheckboxControl = ( { onChange }: CheckboxControlProps ) => {
26
+ const [ isChecked, setChecked ] = useState( false );
27
+ return (
28
+ <BaseCheckboxControl
29
+ checked={ isChecked }
30
+ onChange={ ( value ) => {
31
+ setChecked( value );
32
+ onChange( value );
33
+ } }
34
+ />
35
+ );
36
+ };
37
+
38
+ describe( 'CheckboxControl', () => {
39
+ describe( 'Basic rendering', () => {
40
+ it( 'should render', () => {
41
+ render( <CheckboxControl /> );
42
+ expect( getInput() ).not.toBeNull();
43
+ } );
44
+
45
+ it( 'should render an unchecked `checkbox` by default', () => {
46
+ render( <CheckboxControl /> );
47
+ expect( getInput() ).toHaveProperty( 'checked', false );
48
+ } );
49
+
50
+ it( 'should render an checked `checkbox` when `checked={ true }`', () => {
51
+ render( <CheckboxControl checked /> );
52
+ expect( getInput() ).toHaveProperty( 'checked', true );
53
+ } );
54
+
55
+ it( 'should render label', () => {
56
+ render( <CheckboxControl label="Hello" /> );
57
+
58
+ const label = screen.getByText( 'Hello' );
59
+ expect( label ).toBeInTheDocument();
60
+ } );
61
+
62
+ it( 'should render a checkbox in an indeterminate state', () => {
63
+ render( <CheckboxControl indeterminate /> );
64
+ expect( getInput() ).toHaveProperty( 'indeterminate', true );
65
+ } );
66
+
67
+ it( 'should render the indeterminate icon when in the indeterminate state', () => {
68
+ const { container: containerDefault } = render(
69
+ <CheckboxControl />
70
+ );
71
+
72
+ const { container: containerIndeterminate } = render(
73
+ <CheckboxControl indeterminate />
74
+ );
75
+
76
+ // Expect the diff snapshot to be mostly about the indeterminate icon
77
+ expect( containerDefault ).toMatchDiffSnapshot(
78
+ containerIndeterminate
79
+ );
80
+ } );
81
+ } );
82
+
83
+ describe( 'Value', () => {
84
+ it( 'should flip the checked property when clicked', async () => {
85
+ const user = userEvent.setup( {
86
+ advanceTimers: jest.advanceTimersByTime,
87
+ } );
88
+
89
+ let state = false;
90
+ const setState = jest.fn(
91
+ ( nextState: boolean ) => ( state = nextState )
92
+ );
93
+
94
+ render( <ControlledCheckboxControl onChange={ setState } /> );
95
+
96
+ const input = getInput();
97
+
98
+ await user.click( input );
99
+ expect( input ).toHaveProperty( 'checked', true );
100
+ expect( state ).toBe( true );
101
+
102
+ await user.click( input );
103
+ expect( input ).toHaveProperty( 'checked', false );
104
+ expect( state ).toBe( false );
105
+
106
+ expect( setState ).toHaveBeenCalledTimes( 2 );
107
+ } );
108
+ } );
109
+ } );
@@ -126,7 +126,7 @@ export function CustomColorPickerDropdown( { isRenderedInSidebar, ...props } ) {
126
126
  );
127
127
  }
128
128
 
129
- const extractColorNameFromCurrentValue = (
129
+ export const extractColorNameFromCurrentValue = (
130
130
  currentValue,
131
131
  colors = [],
132
132
  showMultiplePalettes = false
@@ -135,13 +135,20 @@ const extractColorNameFromCurrentValue = (
135
135
  return '';
136
136
  }
137
137
 
138
+ const currentValueIsCssVariable = /^var\(/.test( currentValue );
139
+ const normalizedCurrentValue = currentValueIsCssVariable
140
+ ? currentValue
141
+ : colord( currentValue ).toHex();
142
+
138
143
  // Normalize format of `colors` to simplify the following loop
139
144
  const colorPalettes = showMultiplePalettes ? colors : [ { colors } ];
140
145
  for ( const { colors: paletteColors } of colorPalettes ) {
141
146
  for ( const { name: colorName, color: colorValue } of paletteColors ) {
142
- if (
143
- colord( currentValue ).toHex() === colord( colorValue ).toHex()
144
- ) {
147
+ const normalizedColorValue = currentValueIsCssVariable
148
+ ? colorValue
149
+ : colord( colorValue ).toHex();
150
+
151
+ if ( normalizedCurrentValue === normalizedColorValue ) {
145
152
  return colorName;
146
153
  }
147
154
  }
@@ -92,6 +92,9 @@ function ColorPalette( {
92
92
  scrollViewRef.current.scrollTo( { x: 0, y: 0 } );
93
93
  }
94
94
  }
95
+ // Temporarily disabling exhuastive-deps until the component can be refactored and updated safely.
96
+ // Please see https://github.com/WordPress/gutenberg/pull/41253 for discussion and details.
97
+ // eslint-disable-next-line react-hooks/exhaustive-deps
95
98
  }, [ currentSegment ] );
96
99
 
97
100
  function isSelectedCustom() {
@@ -43,7 +43,10 @@ const meta = {
43
43
  export default meta;
44
44
 
45
45
  const Template = ( args ) => {
46
- const [ color, setColor ] = useState( '#f00' );
46
+ const firstColor =
47
+ args.colors[ 0 ].color || args.colors[ 0 ].colors[ 0 ].color;
48
+ const [ color, setColor ] = useState( firstColor );
49
+
47
50
  return (
48
51
  <SlotFillProvider>
49
52
  <ColorPalette { ...args } value={ color } onChange={ setColor } />
@@ -88,3 +91,24 @@ MultipleOrigins.args = {
88
91
  },
89
92
  ],
90
93
  };
94
+
95
+ export const CSSVariables = ( args ) => {
96
+ return (
97
+ <div
98
+ style={ {
99
+ '--red': '#f00',
100
+ '--yellow': '#ff0',
101
+ '--blue': '#00f',
102
+ } }
103
+ >
104
+ <Template { ...args } />
105
+ </div>
106
+ );
107
+ };
108
+ CSSVariables.args = {
109
+ colors: [
110
+ { name: 'Red', color: 'var(--red)' },
111
+ { name: 'Yellow', color: 'var(--yellow)' },
112
+ { name: 'Blue', color: 'var(--blue)' },
113
+ ],
114
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { extractColorNameFromCurrentValue } from '../';
5
+
6
+ describe( 'ColorPalette: Utils', () => {
7
+ describe( 'extractColorNameFromCurrentValue', () => {
8
+ test( 'should support hex values', () => {
9
+ const result = extractColorNameFromCurrentValue( '#00f', [
10
+ { name: 'Red', color: '#f00' },
11
+ { name: 'Blue', color: '#00f' },
12
+ ] );
13
+ expect( result ).toBe( 'Blue' );
14
+ } );
15
+
16
+ test( 'should support CSS variables', () => {
17
+ const result = extractColorNameFromCurrentValue( 'var(--blue)', [
18
+ { name: 'Red', color: 'var(--red)' },
19
+ { name: 'Blue', color: 'var(--blue)' },
20
+ ] );
21
+ expect( result ).toBe( 'Blue' );
22
+ } );
23
+ } );
24
+ } );