@wordpress/components 23.9.0 → 25.0.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 (423) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/CONTRIBUTING.md +75 -1
  3. package/README.md +1 -3
  4. package/build/autocomplete/autocompleter-ui.js +0 -2
  5. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  6. package/build/autocomplete/index.js +2 -0
  7. package/build/autocomplete/index.js.map +1 -1
  8. package/build/button/index.js +2 -0
  9. package/build/button/index.js.map +1 -1
  10. package/build/card/card-media/component.js +2 -1
  11. package/build/card/card-media/component.js.map +1 -1
  12. package/build/color-picker/styles.js +8 -8
  13. package/build/color-picker/styles.js.map +1 -1
  14. package/build/combobox-control/index.js +7 -5
  15. package/build/combobox-control/index.js.map +1 -1
  16. package/build/combobox-control/styles.js +3 -3
  17. package/build/combobox-control/styles.js.map +1 -1
  18. package/build/date-time/date-time/index.js +3 -84
  19. package/build/date-time/date-time/index.js.map +1 -1
  20. package/build/date-time/date-time/styles.js +4 -19
  21. package/build/date-time/date-time/styles.js.map +1 -1
  22. package/build/dimension-control/index.js +1 -1
  23. package/build/dimension-control/index.js.map +1 -1
  24. package/build/draggable/index.js +2 -7
  25. package/build/draggable/index.js.map +1 -1
  26. package/build/dropdown-menu/index.js +87 -11
  27. package/build/dropdown-menu/index.js.map +1 -1
  28. package/build/dropdown-menu/types.js +6 -0
  29. package/build/dropdown-menu/types.js.map +1 -0
  30. package/build/dropdown-menu-v2/index.js +195 -0
  31. package/build/dropdown-menu-v2/index.js.map +1 -0
  32. package/build/dropdown-menu-v2/styles.js +176 -0
  33. package/build/dropdown-menu-v2/styles.js.map +1 -0
  34. package/build/dropdown-menu-v2/types.js +6 -0
  35. package/build/dropdown-menu-v2/types.js.map +1 -0
  36. package/build/form-token-field/index.js +5 -3
  37. package/build/form-token-field/index.js.map +1 -1
  38. package/build/form-token-field/styles.js +3 -3
  39. package/build/form-token-field/styles.js.map +1 -1
  40. package/build/index.native.js +0 -9
  41. package/build/index.native.js.map +1 -1
  42. package/build/input-control/styles/input-control-styles.js +30 -23
  43. package/build/input-control/styles/input-control-styles.js.map +1 -1
  44. package/build/mobile/bottom-sheet/cell.native.js +16 -8
  45. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  46. package/build/mobile/bottom-sheet/range-cell.native.js +3 -2
  47. package/build/mobile/bottom-sheet/range-cell.native.js.map +1 -1
  48. package/build/mobile/bottom-sheet/stepper-cell/index.native.js +4 -2
  49. package/build/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  50. package/build/mobile/bottom-sheet/switch-cell.native.js +8 -2
  51. package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  52. package/build/mobile/bottom-sheet-select-control/index.native.js +4 -2
  53. package/build/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  54. package/build/mobile/bottom-sheet-text-control/index.native.js +4 -2
  55. package/build/mobile/bottom-sheet-text-control/index.native.js.map +1 -1
  56. package/build/mobile/global-styles-context/index.native.js +13 -1
  57. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  58. package/build/mobile/link-picker/link-picker-results.native.js +3 -1
  59. package/build/mobile/link-picker/link-picker-results.native.js.map +1 -1
  60. package/build/navigable-container/container.js +39 -19
  61. package/build/navigable-container/container.js.map +1 -1
  62. package/build/navigable-container/index.js.map +1 -1
  63. package/build/navigable-container/menu.js +37 -5
  64. package/build/navigable-container/menu.js.map +1 -1
  65. package/build/navigable-container/tabbable.js +45 -4
  66. package/build/navigable-container/tabbable.js.map +1 -1
  67. package/build/navigable-container/types.js +6 -0
  68. package/build/navigable-container/types.js.map +1 -0
  69. package/build/palette-edit/index.js +34 -12
  70. package/build/palette-edit/index.js.map +1 -1
  71. package/build/private-apis.js +13 -1
  72. package/build/private-apis.js.map +1 -1
  73. package/build/range-control/index.native.js +5 -2
  74. package/build/range-control/index.native.js.map +1 -1
  75. package/build/sandbox/index.native.js +6 -2
  76. package/build/sandbox/index.native.js.map +1 -1
  77. package/build/slot-fill/bubbles-virtually/fill.js +2 -1
  78. package/build/slot-fill/bubbles-virtually/fill.js.map +1 -1
  79. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js +45 -35
  80. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  81. package/build/slot-fill/bubbles-virtually/use-slot.js +11 -26
  82. package/build/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  83. package/build/slot-fill/fill.js +7 -31
  84. package/build/slot-fill/fill.js.map +1 -1
  85. package/build/slot-fill/index.js.map +1 -1
  86. package/build/slot-fill/provider.js +0 -6
  87. package/build/slot-fill/provider.js.map +1 -1
  88. package/build/slot-fill/slot.js +0 -5
  89. package/build/slot-fill/slot.js.map +1 -1
  90. package/build/snackbar/list.js +0 -2
  91. package/build/snackbar/list.js.map +1 -1
  92. package/build/tab-panel/index.js.map +1 -1
  93. package/build/theme/color-algorithms.js +1 -1
  94. package/build/theme/color-algorithms.js.map +1 -1
  95. package/build/toggle-group-control/toggle-group-control/styles.js +7 -7
  96. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  97. package/build/toolbar/toolbar-button/index.js +1 -2
  98. package/build/toolbar/toolbar-button/index.js.map +1 -1
  99. package/build/toolbar/toolbar-item/index.js +4 -2
  100. package/build/toolbar/toolbar-item/index.js.map +1 -1
  101. package/build/utils/colors-values.js +3 -3
  102. package/build/utils/colors-values.js.map +1 -1
  103. package/build/utils/use-deprecated-props.js +35 -0
  104. package/build/utils/use-deprecated-props.js.map +1 -0
  105. package/build-module/autocomplete/autocompleter-ui.js +1 -3
  106. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  107. package/build-module/autocomplete/index.js +3 -3
  108. package/build-module/autocomplete/index.js.map +1 -1
  109. package/build-module/button/index.js +2 -0
  110. package/build-module/button/index.js.map +1 -1
  111. package/build-module/card/card-media/component.js +2 -1
  112. package/build-module/card/card-media/component.js.map +1 -1
  113. package/build-module/color-picker/styles.js +8 -8
  114. package/build-module/color-picker/styles.js.map +1 -1
  115. package/build-module/combobox-control/index.js +6 -5
  116. package/build-module/combobox-control/index.js.map +1 -1
  117. package/build-module/combobox-control/styles.js +3 -3
  118. package/build-module/combobox-control/styles.js.map +1 -1
  119. package/build-module/date-time/date-time/index.js +6 -81
  120. package/build-module/date-time/date-time/index.js.map +1 -1
  121. package/build-module/date-time/date-time/styles.js +3 -17
  122. package/build-module/date-time/date-time/styles.js.map +1 -1
  123. package/build-module/dimension-control/index.js +1 -1
  124. package/build-module/dimension-control/index.js.map +1 -1
  125. package/build-module/draggable/index.js +2 -7
  126. package/build-module/draggable/index.js.map +1 -1
  127. package/build-module/dropdown-menu/index.js +87 -10
  128. package/build-module/dropdown-menu/index.js.map +1 -1
  129. package/build-module/dropdown-menu/types.js +2 -0
  130. package/build-module/dropdown-menu/types.js.map +1 -0
  131. package/build-module/dropdown-menu-v2/index.js +149 -0
  132. package/build-module/dropdown-menu-v2/index.js.map +1 -0
  133. package/build-module/dropdown-menu-v2/styles.js +153 -0
  134. package/build-module/dropdown-menu-v2/styles.js.map +1 -0
  135. package/build-module/dropdown-menu-v2/types.js +2 -0
  136. package/build-module/dropdown-menu-v2/types.js.map +1 -0
  137. package/build-module/form-token-field/index.js +4 -3
  138. package/build-module/form-token-field/index.js.map +1 -1
  139. package/build-module/form-token-field/styles.js +3 -3
  140. package/build-module/form-token-field/styles.js.map +1 -1
  141. package/build-module/index.native.js +0 -1
  142. package/build-module/index.native.js.map +1 -1
  143. package/build-module/input-control/styles/input-control-styles.js +30 -23
  144. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  145. package/build-module/mobile/bottom-sheet/cell.native.js +16 -8
  146. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  147. package/build-module/mobile/bottom-sheet/range-cell.native.js +3 -2
  148. package/build-module/mobile/bottom-sheet/range-cell.native.js.map +1 -1
  149. package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js +4 -2
  150. package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  151. package/build-module/mobile/bottom-sheet/switch-cell.native.js +7 -2
  152. package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  153. package/build-module/mobile/bottom-sheet-select-control/index.native.js +4 -2
  154. package/build-module/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  155. package/build-module/mobile/bottom-sheet-text-control/index.native.js +4 -2
  156. package/build-module/mobile/bottom-sheet-text-control/index.native.js.map +1 -1
  157. package/build-module/mobile/global-styles-context/index.native.js +13 -1
  158. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  159. package/build-module/mobile/link-picker/link-picker-results.native.js +3 -1
  160. package/build-module/mobile/link-picker/link-picker-results.native.js.map +1 -1
  161. package/build-module/navigable-container/container.js +43 -19
  162. package/build-module/navigable-container/container.js.map +1 -1
  163. package/build-module/navigable-container/index.js +0 -2
  164. package/build-module/navigable-container/index.js.map +1 -1
  165. package/build-module/navigable-container/menu.js +36 -4
  166. package/build-module/navigable-container/menu.js.map +1 -1
  167. package/build-module/navigable-container/tabbable.js +44 -3
  168. package/build-module/navigable-container/tabbable.js.map +1 -1
  169. package/build-module/navigable-container/types.js +2 -0
  170. package/build-module/navigable-container/types.js.map +1 -0
  171. package/build-module/palette-edit/index.js +34 -13
  172. package/build-module/palette-edit/index.js.map +1 -1
  173. package/build-module/private-apis.js +12 -1
  174. package/build-module/private-apis.js.map +1 -1
  175. package/build-module/range-control/index.native.js +5 -2
  176. package/build-module/range-control/index.native.js.map +1 -1
  177. package/build-module/sandbox/index.native.js +6 -2
  178. package/build-module/sandbox/index.native.js.map +1 -1
  179. package/build-module/slot-fill/bubbles-virtually/fill.js +2 -1
  180. package/build-module/slot-fill/bubbles-virtually/fill.js.map +1 -1
  181. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js +46 -36
  182. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  183. package/build-module/slot-fill/bubbles-virtually/use-slot.js +12 -27
  184. package/build-module/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  185. package/build-module/slot-fill/fill.js +7 -31
  186. package/build-module/slot-fill/fill.js.map +1 -1
  187. package/build-module/slot-fill/index.js +1 -2
  188. package/build-module/slot-fill/index.js.map +1 -1
  189. package/build-module/slot-fill/provider.js +0 -6
  190. package/build-module/slot-fill/provider.js.map +1 -1
  191. package/build-module/slot-fill/slot.js +0 -5
  192. package/build-module/slot-fill/slot.js.map +1 -1
  193. package/build-module/snackbar/list.js +0 -2
  194. package/build-module/snackbar/list.js.map +1 -1
  195. package/build-module/tab-panel/index.js.map +1 -1
  196. package/build-module/theme/color-algorithms.js +1 -1
  197. package/build-module/theme/color-algorithms.js.map +1 -1
  198. package/build-module/toggle-group-control/toggle-group-control/styles.js +7 -7
  199. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  200. package/build-module/toolbar/toolbar-button/index.js +1 -2
  201. package/build-module/toolbar/toolbar-button/index.js.map +1 -1
  202. package/build-module/toolbar/toolbar-item/index.js +5 -2
  203. package/build-module/toolbar/toolbar-item/index.js.map +1 -1
  204. package/build-module/utils/colors-values.js +3 -3
  205. package/build-module/utils/colors-values.js.map +1 -1
  206. package/build-module/utils/use-deprecated-props.js +25 -0
  207. package/build-module/utils/use-deprecated-props.js.map +1 -0
  208. package/build-style/style-rtl.css +67 -67
  209. package/build-style/style.css +67 -67
  210. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  211. package/build-types/autocomplete/index.d.ts.map +1 -1
  212. package/build-types/autocomplete/types.d.ts +2 -18
  213. package/build-types/autocomplete/types.d.ts.map +1 -1
  214. package/build-types/button/deprecated.d.ts +6 -0
  215. package/build-types/button/deprecated.d.ts.map +1 -1
  216. package/build-types/button/index.d.ts.map +1 -1
  217. package/build-types/button/types.d.ts +7 -0
  218. package/build-types/button/types.d.ts.map +1 -1
  219. package/build-types/card/card-media/component.d.ts +2 -1
  220. package/build-types/card/card-media/component.d.ts.map +1 -1
  221. package/build-types/card/stories/index.d.ts +21 -1
  222. package/build-types/card/stories/index.d.ts.map +1 -1
  223. package/build-types/color-picker/styles.d.ts.map +1 -1
  224. package/build-types/combobox-control/index.d.ts +1 -1
  225. package/build-types/combobox-control/index.d.ts.map +1 -1
  226. package/build-types/combobox-control/stories/index.d.ts.map +1 -1
  227. package/build-types/combobox-control/styles.d.ts +1 -1
  228. package/build-types/combobox-control/types.d.ts +8 -1
  229. package/build-types/combobox-control/types.d.ts.map +1 -1
  230. package/build-types/date-time/date-time/index.d.ts +3 -4
  231. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  232. package/build-types/date-time/date-time/styles.d.ts +0 -4
  233. package/build-types/date-time/date-time/styles.d.ts.map +1 -1
  234. package/build-types/date-time/stories/date-time.d.ts.map +1 -1
  235. package/build-types/date-time/types.d.ts +0 -14
  236. package/build-types/date-time/types.d.ts.map +1 -1
  237. package/build-types/dimension-control/index.d.ts +1 -1
  238. package/build-types/draggable/index.d.ts.map +1 -1
  239. package/build-types/dropdown-menu/index.d.ts +83 -1
  240. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  241. package/build-types/dropdown-menu/stories/index.d.ts +13 -0
  242. package/build-types/dropdown-menu/stories/index.d.ts.map +1 -0
  243. package/build-types/dropdown-menu/test/index.d.ts +2 -0
  244. package/build-types/dropdown-menu/test/index.d.ts.map +1 -0
  245. package/build-types/dropdown-menu/types.d.ts +134 -0
  246. package/build-types/dropdown-menu/types.d.ts.map +1 -0
  247. package/build-types/dropdown-menu-v2/index.d.ts +17 -0
  248. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -0
  249. package/build-types/dropdown-menu-v2/stories/index.d.ts +13 -0
  250. package/build-types/dropdown-menu-v2/stories/index.d.ts.map +1 -0
  251. package/build-types/dropdown-menu-v2/styles.d.ts +41 -0
  252. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -0
  253. package/build-types/dropdown-menu-v2/test/index.d.ts +2 -0
  254. package/build-types/dropdown-menu-v2/test/index.d.ts.map +1 -0
  255. package/build-types/dropdown-menu-v2/types.d.ts +242 -0
  256. package/build-types/dropdown-menu-v2/types.d.ts.map +1 -0
  257. package/build-types/form-token-field/index.d.ts.map +1 -1
  258. package/build-types/form-token-field/styles.d.ts +1 -1
  259. package/build-types/form-token-field/types.d.ts +8 -1
  260. package/build-types/form-token-field/types.d.ts.map +1 -1
  261. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  262. package/build-types/navigable-container/container.d.ts +20 -1
  263. package/build-types/navigable-container/container.d.ts.map +1 -1
  264. package/build-types/navigable-container/index.d.ts +5 -2
  265. package/build-types/navigable-container/index.d.ts.map +1 -1
  266. package/build-types/navigable-container/menu.d.ts +45 -11
  267. package/build-types/navigable-container/menu.d.ts.map +1 -1
  268. package/build-types/navigable-container/stories/navigable-menu.d.ts +12 -0
  269. package/build-types/navigable-container/stories/navigable-menu.d.ts.map +1 -0
  270. package/build-types/navigable-container/stories/tabbable-container.d.ts +12 -0
  271. package/build-types/navigable-container/stories/tabbable-container.d.ts.map +1 -0
  272. package/build-types/navigable-container/tabbable.d.ts +52 -9
  273. package/build-types/navigable-container/tabbable.d.ts.map +1 -1
  274. package/build-types/navigable-container/test/navigable-menu.d.ts +2 -0
  275. package/build-types/navigable-container/test/navigable-menu.d.ts.map +1 -0
  276. package/build-types/navigable-container/test/tababble-container.d.ts +2 -0
  277. package/build-types/navigable-container/test/tababble-container.d.ts.map +1 -0
  278. package/build-types/navigable-container/types.d.ts +61 -0
  279. package/build-types/navigable-container/types.d.ts.map +1 -0
  280. package/build-types/navigator/navigator-back-button/component.d.ts +1 -0
  281. package/build-types/navigator/navigator-back-button/component.d.ts.map +1 -1
  282. package/build-types/navigator/navigator-back-button/hook.d.ts +1 -0
  283. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  284. package/build-types/navigator/navigator-button/component.d.ts +1 -0
  285. package/build-types/navigator/navigator-button/component.d.ts.map +1 -1
  286. package/build-types/navigator/navigator-button/hook.d.ts +1 -0
  287. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  288. package/build-types/navigator/navigator-to-parent-button/component.d.ts +1 -0
  289. package/build-types/navigator/navigator-to-parent-button/component.d.ts.map +1 -1
  290. package/build-types/palette-edit/index.d.ts +1 -1
  291. package/build-types/palette-edit/index.d.ts.map +1 -1
  292. package/build-types/palette-edit/stories/index.d.ts.map +1 -1
  293. package/build-types/palette-edit/types.d.ts +8 -0
  294. package/build-types/palette-edit/types.d.ts.map +1 -1
  295. package/build-types/private-apis.d.ts.map +1 -1
  296. package/build-types/slot-fill/bubbles-virtually/fill.d.ts.map +1 -1
  297. package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts.map +1 -1
  298. package/build-types/slot-fill/bubbles-virtually/use-slot.d.ts.map +1 -1
  299. package/build-types/slot-fill/fill.d.ts +4 -2
  300. package/build-types/slot-fill/fill.d.ts.map +1 -1
  301. package/build-types/slot-fill/index.d.ts +1 -2
  302. package/build-types/slot-fill/index.d.ts.map +1 -1
  303. package/build-types/slot-fill/provider.d.ts +0 -2
  304. package/build-types/slot-fill/provider.d.ts.map +1 -1
  305. package/build-types/slot-fill/slot.d.ts.map +1 -1
  306. package/build-types/snackbar/list.d.ts.map +1 -1
  307. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  308. package/build-types/toolbar/stories/index.d.ts.map +1 -1
  309. package/build-types/toolbar/toolbar-button/index.d.ts +6 -0
  310. package/build-types/toolbar/toolbar-button/index.d.ts.map +1 -1
  311. package/build-types/toolbar/toolbar-item/index.d.ts +6 -4
  312. package/build-types/toolbar/toolbar-item/index.d.ts.map +1 -1
  313. package/build-types/tree-grid/types.d.ts +7 -0
  314. package/build-types/tree-grid/types.d.ts.map +1 -1
  315. package/build-types/ui/context/get-styled-class-name-from-key.d.ts +1 -10
  316. package/build-types/ui/context/get-styled-class-name-from-key.d.ts.map +1 -1
  317. package/build-types/utils/use-deprecated-props.d.ts +9 -0
  318. package/build-types/utils/use-deprecated-props.d.ts.map +1 -0
  319. package/package.json +21 -20
  320. package/src/autocomplete/README.md +78 -52
  321. package/src/autocomplete/autocompleter-ui.tsx +0 -2
  322. package/src/autocomplete/index.tsx +1 -2
  323. package/src/autocomplete/types.ts +3 -19
  324. package/src/button/index.tsx +2 -0
  325. package/src/button/style.scss +18 -18
  326. package/src/button/types.ts +7 -0
  327. package/src/card/card-media/README.md +1 -1
  328. package/src/card/card-media/component.tsx +2 -1
  329. package/src/card/stories/index.tsx +47 -26
  330. package/src/checkbox-control/style.scss +1 -4
  331. package/src/color-picker/styles.ts +7 -2
  332. package/src/combobox-control/index.tsx +24 -18
  333. package/src/combobox-control/stories/index.tsx +0 -1
  334. package/src/combobox-control/styles.ts +4 -4
  335. package/src/combobox-control/types.ts +8 -1
  336. package/src/custom-gradient-picker/style.scss +2 -2
  337. package/src/date-time/README.md +0 -16
  338. package/src/date-time/date-time/index.tsx +17 -155
  339. package/src/date-time/date-time/styles.ts +0 -4
  340. package/src/date-time/stories/date-time.tsx +0 -4
  341. package/src/date-time/types.ts +0 -16
  342. package/src/dimension-control/index.tsx +1 -1
  343. package/src/draggable/index.tsx +1 -9
  344. package/src/dropdown-menu/README.md +12 -22
  345. package/src/dropdown-menu/{index.js → index.tsx} +111 -25
  346. package/src/dropdown-menu/stories/{index.js → index.tsx} +14 -22
  347. package/src/dropdown-menu/test/{index.js → index.tsx} +6 -5
  348. package/src/dropdown-menu/types.ts +143 -0
  349. package/src/dropdown-menu-v2/README.md +392 -0
  350. package/src/dropdown-menu-v2/index.tsx +241 -0
  351. package/src/dropdown-menu-v2/stories/index.tsx +193 -0
  352. package/src/dropdown-menu-v2/styles.ts +263 -0
  353. package/src/dropdown-menu-v2/test/index.tsx +816 -0
  354. package/src/dropdown-menu-v2/types.ts +250 -0
  355. package/src/form-toggle/style.scss +1 -5
  356. package/src/form-token-field/index.tsx +7 -3
  357. package/src/form-token-field/styles.ts +4 -4
  358. package/src/form-token-field/types.ts +8 -1
  359. package/src/index.native.js +0 -1
  360. package/src/input-control/styles/input-control-styles.tsx +7 -0
  361. package/src/mobile/bottom-sheet/cell.native.js +26 -5
  362. package/src/mobile/bottom-sheet/range-cell.native.js +2 -1
  363. package/src/mobile/bottom-sheet/stepper-cell/index.native.js +2 -0
  364. package/src/mobile/bottom-sheet/styles.native.scss +13 -1
  365. package/src/mobile/bottom-sheet/switch-cell.native.js +10 -2
  366. package/src/mobile/bottom-sheet-select-control/index.native.js +2 -0
  367. package/src/mobile/bottom-sheet-text-control/index.native.js +2 -0
  368. package/src/mobile/global-styles-context/index.native.js +12 -1
  369. package/src/mobile/link-picker/link-picker-results.native.js +3 -0
  370. package/src/modal/style.scss +1 -1
  371. package/src/navigable-container/README.md +24 -13
  372. package/src/navigable-container/{container.js → container.tsx} +57 -27
  373. package/src/navigable-container/{index.js → index.tsx} +0 -1
  374. package/src/navigable-container/menu.tsx +100 -0
  375. package/src/navigable-container/stories/{navigable-menu.js → navigable-menu.tsx} +15 -10
  376. package/src/navigable-container/stories/{tabbable-container.js → tabbable-container.tsx} +15 -6
  377. package/src/navigable-container/tabbable.tsx +92 -0
  378. package/src/navigable-container/test/{navigable-menu.js → navigable-menu.tsx} +3 -1
  379. package/src/navigable-container/test/{tababble-container.js → tababble-container.tsx} +53 -24
  380. package/src/navigable-container/types.ts +76 -0
  381. package/src/palette-edit/index.tsx +45 -7
  382. package/src/palette-edit/stories/index.tsx +4 -0
  383. package/src/palette-edit/types.ts +11 -0
  384. package/src/private-apis.ts +22 -0
  385. package/src/range-control/index.native.js +3 -0
  386. package/src/sandbox/index.native.js +4 -0
  387. package/src/search-control/style.scss +2 -0
  388. package/src/slot-fill/bubbles-virtually/fill.js +2 -1
  389. package/src/slot-fill/bubbles-virtually/slot-fill-provider.js +46 -60
  390. package/src/slot-fill/bubbles-virtually/use-slot.js +14 -41
  391. package/src/slot-fill/fill.js +4 -26
  392. package/src/slot-fill/index.js +1 -3
  393. package/src/slot-fill/provider.js +0 -6
  394. package/src/slot-fill/slot.js +0 -5
  395. package/src/snackbar/list.tsx +0 -1
  396. package/src/style.scss +6 -0
  397. package/src/tab-panel/index.tsx +1 -1
  398. package/src/theme/color-algorithms.ts +1 -1
  399. package/src/theme/stories/index.tsx +1 -1
  400. package/src/theme/test/color-algorithms.ts +2 -2
  401. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +10 -6
  402. package/src/toggle-group-control/toggle-group-control/styles.ts +6 -1
  403. package/src/toolbar/stories/index.tsx +25 -26
  404. package/src/toolbar/toolbar-button/index.tsx +10 -13
  405. package/src/toolbar/toolbar-item/{index.js → index.tsx} +12 -3
  406. package/src/tooltip/style.scss +2 -2
  407. package/src/tree-grid/README.md +18 -0
  408. package/src/tree-grid/types.ts +7 -0
  409. package/src/utils/colors-values.js +3 -3
  410. package/src/utils/theme-variables.scss +4 -4
  411. package/src/utils/use-deprecated-props.ts +29 -0
  412. package/tsconfig.json +1 -0
  413. package/tsconfig.tsbuildinfo +1 -1
  414. package/build/mobile/readable-content-view/index.native.js +0 -97
  415. package/build/mobile/readable-content-view/index.native.js.map +0 -1
  416. package/build-module/mobile/readable-content-view/index.native.js +0 -81
  417. package/build-module/mobile/readable-content-view/index.native.js.map +0 -1
  418. package/src/CONTRIBUTING.md +0 -78
  419. package/src/README.md +0 -20
  420. package/src/mobile/readable-content-view/index.native.js +0 -85
  421. package/src/mobile/readable-content-view/style.native.scss +0 -30
  422. package/src/navigable-container/menu.js +0 -62
  423. package/src/navigable-container/tabbable.js +0 -46
@@ -0,0 +1,241 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { forwardRef } from '@wordpress/element';
10
+ import { isRTL } from '@wordpress/i18n';
11
+ import { check, chevronRightSmall, lineSolid } from '@wordpress/icons';
12
+ import { SVG, Circle } from '@wordpress/primitives';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import Icon from '../icon';
18
+ import * as DropdownMenuStyled from './styles';
19
+ import type {
20
+ DropdownMenuProps,
21
+ DropdownSubMenuProps,
22
+ DropdownMenuItemProps,
23
+ DropdownMenuLabelProps,
24
+ DropdownMenuGroupProps,
25
+ DropdownMenuCheckboxItemProps,
26
+ DropdownMenuRadioGroupProps,
27
+ DropdownMenuRadioItemProps,
28
+ DropdownMenuSeparatorProps,
29
+ DropdownSubMenuTriggerProps,
30
+ } from './types';
31
+
32
+ // Menu content's side padding + 4px
33
+ const SUB_MENU_OFFSET_SIDE = 12;
34
+ // Opposite amount of the top padding of the menu item
35
+ const SUB_MENU_OFFSET_ALIGN = -8;
36
+
37
+ /**
38
+ * `DropdownMenu` displays a menu to the user (such as a set of actions
39
+ * or functions) triggered by a button.
40
+ */
41
+ export const DropdownMenu = ( {
42
+ // Root props
43
+ defaultOpen,
44
+ open,
45
+ onOpenChange,
46
+ modal = true,
47
+ // Content positioning props
48
+ side = 'bottom',
49
+ sideOffset = 0,
50
+ align = 'center',
51
+ alignOffset = 0,
52
+ // Render props
53
+ children,
54
+ trigger,
55
+ }: DropdownMenuProps ) => {
56
+ return (
57
+ <DropdownMenuPrimitive.Root
58
+ defaultOpen={ defaultOpen }
59
+ open={ open }
60
+ onOpenChange={ onOpenChange }
61
+ modal={ modal }
62
+ dir={ isRTL() ? 'rtl' : 'ltr' }
63
+ >
64
+ <DropdownMenuPrimitive.Trigger asChild>
65
+ { trigger }
66
+ </DropdownMenuPrimitive.Trigger>
67
+ <DropdownMenuPrimitive.Portal>
68
+ <DropdownMenuStyled.Content
69
+ side={ side }
70
+ align={ align }
71
+ sideOffset={ sideOffset }
72
+ alignOffset={ alignOffset }
73
+ loop={ true }
74
+ >
75
+ { children }
76
+ </DropdownMenuStyled.Content>
77
+ </DropdownMenuPrimitive.Portal>
78
+ </DropdownMenuPrimitive.Root>
79
+ );
80
+ };
81
+
82
+ export const DropdownSubMenuTrigger = ( {
83
+ prefix,
84
+ suffix = (
85
+ <DropdownMenuStyled.SubmenuRtlChevronIcon
86
+ icon={ chevronRightSmall }
87
+ size={ 24 }
88
+ />
89
+ ),
90
+ children,
91
+ }: DropdownSubMenuTriggerProps ) => {
92
+ return (
93
+ <>
94
+ { prefix && (
95
+ <DropdownMenuStyled.ItemPrefixWrapper>
96
+ { prefix }
97
+ </DropdownMenuStyled.ItemPrefixWrapper>
98
+ ) }
99
+ { children }
100
+ { suffix && (
101
+ <DropdownMenuStyled.ItemSuffixWrapper>
102
+ { suffix }
103
+ </DropdownMenuStyled.ItemSuffixWrapper>
104
+ ) }
105
+ </>
106
+ );
107
+ };
108
+
109
+ export const DropdownSubMenu = ( {
110
+ // Sub props
111
+ defaultOpen,
112
+ open,
113
+ onOpenChange,
114
+ // Sub trigger props
115
+ disabled,
116
+ textValue,
117
+ // Render props
118
+ children,
119
+ trigger,
120
+ }: DropdownSubMenuProps ) => {
121
+ return (
122
+ <DropdownMenuPrimitive.Sub
123
+ defaultOpen={ defaultOpen }
124
+ open={ open }
125
+ onOpenChange={ onOpenChange }
126
+ >
127
+ <DropdownMenuStyled.SubTrigger
128
+ disabled={ disabled }
129
+ textValue={ textValue }
130
+ >
131
+ { trigger }
132
+ </DropdownMenuStyled.SubTrigger>
133
+ <DropdownMenuPrimitive.Portal>
134
+ <DropdownMenuStyled.SubContent
135
+ loop
136
+ sideOffset={ SUB_MENU_OFFSET_SIDE }
137
+ alignOffset={ SUB_MENU_OFFSET_ALIGN }
138
+ >
139
+ { children }
140
+ </DropdownMenuStyled.SubContent>
141
+ </DropdownMenuPrimitive.Portal>
142
+ </DropdownMenuPrimitive.Sub>
143
+ );
144
+ };
145
+
146
+ export const DropdownMenuLabel = ( props: DropdownMenuLabelProps ) => (
147
+ <DropdownMenuStyled.Label { ...props } />
148
+ );
149
+
150
+ export const DropdownMenuGroup = ( props: DropdownMenuGroupProps ) => (
151
+ <DropdownMenuPrimitive.Group { ...props } />
152
+ );
153
+
154
+ export const DropdownMenuItem = forwardRef(
155
+ (
156
+ { children, prefix, suffix, ...props }: DropdownMenuItemProps,
157
+ forwardedRef: React.ForwardedRef< any >
158
+ ) => {
159
+ return (
160
+ <DropdownMenuStyled.Item { ...props } ref={ forwardedRef }>
161
+ { prefix && (
162
+ <DropdownMenuStyled.ItemPrefixWrapper>
163
+ { prefix }
164
+ </DropdownMenuStyled.ItemPrefixWrapper>
165
+ ) }
166
+ { children }
167
+ { suffix && (
168
+ <DropdownMenuStyled.ItemSuffixWrapper>
169
+ { suffix }
170
+ </DropdownMenuStyled.ItemSuffixWrapper>
171
+ ) }
172
+ </DropdownMenuStyled.Item>
173
+ );
174
+ }
175
+ );
176
+
177
+ export const DropdownMenuCheckboxItem = ( {
178
+ children,
179
+ checked = false,
180
+ suffix,
181
+ ...props
182
+ }: DropdownMenuCheckboxItemProps ) => {
183
+ return (
184
+ <DropdownMenuStyled.CheckboxItem { ...props } checked={ checked }>
185
+ <DropdownMenuStyled.ItemPrefixWrapper>
186
+ <DropdownMenuStyled.ItemIndicator>
187
+ { ( checked === 'indeterminate' || checked === true ) && (
188
+ <Icon
189
+ icon={
190
+ checked === 'indeterminate' ? lineSolid : check
191
+ }
192
+ size={ 24 }
193
+ />
194
+ ) }
195
+ </DropdownMenuStyled.ItemIndicator>
196
+ </DropdownMenuStyled.ItemPrefixWrapper>
197
+ { children }
198
+ { suffix && (
199
+ <DropdownMenuStyled.ItemSuffixWrapper>
200
+ { suffix }
201
+ </DropdownMenuStyled.ItemSuffixWrapper>
202
+ ) }
203
+ </DropdownMenuStyled.CheckboxItem>
204
+ );
205
+ };
206
+
207
+ export const DropdownMenuRadioGroup = (
208
+ props: DropdownMenuRadioGroupProps
209
+ ) => <DropdownMenuPrimitive.RadioGroup { ...props } />;
210
+
211
+ const radioDot = (
212
+ <SVG viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
213
+ <Circle cx={ 12 } cy={ 12 } r={ 3 } fill="currentColor"></Circle>
214
+ </SVG>
215
+ );
216
+
217
+ export const DropdownMenuRadioItem = ( {
218
+ children,
219
+ suffix,
220
+ ...props
221
+ }: DropdownMenuRadioItemProps ) => {
222
+ return (
223
+ <DropdownMenuStyled.RadioItem { ...props }>
224
+ <DropdownMenuStyled.ItemPrefixWrapper>
225
+ <DropdownMenuStyled.ItemIndicator>
226
+ <Icon icon={ radioDot } size={ 22 } />
227
+ </DropdownMenuStyled.ItemIndicator>
228
+ </DropdownMenuStyled.ItemPrefixWrapper>
229
+ { children }
230
+ { suffix && (
231
+ <DropdownMenuStyled.ItemSuffixWrapper>
232
+ { suffix }
233
+ </DropdownMenuStyled.ItemSuffixWrapper>
234
+ ) }
235
+ </DropdownMenuStyled.RadioItem>
236
+ );
237
+ };
238
+
239
+ export const DropdownMenuSeparator = ( props: DropdownMenuSeparatorProps ) => (
240
+ <DropdownMenuStyled.Separator { ...props } />
241
+ );
@@ -0,0 +1,193 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+ import styled from '@emotion/styled';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import {
11
+ DropdownMenu,
12
+ DropdownMenuItem,
13
+ DropdownSubMenu,
14
+ DropdownMenuSeparator,
15
+ DropdownMenuCheckboxItem,
16
+ DropdownMenuGroup,
17
+ DropdownMenuLabel,
18
+ DropdownMenuRadioGroup,
19
+ DropdownMenuRadioItem,
20
+ DropdownSubMenuTrigger,
21
+ } from '..';
22
+ import Button from '../../button';
23
+
24
+ /**
25
+ * WordPress dependencies
26
+ */
27
+ import { useState } from '@wordpress/element';
28
+ import { menu, wordpress } from '@wordpress/icons';
29
+
30
+ /**
31
+ * Internal dependencies
32
+ */
33
+ import Icon from '../../icon';
34
+
35
+ const meta: ComponentMeta< typeof DropdownMenu > = {
36
+ title: 'Components (Experimental)/DropdownMenu v2',
37
+ component: DropdownMenu,
38
+ subcomponents: {
39
+ DropdownMenuItem,
40
+ DropdownSubMenu,
41
+ DropdownSubMenuTrigger,
42
+ DropdownMenuSeparator,
43
+ DropdownMenuCheckboxItem,
44
+ DropdownMenuGroup,
45
+ DropdownMenuLabel,
46
+ DropdownMenuRadioGroup,
47
+ DropdownMenuRadioItem,
48
+ },
49
+ argTypes: {
50
+ children: { control: { type: null } },
51
+ trigger: { control: { type: null } },
52
+ },
53
+ parameters: {
54
+ actions: { argTypesRegex: '^on.*' },
55
+ controls: { expanded: true },
56
+ docs: { source: { state: 'open', excludeDecorators: true } },
57
+ },
58
+ decorators: [
59
+ // Layout wrapper
60
+ ( Story ) => (
61
+ <div
62
+ style={ {
63
+ minHeight: '300px',
64
+ } }
65
+ >
66
+ <Story />
67
+ </div>
68
+ ),
69
+ ],
70
+ };
71
+ export default meta;
72
+
73
+ const ItemHelpText = styled.span`
74
+ font-size: 10px;
75
+ color: #777;
76
+
77
+ /* "> * > &" syntax is to target only immediate parent menu item */
78
+ [data-highlighted] > * > &,
79
+ [data-state='open'] > * > &,
80
+ [data-disabled] > * & {
81
+ color: inherit;
82
+ }
83
+ `;
84
+
85
+ const CheckboxItemsGroup = () => {
86
+ const [ itemOneChecked, setItemOneChecked ] = useState( true );
87
+ const [ itemTwoChecked, setItemTwoChecked ] = useState( false );
88
+
89
+ return (
90
+ <DropdownMenuGroup>
91
+ <DropdownMenuLabel>Checkbox group label</DropdownMenuLabel>
92
+ <DropdownMenuCheckboxItem
93
+ checked={ itemOneChecked }
94
+ onCheckedChange={ setItemOneChecked }
95
+ suffix={ <span>⌘+B</span> }
96
+ >
97
+ Checkbox item one
98
+ </DropdownMenuCheckboxItem>
99
+
100
+ <DropdownMenuCheckboxItem
101
+ checked={ itemTwoChecked }
102
+ onCheckedChange={ setItemTwoChecked }
103
+ >
104
+ Checkbox item two
105
+ </DropdownMenuCheckboxItem>
106
+ </DropdownMenuGroup>
107
+ );
108
+ };
109
+
110
+ const RadioItemsGroup = () => {
111
+ const [ radioValue, setRadioValue ] = useState( 'radio-one' );
112
+
113
+ return (
114
+ <DropdownMenuRadioGroup
115
+ value={ radioValue }
116
+ onValueChange={ setRadioValue }
117
+ >
118
+ <DropdownMenuLabel>Radio group label</DropdownMenuLabel>
119
+ <DropdownMenuRadioItem value="radio-one">
120
+ Radio item one
121
+ </DropdownMenuRadioItem>
122
+ <DropdownMenuRadioItem value="radio-two">
123
+ Radio item two
124
+ </DropdownMenuRadioItem>
125
+ </DropdownMenuRadioGroup>
126
+ );
127
+ };
128
+
129
+ const Template: ComponentStory< typeof DropdownMenu > = ( props ) => (
130
+ <DropdownMenu { ...props } />
131
+ );
132
+ export const Default = Template.bind( {} );
133
+ Default.args = {
134
+ trigger: <Button __next40pxDefaultSize label="Open menu" icon={ menu } />,
135
+ sideOffset: 12,
136
+ children: (
137
+ <>
138
+ <DropdownMenuGroup>
139
+ <DropdownMenuItem>Menu item</DropdownMenuItem>
140
+ <DropdownMenuItem
141
+ prefix={ <Icon icon={ wordpress } size={ 18 } /> }
142
+ >
143
+ Menu item with prefix
144
+ </DropdownMenuItem>
145
+ <DropdownMenuItem suffix={ <span>⌥⌘T</span> }>
146
+ Menu item with suffix
147
+ </DropdownMenuItem>
148
+ <DropdownMenuItem disabled>Disabled menu item</DropdownMenuItem>
149
+ <DropdownSubMenu
150
+ trigger={
151
+ <DropdownSubMenuTrigger>Submenu</DropdownSubMenuTrigger>
152
+ }
153
+ >
154
+ <DropdownMenuItem suffix={ <span>⌘+S</span> }>
155
+ Submenu item with suffix
156
+ </DropdownMenuItem>
157
+ <DropdownMenuItem>
158
+ <div
159
+ style={ {
160
+ display: 'inline-flex',
161
+ flexDirection: 'column',
162
+ } }
163
+ >
164
+ Submenu item
165
+ <ItemHelpText>
166
+ With additional custom text
167
+ </ItemHelpText>
168
+ </div>
169
+ </DropdownMenuItem>
170
+ <DropdownMenuSeparator />
171
+ <DropdownSubMenu
172
+ trigger={
173
+ <DropdownSubMenuTrigger>
174
+ Second level submenu
175
+ </DropdownSubMenuTrigger>
176
+ }
177
+ >
178
+ <DropdownMenuItem>Submenu item</DropdownMenuItem>
179
+ <DropdownMenuItem>Submenu item</DropdownMenuItem>
180
+ </DropdownSubMenu>
181
+ </DropdownSubMenu>
182
+ </DropdownMenuGroup>
183
+
184
+ <DropdownMenuSeparator />
185
+
186
+ <CheckboxItemsGroup />
187
+
188
+ <DropdownMenuSeparator />
189
+
190
+ <RadioItemsGroup />
191
+ </>
192
+ ),
193
+ };
@@ -0,0 +1,263 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import styled from '@emotion/styled';
5
+ import { css, keyframes } from '@emotion/react';
6
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { COLORS, font, rtl } from '../utils';
12
+ import { space } from '../ui/utils/space';
13
+ import Icon from '../icon';
14
+
15
+ const ANIMATION_PARAMS = {
16
+ SLIDE_AMOUNT: '2px',
17
+ DURATION: '400ms',
18
+ EASING: 'cubic-bezier( 0.16, 1, 0.3, 1 )',
19
+ };
20
+
21
+ const ITEM_PREFIX_WIDTH = space( 7 );
22
+ const ITEM_PADDING_INLINE_START = space( 2 );
23
+ const ITEM_PADDING_INLINE_END = space( 2.5 );
24
+
25
+ const slideUpAndFade = keyframes( {
26
+ '0%': {
27
+ opacity: 0,
28
+ transform: `translateY(${ ANIMATION_PARAMS.SLIDE_AMOUNT })`,
29
+ },
30
+ '100%': { opacity: 1, transform: 'translateY(0)' },
31
+ } );
32
+
33
+ const slideRightAndFade = keyframes( {
34
+ '0%': {
35
+ opacity: 0,
36
+ transform: `translateX(-${ ANIMATION_PARAMS.SLIDE_AMOUNT })`,
37
+ },
38
+ '100%': { opacity: 1, transform: 'translateX(0)' },
39
+ } );
40
+
41
+ const slideDownAndFade = keyframes( {
42
+ '0%': {
43
+ opacity: 0,
44
+ transform: `translateY(-${ ANIMATION_PARAMS.SLIDE_AMOUNT })`,
45
+ },
46
+ '100%': { opacity: 1, transform: 'translateY(0)' },
47
+ } );
48
+
49
+ const slideLeftAndFade = keyframes( {
50
+ '0%': {
51
+ opacity: 0,
52
+ transform: `translateX(${ ANIMATION_PARAMS.SLIDE_AMOUNT })`,
53
+ },
54
+ '100%': { opacity: 1, transform: 'translateX(0)' },
55
+ } );
56
+
57
+ const baseContent = css`
58
+ min-width: 220px;
59
+ background-color: ${ COLORS.ui.background };
60
+ border-radius: 6px;
61
+ padding: ${ space( 2 ) };
62
+ box-shadow: 0.1px 4px 16.4px -0.5px rgba( 0, 0, 0, 0.1 ),
63
+ 0px 5.5px 7.8px -0.3px rgba( 0, 0, 0, 0.1 ),
64
+ 0px 2.7px 3.8px -0.2px rgba( 0, 0, 0, 0.1 ),
65
+ 0px 0.7px 1px rgba( 0, 0, 0, 0.1 );
66
+ animation-duration: ${ ANIMATION_PARAMS.DURATION };
67
+ animation-timing-function: ${ ANIMATION_PARAMS.EASING };
68
+ will-change: transform, opacity;
69
+
70
+ &[data-side='top'] {
71
+ animation-name: ${ slideDownAndFade };
72
+ }
73
+
74
+ &[data-side='right'] {
75
+ animation-name: ${ slideLeftAndFade };
76
+ }
77
+
78
+ &[data-side='bottom'] {
79
+ animation-name: ${ slideUpAndFade };
80
+ }
81
+
82
+ &[data-side='left'] {
83
+ animation-name: ${ slideRightAndFade };
84
+ }
85
+
86
+ @media ( prefers-reduced-motion ) {
87
+ animation-duration: 0s;
88
+ }
89
+ `;
90
+
91
+ const itemPrefix = css`
92
+ width: ${ ITEM_PREFIX_WIDTH };
93
+ display: inline-flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ /* Prefixes don't get affected by the item's inline start padding */
97
+ margin-inline-start: calc( -1 * ${ ITEM_PADDING_INLINE_START } );
98
+ /*
99
+ Negative margin allows the suffix to be as tall as the whole item
100
+ (incl. padding) before increasing the items' height. This can be useful,
101
+ e.g., when using icons that are bigger than 20x20 px
102
+ */
103
+ margin-top: ${ space( -2 ) };
104
+ margin-bottom: ${ space( -2 ) };
105
+ `;
106
+
107
+ const itemSuffix = css`
108
+ width: max-content;
109
+ display: inline-flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ /* Push prefix to the inline-end of the item */
113
+ margin-inline-start: auto;
114
+ /* Minimum space between the item's content and suffix */
115
+ padding-inline-start: ${ space( 6 ) };
116
+ /*
117
+ Negative margin allows the suffix to be as tall as the whole item
118
+ (incl. padding) before increasing the items' height. This can be useful,
119
+ e.g., when using icons that are bigger than 20x20 px
120
+ */
121
+ margin-top: ${ space( -2 ) };
122
+ margin-bottom: ${ space( -2 ) };
123
+
124
+ /*
125
+ Override color in normal conditions, but inherit the item's color
126
+ for altered conditions.
127
+
128
+ TODO:
129
+ - For now, used opacity like for disabled item, which makes it work
130
+ regardless of the theme
131
+ - how do we translate this for themes? Should we have a new variable
132
+ for "secondary" text?
133
+ */
134
+ opacity: 0.6;
135
+
136
+ [data-highlighted] > &,
137
+ [data-state='open'] > &,
138
+ [data-disabled] > & {
139
+ opacity: 1;
140
+ }
141
+ `;
142
+
143
+ export const ItemPrefixWrapper = styled.span`
144
+ ${ itemPrefix }
145
+ `;
146
+
147
+ export const ItemSuffixWrapper = styled.span`
148
+ ${ itemSuffix }
149
+ `;
150
+
151
+ const baseItem = css`
152
+ all: unset;
153
+ font-size: ${ font( 'default.fontSize' ) };
154
+ font-family: inherit;
155
+ font-weight: normal;
156
+ line-height: 20px;
157
+ color: ${ COLORS.gray[ 900 ] };
158
+ border-radius: 3px;
159
+ display: flex;
160
+ align-items: center;
161
+ padding: ${ space( 2 ) } ${ ITEM_PADDING_INLINE_END } ${ space( 2 ) }
162
+ ${ ITEM_PADDING_INLINE_START };
163
+ position: relative;
164
+ user-select: none;
165
+ outline: none;
166
+
167
+ &[data-disabled] {
168
+ /*
169
+ TODO:
170
+ - we need a disabled color in the Theme variables
171
+ - design specs use opacity instead of setting a new text color
172
+ */
173
+ opacity: 0.5;
174
+ pointer-events: none;
175
+ }
176
+
177
+ &[data-highlighted] {
178
+ /*
179
+ TODO: reconcile with global focus styles
180
+ (incl high contrast mode fallbacks)
181
+ */
182
+
183
+ background-color: ${ COLORS.ui.theme };
184
+ color: white;
185
+ }
186
+
187
+ svg {
188
+ fill: currentColor;
189
+ }
190
+
191
+ &:not( :has( ${ ItemPrefixWrapper } ) ) {
192
+ padding-inline-start: ${ ITEM_PREFIX_WIDTH };
193
+ }
194
+ `;
195
+
196
+ export const Content = styled( DropdownMenu.Content )`
197
+ ${ baseContent }
198
+ `;
199
+ export const SubContent = styled( DropdownMenu.SubContent )`
200
+ ${ baseContent }
201
+ `;
202
+
203
+ export const Item = styled( DropdownMenu.Item )`
204
+ ${ baseItem }
205
+ `;
206
+ export const CheckboxItem = styled( DropdownMenu.CheckboxItem )`
207
+ ${ baseItem }
208
+ `;
209
+ export const RadioItem = styled( DropdownMenu.RadioItem )`
210
+ ${ baseItem }
211
+ `;
212
+ export const SubTrigger = styled( DropdownMenu.SubTrigger )`
213
+ &[data-state='open']:not( [data-highlighted] ) {
214
+ /* TODO: use variable */
215
+ background-color: rgba( 56, 88, 233, 0.04 );
216
+ color: ${ COLORS.ui.theme };
217
+ }
218
+
219
+ ${ baseItem }
220
+ `;
221
+
222
+ export const Label = styled( DropdownMenu.Label )`
223
+ box-sizing: border-box;
224
+ display: flex;
225
+ align-items: center;
226
+ min-height: ${ space( 8 ) };
227
+
228
+ padding: ${ space( 2 ) } ${ ITEM_PADDING_INLINE_END } ${ space( 2 ) }
229
+ ${ ITEM_PREFIX_WIDTH };
230
+ /* TODO: color doesn't match available UI variables */
231
+ color: ${ COLORS.gray[ 700 ] };
232
+
233
+ /* TODO: font size doesn't match available ones via "font" utils */
234
+ font-size: 11px;
235
+ line-height: 1.4;
236
+ font-weight: 500;
237
+ text-transform: uppercase;
238
+ `;
239
+
240
+ export const Separator = styled( DropdownMenu.Separator )`
241
+ height: 1px;
242
+ /* TODO: doesn't match border color from variables */
243
+ background-color: ${ COLORS.ui.borderDisabled };
244
+ /* Negative horizontal margin to make separator go from side to side */
245
+ margin: ${ space( 2 ) } 0;
246
+ `;
247
+
248
+ export const ItemIndicator = styled( DropdownMenu.ItemIndicator )`
249
+ display: inline-flex;
250
+ align-items: center;
251
+ justify-content: center;
252
+ `;
253
+
254
+ export const SubmenuRtlChevronIcon = styled( Icon )`
255
+ ${ rtl(
256
+ {
257
+ transform: `scaleX(1) translateX(${ space( 2 ) })`,
258
+ },
259
+ {
260
+ transform: `scaleX(-1) translateX(${ space( 2 ) })`,
261
+ }
262
+ )() }
263
+ `;