@wordpress/components 19.17.0 → 20.0.1-next.d6164808d3.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 (599) hide show
  1. package/CHANGELOG.md +68 -1
  2. package/build/alignment-matrix-control/index.js +1 -1
  3. package/build/alignment-matrix-control/index.js.map +1 -1
  4. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +9 -9
  5. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  6. package/build/angle-picker-control/index.js +3 -0
  7. package/build/angle-picker-control/index.js.map +1 -1
  8. package/build/angle-picker-control/styles/angle-picker-control-styles.js +14 -4
  9. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  10. package/build/autocomplete/index.js +9 -11
  11. package/build/autocomplete/index.js.map +1 -1
  12. package/build/base-control/styles/base-control-styles.js +8 -8
  13. package/build/base-control/styles/base-control-styles.js.map +1 -1
  14. package/build/base-field/styles.js +5 -5
  15. package/build/base-field/styles.js.map +1 -1
  16. package/build/box-control/styles/box-control-visualizer-styles.js +8 -8
  17. package/build/box-control/styles/box-control-visualizer-styles.js.map +1 -1
  18. package/build/color-list-picker/index.js +16 -5
  19. package/build/color-list-picker/index.js.map +1 -1
  20. package/build/color-palette/index.js +22 -12
  21. package/build/color-palette/index.js.map +1 -1
  22. package/build/color-palette/index.native.js +3 -3
  23. package/build/color-palette/index.native.js.map +1 -1
  24. package/build/combobox-control/index.js +7 -4
  25. package/build/combobox-control/index.js.map +1 -1
  26. package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/constants.js +0 -0
  27. package/build/custom-gradient-picker/gradient-bar/constants.js.map +1 -0
  28. package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/control-points.js +34 -41
  29. package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -0
  30. package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/index.js +0 -1
  31. package/build/custom-gradient-picker/gradient-bar/index.js.map +1 -0
  32. package/build/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/utils.js +0 -0
  33. package/build/custom-gradient-picker/gradient-bar/utils.js.map +1 -0
  34. package/build/custom-gradient-picker/index.js +19 -4
  35. package/build/custom-gradient-picker/index.js.map +1 -1
  36. package/build/custom-select-control/index.js +21 -11
  37. package/build/custom-select-control/index.js.map +1 -1
  38. package/build/custom-select-control/styles.js +34 -0
  39. package/build/custom-select-control/styles.js.map +1 -0
  40. package/build/date-time/constants.js +9 -0
  41. package/build/date-time/constants.js.map +1 -0
  42. package/build/date-time/date/index.js +175 -186
  43. package/build/date-time/date/index.js.map +1 -1
  44. package/build/date-time/date/styles.js +59 -40
  45. package/build/date-time/date/styles.js.map +1 -1
  46. package/build/date-time/date-time/index.js +5 -2
  47. package/build/date-time/date-time/index.js.map +1 -1
  48. package/build/date-time/time/index.js +22 -17
  49. package/build/date-time/time/index.js.map +1 -1
  50. package/build/date-time/utils.js +27 -0
  51. package/build/date-time/utils.js.map +1 -0
  52. package/build/dimension-control/index.js +2 -6
  53. package/build/dimension-control/index.js.map +1 -1
  54. package/build/disabled/index.js +28 -11
  55. package/build/disabled/index.js.map +1 -1
  56. package/build/disabled/styles/disabled-styles.js +3 -3
  57. package/build/disabled/styles/disabled-styles.js.map +1 -1
  58. package/build/{swatch → disabled}/types.js +0 -0
  59. package/build/{swatch → disabled}/types.js.map +0 -0
  60. package/build/dropdown/index.js +5 -6
  61. package/build/dropdown/index.js.map +1 -1
  62. package/build/duotone-picker/custom-duotone-bar.js +2 -2
  63. package/build/duotone-picker/custom-duotone-bar.js.map +1 -1
  64. package/build/duotone-picker/duotone-picker.js +9 -1
  65. package/build/duotone-picker/duotone-picker.js.map +1 -1
  66. package/build/duotone-picker/duotone-swatch.js +13 -3
  67. package/build/duotone-picker/duotone-swatch.js.map +1 -1
  68. package/build/focal-point-picker/index.js +4 -6
  69. package/build/focal-point-picker/index.js.map +1 -1
  70. package/build/focal-point-picker/styles/focal-point-style.js +4 -4
  71. package/build/focal-point-picker/styles/focal-point-style.js.map +1 -1
  72. package/build/font-size-picker/index.js +43 -14
  73. package/build/font-size-picker/index.js.map +1 -1
  74. package/build/font-size-picker/utils.js +32 -22
  75. package/build/font-size-picker/utils.js.map +1 -1
  76. package/build/form-token-field/index.js +11 -5
  77. package/build/form-token-field/index.js.map +1 -1
  78. package/build/gradient-picker/index.js +15 -3
  79. package/build/gradient-picker/index.js.map +1 -1
  80. package/build/guide/index.js +5 -3
  81. package/build/guide/index.js.map +1 -1
  82. package/build/guide/page-control.js +3 -7
  83. package/build/guide/page-control.js.map +1 -1
  84. package/build/item-group/styles.js +10 -10
  85. package/build/item-group/styles.js.map +1 -1
  86. package/build/mobile/bottom-sheet/index.native.js +3 -6
  87. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  88. package/build/mobile/global-styles-context/utils.native.js +3 -1
  89. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  90. package/build/mobile/image/index.native.js +6 -26
  91. package/build/mobile/image/index.native.js.map +1 -1
  92. package/build/mobile/picker/index.android.js +3 -3
  93. package/build/mobile/picker/index.android.js.map +1 -1
  94. package/build/modal/index.js +1 -3
  95. package/build/modal/index.js.map +1 -1
  96. package/build/navigable-container/container.js +9 -8
  97. package/build/navigable-container/container.js.map +1 -1
  98. package/build/navigator/navigator-back-button/hook.js +0 -4
  99. package/build/navigator/navigator-back-button/hook.js.map +1 -1
  100. package/build/navigator/navigator-button/hook.js +0 -4
  101. package/build/navigator/navigator-button/hook.js.map +1 -1
  102. package/build/notice/list.js +10 -6
  103. package/build/notice/list.js.map +1 -1
  104. package/build/palette-edit/index.js +1 -0
  105. package/build/palette-edit/index.js.map +1 -1
  106. package/build/palette-edit/styles.js +10 -10
  107. package/build/palette-edit/styles.js.map +1 -1
  108. package/build/popover/index.js +100 -97
  109. package/build/popover/index.js.map +1 -1
  110. package/build/popover/utils.js +178 -0
  111. package/build/popover/utils.js.map +1 -0
  112. package/build/range-control/index.js +3 -0
  113. package/build/range-control/index.js.map +1 -1
  114. package/build/range-control/styles/range-control-styles.js +43 -37
  115. package/build/range-control/styles/range-control-styles.js.map +1 -1
  116. package/build/select-control/chevron-down.js +30 -0
  117. package/build/select-control/chevron-down.js.map +1 -0
  118. package/build/select-control/index.js +7 -7
  119. package/build/select-control/index.js.map +1 -1
  120. package/build/select-control/styles/select-control-styles.js +30 -15
  121. package/build/select-control/styles/select-control-styles.js.map +1 -1
  122. package/build/snackbar/list.js +5 -3
  123. package/build/snackbar/list.js.map +1 -1
  124. package/build/spinner/index.js +2 -0
  125. package/build/spinner/index.js.map +1 -1
  126. package/build/text/styles.js +7 -7
  127. package/build/text/styles.js.map +1 -1
  128. package/build/toggle-group-control/toggle-group-control/component.js +16 -8
  129. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  130. package/build/toggle-group-control/toggle-group-control/styles.js +7 -5
  131. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  132. package/build/toggle-group-control/toggle-group-control-option/component.js +15 -5
  133. package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  134. package/build/toggle-group-control/toggle-group-control-option-base/component.js +5 -1
  135. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  136. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +20 -7
  137. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  138. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +26 -7
  139. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  140. package/build/tools-panel/styles.js +11 -11
  141. package/build/tools-panel/styles.js.map +1 -1
  142. package/build/ui/context/context-connect.js +1 -3
  143. package/build/ui/context/context-connect.js.map +1 -1
  144. package/build/unit-control/index.js +2 -3
  145. package/build/unit-control/index.js.map +1 -1
  146. package/build/utils/colors-values.js +52 -142
  147. package/build/utils/colors-values.js.map +1 -1
  148. package/build/utils/config-values.js +1 -1
  149. package/build/utils/config-values.js.map +1 -1
  150. package/build/utils/input/input-control.js +1 -1
  151. package/build/utils/input/input-control.js.map +1 -1
  152. package/build/utils/rtl.js +6 -5
  153. package/build/utils/rtl.js.map +1 -1
  154. package/build/utils/strings.js +50 -0
  155. package/build/utils/strings.js.map +1 -0
  156. package/build-module/alignment-matrix-control/index.js +1 -1
  157. package/build-module/alignment-matrix-control/index.js.map +1 -1
  158. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +9 -9
  159. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  160. package/build-module/angle-picker-control/index.js +3 -0
  161. package/build-module/angle-picker-control/index.js.map +1 -1
  162. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +13 -4
  163. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  164. package/build-module/autocomplete/index.js +9 -10
  165. package/build-module/autocomplete/index.js.map +1 -1
  166. package/build-module/base-control/styles/base-control-styles.js +8 -8
  167. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  168. package/build-module/base-field/styles.js +5 -5
  169. package/build-module/base-field/styles.js.map +1 -1
  170. package/build-module/box-control/styles/box-control-visualizer-styles.js +8 -8
  171. package/build-module/box-control/styles/box-control-visualizer-styles.js.map +1 -1
  172. package/build-module/color-list-picker/index.js +13 -5
  173. package/build-module/color-list-picker/index.js.map +1 -1
  174. package/build-module/color-palette/index.js +22 -11
  175. package/build-module/color-palette/index.js.map +1 -1
  176. package/build-module/color-palette/index.native.js +4 -4
  177. package/build-module/color-palette/index.native.js.map +1 -1
  178. package/build-module/combobox-control/index.js +6 -3
  179. package/build-module/combobox-control/index.js.map +1 -1
  180. package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/constants.js +0 -0
  181. package/build-module/custom-gradient-picker/gradient-bar/constants.js.map +1 -0
  182. package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/control-points.js +34 -41
  183. package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -0
  184. package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/index.js +0 -1
  185. package/build-module/custom-gradient-picker/gradient-bar/index.js.map +1 -0
  186. package/build-module/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/utils.js +0 -0
  187. package/build-module/custom-gradient-picker/gradient-bar/utils.js.map +1 -0
  188. package/build-module/custom-gradient-picker/index.js +16 -3
  189. package/build-module/custom-gradient-picker/index.js.map +1 -1
  190. package/build-module/custom-select-control/index.js +20 -12
  191. package/build-module/custom-select-control/index.js.map +1 -1
  192. package/build-module/custom-select-control/styles.js +22 -0
  193. package/build-module/custom-select-control/styles.js.map +1 -0
  194. package/build-module/date-time/constants.js +2 -0
  195. package/build-module/date-time/constants.js.map +1 -0
  196. package/build-module/date-time/date/index.js +178 -184
  197. package/build-module/date-time/date/index.js.map +1 -1
  198. package/build-module/date-time/date/styles.js +47 -38
  199. package/build-module/date-time/date/styles.js.map +1 -1
  200. package/build-module/date-time/date-time/index.js +4 -2
  201. package/build-module/date-time/date-time/index.js.map +1 -1
  202. package/build-module/date-time/time/index.js +20 -16
  203. package/build-module/date-time/time/index.js.map +1 -1
  204. package/build-module/date-time/utils.js +19 -0
  205. package/build-module/date-time/utils.js.map +1 -0
  206. package/build-module/dimension-control/index.js +1 -5
  207. package/build-module/dimension-control/index.js.map +1 -1
  208. package/build-module/disabled/index.js +28 -11
  209. package/build-module/disabled/index.js.map +1 -1
  210. package/build-module/disabled/styles/disabled-styles.js +3 -3
  211. package/build-module/disabled/styles/disabled-styles.js.map +1 -1
  212. package/build-module/{swatch → disabled}/types.js +0 -0
  213. package/build-module/{swatch → disabled}/types.js.map +0 -0
  214. package/build-module/dropdown/index.js +5 -6
  215. package/build-module/dropdown/index.js.map +1 -1
  216. package/build-module/duotone-picker/custom-duotone-bar.js +1 -1
  217. package/build-module/duotone-picker/custom-duotone-bar.js.map +1 -1
  218. package/build-module/duotone-picker/duotone-picker.js +7 -1
  219. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  220. package/build-module/duotone-picker/duotone-swatch.js +11 -3
  221. package/build-module/duotone-picker/duotone-swatch.js.map +1 -1
  222. package/build-module/focal-point-picker/index.js +4 -5
  223. package/build-module/focal-point-picker/index.js.map +1 -1
  224. package/build-module/focal-point-picker/styles/focal-point-style.js +4 -4
  225. package/build-module/focal-point-picker/styles/focal-point-style.js.map +1 -1
  226. package/build-module/font-size-picker/index.js +39 -14
  227. package/build-module/font-size-picker/index.js.map +1 -1
  228. package/build-module/font-size-picker/utils.js +31 -23
  229. package/build-module/font-size-picker/utils.js.map +1 -1
  230. package/build-module/form-token-field/index.js +12 -6
  231. package/build-module/form-token-field/index.js.map +1 -1
  232. package/build-module/gradient-picker/index.js +14 -3
  233. package/build-module/gradient-picker/index.js.map +1 -1
  234. package/build-module/guide/index.js +5 -3
  235. package/build-module/guide/index.js.map +1 -1
  236. package/build-module/guide/page-control.js +3 -6
  237. package/build-module/guide/page-control.js.map +1 -1
  238. package/build-module/item-group/styles.js +10 -10
  239. package/build-module/item-group/styles.js.map +1 -1
  240. package/build-module/mobile/bottom-sheet/index.native.js +3 -5
  241. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  242. package/build-module/mobile/global-styles-context/utils.native.js +2 -1
  243. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  244. package/build-module/mobile/image/index.native.js +8 -28
  245. package/build-module/mobile/image/index.native.js.map +1 -1
  246. package/build-module/mobile/picker/index.android.js +3 -3
  247. package/build-module/mobile/picker/index.android.js.map +1 -1
  248. package/build-module/modal/index.js +1 -2
  249. package/build-module/modal/index.js.map +1 -1
  250. package/build-module/navigable-container/container.js +9 -7
  251. package/build-module/navigable-container/container.js.map +1 -1
  252. package/build-module/navigator/navigator-back-button/hook.js +0 -4
  253. package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
  254. package/build-module/navigator/navigator-button/hook.js +0 -4
  255. package/build-module/navigator/navigator-button/hook.js.map +1 -1
  256. package/build-module/notice/list.js +10 -5
  257. package/build-module/notice/list.js.map +1 -1
  258. package/build-module/palette-edit/index.js +1 -0
  259. package/build-module/palette-edit/index.js.map +1 -1
  260. package/build-module/palette-edit/styles.js +10 -10
  261. package/build-module/palette-edit/styles.js.map +1 -1
  262. package/build-module/popover/index.js +100 -98
  263. package/build-module/popover/index.js.map +1 -1
  264. package/build-module/popover/utils.js +164 -0
  265. package/build-module/popover/utils.js.map +1 -0
  266. package/build-module/range-control/index.js +3 -0
  267. package/build-module/range-control/index.js.map +1 -1
  268. package/build-module/range-control/styles/range-control-styles.js +43 -37
  269. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  270. package/build-module/select-control/chevron-down.js +21 -0
  271. package/build-module/select-control/chevron-down.js.map +1 -0
  272. package/build-module/select-control/index.js +7 -7
  273. package/build-module/select-control/index.js.map +1 -1
  274. package/build-module/select-control/styles/select-control-styles.js +24 -13
  275. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  276. package/build-module/snackbar/list.js +5 -2
  277. package/build-module/snackbar/list.js.map +1 -1
  278. package/build-module/spinner/index.js +2 -0
  279. package/build-module/spinner/index.js.map +1 -1
  280. package/build-module/text/styles.js +7 -7
  281. package/build-module/text/styles.js.map +1 -1
  282. package/build-module/toggle-group-control/toggle-group-control/component.js +14 -7
  283. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  284. package/build-module/toggle-group-control/toggle-group-control/styles.js +5 -4
  285. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  286. package/build-module/toggle-group-control/toggle-group-control-option/component.js +17 -3
  287. package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  288. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +5 -1
  289. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  290. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +16 -6
  291. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  292. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +27 -5
  293. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  294. package/build-module/tools-panel/styles.js +11 -11
  295. package/build-module/tools-panel/styles.js.map +1 -1
  296. package/build-module/ui/context/context-connect.js +1 -2
  297. package/build-module/ui/context/context-connect.js.map +1 -1
  298. package/build-module/unit-control/index.js +2 -2
  299. package/build-module/unit-control/index.js.map +1 -1
  300. package/build-module/utils/colors-values.js +52 -141
  301. package/build-module/utils/colors-values.js.map +1 -1
  302. package/build-module/utils/config-values.js +1 -1
  303. package/build-module/utils/config-values.js.map +1 -1
  304. package/build-module/utils/input/input-control.js +1 -1
  305. package/build-module/utils/input/input-control.js.map +1 -1
  306. package/build-module/utils/rtl.js +6 -4
  307. package/build-module/utils/rtl.js.map +1 -1
  308. package/build-module/utils/strings.js +37 -0
  309. package/build-module/utils/strings.js.map +1 -0
  310. package/build-style/style-rtl.css +176 -1227
  311. package/build-style/style.css +171 -1225
  312. package/build-types/color-palette/index.d.ts +2 -1
  313. package/build-types/color-palette/index.d.ts.map +1 -1
  314. package/build-types/color-picker/styles.d.ts +2 -2
  315. package/build-types/date-time/constants.d.ts +2 -0
  316. package/build-types/date-time/constants.d.ts.map +1 -0
  317. package/build-types/date-time/date/index.d.ts +3 -1
  318. package/build-types/date-time/date/index.d.ts.map +1 -1
  319. package/build-types/date-time/date/styles.d.ts +22 -8
  320. package/build-types/date-time/date/styles.d.ts.map +1 -1
  321. package/build-types/date-time/date/test/index.d.ts +1 -1
  322. package/build-types/date-time/date/test/index.d.ts.map +1 -1
  323. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  324. package/build-types/date-time/time/index.d.ts.map +1 -1
  325. package/build-types/date-time/utils.d.ts +8 -0
  326. package/build-types/date-time/utils.d.ts.map +1 -0
  327. package/build-types/disabled/index.d.ts +35 -28
  328. package/build-types/disabled/index.d.ts.map +1 -1
  329. package/build-types/disabled/stories/index.d.ts +13 -0
  330. package/build-types/disabled/stories/index.d.ts.map +1 -0
  331. package/build-types/disabled/styles/disabled-styles.d.ts +2 -1
  332. package/build-types/disabled/styles/disabled-styles.d.ts.map +1 -1
  333. package/build-types/disabled/test/index.d.ts +2 -0
  334. package/build-types/{flyout/flyout → disabled/test}/index.d.ts.map +1 -1
  335. package/build-types/disabled/types.d.ts +14 -0
  336. package/build-types/disabled/types.d.ts.map +1 -0
  337. package/build-types/dropdown/index.d.ts.map +1 -1
  338. package/build-types/form-token-field/index.d.ts.map +1 -1
  339. package/build-types/form-token-field/stories/index.d.ts +1 -0
  340. package/build-types/form-token-field/stories/index.d.ts.map +1 -1
  341. package/build-types/form-token-field/types.d.ts +7 -0
  342. package/build-types/form-token-field/types.d.ts.map +1 -1
  343. package/build-types/navigator/navigator-back-button/hook.d.ts +0 -3
  344. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  345. package/build-types/navigator/navigator-button/hook.d.ts +0 -3
  346. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  347. package/build-types/placeholder/test/index.d.ts +2 -0
  348. package/build-types/{flyout → placeholder/test}/index.d.ts.map +1 -1
  349. package/build-types/popover/index.d.ts +1 -1
  350. package/build-types/popover/index.d.ts.map +1 -1
  351. package/build-types/popover/utils.d.ts +26 -69
  352. package/build-types/popover/utils.d.ts.map +1 -1
  353. package/build-types/range-control/index.d.ts +2 -2
  354. package/build-types/range-control/index.d.ts.map +1 -1
  355. package/build-types/range-control/styles/range-control-styles.d.ts +5 -2
  356. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  357. package/build-types/range-control/types.d.ts +2 -2
  358. package/build-types/range-control/types.d.ts.map +1 -1
  359. package/build-types/select-control/chevron-down.d.ts +4 -0
  360. package/build-types/select-control/chevron-down.d.ts.map +1 -0
  361. package/build-types/select-control/index.d.ts.map +1 -1
  362. package/build-types/select-control/styles/select-control-styles.d.ts +8 -0
  363. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  364. package/build-types/spinner/index.d.ts.map +1 -1
  365. package/build-types/toggle-group-control/stories/index.d.ts +25 -0
  366. package/build-types/toggle-group-control/stories/index.d.ts.map +1 -0
  367. package/build-types/toggle-group-control/test/index.d.ts +2 -0
  368. package/build-types/toggle-group-control/test/index.d.ts.map +1 -0
  369. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +6 -3
  370. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  371. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -0
  372. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  373. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -7
  374. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  375. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  376. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +4 -0
  377. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  378. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +11 -9
  379. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -1
  380. package/build-types/toggle-group-control/types.d.ts +23 -10
  381. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  382. package/build-types/ui/context/context-connect.d.ts +3 -0
  383. package/build-types/ui/context/context-connect.d.ts.map +1 -1
  384. package/build-types/ui/form-group/use-form-group.d.ts +2 -2
  385. package/build-types/unit-control/index.d.ts +2 -1
  386. package/build-types/unit-control/index.d.ts.map +1 -1
  387. package/build-types/unit-control/types.d.ts +5 -1
  388. package/build-types/unit-control/types.d.ts.map +1 -1
  389. package/build-types/utils/colors-values.d.ts +18 -97
  390. package/build-types/utils/colors-values.d.ts.map +1 -1
  391. package/build-types/utils/rtl.d.ts.map +1 -1
  392. package/build-types/utils/strings.d.ts +2 -0
  393. package/build-types/utils/strings.d.ts.map +1 -0
  394. package/package.json +22 -21
  395. package/src/alignment-matrix-control/index.js +1 -1
  396. package/src/alignment-matrix-control/stories/index.js +49 -24
  397. package/src/alignment-matrix-control/styles/alignment-matrix-control-styles.js +1 -3
  398. package/src/angle-picker-control/index.js +7 -1
  399. package/src/angle-picker-control/stories/index.js +8 -5
  400. package/src/angle-picker-control/styles/angle-picker-control-styles.js +12 -3
  401. package/src/autocomplete/index.js +9 -18
  402. package/src/base-control/styles/base-control-styles.ts +1 -1
  403. package/src/base-field/styles.js +1 -1
  404. package/src/base-field/test/__snapshots__/index.js.snap +2 -2
  405. package/src/box-control/styles/box-control-visualizer-styles.js +0 -1
  406. package/src/box-control/test/index.js +8 -8
  407. package/src/button/test/index.js +188 -146
  408. package/src/color-list-picker/index.js +15 -3
  409. package/src/color-list-picker/style.scss +11 -0
  410. package/src/color-palette/index.js +32 -16
  411. package/src/color-palette/index.native.js +10 -6
  412. package/src/color-palette/stories/index.js +1 -1
  413. package/src/color-palette/test/__snapshots__/index.js.snap +17 -3
  414. package/src/combobox-control/index.js +6 -5
  415. package/src/combobox-control/stories/index.js +9 -3
  416. package/src/combobox-control/style.scss +0 -1
  417. package/src/confirm-dialog/test/index.js +85 -62
  418. package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/constants.js +0 -0
  419. package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/control-points.js +54 -50
  420. package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/index.js +0 -3
  421. package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/test/utils.js +0 -0
  422. package/src/{custom-gradient-bar → custom-gradient-picker/gradient-bar}/utils.js +0 -0
  423. package/src/custom-gradient-picker/index.js +18 -3
  424. package/src/custom-gradient-picker/stories/index.js +4 -3
  425. package/src/custom-gradient-picker/style.scss +30 -27
  426. package/src/custom-select-control/README.md +10 -0
  427. package/src/custom-select-control/index.js +22 -16
  428. package/src/custom-select-control/stories/index.js +1 -1
  429. package/src/custom-select-control/style.scss +0 -12
  430. package/src/custom-select-control/styles.ts +28 -0
  431. package/src/custom-select-control/test/index.js +4 -1
  432. package/src/date-time/constants.ts +1 -0
  433. package/src/date-time/date/index.tsx +289 -184
  434. package/src/date-time/date/styles.ts +86 -27
  435. package/src/date-time/date/test/index.tsx +18 -28
  436. package/src/date-time/date-time/index.tsx +3 -2
  437. package/src/date-time/time/index.tsx +23 -19
  438. package/src/date-time/utils.ts +17 -0
  439. package/src/dimension-control/index.js +1 -5
  440. package/src/disabled/index.tsx +80 -0
  441. package/src/disabled/stories/index.tsx +87 -0
  442. package/src/disabled/styles/{disabled-styles.js → disabled-styles.tsx} +0 -0
  443. package/src/disabled/test/index.tsx +174 -0
  444. package/src/disabled/types.ts +13 -0
  445. package/src/dropdown/index.js +3 -5
  446. package/src/dropdown-menu/stories/index.js +13 -2
  447. package/src/duotone-picker/custom-duotone-bar.js +1 -1
  448. package/src/duotone-picker/duotone-picker.js +34 -26
  449. package/src/duotone-picker/duotone-swatch.js +12 -5
  450. package/src/duotone-picker/stories/duotone-picker.js +66 -0
  451. package/src/duotone-picker/stories/duotone-swatch.js +32 -0
  452. package/src/focal-point-picker/index.js +10 -5
  453. package/src/focal-point-picker/styles/focal-point-style.js +0 -1
  454. package/src/focal-point-picker/test/index.js +78 -45
  455. package/src/font-size-picker/index.js +161 -144
  456. package/src/font-size-picker/stories/index.js +1 -0
  457. package/src/font-size-picker/style.scss +8 -5
  458. package/src/font-size-picker/test/index.js +13 -6
  459. package/src/font-size-picker/test/{util.js → utils.js} +77 -1
  460. package/src/font-size-picker/utils.js +38 -23
  461. package/src/form-token-field/README.md +1 -0
  462. package/src/form-token-field/index.tsx +24 -10
  463. package/src/form-token-field/stories/index.tsx +8 -0
  464. package/src/form-token-field/test/index.js +31 -0
  465. package/src/form-token-field/types.ts +7 -0
  466. package/src/gradient-picker/index.js +22 -7
  467. package/src/gradient-picker/stories/index.js +56 -81
  468. package/src/guide/index.js +3 -1
  469. package/src/guide/page-control.js +1 -6
  470. package/src/guide/stories/index.js +12 -11
  471. package/src/guide/test/index.js +54 -37
  472. package/src/guide/test/page-control.js +14 -17
  473. package/src/higher-order/with-notices/test/index.js +4 -2
  474. package/src/higher-order/with-spoken-messages/test/index.js +1 -1
  475. package/src/item-group/styles.ts +3 -3
  476. package/src/menu-group/test/index.js +18 -7
  477. package/src/mobile/bottom-sheet/index.native.js +2 -4
  478. package/src/mobile/global-styles-context/utils.native.js +2 -1
  479. package/src/mobile/image/index.native.js +9 -30
  480. package/src/mobile/picker/index.android.js +10 -4
  481. package/src/mobile/picker/styles.native.scss +4 -4
  482. package/src/modal/index.js +1 -2
  483. package/src/modal/test/index.js +11 -9
  484. package/src/navigable-container/container.js +12 -18
  485. package/src/navigable-container/test/menu.js +14 -11
  486. package/src/navigator/navigator-back-button/hook.ts +0 -3
  487. package/src/navigator/navigator-button/hook.ts +0 -3
  488. package/src/notice/list.js +12 -10
  489. package/src/palette-edit/index.js +1 -0
  490. package/src/palette-edit/styles.js +6 -5
  491. package/src/placeholder/README.md +1 -1
  492. package/src/placeholder/style.scss +65 -20
  493. package/src/placeholder/test/index.tsx +174 -0
  494. package/src/popover/index.js +133 -112
  495. package/src/popover/stories/index.js +17 -3
  496. package/src/popover/test/__snapshots__/index.js.snap +6 -6
  497. package/src/popover/test/index.js +129 -36
  498. package/src/popover/utils.js +107 -0
  499. package/src/range-control/index.tsx +3 -0
  500. package/src/range-control/styles/range-control-styles.ts +9 -4
  501. package/src/range-control/types.ts +5 -2
  502. package/src/select-control/chevron-down.tsx +25 -0
  503. package/src/select-control/index.tsx +6 -9
  504. package/src/select-control/styles/select-control-styles.ts +23 -14
  505. package/src/slot-fill/test/slot.js +5 -5
  506. package/src/snackbar/list.js +3 -2
  507. package/src/spinner/index.tsx +2 -0
  508. package/src/style.scss +0 -2
  509. package/src/text/styles.js +1 -1
  510. package/src/text/test/index.tsx +1 -1
  511. package/src/toggle-group-control/stories/index.tsx +127 -0
  512. package/src/toggle-group-control/test/__snapshots__/{index.js.snap → index.tsx.snap} +28 -22
  513. package/src/toggle-group-control/test/{index.js → index.tsx} +2 -4
  514. package/src/toggle-group-control/toggle-group-control/README.md +2 -0
  515. package/src/toggle-group-control/toggle-group-control/component.tsx +18 -9
  516. package/src/toggle-group-control/toggle-group-control/styles.ts +9 -6
  517. package/src/toggle-group-control/toggle-group-control-option/component.tsx +19 -3
  518. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +3 -0
  519. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +18 -0
  520. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +6 -8
  521. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +30 -7
  522. package/src/toggle-group-control/types.ts +74 -59
  523. package/src/toolbar/test/index.js +4 -4
  524. package/src/toolbar-group/test/index.js +9 -15
  525. package/src/tools-panel/styles.ts +2 -2
  526. package/src/tools-panel/test/index.js +3 -2
  527. package/src/tooltip/test/index.js +188 -172
  528. package/src/ui/context/context-connect.ts +3 -2
  529. package/src/unit-control/index.tsx +2 -2
  530. package/src/unit-control/types.ts +10 -1
  531. package/src/utils/colors-values.js +42 -137
  532. package/src/utils/config-values.js +1 -1
  533. package/src/utils/input/input-control.js +6 -6
  534. package/src/utils/rtl.js +6 -2
  535. package/src/utils/strings.ts +72 -0
  536. package/src/utils/test/strings.js +15 -0
  537. package/tsconfig.json +0 -1
  538. package/tsconfig.tsbuildinfo +1 -1
  539. package/build/custom-gradient-bar/constants.js.map +0 -1
  540. package/build/custom-gradient-bar/control-points.js.map +0 -1
  541. package/build/custom-gradient-bar/index.js.map +0 -1
  542. package/build/custom-gradient-bar/utils.js.map +0 -1
  543. package/build/date-time/date/utils.js +0 -34
  544. package/build/date-time/date/utils.js.map +0 -1
  545. package/build/swatch/index.js +0 -41
  546. package/build/swatch/index.js.map +0 -1
  547. package/build-module/custom-gradient-bar/constants.js.map +0 -1
  548. package/build-module/custom-gradient-bar/control-points.js.map +0 -1
  549. package/build-module/custom-gradient-bar/index.js.map +0 -1
  550. package/build-module/custom-gradient-bar/utils.js.map +0 -1
  551. package/build-module/date-time/date/utils.js +0 -22
  552. package/build-module/date-time/date/utils.js.map +0 -1
  553. package/build-module/swatch/index.js +0 -30
  554. package/build-module/swatch/index.js.map +0 -1
  555. package/build-types/color-picker/color-display.d.ts +0 -13
  556. package/build-types/color-picker/color-display.d.ts.map +0 -1
  557. package/build-types/date-time/date/test/utils.d.ts +0 -2
  558. package/build-types/date-time/date/test/utils.d.ts.map +0 -1
  559. package/build-types/date-time/date/utils.d.ts +0 -15
  560. package/build-types/date-time/date/utils.d.ts.map +0 -1
  561. package/build-types/flyout/context.d.ts +0 -6
  562. package/build-types/flyout/context.d.ts.map +0 -1
  563. package/build-types/flyout/flyout/component.d.ts +0 -21
  564. package/build-types/flyout/flyout/component.d.ts.map +0 -1
  565. package/build-types/flyout/flyout/hook.d.ts +0 -270
  566. package/build-types/flyout/flyout/hook.d.ts.map +0 -1
  567. package/build-types/flyout/flyout/index.d.ts +0 -3
  568. package/build-types/flyout/flyout-content/component.d.ts +0 -3
  569. package/build-types/flyout/flyout-content/component.d.ts.map +0 -1
  570. package/build-types/flyout/flyout-content/index.d.ts +0 -2
  571. package/build-types/flyout/flyout-content/index.d.ts.map +0 -1
  572. package/build-types/flyout/index.d.ts +0 -2
  573. package/build-types/flyout/styles.d.ts +0 -22
  574. package/build-types/flyout/styles.d.ts.map +0 -1
  575. package/build-types/flyout/types.d.ts +0 -80
  576. package/build-types/flyout/types.d.ts.map +0 -1
  577. package/build-types/flyout/utils.d.ts +0 -8
  578. package/build-types/flyout/utils.d.ts.map +0 -1
  579. package/build-types/swatch/index.d.ts +0 -5
  580. package/build-types/swatch/index.d.ts.map +0 -1
  581. package/build-types/swatch/types.d.ts +0 -11
  582. package/build-types/swatch/types.d.ts.map +0 -1
  583. package/build-types/utils/hooks/use-combined-ref.d.ts +0 -8
  584. package/build-types/utils/hooks/use-combined-ref.d.ts.map +0 -1
  585. package/src/date-time/date/datepicker.scss +0 -863
  586. package/src/date-time/date/style.scss +0 -85
  587. package/src/date-time/date/test/utils.ts +0 -32
  588. package/src/date-time/date/utils.ts +0 -20
  589. package/src/date-time/style.scss +0 -1
  590. package/src/disabled/index.js +0 -55
  591. package/src/disabled/stories/index.js +0 -61
  592. package/src/disabled/test/index.js +0 -240
  593. package/src/menu-group/test/__snapshots__/index.js.snap +0 -23
  594. package/src/placeholder/test/index.js +0 -163
  595. package/src/swatch/index.tsx +0 -22
  596. package/src/swatch/style.scss +0 -21
  597. package/src/swatch/types.ts +0 -11
  598. package/src/toggle-group-control/stories/index.js +0 -203
  599. package/src/tools-panel/test/__snapshots__/index.js.snap +0 -210
@@ -1,82 +1,42 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import moment from 'moment';
5
- import type { Moment } from 'moment';
6
- // Needed to initialise the default datepicker styles.
7
- // See: https://github.com/airbnb/react-dates#initialize
8
- import 'react-dates/initialize';
9
- // `react-dates` doesn't tree-shake correctly, so we import from the individual
10
- // component here.
11
- import DayPickerSingleDateController from 'react-dates/lib/components/DayPickerSingleDateController';
4
+ import { useLilius } from 'use-lilius';
5
+ import {
6
+ format,
7
+ isSameDay,
8
+ subMonths,
9
+ addMonths,
10
+ startOfDay,
11
+ isEqual,
12
+ addDays,
13
+ subWeeks,
14
+ addWeeks,
15
+ isSameMonth,
16
+ } from 'date-fns';
12
17
 
13
18
  /**
14
19
  * WordPress dependencies
15
20
  */
16
- import { useEffect, useRef } from '@wordpress/element';
17
- import { isRTL, _n, sprintf } from '@wordpress/i18n';
21
+ import { __, _n, sprintf, isRTL } from '@wordpress/i18n';
18
22
  import { arrowLeft, arrowRight } from '@wordpress/icons';
23
+ import { dateI18n, __experimentalGetSettings } from '@wordpress/date';
24
+ import { useState, useRef, useEffect } from '@wordpress/element';
19
25
 
20
26
  /**
21
27
  * Internal dependencies
22
28
  */
23
- import { getMomentDate } from './utils';
24
- import type { DatePickerDayProps, DatePickerProps } from '../types';
25
- import { Day, NavPrevButton, NavNextButton } from './styles';
26
-
27
- const TIMEZONELESS_FORMAT = 'YYYY-MM-DDTHH:mm:ss';
28
- const ARIAL_LABEL_TIME_FORMAT = 'dddd, LL';
29
- const noop = () => {};
30
-
31
- function DatePickerDay( { day, events = [] }: DatePickerDayProps ) {
32
- const ref = useRef< HTMLDivElement >( null );
33
-
34
- /*
35
- * a11y hack to make the `There is/are n events` string
36
- * available speaking for readers,
37
- * re-defining the aria-label attribute.
38
- * This attribute is handled by the react-dates component.
39
- */
40
- useEffect( () => {
41
- // Bail when no parent node.
42
- if ( ! ( ref?.current?.parentNode instanceof Element ) ) {
43
- return;
44
- }
45
-
46
- const { parentNode } = ref.current;
47
- const dayAriaLabel = moment( day ).format( ARIAL_LABEL_TIME_FORMAT );
48
-
49
- if ( ! events.length ) {
50
- // Set aria-label without event description.
51
- parentNode.setAttribute( 'aria-label', dayAriaLabel );
52
- return;
53
- }
54
-
55
- const dayWithEventsDescription = sprintf(
56
- // translators: 1: Calendar day format, 2: Calendar event number.
57
- _n(
58
- '%1$s. There is %2$d event.',
59
- '%1$s. There are %2$d events.',
60
- events.length
61
- ),
62
- dayAriaLabel,
63
- events.length
64
- );
65
-
66
- parentNode.setAttribute( 'aria-label', dayWithEventsDescription );
67
- }, [ day, events.length ] );
68
-
69
- return (
70
- <Day
71
- ref={ ref }
72
- className="components-datetime__date__day" // Unused, for backwards compatibility.
73
- hasEvents={ !! events?.length }
74
- alignment="center"
75
- >
76
- { day.format( 'D' ) }
77
- </Day>
78
- );
79
- }
29
+ import type { DatePickerProps } from '../types';
30
+ import {
31
+ Navigator,
32
+ NavigatorHeading,
33
+ Calendar,
34
+ DayOfWeek,
35
+ DayButton,
36
+ } from './styles';
37
+ import { inputToDate } from '../utils';
38
+ import Button from '../../button';
39
+ import { TIMEZONELESS_FORMAT } from '../constants';
80
40
 
81
41
  /**
82
42
  * DatePicker is a React component that renders a calendar for date selection.
@@ -100,139 +60,284 @@ function DatePickerDay( { day, events = [] }: DatePickerDayProps ) {
100
60
  export function DatePicker( {
101
61
  currentDate,
102
62
  onChange,
103
- events,
63
+ events = [],
104
64
  isInvalidDate,
105
65
  onMonthPreviewed,
106
66
  startOfWeek = 0,
107
67
  }: DatePickerProps ) {
108
- const nodeRef = useRef< HTMLDivElement >( null );
68
+ const date = currentDate ? inputToDate( currentDate ) : new Date();
109
69
 
110
- const onMonthPreviewedHandler = ( newMonthDate: Moment ) => {
111
- onMonthPreviewed?.( newMonthDate.toISOString() );
112
- keepFocusInside();
113
- };
70
+ const {
71
+ calendar,
72
+ viewing,
73
+ setSelected,
74
+ setViewing,
75
+ isSelected,
76
+ viewPreviousMonth,
77
+ viewNextMonth,
78
+ } = useLilius( {
79
+ selected: [ startOfDay( date ) ],
80
+ viewing: startOfDay( date ),
81
+ weekStartsOn: startOfWeek,
82
+ } );
114
83
 
115
- /*
116
- * Todo: We should remove this function ASAP.
117
- * It is kept because focus is lost when we click on the previous and next month buttons.
118
- * This focus loss closes the date picker popover.
119
- * Ideally we should add an upstream commit on react-dates to fix this issue.
120
- */
121
- const keepFocusInside = () => {
122
- if ( ! nodeRef.current ) {
123
- return;
124
- }
125
-
126
- const { ownerDocument } = nodeRef.current;
127
- const { activeElement } = ownerDocument;
84
+ // Used to implement a roving tab index. Tracks the day that receives focus
85
+ // when the user tabs into the calendar.
86
+ const [ focusable, setFocusable ] = useState( startOfDay( date ) );
128
87
 
129
- // If focus was lost.
130
- if (
131
- ! activeElement ||
132
- ! nodeRef.current.contains( ownerDocument.activeElement )
133
- ) {
134
- // Retrieve the focus region div.
135
- const focusRegion = nodeRef.current.querySelector(
136
- '.DayPicker_focusRegion'
137
- );
138
- if ( ! ( focusRegion instanceof HTMLElement ) ) {
139
- return;
140
- }
141
- // Keep the focus on focus region.
142
- focusRegion.focus();
143
- }
144
- };
88
+ // Allows us to only programmatically focus() a day when focus was already
89
+ // within the calendar. This stops us stealing focus from e.g. a TimePicker
90
+ // input.
91
+ const [ isFocusWithinCalendar, setIsFocusWithinCalendar ] =
92
+ useState( false );
145
93
 
146
- const onChangeMoment = ( newDate: Moment | null ) => {
147
- if ( ! newDate ) {
148
- return;
149
- }
94
+ // Update internal state when currentDate prop changes.
95
+ const [ prevCurrentDate, setPrevCurrentDate ] = useState( currentDate );
96
+ if ( currentDate !== prevCurrentDate ) {
97
+ setPrevCurrentDate( currentDate );
98
+ setSelected( [ startOfDay( date ) ] );
99
+ setViewing( startOfDay( date ) );
100
+ setFocusable( startOfDay( date ) );
101
+ }
150
102
 
151
- // If currentDate is null, use now as momentTime to designate hours, minutes, seconds.
152
- const momentDate = currentDate ? moment( currentDate ) : moment();
153
- const momentTime = {
154
- hours: momentDate.hours(),
155
- minutes: momentDate.minutes(),
156
- seconds: 0,
157
- };
103
+ return (
104
+ <div
105
+ className="components-datetime__date"
106
+ role="application"
107
+ aria-label={ __( 'Calendar' ) }
108
+ >
109
+ <Navigator>
110
+ <Button
111
+ icon={ isRTL() ? arrowRight : arrowLeft }
112
+ variant="tertiary"
113
+ aria-label={ __( 'View previous month' ) }
114
+ onClick={ () => {
115
+ viewPreviousMonth();
116
+ setFocusable( subMonths( focusable, 1 ) );
117
+ onMonthPreviewed?.(
118
+ format(
119
+ subMonths( viewing, 1 ),
120
+ TIMEZONELESS_FORMAT
121
+ )
122
+ );
123
+ } }
124
+ />
125
+ <NavigatorHeading level={ 3 }>
126
+ <strong>
127
+ { dateI18n(
128
+ 'F',
129
+ viewing,
130
+ -viewing.getTimezoneOffset()
131
+ ) }
132
+ </strong>{ ' ' }
133
+ { dateI18n( 'Y', viewing, -viewing.getTimezoneOffset() ) }
134
+ </NavigatorHeading>
135
+ <Button
136
+ icon={ isRTL() ? arrowLeft : arrowRight }
137
+ variant="tertiary"
138
+ aria-label={ __( 'View next month' ) }
139
+ onClick={ () => {
140
+ viewNextMonth();
141
+ setFocusable( addMonths( focusable, 1 ) );
142
+ onMonthPreviewed?.(
143
+ format(
144
+ addMonths( viewing, 1 ),
145
+ TIMEZONELESS_FORMAT
146
+ )
147
+ );
148
+ } }
149
+ />
150
+ </Navigator>
151
+ <Calendar
152
+ onFocus={ () => setIsFocusWithinCalendar( true ) }
153
+ onBlur={ () => setIsFocusWithinCalendar( false ) }
154
+ >
155
+ { calendar[ 0 ][ 0 ].map( ( day ) => (
156
+ <DayOfWeek key={ day.toString() }>
157
+ { dateI18n( 'D', day, -day.getTimezoneOffset() ) }
158
+ </DayOfWeek>
159
+ ) ) }
160
+ { calendar[ 0 ].map( ( week ) =>
161
+ week.map( ( day, index ) => {
162
+ if ( ! isSameMonth( day, viewing ) ) {
163
+ return null;
164
+ }
165
+ return (
166
+ <Day
167
+ key={ day.toString() }
168
+ day={ day }
169
+ column={ index + 1 }
170
+ isSelected={ isSelected( day ) }
171
+ isFocusable={ isEqual( day, focusable ) }
172
+ isFocusAllowed={ isFocusWithinCalendar }
173
+ isToday={ isSameDay( day, new Date() ) }
174
+ isInvalid={
175
+ isInvalidDate ? isInvalidDate( day ) : false
176
+ }
177
+ numEvents={
178
+ events.filter( ( event ) =>
179
+ isSameDay( event.date, day )
180
+ ).length
181
+ }
182
+ onClick={ () => {
183
+ setSelected( [ day ] );
184
+ setFocusable( day );
185
+ onChange?.(
186
+ format(
187
+ // Don't change the selected date's time fields.
188
+ new Date(
189
+ day.getFullYear(),
190
+ day.getMonth(),
191
+ day.getDate(),
192
+ date.getHours(),
193
+ date.getMinutes(),
194
+ date.getSeconds(),
195
+ date.getMilliseconds()
196
+ ),
197
+ TIMEZONELESS_FORMAT
198
+ )
199
+ );
200
+ } }
201
+ onKeyDown={ ( event ) => {
202
+ let nextFocusable;
203
+ if ( event.key === 'ArrowLeft' ) {
204
+ nextFocusable = addDays(
205
+ day,
206
+ isRTL() ? 1 : -1
207
+ );
208
+ }
209
+ if ( event.key === 'ArrowRight' ) {
210
+ nextFocusable = addDays(
211
+ day,
212
+ isRTL() ? -1 : 1
213
+ );
214
+ }
215
+ if ( event.key === 'ArrowUp' ) {
216
+ nextFocusable = subWeeks( day, 1 );
217
+ }
218
+ if ( event.key === 'ArrowDown' ) {
219
+ nextFocusable = addWeeks( day, 1 );
220
+ }
221
+ if ( nextFocusable ) {
222
+ setFocusable( nextFocusable );
223
+ if (
224
+ ! isSameMonth(
225
+ nextFocusable,
226
+ viewing
227
+ )
228
+ ) {
229
+ setViewing( nextFocusable );
230
+ onMonthPreviewed?.(
231
+ format(
232
+ nextFocusable,
233
+ TIMEZONELESS_FORMAT
234
+ )
235
+ );
236
+ }
237
+ }
238
+ } }
239
+ />
240
+ );
241
+ } )
242
+ ) }
243
+ </Calendar>
244
+ </div>
245
+ );
246
+ }
158
247
 
159
- onChange?.( newDate.set( momentTime ).format( TIMEZONELESS_FORMAT ) );
248
+ type DayProps = {
249
+ day: Date;
250
+ column: number;
251
+ isSelected: boolean;
252
+ isFocusable: boolean;
253
+ isFocusAllowed: boolean;
254
+ isToday: boolean;
255
+ numEvents: number;
256
+ isInvalid: boolean;
257
+ onClick: () => void;
258
+ onKeyDown: ( event: KeyboardEvent ) => void;
259
+ };
160
260
 
161
- // Keep focus on the date picker.
162
- keepFocusInside();
163
- };
261
+ function Day( {
262
+ day,
263
+ column,
264
+ isSelected,
265
+ isFocusable,
266
+ isFocusAllowed,
267
+ isToday,
268
+ isInvalid,
269
+ numEvents,
270
+ onClick,
271
+ onKeyDown,
272
+ }: DayProps ) {
273
+ const ref = useRef< HTMLButtonElement >();
164
274
 
165
- const getEventsPerDay = ( day: Moment ) => {
166
- if ( ! events?.length ) {
167
- return [];
275
+ // Focus the day when it becomes focusable, e.g. because an arrow key is
276
+ // pressed. Only do this if focus is allowed - this stops us stealing focus
277
+ // from e.g. a TimePicker input. Note that isFocusAllowed is not a dep as
278
+ // there is no point calling focus() on an already focused element.
279
+ useEffect( () => {
280
+ if ( ref.current && isFocusable && isFocusAllowed ) {
281
+ ref.current.focus();
168
282
  }
169
-
170
- return events.filter( ( eventDay ) =>
171
- day.isSame( eventDay.date, 'day' )
172
- );
173
- };
174
-
175
- const momentDate = getMomentDate( currentDate );
283
+ }, [ isFocusable ] );
176
284
 
177
285
  return (
178
- <div className="components-datetime__date" ref={ nodeRef }>
179
- <DayPickerSingleDateController
180
- date={ momentDate }
181
- initialVisibleMonth={ null }
182
- daySize={ 30 }
183
- horizontalMonthPadding={ 0 }
184
- focused
185
- hideKeyboardShortcutsPanel
186
- // This is a hack to force the calendar to update on month or year change
187
- // https://github.com/airbnb/react-dates/issues/240#issuecomment-361776665
188
- key={ `datepicker-controller-${
189
- momentDate ? momentDate.format( 'MM-YYYY' ) : 'null'
190
- }` }
191
- noBorder
192
- numberOfMonths={ 1 }
193
- onDateChange={ onChangeMoment }
194
- transitionDuration={ 0 }
195
- weekDayFormat="ddd"
196
- dayAriaLabelFormat={ ARIAL_LABEL_TIME_FORMAT }
197
- isRTL={ isRTL() }
198
- isOutsideRange={ ( date ) => {
199
- return !! isInvalidDate && isInvalidDate( date.toDate() );
200
- } }
201
- firstDayOfWeek={ startOfWeek }
202
- onPrevMonthClick={ onMonthPreviewedHandler }
203
- onNextMonthClick={ onMonthPreviewedHandler }
204
- renderDayContents={ ( day ) => (
205
- <DatePickerDay
206
- day={ day }
207
- events={ getEventsPerDay( day ) }
208
- />
209
- ) }
210
- renderMonthElement={ ( { month } ) => (
211
- <>
212
- <strong>{ month.format( 'MMMM' ) }</strong>{ ' ' }
213
- { month.format( 'YYYY' ) }
214
- </>
215
- ) }
216
- renderNavPrevButton={ ( { ariaLabel, ...props } ) => (
217
- <NavPrevButton
218
- icon={ arrowLeft }
219
- variant="tertiary"
220
- aria-label={ ariaLabel }
221
- { ...props }
222
- />
223
- ) }
224
- renderNavNextButton={ ( { ariaLabel, ...props } ) => (
225
- <NavNextButton
226
- icon={ arrowRight }
227
- variant="tertiary"
228
- aria-label={ ariaLabel }
229
- { ...props }
230
- />
231
- ) }
232
- onFocusChange={ noop }
233
- />
234
- </div>
286
+ <DayButton
287
+ ref={ ref }
288
+ className="components-datetime__date__day" // Unused, for backwards compatibility.
289
+ disabled={ isInvalid }
290
+ tabIndex={ isFocusable ? 0 : -1 }
291
+ aria-label={ getDayLabel( day, isSelected, numEvents ) }
292
+ column={ column }
293
+ isSelected={ isSelected }
294
+ isToday={ isToday }
295
+ hasEvents={ numEvents > 0 }
296
+ onClick={ onClick }
297
+ onKeyDown={ onKeyDown }
298
+ >
299
+ { dateI18n( 'j', day, -day.getTimezoneOffset() ) }
300
+ </DayButton>
235
301
  );
236
302
  }
237
303
 
304
+ function getDayLabel( date: Date, isSelected: boolean, numEvents: number ) {
305
+ const { formats } = __experimentalGetSettings();
306
+ const localizedDate = dateI18n(
307
+ formats.date,
308
+ date,
309
+ -date.getTimezoneOffset()
310
+ );
311
+ if ( isSelected && numEvents > 0 ) {
312
+ return sprintf(
313
+ // translators: 1: The calendar date. 2: Number of events on the calendar date.
314
+ _n(
315
+ '%1$s. Selected. There is %2$d event',
316
+ '%1$s. Selected. There are %2$d events',
317
+ numEvents
318
+ ),
319
+ localizedDate,
320
+ numEvents
321
+ );
322
+ } else if ( isSelected ) {
323
+ return sprintf(
324
+ // translators: %s: The calendar date.
325
+ __( '%1$s. Selected' ),
326
+ localizedDate
327
+ );
328
+ } else if ( numEvents > 0 ) {
329
+ return sprintf(
330
+ // translators: 1: The calendar date. 2: Number of events on the calendar date.
331
+ _n(
332
+ '%1$s. There is %2$d event',
333
+ '%1$s. There are %2$d events',
334
+ numEvents
335
+ ),
336
+ localizedDate,
337
+ numEvents
338
+ );
339
+ }
340
+ return localizedDate;
341
+ }
342
+
238
343
  export default DatePicker;
@@ -2,27 +2,105 @@
2
2
  * External dependencies
3
3
  */
4
4
  import styled from '@emotion/styled';
5
- import { css } from '@emotion/react';
6
5
 
7
6
  /**
8
7
  * Internal dependencies
9
8
  */
10
9
  import Button from '../../button';
11
- import { COLORS } from '../../utils';
12
- import { VStack } from '../../v-stack';
10
+ import { COLORS, CONFIG } from '../../utils';
11
+ import { HStack } from '../../h-stack';
12
+ import { Heading } from '../../heading';
13
+ import { space } from '../../ui/utils/space';
13
14
 
14
- // Styles that overrides the calendar styling provided by react-dates go in
15
- // style.scss. Everything else goes here.
15
+ export const Navigator = styled( HStack )`
16
+ margin-bottom: ${ space( 4 ) };
17
+ `;
18
+
19
+ export const NavigatorHeading = styled( Heading )`
20
+ font-size: ${ CONFIG.fontSize };
21
+ font-weight: ${ CONFIG.fontWeight };
22
+
23
+ strong {
24
+ font-weight: ${ CONFIG.fontWeightHeading };
25
+ }
26
+ `;
27
+
28
+ export const Calendar = styled.div`
29
+ column-gap: ${ space( 2 ) };
30
+ display: grid;
31
+ grid-template-columns: 0.5fr repeat( 5, 1fr ) 0.5fr;
32
+ justify-items: center;
33
+ row-gap: ${ space( 2 ) };
34
+ `;
35
+
36
+ export const DayOfWeek = styled.div`
37
+ color: ${ COLORS.gray[ 700 ] };
38
+
39
+ &:nth-of-type( 1 ) {
40
+ justify-self: start;
41
+ }
16
42
 
17
- export const Day = styled( VStack )< { hasEvents: boolean } >`
18
- height: 100%;
43
+ &:nth-of-type( 7 ) {
44
+ justify-self: end;
45
+ }
46
+ `;
47
+
48
+ export const DayButton = styled( Button, {
49
+ shouldForwardProp: ( prop: string ) =>
50
+ ! [ 'column', 'isSelected', 'isToday', 'hasEvents' ].includes( prop ),
51
+ } )< {
52
+ column: number;
53
+ isSelected: boolean;
54
+ isToday: boolean;
55
+ hasEvents: boolean;
56
+ } >`
57
+ grid-column: ${ ( props ) => props.column };
19
58
  position: relative;
59
+ justify-content: center;
60
+
61
+ ${ ( props ) =>
62
+ props.column === 1 &&
63
+ `
64
+ justify-self: start;
65
+ ` }
66
+
67
+ ${ ( props ) =>
68
+ props.column === 7 &&
69
+ `
70
+ justify-self: end;
71
+ ` }
72
+
73
+ ${ ( props ) =>
74
+ props.disabled &&
75
+ `
76
+ pointer-events: none;
77
+ ` }
78
+
79
+ &&& {
80
+ border-radius: 100%;
81
+ height: ${ space( 7 ) };
82
+ width: ${ space( 7 ) };
83
+
84
+ ${ ( props ) =>
85
+ props.isSelected &&
86
+ `
87
+ background: ${ COLORS.ui.theme };
88
+ color: ${ COLORS.white };
89
+ ` }
90
+
91
+ ${ ( props ) =>
92
+ ! props.isSelected &&
93
+ props.isToday &&
94
+ `
95
+ background: ${ COLORS.gray[ 200 ] };
96
+ ` }
97
+ }
20
98
 
21
99
  ${ ( props ) =>
22
100
  props.hasEvents &&
23
101
  `
24
102
  ::before {
25
- background: var(--wp-admin-theme-color);
103
+ background: ${ props.isSelected ? COLORS.white : COLORS.ui.theme };
26
104
  border-radius: 2px;
27
105
  bottom: 0;
28
106
  content: " ";
@@ -31,25 +109,6 @@ export const Day = styled( VStack )< { hasEvents: boolean } >`
31
109
  margin-left: -2px;
32
110
  position: absolute;
33
111
  width: 4px;
34
-
35
- .CalendarDay__selected & {
36
- background: ${ COLORS.white };
37
- }
38
112
  }
39
113
  ` }
40
114
  `;
41
-
42
- const baseNavButton = css`
43
- position: absolute;
44
- top: 15px;
45
- `;
46
-
47
- export const NavPrevButton = styled( Button )`
48
- ${ baseNavButton }
49
- left: 0;
50
- `;
51
-
52
- export const NavNextButton = styled( Button )`
53
- ${ baseNavButton }
54
- right: 0;
55
- `;