@wordpress/components 29.0.0 → 29.1.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 (469) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/LICENSE.md +1 -1
  3. package/build/badge/index.js +64 -0
  4. package/build/badge/index.js.map +1 -0
  5. package/build/badge/types.js +6 -0
  6. package/build/badge/types.js.map +1 -0
  7. package/build/box-control/index.js +5 -1
  8. package/build/box-control/index.js.map +1 -1
  9. package/build/box-control/input-control.js +90 -29
  10. package/build/box-control/input-control.js.map +1 -1
  11. package/build/box-control/types.js.map +1 -1
  12. package/build/box-control/utils.js +50 -0
  13. package/build/box-control/utils.js.map +1 -1
  14. package/build/button-group/index.js +10 -0
  15. package/build/button-group/index.js.map +1 -1
  16. package/build/button-group/types.js.map +1 -1
  17. package/build/custom-select-control/index.js +3 -5
  18. package/build/custom-select-control/index.js.map +1 -1
  19. package/build/custom-select-control-v2/custom-select.js +2 -3
  20. package/build/custom-select-control-v2/custom-select.js.map +1 -1
  21. package/build/date-time/date/index.js +1 -0
  22. package/build/date-time/date/index.js.map +1 -1
  23. package/build/dimension-control/index.js +1 -0
  24. package/build/dimension-control/index.js.map +1 -1
  25. package/build/font-size-picker/styles.js +9 -9
  26. package/build/font-size-picker/styles.js.map +1 -1
  27. package/build/heading/hook.js +1 -1
  28. package/build/heading/hook.js.map +1 -1
  29. package/build/input-control/index.js +9 -0
  30. package/build/input-control/index.js.map +1 -1
  31. package/build/input-control/types.js.map +1 -1
  32. package/build/menu/checkbox-item.js +2 -0
  33. package/build/menu/checkbox-item.js.map +1 -1
  34. package/build/menu/index.js +25 -94
  35. package/build/menu/index.js.map +1 -1
  36. package/build/menu/item.js +10 -1
  37. package/build/menu/item.js.map +1 -1
  38. package/build/menu/popover.js +89 -0
  39. package/build/menu/popover.js.map +1 -0
  40. package/build/menu/radio-item.js +2 -0
  41. package/build/menu/radio-item.js.map +1 -1
  42. package/build/menu/submenu-trigger-item.js +58 -0
  43. package/build/menu/submenu-trigger-item.js.map +1 -0
  44. package/build/menu/trigger-button.js +45 -0
  45. package/build/menu/trigger-button.js.map +1 -0
  46. package/build/menu/types.js.map +1 -1
  47. package/build/navigation/back-button/index.js +1 -0
  48. package/build/navigation/back-button/index.js.map +1 -1
  49. package/build/navigation/index.js +6 -0
  50. package/build/navigation/index.js.map +1 -1
  51. package/build/navigation/item/index.js +1 -0
  52. package/build/navigation/item/index.js.map +1 -1
  53. package/build/number-control/index.js +1 -0
  54. package/build/number-control/index.js.map +1 -1
  55. package/build/palette-edit/index.js +1 -0
  56. package/build/palette-edit/index.js.map +1 -1
  57. package/build/private-apis.js +3 -1
  58. package/build/private-apis.js.map +1 -1
  59. package/build/radio-group/index.js +6 -0
  60. package/build/radio-group/index.js.map +1 -1
  61. package/build/radio-group/radio.js +2 -3
  62. package/build/radio-group/radio.js.map +1 -1
  63. package/build/range-control/styles/range-control-styles.js +28 -28
  64. package/build/range-control/styles/range-control-styles.js.map +1 -1
  65. package/build/select-control/index.js +9 -0
  66. package/build/select-control/index.js.map +1 -1
  67. package/build/select-control/types.js.map +1 -1
  68. package/build/slot-fill/context.js +4 -3
  69. package/build/slot-fill/context.js.map +1 -1
  70. package/build/slot-fill/fill.js +10 -15
  71. package/build/slot-fill/fill.js.map +1 -1
  72. package/build/slot-fill/provider.js +41 -55
  73. package/build/slot-fill/provider.js.map +1 -1
  74. package/build/slot-fill/slot.js +31 -23
  75. package/build/slot-fill/slot.js.map +1 -1
  76. package/build/slot-fill/types.js.map +1 -1
  77. package/build/tab-panel/index.js +2 -3
  78. package/build/tab-panel/index.js.map +1 -1
  79. package/build/tabs/index.js +21 -4
  80. package/build/tabs/index.js.map +1 -1
  81. package/build/tabs/types.js.map +1 -1
  82. package/build/text/hook.js +6 -6
  83. package/build/text/hook.js.map +1 -1
  84. package/build/text/styles.js +7 -7
  85. package/build/text/styles.js.map +1 -1
  86. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +2 -3
  87. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  88. package/build/tooltip/index.js +2 -3
  89. package/build/tooltip/index.js.map +1 -1
  90. package/build/tree-select/index.js +10 -2
  91. package/build/tree-select/index.js.map +1 -1
  92. package/build/tree-select/types.js.map +1 -1
  93. package/build-module/badge/index.js +57 -0
  94. package/build-module/badge/index.js.map +1 -0
  95. package/build-module/badge/types.js +2 -0
  96. package/build-module/badge/types.js.map +1 -0
  97. package/build-module/box-control/index.js +5 -1
  98. package/build-module/box-control/index.js.map +1 -1
  99. package/build-module/box-control/input-control.js +92 -31
  100. package/build-module/box-control/input-control.js.map +1 -1
  101. package/build-module/box-control/types.js.map +1 -1
  102. package/build-module/box-control/utils.js +47 -0
  103. package/build-module/box-control/utils.js.map +1 -1
  104. package/build-module/button-group/index.js +10 -0
  105. package/build-module/button-group/index.js.map +1 -1
  106. package/build-module/button-group/types.js.map +1 -1
  107. package/build-module/custom-select-control/index.js +3 -5
  108. package/build-module/custom-select-control/index.js.map +1 -1
  109. package/build-module/custom-select-control-v2/custom-select.js +1 -2
  110. package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
  111. package/build-module/date-time/date/index.js +1 -0
  112. package/build-module/date-time/date/index.js.map +1 -1
  113. package/build-module/dimension-control/index.js +1 -0
  114. package/build-module/dimension-control/index.js.map +1 -1
  115. package/build-module/font-size-picker/styles.js +9 -9
  116. package/build-module/font-size-picker/styles.js.map +1 -1
  117. package/build-module/heading/hook.js +1 -1
  118. package/build-module/heading/hook.js.map +1 -1
  119. package/build-module/input-control/index.js +9 -0
  120. package/build-module/input-control/index.js.map +1 -1
  121. package/build-module/input-control/types.js.map +1 -1
  122. package/build-module/menu/checkbox-item.js +2 -0
  123. package/build-module/menu/checkbox-item.js.map +1 -1
  124. package/build-module/menu/index.js +28 -97
  125. package/build-module/menu/index.js.map +1 -1
  126. package/build-module/menu/item.js +10 -1
  127. package/build-module/menu/item.js.map +1 -1
  128. package/build-module/menu/popover.js +81 -0
  129. package/build-module/menu/popover.js.map +1 -0
  130. package/build-module/menu/radio-item.js +2 -0
  131. package/build-module/menu/radio-item.js.map +1 -1
  132. package/build-module/menu/submenu-trigger-item.js +50 -0
  133. package/build-module/menu/submenu-trigger-item.js.map +1 -0
  134. package/build-module/menu/trigger-button.js +37 -0
  135. package/build-module/menu/trigger-button.js.map +1 -0
  136. package/build-module/menu/types.js.map +1 -1
  137. package/build-module/navigation/back-button/index.js +1 -0
  138. package/build-module/navigation/back-button/index.js.map +1 -1
  139. package/build-module/navigation/index.js +6 -0
  140. package/build-module/navigation/index.js.map +1 -1
  141. package/build-module/navigation/item/index.js +1 -0
  142. package/build-module/navigation/item/index.js.map +1 -1
  143. package/build-module/number-control/index.js +1 -0
  144. package/build-module/number-control/index.js.map +1 -1
  145. package/build-module/palette-edit/index.js +1 -0
  146. package/build-module/palette-edit/index.js.map +1 -1
  147. package/build-module/private-apis.js +3 -1
  148. package/build-module/private-apis.js.map +1 -1
  149. package/build-module/radio-group/index.js +6 -0
  150. package/build-module/radio-group/index.js.map +1 -1
  151. package/build-module/radio-group/radio.js +1 -2
  152. package/build-module/radio-group/radio.js.map +1 -1
  153. package/build-module/range-control/styles/range-control-styles.js +28 -28
  154. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  155. package/build-module/select-control/index.js +9 -0
  156. package/build-module/select-control/index.js.map +1 -1
  157. package/build-module/select-control/types.js.map +1 -1
  158. package/build-module/slot-fill/context.js +5 -3
  159. package/build-module/slot-fill/context.js.map +1 -1
  160. package/build-module/slot-fill/fill.js +10 -15
  161. package/build-module/slot-fill/fill.js.map +1 -1
  162. package/build-module/slot-fill/provider.js +41 -55
  163. package/build-module/slot-fill/provider.js.map +1 -1
  164. package/build-module/slot-fill/slot.js +32 -24
  165. package/build-module/slot-fill/slot.js.map +1 -1
  166. package/build-module/slot-fill/types.js.map +1 -1
  167. package/build-module/tab-panel/index.js +1 -2
  168. package/build-module/tab-panel/index.js.map +1 -1
  169. package/build-module/tabs/index.js +21 -4
  170. package/build-module/tabs/index.js.map +1 -1
  171. package/build-module/tabs/types.js.map +1 -1
  172. package/build-module/text/hook.js +6 -6
  173. package/build-module/text/hook.js.map +1 -1
  174. package/build-module/text/styles.js +7 -7
  175. package/build-module/text/styles.js.map +1 -1
  176. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +1 -2
  177. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  178. package/build-module/tooltip/index.js +1 -2
  179. package/build-module/tooltip/index.js.map +1 -1
  180. package/build-module/tree-select/index.js +10 -2
  181. package/build-module/tree-select/index.js.map +1 -1
  182. package/build-module/tree-select/types.js.map +1 -1
  183. package/build-style/style-rtl.css +60 -13
  184. package/build-style/style.css +60 -13
  185. package/build-types/alignment-matrix-control/stories/index.story.d.ts +1 -1
  186. package/build-types/alignment-matrix-control/stories/index.story.d.ts.map +1 -1
  187. package/build-types/angle-picker-control/stories/index.story.d.ts +1 -1
  188. package/build-types/animate/stories/index.story.d.ts +7 -7
  189. package/build-types/animate/stories/index.story.d.ts.map +1 -1
  190. package/build-types/badge/index.d.ts +8 -0
  191. package/build-types/badge/index.d.ts.map +1 -0
  192. package/build-types/badge/stories/index.story.d.ts +17 -0
  193. package/build-types/badge/stories/index.story.d.ts.map +1 -0
  194. package/build-types/badge/test/index.d.ts +2 -0
  195. package/build-types/badge/test/index.d.ts.map +1 -0
  196. package/build-types/badge/types.d.ts +13 -0
  197. package/build-types/badge/types.d.ts.map +1 -0
  198. package/build-types/base-control/stories/index.story.d.ts +1 -1
  199. package/build-types/border-box-control/stories/index.story.d.ts +1 -1
  200. package/build-types/border-control/stories/index.story.d.ts +5 -5
  201. package/build-types/box-control/index.d.ts +1 -1
  202. package/build-types/box-control/index.d.ts.map +1 -1
  203. package/build-types/box-control/input-control.d.ts +1 -1
  204. package/build-types/box-control/input-control.d.ts.map +1 -1
  205. package/build-types/box-control/stories/index.story.d.ts +356 -11
  206. package/build-types/box-control/stories/index.story.d.ts.map +1 -1
  207. package/build-types/box-control/styles/box-control-styles.d.ts +2 -2
  208. package/build-types/box-control/types.d.ts +17 -0
  209. package/build-types/box-control/types.d.ts.map +1 -1
  210. package/build-types/box-control/utils.d.ts +27 -1
  211. package/build-types/box-control/utils.d.ts.map +1 -1
  212. package/build-types/button/stories/e2e/index.story.d.ts +1 -1
  213. package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
  214. package/build-types/button/stories/index.story.d.ts +7 -7
  215. package/build-types/button/stories/index.story.d.ts.map +1 -1
  216. package/build-types/button-group/index.d.ts +3 -1
  217. package/build-types/button-group/index.d.ts.map +1 -1
  218. package/build-types/button-group/stories/index.story.d.ts +6 -0
  219. package/build-types/button-group/stories/index.story.d.ts.map +1 -1
  220. package/build-types/button-group/types.d.ts +7 -0
  221. package/build-types/button-group/types.d.ts.map +1 -1
  222. package/build-types/circular-option-picker/stories/index.story.d.ts +5 -5
  223. package/build-types/circular-option-picker/stories/index.story.d.ts.map +1 -1
  224. package/build-types/color-palette/stories/index.story.d.ts +3 -3
  225. package/build-types/color-palette/stories/index.story.d.ts.map +1 -1
  226. package/build-types/color-picker/styles.d.ts +2 -2
  227. package/build-types/color-picker/styles.d.ts.map +1 -1
  228. package/build-types/combobox-control/stories/index.story.d.ts +4 -4
  229. package/build-types/confirm-dialog/stories/index.story.d.ts +2 -2
  230. package/build-types/confirm-dialog/stories/index.story.d.ts.map +1 -1
  231. package/build-types/custom-gradient-picker/stories/index.story.d.ts +1 -1
  232. package/build-types/custom-gradient-picker/stories/index.story.d.ts.map +1 -1
  233. package/build-types/custom-select-control/stories/index.story.d.ts +3 -3
  234. package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
  235. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  236. package/build-types/custom-select-control-v2/stories/index.story.d.ts +3 -3
  237. package/build-types/custom-select-control-v2/stories/index.story.d.ts.map +1 -1
  238. package/build-types/date-time/date/index.d.ts.map +1 -1
  239. package/build-types/date-time/stories/time.story.d.ts +1 -1
  240. package/build-types/date-time/stories/time.story.d.ts.map +1 -1
  241. package/build-types/date-time/time/styles.d.ts +4 -4
  242. package/build-types/dimension-control/index.d.ts.map +1 -1
  243. package/build-types/dimension-control/stories/index.story.d.ts +1 -1
  244. package/build-types/disabled/stories/index.story.d.ts.map +1 -1
  245. package/build-types/drop-zone/stories/index.story.d.ts +1 -1
  246. package/build-types/drop-zone/stories/index.story.d.ts.map +1 -1
  247. package/build-types/duotone-picker/stories/duotone-picker.story.d.ts +1 -1
  248. package/build-types/duotone-picker/stories/duotone-picker.story.d.ts.map +1 -1
  249. package/build-types/duotone-picker/stories/duotone-swatch.story.d.ts +3 -3
  250. package/build-types/duotone-picker/stories/duotone-swatch.story.d.ts.map +1 -1
  251. package/build-types/focal-point-picker/stories/index.story.d.ts +4 -4
  252. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  253. package/build-types/font-size-picker/styles.d.ts.map +1 -1
  254. package/build-types/form-file-upload/stories/index.story.d.ts +5 -5
  255. package/build-types/form-file-upload/stories/index.story.d.ts.map +1 -1
  256. package/build-types/gradient-picker/stories/index.story.d.ts +3 -3
  257. package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
  258. package/build-types/guide/stories/index.story.d.ts +1 -1
  259. package/build-types/guide/stories/index.story.d.ts.map +1 -1
  260. package/build-types/icon/stories/index.story.d.ts +4 -4
  261. package/build-types/icon/stories/index.story.d.ts.map +1 -1
  262. package/build-types/input-control/index.d.ts +1 -0
  263. package/build-types/input-control/index.d.ts.map +1 -1
  264. package/build-types/input-control/stories/index.story.d.ts +7 -7
  265. package/build-types/input-control/stories/index.story.d.ts.map +1 -1
  266. package/build-types/input-control/types.d.ts +11 -2
  267. package/build-types/input-control/types.d.ts.map +1 -1
  268. package/build-types/keyboard-shortcuts/stories/index.story.d.ts +1 -1
  269. package/build-types/keyboard-shortcuts/stories/index.story.d.ts.map +1 -1
  270. package/build-types/menu/checkbox-item.d.ts.map +1 -1
  271. package/build-types/menu/index.d.ts +10 -1
  272. package/build-types/menu/index.d.ts.map +1 -1
  273. package/build-types/menu/item.d.ts.map +1 -1
  274. package/build-types/menu/popover.d.ts +3 -0
  275. package/build-types/menu/popover.d.ts.map +1 -0
  276. package/build-types/menu/radio-item.d.ts.map +1 -1
  277. package/build-types/menu/stories/index.story.d.ts +9 -9
  278. package/build-types/menu/stories/index.story.d.ts.map +1 -1
  279. package/build-types/menu/submenu-trigger-item.d.ts +3 -0
  280. package/build-types/menu/submenu-trigger-item.d.ts.map +1 -0
  281. package/build-types/menu/trigger-button.d.ts +3 -0
  282. package/build-types/menu/trigger-button.d.ts.map +1 -0
  283. package/build-types/menu/types.d.ts +208 -57
  284. package/build-types/menu/types.d.ts.map +1 -1
  285. package/build-types/menu-group/stories/index.story.d.ts +1 -1
  286. package/build-types/menu-group/stories/index.story.d.ts.map +1 -1
  287. package/build-types/menu-item/stories/index.story.d.ts +4 -4
  288. package/build-types/modal/stories/index.story.d.ts.map +1 -1
  289. package/build-types/navigation/back-button/index.d.ts.map +1 -1
  290. package/build-types/navigation/index.d.ts.map +1 -1
  291. package/build-types/navigation/item/index.d.ts.map +1 -1
  292. package/build-types/navigation/stories/index.story.d.ts +6 -6
  293. package/build-types/navigation/stories/index.story.d.ts.map +1 -1
  294. package/build-types/notice/stories/index.story.d.ts +4 -4
  295. package/build-types/notice/stories/index.story.d.ts.map +1 -1
  296. package/build-types/number-control/index.d.ts +1 -1
  297. package/build-types/number-control/index.d.ts.map +1 -1
  298. package/build-types/number-control/stories/index.story.d.ts +2 -2
  299. package/build-types/palette-edit/index.d.ts.map +1 -1
  300. package/build-types/palette-edit/stories/index.story.d.ts +2 -2
  301. package/build-types/palette-edit/stories/index.story.d.ts.map +1 -1
  302. package/build-types/private-apis.d.ts.map +1 -1
  303. package/build-types/progress-bar/stories/index.story.d.ts +1 -1
  304. package/build-types/progress-bar/stories/index.story.d.ts.map +1 -1
  305. package/build-types/query-controls/stories/index.story.d.ts +1 -1
  306. package/build-types/query-controls/stories/index.story.d.ts.map +1 -1
  307. package/build-types/radio-group/index.d.ts.map +1 -1
  308. package/build-types/radio-group/radio.d.ts.map +1 -1
  309. package/build-types/range-control/index.d.ts +1 -1
  310. package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
  311. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  312. package/build-types/resizable-box/stories/index.story.d.ts +2 -2
  313. package/build-types/responsive-wrapper/stories/index.story.d.ts +1 -1
  314. package/build-types/responsive-wrapper/stories/index.story.d.ts.map +1 -1
  315. package/build-types/sandbox/stories/index.story.d.ts +1 -1
  316. package/build-types/sandbox/stories/index.story.d.ts.map +1 -1
  317. package/build-types/search-control/stories/index.story.d.ts +1 -1
  318. package/build-types/search-control/stories/index.story.d.ts.map +1 -1
  319. package/build-types/select-control/index.d.ts +1 -0
  320. package/build-types/select-control/index.d.ts.map +1 -1
  321. package/build-types/select-control/stories/index.story.d.ts +5 -5
  322. package/build-types/select-control/stories/index.story.d.ts.map +1 -1
  323. package/build-types/select-control/types.d.ts +1 -1
  324. package/build-types/select-control/types.d.ts.map +1 -1
  325. package/build-types/shortcut/stories/index.story.d.ts +1 -1
  326. package/build-types/shortcut/stories/index.story.d.ts.map +1 -1
  327. package/build-types/slot-fill/context.d.ts.map +1 -1
  328. package/build-types/slot-fill/fill.d.ts.map +1 -1
  329. package/build-types/slot-fill/provider.d.ts.map +1 -1
  330. package/build-types/slot-fill/slot.d.ts.map +1 -1
  331. package/build-types/slot-fill/types.d.ts +13 -11
  332. package/build-types/slot-fill/types.d.ts.map +1 -1
  333. package/build-types/tab-panel/index.d.ts.map +1 -1
  334. package/build-types/tab-panel/stories/index.story.d.ts +4 -4
  335. package/build-types/tab-panel/stories/index.story.d.ts.map +1 -1
  336. package/build-types/tabs/index.d.ts +21 -4
  337. package/build-types/tabs/index.d.ts.map +1 -1
  338. package/build-types/tabs/stories/index.story.d.ts +10 -10
  339. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  340. package/build-types/tabs/types.d.ts +13 -13
  341. package/build-types/tabs/types.d.ts.map +1 -1
  342. package/build-types/text/stories/index.story.d.ts +3 -3
  343. package/build-types/theme/stories/index.story.d.ts +1 -1
  344. package/build-types/toggle-control/stories/index.story.d.ts +2 -2
  345. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  346. package/build-types/toolbar/stories/index.story.d.ts +3 -3
  347. package/build-types/toolbar/stories/index.story.d.ts.map +1 -1
  348. package/build-types/tooltip/index.d.ts.map +1 -1
  349. package/build-types/tooltip/stories/index.story.d.ts +1 -1
  350. package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
  351. package/build-types/tree-grid/stories/index.story.d.ts +1 -1
  352. package/build-types/tree-grid/stories/index.story.d.ts.map +1 -1
  353. package/build-types/tree-select/index.d.ts +3 -2
  354. package/build-types/tree-select/index.d.ts.map +1 -1
  355. package/build-types/tree-select/stories/index.story.d.ts +1 -1
  356. package/build-types/tree-select/stories/index.story.d.ts.map +1 -1
  357. package/build-types/tree-select/types.d.ts +5 -1
  358. package/build-types/tree-select/types.d.ts.map +1 -1
  359. package/build-types/unit-control/index.d.ts +1 -1
  360. package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
  361. package/build-types/v-stack/stories/index.story.d.ts +1 -1
  362. package/package.json +19 -19
  363. package/src/alignment-matrix-control/README.md +16 -15
  364. package/src/angle-picker-control/README.md +10 -9
  365. package/src/badge/README.md +24 -0
  366. package/src/badge/docs-manifest.json +5 -0
  367. package/src/badge/index.tsx +67 -0
  368. package/src/badge/stories/index.story.tsx +54 -0
  369. package/src/badge/styles.scss +49 -0
  370. package/src/badge/test/index.tsx +45 -0
  371. package/src/badge/types.ts +12 -0
  372. package/src/base-control/README.md +22 -21
  373. package/src/box-control/README.md +41 -24
  374. package/src/box-control/index.tsx +4 -0
  375. package/src/box-control/input-control.tsx +142 -40
  376. package/src/box-control/stories/index.story.tsx +12 -0
  377. package/src/box-control/types.ts +18 -0
  378. package/src/box-control/utils.ts +60 -0
  379. package/src/button/README.md +51 -50
  380. package/src/button/style.scss +9 -10
  381. package/src/button/test/index.tsx +9 -2
  382. package/src/button-group/README.md +4 -0
  383. package/src/button-group/index.tsx +11 -1
  384. package/src/button-group/stories/index.story.tsx +8 -1
  385. package/src/button-group/types.ts +7 -0
  386. package/src/custom-select-control/index.tsx +3 -3
  387. package/src/custom-select-control-v2/custom-select.tsx +1 -2
  388. package/src/custom-select-control-v2/stories/index.story.tsx +4 -0
  389. package/src/date-time/date/index.tsx +1 -0
  390. package/src/dimension-control/index.tsx +1 -0
  391. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -4
  392. package/src/disabled/stories/index.story.tsx +1 -0
  393. package/src/drop-zone/stories/index.story.tsx +7 -1
  394. package/src/font-size-picker/styles.ts +1 -0
  395. package/src/form-file-upload/README.md +22 -21
  396. package/src/gradient-picker/README.md +36 -35
  397. package/src/heading/hook.ts +1 -1
  398. package/src/heading/test/__snapshots__/index.tsx.snap +4 -4
  399. package/src/icon/README.md +9 -8
  400. package/src/input-control/README.md +1 -0
  401. package/src/input-control/index.tsx +10 -0
  402. package/src/input-control/stories/index.story.tsx +6 -1
  403. package/src/input-control/test/index.js +9 -3
  404. package/src/input-control/types.ts +11 -2
  405. package/src/menu/checkbox-item.tsx +2 -1
  406. package/src/menu/index.tsx +61 -165
  407. package/src/menu/item.tsx +17 -2
  408. package/src/menu/popover.tsx +103 -0
  409. package/src/menu/radio-item.tsx +2 -1
  410. package/src/menu/stories/index.story.tsx +533 -381
  411. package/src/menu/submenu-trigger-item.tsx +61 -0
  412. package/src/menu/test/index.tsx +266 -182
  413. package/src/menu/trigger-button.tsx +46 -0
  414. package/src/menu/types.ts +210 -63
  415. package/src/modal/stories/index.story.tsx +4 -1
  416. package/src/navigation/back-button/index.tsx +1 -0
  417. package/src/navigation/index.tsx +7 -0
  418. package/src/navigation/item/index.tsx +2 -0
  419. package/src/navigation/test/index.tsx +4 -0
  420. package/src/navigator/test/index.tsx +4 -0
  421. package/src/number-control/index.tsx +1 -0
  422. package/src/palette-edit/index.tsx +1 -0
  423. package/src/panel/stories/index.story.tsx +3 -3
  424. package/src/private-apis.ts +2 -0
  425. package/src/radio-group/index.tsx +12 -1
  426. package/src/radio-group/radio.tsx +1 -2
  427. package/src/range-control/styles/range-control-styles.ts +8 -4
  428. package/src/select-control/README.md +3 -0
  429. package/src/select-control/index.tsx +10 -0
  430. package/src/select-control/stories/index.story.tsx +2 -0
  431. package/src/select-control/test/select-control.tsx +7 -1
  432. package/src/select-control/types.ts +1 -0
  433. package/src/slot-fill/context.ts +5 -3
  434. package/src/slot-fill/fill.ts +10 -15
  435. package/src/slot-fill/provider.tsx +63 -64
  436. package/src/slot-fill/slot.tsx +40 -27
  437. package/src/slot-fill/types.ts +23 -11
  438. package/src/style.scss +1 -0
  439. package/src/tab-panel/index.tsx +1 -2
  440. package/src/tab-panel/stories/index.story.tsx +4 -0
  441. package/src/tabs/README.md +151 -187
  442. package/src/tabs/docs-manifest.json +22 -0
  443. package/src/tabs/index.tsx +21 -4
  444. package/src/tabs/stories/best-practices.mdx +99 -0
  445. package/src/tabs/stories/index.story.tsx +5 -0
  446. package/src/tabs/types.ts +13 -14
  447. package/src/text/hook.ts +2 -2
  448. package/src/text/styles.ts +1 -1
  449. package/src/text/test/__snapshots__/index.tsx.snap +3 -3
  450. package/src/text/test/index.tsx +1 -1
  451. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +2 -2
  452. package/src/toggle-group-control/test/index.tsx +7 -1
  453. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +1 -2
  454. package/src/tooltip/index.tsx +1 -2
  455. package/src/tree-grid/stories/index.story.tsx +2 -0
  456. package/src/tree-select/README.md +144 -28
  457. package/src/tree-select/docs-manifest.json +5 -0
  458. package/src/tree-select/index.tsx +11 -2
  459. package/src/tree-select/stories/index.story.tsx +1 -0
  460. package/src/tree-select/types.ts +8 -1
  461. package/tsconfig.json +0 -3
  462. package/tsconfig.tsbuildinfo +1 -1
  463. package/build/slot-fill/use-slot.js +0 -32
  464. package/build/slot-fill/use-slot.js.map +0 -1
  465. package/build-module/slot-fill/use-slot.js +0 -24
  466. package/build-module/slot-fill/use-slot.js.map +0 -1
  467. package/build-types/slot-fill/use-slot.d.ts +0 -10
  468. package/build-types/slot-fill/use-slot.d.ts.map +0 -1
  469. package/src/slot-fill/use-slot.ts +0 -27
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import type { Meta, StoryFn } from '@storybook/react';
4
+ import type { StoryObj, Meta } from '@storybook/react';
5
5
  import { css } from '@emotion/react';
6
6
 
7
7
  /**
@@ -20,6 +20,7 @@ import Button from '../../button';
20
20
  import Modal from '../../modal';
21
21
  import { createSlotFill, Provider as SlotFillProvider } from '../../slot-fill';
22
22
  import { ContextSystemProvider } from '../../context';
23
+ import type { MenuProps } from '../types';
23
24
 
24
25
  const meta: Meta< typeof Menu > = {
25
26
  id: 'components-experimental-menu',
@@ -44,10 +45,15 @@ const meta: Meta< typeof Menu > = {
44
45
  ItemLabel: Menu.ItemLabel,
45
46
  // @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
46
47
  ItemHelpText: Menu.ItemHelpText,
48
+ // @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
49
+ TriggerButton: Menu.TriggerButton,
50
+ // @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
51
+ SubmenuTriggerItem: Menu.SubmenuTriggerItem,
52
+ // @ts-expect-error - See https://github.com/storybookjs/storybook/issues/23170
53
+ Popover: Menu.Popover,
47
54
  },
48
55
  argTypes: {
49
56
  children: { control: false },
50
- trigger: { control: false },
51
57
  },
52
58
  tags: [ 'status-private' ],
53
59
  parameters: {
@@ -61,259 +67,341 @@ const meta: Meta< typeof Menu > = {
61
67
  };
62
68
  export default meta;
63
69
 
64
- export const Default: StoryFn< typeof Menu > = ( props ) => (
65
- <Menu { ...props }>
66
- <Menu.Item>
67
- <Menu.ItemLabel>Label</Menu.ItemLabel>
68
- </Menu.Item>
69
- <Menu.Item>
70
- <Menu.ItemLabel>Label</Menu.ItemLabel>
71
- <Menu.ItemHelpText>Help text</Menu.ItemHelpText>
72
- </Menu.Item>
73
- <Menu.Item>
74
- <Menu.ItemLabel>Label</Menu.ItemLabel>
75
- <Menu.ItemHelpText>
76
- The menu item help text is automatically truncated when there
77
- are more than two lines of text
78
- </Menu.ItemHelpText>
79
- </Menu.Item>
80
- <Menu.Item hideOnClick={ false }>
81
- <Menu.ItemLabel>Label</Menu.ItemLabel>
82
- <Menu.ItemHelpText>
83
- This item doesn&apos;t close the menu on click
84
- </Menu.ItemHelpText>
85
- </Menu.Item>
86
- <Menu.Item disabled>Disabled item</Menu.Item>
87
- <Menu.Separator />
88
- <Menu.Group>
89
- <Menu.GroupLabel>Group label</Menu.GroupLabel>
90
- <Menu.Item prefix={ <Icon icon={ customLink } size={ 24 } /> }>
91
- <Menu.ItemLabel>With prefix</Menu.ItemLabel>
92
- </Menu.Item>
93
- <Menu.Item suffix="⌘S">With suffix</Menu.Item>
94
- <Menu.Item
95
- disabled
96
- prefix={ <Icon icon={ formatCapitalize } size={ 24 } /> }
97
- suffix="⌥⌘T"
98
- >
99
- <Menu.ItemLabel>Disabled with prefix and suffix</Menu.ItemLabel>
100
- <Menu.ItemHelpText>And help text</Menu.ItemHelpText>
101
- </Menu.Item>
102
- </Menu.Group>
103
- </Menu>
104
- );
105
- Default.args = {
106
- trigger: (
107
- <Button __next40pxDefaultSize variant="secondary">
108
- Open menu
109
- </Button>
110
- ),
111
- };
112
-
113
- export const WithSubmenu: StoryFn< typeof Menu > = ( props ) => (
114
- <Menu { ...props }>
115
- <Menu.Item>Level 1 item</Menu.Item>
116
- <Menu
117
- trigger={
118
- <Menu.Item suffix="Suffix">
119
- <Menu.ItemLabel>
120
- Submenu trigger item with a long label
121
- </Menu.ItemLabel>
122
- </Menu.Item>
123
- }
124
- >
125
- <Menu.Item>
126
- <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
127
- </Menu.Item>
128
- <Menu.Item>
129
- <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
130
- </Menu.Item>
131
- <Menu
132
- trigger={
70
+ export const Default: StoryObj< typeof Menu > = {
71
+ args: {
72
+ children: (
73
+ <>
74
+ <Menu.TriggerButton
75
+ render={
76
+ <Button __next40pxDefaultSize variant="secondary" />
77
+ }
78
+ >
79
+ Open menu
80
+ </Menu.TriggerButton>
81
+ <Menu.Popover>
133
82
  <Menu.Item>
134
- <Menu.ItemLabel>Submenu trigger</Menu.ItemLabel>
83
+ <Menu.ItemLabel>Label</Menu.ItemLabel>
135
84
  </Menu.Item>
136
- }
137
- >
138
- <Menu.Item>
139
- <Menu.ItemLabel>Level 3 item</Menu.ItemLabel>
140
- </Menu.Item>
141
- <Menu.Item>
142
- <Menu.ItemLabel>Level 3 item</Menu.ItemLabel>
143
- </Menu.Item>
144
- </Menu>
145
- </Menu>
146
- </Menu>
147
- );
148
- WithSubmenu.args = {
149
- ...Default.args,
85
+ <Menu.Item>
86
+ <Menu.ItemLabel>Label</Menu.ItemLabel>
87
+ <Menu.ItemHelpText>Help text</Menu.ItemHelpText>
88
+ </Menu.Item>
89
+ <Menu.Item>
90
+ <Menu.ItemLabel>Label</Menu.ItemLabel>
91
+ <Menu.ItemHelpText>
92
+ The menu item help text is automatically truncated
93
+ when there are more than two lines of text
94
+ </Menu.ItemHelpText>
95
+ </Menu.Item>
96
+ <Menu.Item hideOnClick={ false }>
97
+ <Menu.ItemLabel>Label</Menu.ItemLabel>
98
+ <Menu.ItemHelpText>
99
+ This item doesn&apos;t close the menu on click
100
+ </Menu.ItemHelpText>
101
+ </Menu.Item>
102
+ <Menu.Item disabled>Disabled item</Menu.Item>
103
+ <Menu.Separator />
104
+ <Menu.Group>
105
+ <Menu.GroupLabel>Group label</Menu.GroupLabel>
106
+ <Menu.Item
107
+ prefix={ <Icon icon={ customLink } size={ 24 } /> }
108
+ >
109
+ <Menu.ItemLabel>With prefix</Menu.ItemLabel>
110
+ </Menu.Item>
111
+ <Menu.Item suffix="⌘S">With suffix</Menu.Item>
112
+ <Menu.Item
113
+ disabled
114
+ prefix={
115
+ <Icon icon={ formatCapitalize } size={ 24 } />
116
+ }
117
+ suffix="⌥⌘T"
118
+ >
119
+ <Menu.ItemLabel>
120
+ Disabled with prefix and suffix
121
+ </Menu.ItemLabel>
122
+ <Menu.ItemHelpText>And help text</Menu.ItemHelpText>
123
+ </Menu.Item>
124
+ </Menu.Group>
125
+ </Menu.Popover>
126
+ </>
127
+ ),
128
+ },
150
129
  };
151
130
 
152
- export const WithCheckboxes: StoryFn< typeof Menu > = ( props ) => {
153
- const [ isAChecked, setAChecked ] = useState( false );
154
- const [ isBChecked, setBChecked ] = useState( true );
155
- const [ multipleCheckboxesValue, setMultipleCheckboxesValue ] = useState<
156
- string[]
157
- >( [ 'b' ] );
158
-
159
- const onMultipleCheckboxesCheckedChange: React.ComponentProps<
160
- typeof Menu.CheckboxItem
161
- >[ 'onChange' ] = ( e ) => {
162
- setMultipleCheckboxesValue( ( prevValues ) => {
163
- if ( prevValues.includes( e.target.value ) ) {
164
- return prevValues.filter( ( val ) => val !== e.target.value );
165
- }
166
- return [ ...prevValues, e.target.value ];
167
- } );
168
- };
169
-
170
- return (
171
- <Menu { ...props }>
172
- <Menu.Group>
173
- <Menu.GroupLabel>
174
- Single selection, uncontrolled
175
- </Menu.GroupLabel>
176
- <Menu.CheckboxItem
177
- name="checkbox-individual-uncontrolled-a"
178
- value="a"
179
- suffix="⌥⌘T"
180
- >
181
- <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
182
- <Menu.ItemHelpText>Initially unchecked</Menu.ItemHelpText>
183
- </Menu.CheckboxItem>
184
- <Menu.CheckboxItem
185
- name="checkbox-individual-uncontrolled-b"
186
- value="b"
187
- defaultChecked
188
- >
189
- <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
190
- <Menu.ItemHelpText>Initially checked</Menu.ItemHelpText>
191
- </Menu.CheckboxItem>
192
- </Menu.Group>
193
- <Menu.Separator />
194
- <Menu.Group>
195
- <Menu.GroupLabel>Single selection, controlled</Menu.GroupLabel>
196
- <Menu.CheckboxItem
197
- name="checkbox-individual-controlled-a"
198
- value="a"
199
- checked={ isAChecked }
200
- onChange={ ( e ) => setAChecked( e.target.checked ) }
201
- >
202
- <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
203
- <Menu.ItemHelpText>Initially unchecked</Menu.ItemHelpText>
204
- </Menu.CheckboxItem>
205
- <Menu.CheckboxItem
206
- name="checkbox-individual-controlled-b"
207
- value="b"
208
- checked={ isBChecked }
209
- onChange={ ( e ) => setBChecked( e.target.checked ) }
210
- >
211
- <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
212
- <Menu.ItemHelpText>Initially checked</Menu.ItemHelpText>
213
- </Menu.CheckboxItem>
214
- </Menu.Group>
215
- <Menu.Separator />
216
- <Menu.Group>
217
- <Menu.GroupLabel>
218
- Multiple selection, uncontrolled
219
- </Menu.GroupLabel>
220
- <Menu.CheckboxItem
221
- name="checkbox-multiple-uncontrolled"
222
- value="a"
223
- >
224
- <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
225
- <Menu.ItemHelpText>Initially unchecked</Menu.ItemHelpText>
226
- </Menu.CheckboxItem>
227
- <Menu.CheckboxItem
228
- name="checkbox-multiple-uncontrolled"
229
- value="b"
230
- defaultChecked
231
- >
232
- <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
233
- <Menu.ItemHelpText>Initially checked</Menu.ItemHelpText>
234
- </Menu.CheckboxItem>
235
- </Menu.Group>
236
- <Menu.Separator />
237
- <Menu.Group>
238
- <Menu.GroupLabel>
239
- Multiple selection, controlled
240
- </Menu.GroupLabel>
241
- <Menu.CheckboxItem
242
- name="checkbox-multiple-controlled"
243
- value="a"
244
- checked={ multipleCheckboxesValue.includes( 'a' ) }
245
- onChange={ onMultipleCheckboxesCheckedChange }
246
- >
247
- <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
248
- <Menu.ItemHelpText>Initially unchecked</Menu.ItemHelpText>
249
- </Menu.CheckboxItem>
250
- <Menu.CheckboxItem
251
- name="checkbox-multiple-controlled"
252
- value="b"
253
- checked={ multipleCheckboxesValue.includes( 'b' ) }
254
- onChange={ onMultipleCheckboxesCheckedChange }
131
+ export const WithSubmenu: StoryObj< typeof Menu > = {
132
+ args: {
133
+ ...Default.args,
134
+ children: (
135
+ <>
136
+ <Menu.TriggerButton
137
+ render={
138
+ <Button __next40pxDefaultSize variant="secondary" />
139
+ }
255
140
  >
256
- <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
257
- <Menu.ItemHelpText>Initially checked</Menu.ItemHelpText>
258
- </Menu.CheckboxItem>
259
- </Menu.Group>
260
- </Menu>
261
- );
262
- };
263
- WithCheckboxes.args = {
264
- ...Default.args,
141
+ Open menu
142
+ </Menu.TriggerButton>
143
+ <Menu.Popover>
144
+ <Menu.Item>Level 1 item</Menu.Item>
145
+ <Menu>
146
+ <Menu.SubmenuTriggerItem suffix="Suffix">
147
+ <Menu.ItemLabel>
148
+ Submenu trigger item with a long label
149
+ </Menu.ItemLabel>
150
+ </Menu.SubmenuTriggerItem>
151
+ <Menu.Popover>
152
+ <Menu.Item>
153
+ <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
154
+ </Menu.Item>
155
+ <Menu.Item>
156
+ <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
157
+ </Menu.Item>
158
+ <Menu>
159
+ <Menu.SubmenuTriggerItem>
160
+ <Menu.ItemLabel>
161
+ Submenu trigger
162
+ </Menu.ItemLabel>
163
+ </Menu.SubmenuTriggerItem>
164
+ <Menu.Popover>
165
+ <Menu.Item>
166
+ <Menu.ItemLabel>
167
+ Level 3 item
168
+ </Menu.ItemLabel>
169
+ </Menu.Item>
170
+ <Menu.Item>
171
+ <Menu.ItemLabel>
172
+ Level 3 item
173
+ </Menu.ItemLabel>
174
+ </Menu.Item>
175
+ </Menu.Popover>
176
+ </Menu>
177
+ </Menu.Popover>
178
+ </Menu>
179
+ </Menu.Popover>
180
+ </>
181
+ ),
182
+ },
265
183
  };
266
184
 
267
- export const WithRadios: StoryFn< typeof Menu > = ( props ) => {
268
- const [ radioValue, setRadioValue ] = useState( 'two' );
269
- const onRadioChange: React.ComponentProps<
270
- typeof Menu.RadioItem
271
- >[ 'onChange' ] = ( e ) => setRadioValue( e.target.value );
185
+ export const WithCheckboxes: StoryObj< typeof Menu > = {
186
+ render: function WithCheckboxes( props: MenuProps ) {
187
+ const [ isAChecked, setAChecked ] = useState( false );
188
+ const [ isBChecked, setBChecked ] = useState( true );
189
+ const [ multipleCheckboxesValue, setMultipleCheckboxesValue ] =
190
+ useState< string[] >( [ 'b' ] );
272
191
 
273
- return (
274
- <Menu { ...props }>
275
- <Menu.Group>
276
- <Menu.GroupLabel>Uncontrolled</Menu.GroupLabel>
277
- <Menu.RadioItem name="radio-uncontrolled" value="one">
278
- <Menu.ItemLabel>Radio item 1</Menu.ItemLabel>
279
- <Menu.ItemHelpText>Initially unchecked</Menu.ItemHelpText>
280
- </Menu.RadioItem>
281
- <Menu.RadioItem
282
- name="radio-uncontrolled"
283
- value="two"
284
- defaultChecked
285
- >
286
- <Menu.ItemLabel>Radio item 2</Menu.ItemLabel>
287
- <Menu.ItemHelpText>Initially checked</Menu.ItemHelpText>
288
- </Menu.RadioItem>
289
- </Menu.Group>
290
- <Menu.Separator />
291
- <Menu.Group>
292
- <Menu.GroupLabel>Controlled</Menu.GroupLabel>
293
- <Menu.RadioItem
294
- name="radio-controlled"
295
- value="one"
296
- checked={ radioValue === 'one' }
297
- onChange={ onRadioChange }
298
- >
299
- <Menu.ItemLabel>Radio item 1</Menu.ItemLabel>
300
- <Menu.ItemHelpText>Initially unchecked</Menu.ItemHelpText>
301
- </Menu.RadioItem>
302
- <Menu.RadioItem
303
- name="radio-controlled"
304
- value="two"
305
- checked={ radioValue === 'two' }
306
- onChange={ onRadioChange }
192
+ const onMultipleCheckboxesCheckedChange: React.ComponentProps<
193
+ typeof Menu.CheckboxItem
194
+ >[ 'onChange' ] = ( e ) => {
195
+ setMultipleCheckboxesValue( ( prevValues ) => {
196
+ if ( prevValues.includes( e.target.value ) ) {
197
+ return prevValues.filter(
198
+ ( val ) => val !== e.target.value
199
+ );
200
+ }
201
+ return [ ...prevValues, e.target.value ];
202
+ } );
203
+ };
204
+
205
+ return (
206
+ <Menu { ...props }>
207
+ <Menu.TriggerButton
208
+ render={
209
+ <Button __next40pxDefaultSize variant="secondary" />
210
+ }
307
211
  >
308
- <Menu.ItemLabel>Radio item 2</Menu.ItemLabel>
309
- <Menu.ItemHelpText>Initially checked</Menu.ItemHelpText>
310
- </Menu.RadioItem>
311
- </Menu.Group>
312
- </Menu>
313
- );
212
+ Open menu
213
+ </Menu.TriggerButton>
214
+ <Menu.Popover>
215
+ <Menu.Group>
216
+ <Menu.GroupLabel>
217
+ Single selection, uncontrolled
218
+ </Menu.GroupLabel>
219
+ <Menu.CheckboxItem
220
+ name="checkbox-individual-uncontrolled-a"
221
+ value="a"
222
+ suffix="⌥⌘T"
223
+ >
224
+ <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
225
+ <Menu.ItemHelpText>
226
+ Initially unchecked
227
+ </Menu.ItemHelpText>
228
+ </Menu.CheckboxItem>
229
+ <Menu.CheckboxItem
230
+ name="checkbox-individual-uncontrolled-b"
231
+ value="b"
232
+ defaultChecked
233
+ >
234
+ <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
235
+ <Menu.ItemHelpText>
236
+ Initially checked
237
+ </Menu.ItemHelpText>
238
+ </Menu.CheckboxItem>
239
+ </Menu.Group>
240
+ <Menu.Separator />
241
+ <Menu.Group>
242
+ <Menu.GroupLabel>
243
+ Single selection, controlled
244
+ </Menu.GroupLabel>
245
+ <Menu.CheckboxItem
246
+ name="checkbox-individual-controlled-a"
247
+ value="a"
248
+ checked={ isAChecked }
249
+ onChange={ ( e ) => {
250
+ setAChecked( e.target.checked );
251
+ } }
252
+ >
253
+ <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
254
+ <Menu.ItemHelpText>
255
+ Initially unchecked
256
+ </Menu.ItemHelpText>
257
+ </Menu.CheckboxItem>
258
+ <Menu.CheckboxItem
259
+ name="checkbox-individual-controlled-b"
260
+ value="b"
261
+ checked={ isBChecked }
262
+ onChange={ ( e ) =>
263
+ setBChecked( e.target.checked )
264
+ }
265
+ >
266
+ <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
267
+ <Menu.ItemHelpText>
268
+ Initially checked
269
+ </Menu.ItemHelpText>
270
+ </Menu.CheckboxItem>
271
+ </Menu.Group>
272
+ <Menu.Separator />
273
+ <Menu.Group>
274
+ <Menu.GroupLabel>
275
+ Multiple selection, uncontrolled
276
+ </Menu.GroupLabel>
277
+ <Menu.CheckboxItem
278
+ name="checkbox-multiple-uncontrolled"
279
+ value="a"
280
+ >
281
+ <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
282
+ <Menu.ItemHelpText>
283
+ Initially unchecked
284
+ </Menu.ItemHelpText>
285
+ </Menu.CheckboxItem>
286
+ <Menu.CheckboxItem
287
+ name="checkbox-multiple-uncontrolled"
288
+ value="b"
289
+ defaultChecked
290
+ >
291
+ <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
292
+ <Menu.ItemHelpText>
293
+ Initially checked
294
+ </Menu.ItemHelpText>
295
+ </Menu.CheckboxItem>
296
+ </Menu.Group>
297
+ <Menu.Separator />
298
+ <Menu.Group>
299
+ <Menu.GroupLabel>
300
+ Multiple selection, controlled
301
+ </Menu.GroupLabel>
302
+ <Menu.CheckboxItem
303
+ name="checkbox-multiple-controlled"
304
+ value="a"
305
+ checked={ multipleCheckboxesValue.includes( 'a' ) }
306
+ onChange={ onMultipleCheckboxesCheckedChange }
307
+ >
308
+ <Menu.ItemLabel>Checkbox item A</Menu.ItemLabel>
309
+ <Menu.ItemHelpText>
310
+ Initially unchecked
311
+ </Menu.ItemHelpText>
312
+ </Menu.CheckboxItem>
313
+ <Menu.CheckboxItem
314
+ name="checkbox-multiple-controlled"
315
+ value="b"
316
+ checked={ multipleCheckboxesValue.includes( 'b' ) }
317
+ onChange={ onMultipleCheckboxesCheckedChange }
318
+ >
319
+ <Menu.ItemLabel>Checkbox item B</Menu.ItemLabel>
320
+ <Menu.ItemHelpText>
321
+ Initially checked
322
+ </Menu.ItemHelpText>
323
+ </Menu.CheckboxItem>
324
+ </Menu.Group>
325
+ </Menu.Popover>
326
+ </Menu>
327
+ );
328
+ },
329
+
330
+ args: {
331
+ ...Default.args,
332
+ },
314
333
  };
315
- WithRadios.args = {
316
- ...Default.args,
334
+
335
+ export const WithRadios: StoryObj< typeof Menu > = {
336
+ render: function WithRadios( props: MenuProps ) {
337
+ const [ radioValue, setRadioValue ] = useState( 'two' );
338
+ const onRadioChange: React.ComponentProps<
339
+ typeof Menu.RadioItem
340
+ >[ 'onChange' ] = ( e ) => setRadioValue( e.target.value );
341
+
342
+ return (
343
+ <Menu { ...props }>
344
+ <Menu.TriggerButton
345
+ render={
346
+ <Button __next40pxDefaultSize variant="secondary" />
347
+ }
348
+ >
349
+ Open menu
350
+ </Menu.TriggerButton>
351
+ <Menu.Popover>
352
+ <Menu.Group>
353
+ <Menu.GroupLabel>Uncontrolled</Menu.GroupLabel>
354
+ <Menu.RadioItem name="radio-uncontrolled" value="one">
355
+ <Menu.ItemLabel>Radio item 1</Menu.ItemLabel>
356
+ <Menu.ItemHelpText>
357
+ Initially unchecked
358
+ </Menu.ItemHelpText>
359
+ </Menu.RadioItem>
360
+ <Menu.RadioItem
361
+ name="radio-uncontrolled"
362
+ value="two"
363
+ defaultChecked
364
+ >
365
+ <Menu.ItemLabel>Radio item 2</Menu.ItemLabel>
366
+ <Menu.ItemHelpText>
367
+ Initially checked
368
+ </Menu.ItemHelpText>
369
+ </Menu.RadioItem>
370
+ </Menu.Group>
371
+ <Menu.Separator />
372
+ <Menu.Group>
373
+ <Menu.GroupLabel>Controlled</Menu.GroupLabel>
374
+ <Menu.RadioItem
375
+ name="radio-controlled"
376
+ value="one"
377
+ checked={ radioValue === 'one' }
378
+ onChange={ onRadioChange }
379
+ >
380
+ <Menu.ItemLabel>Radio item 1</Menu.ItemLabel>
381
+ <Menu.ItemHelpText>
382
+ Initially unchecked
383
+ </Menu.ItemHelpText>
384
+ </Menu.RadioItem>
385
+ <Menu.RadioItem
386
+ name="radio-controlled"
387
+ value="two"
388
+ checked={ radioValue === 'two' }
389
+ onChange={ onRadioChange }
390
+ >
391
+ <Menu.ItemLabel>Radio item 2</Menu.ItemLabel>
392
+ <Menu.ItemHelpText>
393
+ Initially checked
394
+ </Menu.ItemHelpText>
395
+ </Menu.RadioItem>
396
+ </Menu.Group>
397
+ </Menu.Popover>
398
+ </Menu>
399
+ );
400
+ },
401
+
402
+ args: {
403
+ ...Default.args,
404
+ },
317
405
  };
318
406
 
319
407
  const modalOnTopOfMenuPopover = css`
@@ -322,57 +410,72 @@ const modalOnTopOfMenuPopover = css`
322
410
  }
323
411
  `;
324
412
 
325
- // For more examples with `Modal`, check https://ariakit.org/examples/menu-wordpress-modal
326
- export const WithModals: StoryFn< typeof Menu > = ( props ) => {
327
- const [ isOuterModalOpen, setOuterModalOpen ] = useState( false );
328
- const [ isInnerModalOpen, setInnerModalOpen ] = useState( false );
413
+ export const WithModals: StoryObj< typeof Menu > = {
414
+ render: function WithModals( props: MenuProps ) {
415
+ const [ isOuterModalOpen, setOuterModalOpen ] = useState( false );
416
+ const [ isInnerModalOpen, setInnerModalOpen ] = useState( false );
329
417
 
330
- const cx = useCx();
331
- const modalOverlayClassName = cx( modalOnTopOfMenuPopover );
418
+ const cx = useCx();
419
+ const modalOverlayClassName = cx( modalOnTopOfMenuPopover );
332
420
 
333
- return (
334
- <>
335
- <Menu { ...props }>
336
- <Menu.Item
337
- onClick={ () => setOuterModalOpen( true ) }
338
- hideOnClick={ false }
339
- >
340
- <Menu.ItemLabel>Open outer modal</Menu.ItemLabel>
341
- </Menu.Item>
342
- <Menu.Item
343
- onClick={ () => setInnerModalOpen( true ) }
344
- hideOnClick={ false }
345
- >
346
- <Menu.ItemLabel>Open inner modal</Menu.ItemLabel>
347
- </Menu.Item>
348
- { isInnerModalOpen && (
421
+ return (
422
+ <>
423
+ <Menu { ...props }>
424
+ <Menu.TriggerButton
425
+ render={
426
+ <Button __next40pxDefaultSize variant="secondary" />
427
+ }
428
+ >
429
+ Open menu
430
+ </Menu.TriggerButton>
431
+ <Menu.Popover>
432
+ <Menu.Item
433
+ onClick={ () => setOuterModalOpen( true ) }
434
+ hideOnClick={ false }
435
+ >
436
+ <Menu.ItemLabel>Open outer modal</Menu.ItemLabel>
437
+ </Menu.Item>
438
+ <Menu.Item
439
+ onClick={ () => setInnerModalOpen( true ) }
440
+ hideOnClick={ false }
441
+ >
442
+ <Menu.ItemLabel>Open inner modal</Menu.ItemLabel>
443
+ </Menu.Item>
444
+ { isInnerModalOpen && (
445
+ <Modal
446
+ onRequestClose={ () =>
447
+ setInnerModalOpen( false )
448
+ }
449
+ overlayClassName={ modalOverlayClassName }
450
+ >
451
+ Modal&apos;s contents
452
+ <button
453
+ onClick={ () => setInnerModalOpen( false ) }
454
+ >
455
+ Close
456
+ </button>
457
+ </Modal>
458
+ ) }
459
+ </Menu.Popover>
460
+ </Menu>
461
+ { isOuterModalOpen && (
349
462
  <Modal
350
- onRequestClose={ () => setInnerModalOpen( false ) }
463
+ onRequestClose={ () => setOuterModalOpen( false ) }
351
464
  overlayClassName={ modalOverlayClassName }
352
465
  >
353
466
  Modal&apos;s contents
354
- <button onClick={ () => setInnerModalOpen( false ) }>
467
+ <button onClick={ () => setOuterModalOpen( false ) }>
355
468
  Close
356
469
  </button>
357
470
  </Modal>
358
471
  ) }
359
- </Menu>
360
- { isOuterModalOpen && (
361
- <Modal
362
- onRequestClose={ () => setOuterModalOpen( false ) }
363
- overlayClassName={ modalOverlayClassName }
364
- >
365
- Modal&apos;s contents
366
- <button onClick={ () => setOuterModalOpen( false ) }>
367
- Close
368
- </button>
369
- </Modal>
370
- ) }
371
- </>
372
- );
373
- };
374
- WithModals.args = {
375
- ...Default.args,
472
+ </>
473
+ );
474
+ },
475
+
476
+ args: {
477
+ ...Default.args,
478
+ },
376
479
  };
377
480
 
378
481
  const ExampleSlotFill = createSlotFill( 'Example' );
@@ -423,37 +526,50 @@ const Fill = ( { children }: { children: React.ReactNode } ) => {
423
526
  );
424
527
  };
425
528
 
426
- export const WithSlotFill: StoryFn< typeof Menu > = ( props ) => {
427
- return (
428
- <SlotFillProvider>
429
- <Menu { ...props }>
430
- <Menu.Item>
431
- <Menu.ItemLabel>Item</Menu.ItemLabel>
432
- </Menu.Item>
433
- <Slot />
434
- </Menu>
435
-
436
- <Fill>
437
- <Menu.Item>
438
- <Menu.ItemLabel>Item from fill</Menu.ItemLabel>
439
- </Menu.Item>
440
- <Menu
441
- trigger={
529
+ export const WithSlotFill: StoryObj< typeof Menu > = {
530
+ render: ( props: MenuProps ) => {
531
+ return (
532
+ <SlotFillProvider>
533
+ <Menu { ...props }>
534
+ <Menu.TriggerButton
535
+ render={
536
+ <Button __next40pxDefaultSize variant="secondary" />
537
+ }
538
+ >
539
+ Open menu
540
+ </Menu.TriggerButton>
541
+ <Menu.Popover>
442
542
  <Menu.Item>
443
- <Menu.ItemLabel>Submenu from fill</Menu.ItemLabel>
543
+ <Menu.ItemLabel>Item</Menu.ItemLabel>
444
544
  </Menu.Item>
445
- }
446
- >
545
+ <Slot />
546
+ </Menu.Popover>
547
+ </Menu>
548
+
549
+ <Fill>
447
550
  <Menu.Item>
448
- <Menu.ItemLabel>Submenu item from fill</Menu.ItemLabel>
551
+ <Menu.ItemLabel>Item from fill</Menu.ItemLabel>
449
552
  </Menu.Item>
450
- </Menu>
451
- </Fill>
452
- </SlotFillProvider>
453
- );
454
- };
455
- WithSlotFill.args = {
456
- ...Default.args,
553
+ <Menu>
554
+ <Menu.SubmenuTriggerItem>
555
+ <Menu.ItemLabel>Submenu from fill</Menu.ItemLabel>
556
+ </Menu.SubmenuTriggerItem>
557
+ <Menu.Popover>
558
+ <Menu.Item>
559
+ <Menu.ItemLabel>
560
+ Submenu item from fill
561
+ </Menu.ItemLabel>
562
+ </Menu.Item>
563
+ </Menu.Popover>
564
+ </Menu>
565
+ </Fill>
566
+ </SlotFillProvider>
567
+ );
568
+ },
569
+
570
+ args: {
571
+ ...Default.args,
572
+ },
457
573
  };
458
574
 
459
575
  const toolbarVariantContextValue = {
@@ -461,83 +577,119 @@ const toolbarVariantContextValue = {
461
577
  variant: 'toolbar',
462
578
  },
463
579
  };
464
- export const ToolbarVariant: StoryFn< typeof Menu > = ( props ) => (
465
- // TODO: add toolbar
466
- <ContextSystemProvider value={ toolbarVariantContextValue }>
467
- <Menu { ...props }>
468
- <Menu.Item>
469
- <Menu.ItemLabel>Level 1 item</Menu.ItemLabel>
470
- </Menu.Item>
471
- <Menu.Item>
472
- <Menu.ItemLabel>Level 1 item</Menu.ItemLabel>
473
- </Menu.Item>
474
- <Menu.Separator />
475
- <Menu
476
- trigger={
580
+
581
+ export const ToolbarVariant: StoryObj< typeof Menu > = {
582
+ render: ( props: MenuProps ) => (
583
+ // TODO: add toolbar
584
+ <ContextSystemProvider value={ toolbarVariantContextValue }>
585
+ <Menu { ...props }>
586
+ <Menu.TriggerButton
587
+ render={
588
+ <Button __next40pxDefaultSize variant="secondary" />
589
+ }
590
+ >
591
+ Open menu
592
+ </Menu.TriggerButton>
593
+ <Menu.Popover>
477
594
  <Menu.Item>
478
- <Menu.ItemLabel>Submenu trigger</Menu.ItemLabel>
595
+ <Menu.ItemLabel>Level 1 item</Menu.ItemLabel>
479
596
  </Menu.Item>
480
- }
481
- >
482
- <Menu.Item>
483
- <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
484
- </Menu.Item>
597
+ <Menu.Item>
598
+ <Menu.ItemLabel>Level 1 item</Menu.ItemLabel>
599
+ </Menu.Item>
600
+ <Menu.Separator />
601
+ <Menu>
602
+ <Menu.SubmenuTriggerItem>
603
+ <Menu.ItemLabel>Submenu trigger</Menu.ItemLabel>
604
+ </Menu.SubmenuTriggerItem>
605
+ <Menu.Popover>
606
+ <Menu.Item>
607
+ <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
608
+ </Menu.Item>
609
+ </Menu.Popover>
610
+ </Menu>
611
+ </Menu.Popover>
485
612
  </Menu>
486
- </Menu>
487
- </ContextSystemProvider>
488
- );
489
- ToolbarVariant.args = {
490
- ...Default.args,
613
+ </ContextSystemProvider>
614
+ ),
615
+
616
+ args: {
617
+ ...Default.args,
618
+ },
491
619
  };
492
620
 
493
- export const InsideModal: StoryFn< typeof Menu > = ( props ) => {
494
- const [ isModalOpen, setModalOpen ] = useState( false );
495
- return (
496
- <>
497
- <Button
498
- onClick={ () => setModalOpen( true ) }
499
- __next40pxDefaultSize
500
- variant="secondary"
501
- >
502
- Open modal
503
- </Button>
504
- { isModalOpen && (
505
- <Modal onRequestClose={ () => setModalOpen( false ) }>
506
- <Menu { ...props }>
507
- <Menu.Item>
508
- <Menu.ItemLabel>Level 1 item</Menu.ItemLabel>
509
- </Menu.Item>
510
- <Menu.Item>
511
- <Menu.ItemLabel>Level 1 item</Menu.ItemLabel>
512
- </Menu.Item>
513
- <Menu.Separator />
514
- <Menu
515
- trigger={
621
+ export const InsideModal: StoryObj< typeof Menu > = {
622
+ render: function InsideModal( props: MenuProps ) {
623
+ const [ isModalOpen, setModalOpen ] = useState( false );
624
+ return (
625
+ <>
626
+ <Button
627
+ onClick={ () => setModalOpen( true ) }
628
+ __next40pxDefaultSize
629
+ variant="secondary"
630
+ >
631
+ Open modal
632
+ </Button>
633
+ { isModalOpen && (
634
+ <Modal
635
+ onRequestClose={ () => setModalOpen( false ) }
636
+ title="Menu inside modal"
637
+ >
638
+ <Menu { ...props }>
639
+ <Menu.TriggerButton
640
+ render={
641
+ <Button
642
+ __next40pxDefaultSize
643
+ variant="secondary"
644
+ />
645
+ }
646
+ >
647
+ Open menu
648
+ </Menu.TriggerButton>
649
+ <Menu.Popover>
516
650
  <Menu.Item>
517
651
  <Menu.ItemLabel>
518
- Submenu trigger
652
+ Level 1 item
519
653
  </Menu.ItemLabel>
520
654
  </Menu.Item>
521
- }
522
- >
523
- <Menu.Item>
524
- <Menu.ItemLabel>Level 2 item</Menu.ItemLabel>
525
- </Menu.Item>
655
+ <Menu.Item>
656
+ <Menu.ItemLabel>
657
+ Level 1 item
658
+ </Menu.ItemLabel>
659
+ </Menu.Item>
660
+ <Menu.Separator />
661
+ <Menu>
662
+ <Menu.SubmenuTriggerItem>
663
+ <Menu.ItemLabel>
664
+ Submenu trigger
665
+ </Menu.ItemLabel>
666
+ </Menu.SubmenuTriggerItem>
667
+ <Menu.Popover>
668
+ <Menu.Item>
669
+ <Menu.ItemLabel>
670
+ Level 2 item
671
+ </Menu.ItemLabel>
672
+ </Menu.Item>
673
+ </Menu.Popover>
674
+ </Menu>
675
+ </Menu.Popover>
526
676
  </Menu>
527
- </Menu>
528
- <Button onClick={ () => setModalOpen( false ) }>
529
- Close modal
530
- </Button>
531
- </Modal>
532
- ) }
533
- </>
534
- );
535
- };
536
- InsideModal.args = {
537
- ...Default.args,
538
- };
539
- InsideModal.parameters = {
540
- docs: {
541
- source: { type: 'code' },
677
+ <Button onClick={ () => setModalOpen( false ) }>
678
+ Close modal
679
+ </Button>
680
+ </Modal>
681
+ ) }
682
+ </>
683
+ );
684
+ },
685
+
686
+ args: {
687
+ ...Default.args,
688
+ },
689
+
690
+ parameters: {
691
+ docs: {
692
+ source: { type: 'code' },
693
+ },
542
694
  },
543
695
  };