@kushagradhawan/kookie-ui 0.1.17 → 0.1.18

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 (276) hide show
  1. package/components.css +3730 -1072
  2. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/base-button.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.js.map +3 -3
  5. package/dist/cjs/components/_internal/base-button.props.d.ts +9 -0
  6. package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
  7. package/dist/cjs/components/_internal/base-button.props.js +1 -1
  8. package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
  9. package/dist/cjs/components/_internal/base-menu.props.d.ts +5 -0
  10. package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
  11. package/dist/cjs/components/_internal/base-menu.props.js +1 -1
  12. package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
  13. package/dist/cjs/components/_internal/base-tab-list.props.d.ts +5 -0
  14. package/dist/cjs/components/_internal/base-tab-list.props.d.ts.map +1 -1
  15. package/dist/cjs/components/_internal/base-tab-list.props.js +1 -1
  16. package/dist/cjs/components/_internal/base-tab-list.props.js.map +3 -3
  17. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  18. package/dist/cjs/components/alert-dialog.js +1 -1
  19. package/dist/cjs/components/alert-dialog.js.map +3 -3
  20. package/dist/cjs/components/avatar.d.ts.map +1 -1
  21. package/dist/cjs/components/avatar.js +1 -1
  22. package/dist/cjs/components/avatar.js.map +3 -3
  23. package/dist/cjs/components/avatar.props.d.ts +6 -1
  24. package/dist/cjs/components/avatar.props.d.ts.map +1 -1
  25. package/dist/cjs/components/avatar.props.js +1 -1
  26. package/dist/cjs/components/avatar.props.js.map +3 -3
  27. package/dist/cjs/components/badge.d.ts.map +1 -1
  28. package/dist/cjs/components/badge.js +1 -1
  29. package/dist/cjs/components/badge.js.map +3 -3
  30. package/dist/cjs/components/badge.props.d.ts +6 -1
  31. package/dist/cjs/components/badge.props.d.ts.map +1 -1
  32. package/dist/cjs/components/badge.props.js +1 -1
  33. package/dist/cjs/components/badge.props.js.map +2 -2
  34. package/dist/cjs/components/callout.d.ts.map +1 -1
  35. package/dist/cjs/components/callout.js +1 -1
  36. package/dist/cjs/components/callout.js.map +3 -3
  37. package/dist/cjs/components/callout.props.d.ts +5 -0
  38. package/dist/cjs/components/callout.props.d.ts.map +1 -1
  39. package/dist/cjs/components/callout.props.js +1 -1
  40. package/dist/cjs/components/callout.props.js.map +3 -3
  41. package/dist/cjs/components/card.d.ts.map +1 -1
  42. package/dist/cjs/components/card.js +1 -1
  43. package/dist/cjs/components/card.js.map +3 -3
  44. package/dist/cjs/components/card.props.d.ts +11 -2
  45. package/dist/cjs/components/card.props.d.ts.map +1 -1
  46. package/dist/cjs/components/card.props.js +1 -1
  47. package/dist/cjs/components/card.props.js.map +3 -3
  48. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  49. package/dist/cjs/components/context-menu.js +1 -1
  50. package/dist/cjs/components/context-menu.js.map +3 -3
  51. package/dist/cjs/components/dialog.d.ts.map +1 -1
  52. package/dist/cjs/components/dialog.js +1 -1
  53. package/dist/cjs/components/dialog.js.map +3 -3
  54. package/dist/cjs/components/dialog.props.d.ts +5 -0
  55. package/dist/cjs/components/dialog.props.d.ts.map +1 -1
  56. package/dist/cjs/components/dialog.props.js +1 -1
  57. package/dist/cjs/components/dialog.props.js.map +3 -3
  58. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  59. package/dist/cjs/components/dropdown-menu.js +1 -1
  60. package/dist/cjs/components/dropdown-menu.js.map +3 -3
  61. package/dist/cjs/components/image.d.ts +6 -1
  62. package/dist/cjs/components/image.d.ts.map +1 -1
  63. package/dist/cjs/components/image.js +1 -1
  64. package/dist/cjs/components/image.js.map +3 -3
  65. package/dist/cjs/components/popover.d.ts.map +1 -1
  66. package/dist/cjs/components/popover.js +1 -1
  67. package/dist/cjs/components/popover.js.map +3 -3
  68. package/dist/cjs/components/popover.props.d.ts +5 -0
  69. package/dist/cjs/components/popover.props.d.ts.map +1 -1
  70. package/dist/cjs/components/popover.props.js +1 -1
  71. package/dist/cjs/components/popover.props.js.map +3 -3
  72. package/dist/cjs/components/select.d.ts.map +1 -1
  73. package/dist/cjs/components/select.js +1 -1
  74. package/dist/cjs/components/select.js.map +3 -3
  75. package/dist/cjs/components/select.props.d.ts +6 -1
  76. package/dist/cjs/components/select.props.d.ts.map +1 -1
  77. package/dist/cjs/components/select.props.js +1 -1
  78. package/dist/cjs/components/select.props.js.map +2 -2
  79. package/dist/cjs/components/sidebar.d.ts +13 -2
  80. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  81. package/dist/cjs/components/sidebar.js +1 -1
  82. package/dist/cjs/components/sidebar.js.map +3 -3
  83. package/dist/cjs/components/sidebar.props.d.ts +5 -0
  84. package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
  85. package/dist/cjs/components/sidebar.props.js +1 -1
  86. package/dist/cjs/components/sidebar.props.js.map +2 -2
  87. package/dist/cjs/components/tabs.d.ts.map +1 -1
  88. package/dist/cjs/components/tabs.js +1 -1
  89. package/dist/cjs/components/tabs.js.map +3 -3
  90. package/dist/cjs/components/text-area.d.ts.map +1 -1
  91. package/dist/cjs/components/text-area.js +1 -1
  92. package/dist/cjs/components/text-area.js.map +3 -3
  93. package/dist/cjs/components/text-area.props.d.ts +6 -1
  94. package/dist/cjs/components/text-area.props.d.ts.map +1 -1
  95. package/dist/cjs/components/text-area.props.js +1 -1
  96. package/dist/cjs/components/text-area.props.js.map +3 -3
  97. package/dist/cjs/components/text-field.d.ts.map +1 -1
  98. package/dist/cjs/components/text-field.js +2 -2
  99. package/dist/cjs/components/text-field.js.map +3 -3
  100. package/dist/cjs/components/text-field.props.d.ts +6 -1
  101. package/dist/cjs/components/text-field.props.d.ts.map +1 -1
  102. package/dist/cjs/components/text-field.props.js +1 -1
  103. package/dist/cjs/components/text-field.props.js.map +3 -3
  104. package/dist/cjs/components/theme.d.ts.map +1 -1
  105. package/dist/cjs/components/theme.js +1 -1
  106. package/dist/cjs/components/theme.js.map +2 -2
  107. package/dist/cjs/helpers/map-prop-values.js +1 -1
  108. package/dist/cjs/helpers/map-prop-values.js.map +2 -2
  109. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  110. package/dist/esm/components/_internal/base-button.js +1 -1
  111. package/dist/esm/components/_internal/base-button.js.map +3 -3
  112. package/dist/esm/components/_internal/base-button.props.d.ts +9 -0
  113. package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
  114. package/dist/esm/components/_internal/base-button.props.js +1 -1
  115. package/dist/esm/components/_internal/base-button.props.js.map +3 -3
  116. package/dist/esm/components/_internal/base-menu.props.d.ts +5 -0
  117. package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
  118. package/dist/esm/components/_internal/base-menu.props.js +1 -1
  119. package/dist/esm/components/_internal/base-menu.props.js.map +3 -3
  120. package/dist/esm/components/_internal/base-tab-list.props.d.ts +5 -0
  121. package/dist/esm/components/_internal/base-tab-list.props.d.ts.map +1 -1
  122. package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
  123. package/dist/esm/components/_internal/base-tab-list.props.js.map +3 -3
  124. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  125. package/dist/esm/components/alert-dialog.js +1 -1
  126. package/dist/esm/components/alert-dialog.js.map +3 -3
  127. package/dist/esm/components/avatar.d.ts.map +1 -1
  128. package/dist/esm/components/avatar.js +1 -1
  129. package/dist/esm/components/avatar.js.map +3 -3
  130. package/dist/esm/components/avatar.props.d.ts +6 -1
  131. package/dist/esm/components/avatar.props.d.ts.map +1 -1
  132. package/dist/esm/components/avatar.props.js +1 -1
  133. package/dist/esm/components/avatar.props.js.map +3 -3
  134. package/dist/esm/components/badge.d.ts.map +1 -1
  135. package/dist/esm/components/badge.js +1 -1
  136. package/dist/esm/components/badge.js.map +3 -3
  137. package/dist/esm/components/badge.props.d.ts +6 -1
  138. package/dist/esm/components/badge.props.d.ts.map +1 -1
  139. package/dist/esm/components/badge.props.js +1 -1
  140. package/dist/esm/components/badge.props.js.map +2 -2
  141. package/dist/esm/components/callout.d.ts.map +1 -1
  142. package/dist/esm/components/callout.js +1 -1
  143. package/dist/esm/components/callout.js.map +3 -3
  144. package/dist/esm/components/callout.props.d.ts +5 -0
  145. package/dist/esm/components/callout.props.d.ts.map +1 -1
  146. package/dist/esm/components/callout.props.js +1 -1
  147. package/dist/esm/components/callout.props.js.map +3 -3
  148. package/dist/esm/components/card.d.ts.map +1 -1
  149. package/dist/esm/components/card.js +1 -1
  150. package/dist/esm/components/card.js.map +3 -3
  151. package/dist/esm/components/card.props.d.ts +11 -2
  152. package/dist/esm/components/card.props.d.ts.map +1 -1
  153. package/dist/esm/components/card.props.js +1 -1
  154. package/dist/esm/components/card.props.js.map +3 -3
  155. package/dist/esm/components/context-menu.d.ts.map +1 -1
  156. package/dist/esm/components/context-menu.js +1 -1
  157. package/dist/esm/components/context-menu.js.map +3 -3
  158. package/dist/esm/components/dialog.d.ts.map +1 -1
  159. package/dist/esm/components/dialog.js +1 -1
  160. package/dist/esm/components/dialog.js.map +3 -3
  161. package/dist/esm/components/dialog.props.d.ts +5 -0
  162. package/dist/esm/components/dialog.props.d.ts.map +1 -1
  163. package/dist/esm/components/dialog.props.js +1 -1
  164. package/dist/esm/components/dialog.props.js.map +3 -3
  165. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  166. package/dist/esm/components/dropdown-menu.js +1 -1
  167. package/dist/esm/components/dropdown-menu.js.map +3 -3
  168. package/dist/esm/components/image.d.ts +6 -1
  169. package/dist/esm/components/image.d.ts.map +1 -1
  170. package/dist/esm/components/image.js +1 -1
  171. package/dist/esm/components/image.js.map +3 -3
  172. package/dist/esm/components/popover.d.ts.map +1 -1
  173. package/dist/esm/components/popover.js +1 -1
  174. package/dist/esm/components/popover.js.map +3 -3
  175. package/dist/esm/components/popover.props.d.ts +5 -0
  176. package/dist/esm/components/popover.props.d.ts.map +1 -1
  177. package/dist/esm/components/popover.props.js +1 -1
  178. package/dist/esm/components/popover.props.js.map +3 -3
  179. package/dist/esm/components/select.d.ts.map +1 -1
  180. package/dist/esm/components/select.js +1 -1
  181. package/dist/esm/components/select.js.map +3 -3
  182. package/dist/esm/components/select.props.d.ts +6 -1
  183. package/dist/esm/components/select.props.d.ts.map +1 -1
  184. package/dist/esm/components/select.props.js +1 -1
  185. package/dist/esm/components/select.props.js.map +2 -2
  186. package/dist/esm/components/sidebar.d.ts +13 -2
  187. package/dist/esm/components/sidebar.d.ts.map +1 -1
  188. package/dist/esm/components/sidebar.js +1 -1
  189. package/dist/esm/components/sidebar.js.map +3 -3
  190. package/dist/esm/components/sidebar.props.d.ts +5 -0
  191. package/dist/esm/components/sidebar.props.d.ts.map +1 -1
  192. package/dist/esm/components/sidebar.props.js +1 -1
  193. package/dist/esm/components/sidebar.props.js.map +2 -2
  194. package/dist/esm/components/tabs.d.ts.map +1 -1
  195. package/dist/esm/components/tabs.js +1 -1
  196. package/dist/esm/components/tabs.js.map +3 -3
  197. package/dist/esm/components/text-area.d.ts.map +1 -1
  198. package/dist/esm/components/text-area.js +1 -1
  199. package/dist/esm/components/text-area.js.map +3 -3
  200. package/dist/esm/components/text-area.props.d.ts +6 -1
  201. package/dist/esm/components/text-area.props.d.ts.map +1 -1
  202. package/dist/esm/components/text-area.props.js +1 -1
  203. package/dist/esm/components/text-area.props.js.map +3 -3
  204. package/dist/esm/components/text-field.d.ts.map +1 -1
  205. package/dist/esm/components/text-field.js +2 -2
  206. package/dist/esm/components/text-field.js.map +3 -3
  207. package/dist/esm/components/text-field.props.d.ts +6 -1
  208. package/dist/esm/components/text-field.props.d.ts.map +1 -1
  209. package/dist/esm/components/text-field.props.js +1 -1
  210. package/dist/esm/components/text-field.props.js.map +3 -3
  211. package/dist/esm/components/theme.d.ts.map +1 -1
  212. package/dist/esm/components/theme.js +1 -1
  213. package/dist/esm/components/theme.js.map +2 -2
  214. package/dist/esm/helpers/map-prop-values.js +1 -1
  215. package/dist/esm/helpers/map-prop-values.js.map +2 -2
  216. package/package.json +1 -1
  217. package/src/components/_internal/base-button.css +518 -110
  218. package/src/components/_internal/base-button.props.ts +5 -0
  219. package/src/components/_internal/base-button.tsx +4 -0
  220. package/src/components/_internal/base-card.css +59 -11
  221. package/src/components/_internal/base-dialog.css +26 -9
  222. package/src/components/_internal/base-menu.css +192 -21
  223. package/src/components/_internal/base-menu.props.ts +7 -0
  224. package/src/components/_internal/base-tab-list.css +56 -5
  225. package/src/components/_internal/base-tab-list.props.ts +3 -0
  226. package/src/components/alert-dialog.tsx +22 -7
  227. package/src/components/animations.css +31 -0
  228. package/src/components/avatar.css +436 -9
  229. package/src/components/avatar.props.tsx +4 -1
  230. package/src/components/avatar.tsx +19 -6
  231. package/src/components/badge.css +222 -7
  232. package/src/components/badge.props.tsx +3 -1
  233. package/src/components/badge.tsx +3 -2
  234. package/src/components/button.css +17 -17
  235. package/src/components/callout.css +75 -6
  236. package/src/components/callout.props.tsx +3 -0
  237. package/src/components/callout.tsx +6 -5
  238. package/src/components/card.css +361 -44
  239. package/src/components/card.props.tsx +7 -2
  240. package/src/components/card.tsx +7 -1
  241. package/src/components/context-menu.tsx +47 -22
  242. package/src/components/dialog.props.tsx +3 -0
  243. package/src/components/dialog.tsx +22 -7
  244. package/src/components/dropdown-menu.css +10 -10
  245. package/src/components/dropdown-menu.tsx +37 -11
  246. package/src/components/icon-button.css +36 -8
  247. package/src/components/image.tsx +92 -73
  248. package/src/components/kbd.css +122 -54
  249. package/src/components/popover.css +22 -3
  250. package/src/components/popover.props.tsx +3 -0
  251. package/src/components/popover.tsx +15 -8
  252. package/src/components/select.css +386 -95
  253. package/src/components/select.props.tsx +7 -1
  254. package/src/components/select.tsx +21 -13
  255. package/src/components/sidebar.css +201 -86
  256. package/src/components/sidebar.props.tsx +15 -3
  257. package/src/components/sidebar.tsx +306 -235
  258. package/src/components/tabs.css +3 -1
  259. package/src/components/tabs.tsx +8 -3
  260. package/src/components/text-area.css +323 -32
  261. package/src/components/text-area.props.tsx +4 -1
  262. package/src/components/text-area.tsx +3 -2
  263. package/src/components/text-field.css +336 -15
  264. package/src/components/text-field.props.tsx +4 -1
  265. package/src/components/text-field.tsx +5 -7
  266. package/src/components/theme.tsx +11 -9
  267. package/src/helpers/map-prop-values.ts +1 -1
  268. package/src/styles/tokens/color.css +19 -5
  269. package/src/styles/tokens/constants.css +118 -0
  270. package/src/styles/tokens/index.css +1 -0
  271. package/src/styles/tokens/radius.css +9 -6
  272. package/src/styles/tokens/shadow.css +10 -10
  273. package/src/styles/tokens/transition.css +33 -1
  274. package/styles.css +3846 -1089
  275. package/tokens/base.css +51 -22
  276. package/tokens.css +133 -34
@@ -15,6 +15,7 @@ import { Theme, useThemeContext } from './theme.js';
15
15
  import { ThickCheckIcon, ThickChevronRightIcon } from './icons.js';
16
16
  import { extractProps } from '../helpers/extract-props.js';
17
17
  import { requireReactElement } from '../helpers/require-react-element.js';
18
+ import { Kbd } from './kbd.js';
18
19
 
19
20
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
20
21
  import type { GetPropDefTypes } from '../props/prop-def.js';
@@ -34,7 +35,7 @@ const ContextMenuTrigger = React.forwardRef<ContextMenuTriggerElement, ContextMe
34
35
  <ContextMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>
35
36
  {requireReactElement(children)}
36
37
  </ContextMenuPrimitive.Trigger>
37
- )
38
+ ),
38
39
  );
39
40
  ContextMenuTrigger.displayName = 'ContextMenu.Trigger';
40
41
 
@@ -54,17 +55,24 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
54
55
  size = contextMenuContentPropDefs.size.default,
55
56
  variant = contextMenuContentPropDefs.variant.default,
56
57
  highContrast = contextMenuContentPropDefs.highContrast.default,
58
+ panelBackground = props.panelBackground ?? themeContext.panelBackground,
57
59
  } = props;
58
- const { className, children, color, container, forceMount, ...contentProps } = extractProps(
59
- props,
60
- contextMenuContentPropDefs
61
- );
60
+ const {
61
+ className,
62
+ children,
63
+ color,
64
+ container,
65
+ forceMount,
66
+ panelBackground: _,
67
+ ...contentProps
68
+ } = extractProps(props, contextMenuContentPropDefs);
62
69
  const resolvedColor = color || themeContext.accentColor;
63
70
  return (
64
71
  <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>
65
72
  <Theme asChild>
66
73
  <ContextMenuPrimitive.Content
67
74
  data-accent-color={resolvedColor}
75
+ data-panel-background={panelBackground}
68
76
  alignOffset={-Number(size) * 4}
69
77
  collisionPadding={10}
70
78
  {...contentProps}
@@ -74,15 +82,15 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
74
82
  'rt-PopperContent',
75
83
  'rt-BaseMenuContent',
76
84
  'rt-ContextMenuContent',
77
- className
85
+ className,
78
86
  )}
79
87
  >
80
88
  <ScrollArea type="auto">
81
89
  <div className={classNames('rt-BaseMenuViewport', 'rt-ContextMenuViewport')}>
82
90
  <ContextMenuContentContext.Provider
83
91
  value={React.useMemo(
84
- () => ({ size, variant, color: resolvedColor, highContrast }),
85
- [size, variant, resolvedColor, highContrast]
92
+ () => ({ size, variant, color: resolvedColor, highContrast, panelBackground }),
93
+ [size, variant, resolvedColor, highContrast, panelBackground],
86
94
  )}
87
95
  >
88
96
  {children}
@@ -93,7 +101,7 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
93
101
  </Theme>
94
102
  </ContextMenuPrimitive.Portal>
95
103
  );
96
- }
104
+ },
97
105
  );
98
106
  ContextMenuContent.displayName = 'ContextMenu.Content';
99
107
 
@@ -108,7 +116,7 @@ const ContextMenuLabel = React.forwardRef<ContextMenuLabelElement, ContextMenuLa
108
116
  ref={forwardedRef}
109
117
  className={classNames('rt-BaseMenuLabel', 'rt-ContextMenuLabel', className)}
110
118
  />
111
- )
119
+ ),
112
120
  );
113
121
  ContextMenuLabel.displayName = 'ContextMenu.Label';
114
122
 
@@ -134,10 +142,14 @@ const ContextMenuItem = React.forwardRef<ContextMenuItemElement, ContextMenuItem
134
142
  className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-ContextMenuItem', className)}
135
143
  >
136
144
  <Slot.Slottable>{children}</Slot.Slottable>
137
- {shortcut && <div className="rt-BaseMenuShortcut rt-ContextMenuShortcut">{shortcut}</div>}
145
+ {shortcut && (
146
+ <div className="rt-BaseMenuShortcut rt-ContextMenuShortcut">
147
+ <Kbd size="1">{shortcut}</Kbd>
148
+ </div>
149
+ )}
138
150
  </ContextMenuPrimitive.Item>
139
151
  );
140
- }
152
+ },
141
153
  );
142
154
  ContextMenuItem.displayName = 'ContextMenu.Item';
143
155
 
@@ -152,7 +164,7 @@ const ContextMenuGroup = React.forwardRef<ContextMenuGroupElement, ContextMenuGr
152
164
  ref={forwardedRef}
153
165
  className={classNames('rt-BaseMenuGroup', 'rt-ContextMenuGroup', className)}
154
166
  />
155
- )
167
+ ),
156
168
  );
157
169
  ContextMenuGroup.displayName = 'ContextMenu.Group';
158
170
 
@@ -198,7 +210,7 @@ const ContextMenuRadioItem = React.forwardRef<
198
210
  'rt-BaseMenuRadioItem',
199
211
  'rt-ContextMenuItem',
200
212
  'rt-ContextMenuRadioItem',
201
- className
213
+ className,
202
214
  )}
203
215
  >
204
216
  <Slot.Slottable>{children}</Slot.Slottable>
@@ -237,14 +249,18 @@ const ContextMenuCheckboxItem = React.forwardRef<
237
249
  'rt-BaseMenuCheckboxItem',
238
250
  'rt-ContextMenuItem',
239
251
  'rt-ContextMenuCheckboxItem',
240
- className
252
+ className,
241
253
  )}
242
254
  >
243
255
  <Slot.Slottable>{children}</Slot.Slottable>
244
256
  <ContextMenuPrimitive.ItemIndicator className="rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator">
245
257
  <ThickCheckIcon className="rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon" />
246
258
  </ContextMenuPrimitive.ItemIndicator>
247
- {shortcut && <div className="rt-BaseMenuShortcut rt-ContextMenuShortcut">{shortcut}</div>}
259
+ {shortcut && (
260
+ <div className="rt-BaseMenuShortcut rt-ContextMenuShortcut">
261
+ <Kbd size="1">{shortcut}</Kbd>
262
+ </div>
263
+ )}
248
264
  </ContextMenuPrimitive.CheckboxItem>
249
265
  );
250
266
  });
@@ -275,7 +291,7 @@ const ContextMenuSubTrigger = React.forwardRef<
275
291
  'rt-BaseMenuSubTrigger',
276
292
  'rt-ContextMenuItem',
277
293
  'rt-ContextMenuSubTrigger',
278
- className
294
+ className,
279
295
  )}
280
296
  >
281
297
  {children}
@@ -296,16 +312,25 @@ const ContextMenuSubContent = React.forwardRef<
296
312
  ContextMenuSubContentElement,
297
313
  ContextMenuSubContentProps
298
314
  >((props, forwardedRef) => {
299
- const { size, variant, color, highContrast } = React.useContext(ContextMenuContentContext);
300
- const { className, children, container, forceMount, ...subContentProps } = extractProps(
301
- { size, variant, color, highContrast, ...props },
302
- contextMenuContentPropDefs
315
+ const { size, variant, color, highContrast, panelBackground } =
316
+ React.useContext(ContextMenuContentContext);
317
+ const {
318
+ className,
319
+ children,
320
+ container,
321
+ forceMount,
322
+ panelBackground: _,
323
+ ...subContentProps
324
+ } = extractProps(
325
+ { size, variant, color, highContrast, panelBackground, ...props },
326
+ contextMenuContentPropDefs,
303
327
  );
304
328
  return (
305
329
  <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>
306
330
  <Theme asChild>
307
331
  <ContextMenuPrimitive.SubContent
308
332
  data-accent-color={color}
333
+ data-panel-background={panelBackground}
309
334
  alignOffset={-Number(size) * 4}
310
335
  // Side offset accounts for the outer solid box-shadow
311
336
  sideOffset={1}
@@ -319,7 +344,7 @@ const ContextMenuSubContent = React.forwardRef<
319
344
  'rt-BaseMenuSubContent',
320
345
  'rt-ContextMenuContent',
321
346
  'rt-ContextMenuSubContent',
322
- className
347
+ className,
323
348
  )}
324
349
  >
325
350
  <ScrollArea type="auto">
@@ -7,6 +7,7 @@ import type { PropDef, GetPropDefTypes } from '../props/prop-def.js';
7
7
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
8
8
  const alignValues = ['start', 'center'] as const;
9
9
  const contentSizes = ['1', '2', '3', '4'] as const;
10
+ const panelBackgrounds = ['solid', 'translucent'] as const;
10
11
 
11
12
  const dialogContentPropDefs = {
12
13
  ...asChildPropDef,
@@ -23,6 +24,7 @@ const dialogContentPropDefs = {
23
24
  default: '3',
24
25
  responsive: true,
25
26
  },
27
+ panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },
26
28
  width: widthPropDefs.width,
27
29
  minWidth: widthPropDefs.minWidth,
28
30
  maxWidth: { ...widthPropDefs.maxWidth, default: '600px' },
@@ -30,6 +32,7 @@ const dialogContentPropDefs = {
30
32
  } satisfies {
31
33
  align: PropDef<(typeof alignValues)[number]>;
32
34
  size: PropDef<(typeof contentSizes)[number]>;
35
+ panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
33
36
  width: PropDef<string>;
34
37
  minWidth: PropDef<string>;
35
38
  maxWidth: PropDef<string>;
@@ -28,7 +28,7 @@ const DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>
28
28
  <DialogPrimitive.Trigger {...props} ref={forwardedRef} asChild>
29
29
  {requireReactElement(children)}
30
30
  </DialogPrimitive.Trigger>
31
- )
31
+ ),
32
32
  );
33
33
  DialogTrigger.displayName = 'Dialog.Trigger';
34
34
 
@@ -40,9 +40,23 @@ interface DialogContentProps
40
40
  }
41
41
  const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(
42
42
  ({ align, ...props }, forwardedRef) => {
43
- const { align: alignPropDef, ...propDefs } = dialogContentPropDefs;
43
+ const {
44
+ align: alignPropDef,
45
+ panelBackground: panelBackgroundPropDef,
46
+ ...propDefs
47
+ } = dialogContentPropDefs;
44
48
  const { className: alignClassName } = extractProps({ align }, { align: alignPropDef });
45
- const { className, forceMount, container, ...contentProps } = extractProps(props, propDefs);
49
+ const { panelBackground } = extractProps(
50
+ { panelBackground: props.panelBackground },
51
+ { panelBackground: panelBackgroundPropDef },
52
+ );
53
+ const {
54
+ className,
55
+ forceMount,
56
+ container,
57
+ panelBackground: _,
58
+ ...contentProps
59
+ } = extractProps(props, propDefs);
46
60
  return (
47
61
  <DialogPrimitive.Portal container={container} forceMount={forceMount}>
48
62
  <Theme asChild>
@@ -55,6 +69,7 @@ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>
55
69
  {...contentProps}
56
70
  ref={forwardedRef}
57
71
  className={classNames('rt-BaseDialogContent', 'rt-DialogContent', className)}
72
+ data-panel-background={panelBackground}
58
73
  />
59
74
  </div>
60
75
  </div>
@@ -62,7 +77,7 @@ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>
62
77
  </Theme>
63
78
  </DialogPrimitive.Portal>
64
79
  );
65
- }
80
+ },
66
81
  );
67
82
  DialogContent.displayName = 'Dialog.Content';
68
83
 
@@ -73,7 +88,7 @@ const DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>(
73
88
  <DialogPrimitive.Title asChild>
74
89
  <Heading size="5" mb="3" trim="start" {...props} asChild={false} ref={forwardedRef} />
75
90
  </DialogPrimitive.Title>
76
- )
91
+ ),
77
92
  );
78
93
  DialogTitle.displayName = 'Dialog.Title';
79
94
 
@@ -84,7 +99,7 @@ const DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescr
84
99
  <DialogPrimitive.Description asChild>
85
100
  <Text as="p" size="3" {...props} asChild={false} ref={forwardedRef} />
86
101
  </DialogPrimitive.Description>
87
- )
102
+ ),
88
103
  );
89
104
  DialogDescription.displayName = 'Dialog.Description';
90
105
 
@@ -96,7 +111,7 @@ const DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(
96
111
  <DialogPrimitive.Close {...props} ref={forwardedRef} asChild>
97
112
  {requireReactElement(children)}
98
113
  </DialogPrimitive.Close>
99
- )
114
+ ),
100
115
  );
101
116
  DialogClose.displayName = 'Dialog.Close';
102
117
 
@@ -9,8 +9,8 @@
9
9
  flex-shrink: 0;
10
10
 
11
11
  /* Default size for when not in a sized button */
12
- width: 9px;
13
- height: 9px;
12
+ width: var(--trigger-icon-size-default);
13
+ height: var(--trigger-icon-size-default);
14
14
  }
15
15
 
16
16
  /***************************************************************************************************
@@ -22,25 +22,25 @@
22
22
  @breakpoints {
23
23
  /* Size 1 Button */
24
24
  .rt-Button:where(.rt-r-size-1) :where(.rt-DropdownMenuTriggerIcon) {
25
- width: 10px;
26
- height: 10px;
25
+ width: var(--trigger-icon-size-1);
26
+ height: var(--trigger-icon-size-1);
27
27
  }
28
28
 
29
29
  /* Size 2 Button */
30
30
  .rt-Button:where(.rt-r-size-2) :where(.rt-DropdownMenuTriggerIcon) {
31
- width: 11px;
32
- height: 11px;
31
+ width: var(--trigger-icon-size-2);
32
+ height: var(--trigger-icon-size-2);
33
33
  }
34
34
 
35
35
  /* Size 3 Button */
36
36
  .rt-Button:where(.rt-r-size-3) :where(.rt-DropdownMenuTriggerIcon) {
37
- width: 11px;
38
- height: 11px;
37
+ width: var(--trigger-icon-size-3);
38
+ height: var(--trigger-icon-size-3);
39
39
  }
40
40
 
41
41
  /* Size 4 Button */
42
42
  .rt-Button:where(.rt-r-size-4) :where(.rt-DropdownMenuTriggerIcon) {
43
- width: 12px;
44
- height: 12px;
43
+ width: var(--trigger-icon-size-4);
44
+ height: var(--trigger-icon-size-4);
45
45
  }
46
46
  }
@@ -15,6 +15,7 @@ import { Theme, useThemeContext } from './theme.js';
15
15
  import { ChevronDownIcon, ThickCheckIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';
16
16
  import { extractProps } from '../helpers/extract-props.js';
17
17
  import { requireReactElement } from '../helpers/require-react-element.js';
18
+ import { Kbd } from './kbd.js';
18
19
 
19
20
  import type { IconProps } from './icons.js';
20
21
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
@@ -55,17 +56,24 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
55
56
  size = dropdownMenuContentPropDefs.size.default,
56
57
  variant = dropdownMenuContentPropDefs.variant.default,
57
58
  highContrast = dropdownMenuContentPropDefs.highContrast.default,
59
+ panelBackground = props.panelBackground ?? themeContext.panelBackground,
58
60
  } = props;
59
- const { className, children, color, container, forceMount, ...contentProps } = extractProps(
60
- props,
61
- dropdownMenuContentPropDefs,
62
- );
61
+ const {
62
+ className,
63
+ children,
64
+ color,
65
+ container,
66
+ forceMount,
67
+ panelBackground: _,
68
+ ...contentProps
69
+ } = extractProps(props, dropdownMenuContentPropDefs);
63
70
  const resolvedColor = color || themeContext.accentColor;
64
71
  return (
65
72
  <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>
66
73
  <Theme asChild>
67
74
  <DropdownMenuPrimitive.Content
68
75
  data-accent-color={resolvedColor}
76
+ data-panel-background={panelBackground}
69
77
  align="start"
70
78
  sideOffset={4}
71
79
  collisionPadding={10}
@@ -83,8 +91,8 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
83
91
  <div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>
84
92
  <DropdownMenuContentContext.Provider
85
93
  value={React.useMemo(
86
- () => ({ size, variant, color: resolvedColor, highContrast }),
87
- [size, variant, resolvedColor, highContrast],
94
+ () => ({ size, variant, color: resolvedColor, highContrast, panelBackground }),
95
+ [size, variant, resolvedColor, highContrast, panelBackground],
88
96
  )}
89
97
  >
90
98
  {children}
@@ -136,7 +144,11 @@ const DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuI
136
144
  className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-DropdownMenuItem', className)}
137
145
  >
138
146
  <Slot.Slottable>{children}</Slot.Slottable>
139
- {shortcut && <div className="rt-BaseMenuShortcut rt-DropdownMenuShortcut">{shortcut}</div>}
147
+ {shortcut && (
148
+ <div className="rt-BaseMenuShortcut rt-DropdownMenuShortcut">
149
+ <Kbd size="1">{shortcut}</Kbd>
150
+ </div>
151
+ )}
140
152
  </DropdownMenuPrimitive.Item>
141
153
  );
142
154
  },
@@ -246,7 +258,11 @@ const DropdownMenuCheckboxItem = React.forwardRef<
246
258
  <DropdownMenuPrimitive.ItemIndicator className="rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator">
247
259
  <ThickCheckIcon className="rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon" />
248
260
  </DropdownMenuPrimitive.ItemIndicator>
249
- {shortcut && <div className="rt-BaseMenuShortcut rt-DropdownMenuShortcut">{shortcut}</div>}
261
+ {shortcut && (
262
+ <div className="rt-BaseMenuShortcut rt-DropdownMenuShortcut">
263
+ <Kbd size="1">{shortcut}</Kbd>
264
+ </div>
265
+ )}
250
266
  </DropdownMenuPrimitive.CheckboxItem>
251
267
  );
252
268
  });
@@ -298,9 +314,18 @@ const DropdownMenuSubContent = React.forwardRef<
298
314
  DropdownMenuSubContentElement,
299
315
  DropdownMenuSubContentProps
300
316
  >((props, forwardedRef) => {
301
- const { size, variant, color, highContrast } = React.useContext(DropdownMenuContentContext);
302
- const { className, children, container, forceMount, ...subContentProps } = extractProps(
303
- { size, variant, color, highContrast, ...props },
317
+ const { size, variant, color, highContrast, panelBackground } = React.useContext(
318
+ DropdownMenuContentContext,
319
+ );
320
+ const {
321
+ className,
322
+ children,
323
+ container,
324
+ forceMount,
325
+ panelBackground: _,
326
+ ...subContentProps
327
+ } = extractProps(
328
+ { size, variant, color, highContrast, panelBackground, ...props },
304
329
  dropdownMenuContentPropDefs,
305
330
  );
306
331
  return (
@@ -308,6 +333,7 @@ const DropdownMenuSubContent = React.forwardRef<
308
333
  <Theme asChild>
309
334
  <DropdownMenuPrimitive.SubContent
310
335
  data-accent-color={color}
336
+ data-panel-background={panelBackground}
311
337
  alignOffset={-Number(size) * 4}
312
338
  // Side offset accounts for the outer solid box-shadow
313
339
  sideOffset={1}
@@ -16,34 +16,62 @@
16
16
  &:where(.rt-r-size-1) {
17
17
  /* stylelint-disable-next-line selector-max-type */
18
18
  & :where(svg) {
19
- width: calc(var(--space-3) * 1.175);
20
- height: calc(var(--space-3) * 1.175);
19
+ width: var(--content-icon-size-1);
20
+ height: var(--content-icon-size-1);
21
21
  }
22
22
  }
23
23
  &:where(.rt-r-size-2) {
24
24
  /* stylelint-disable-next-line selector-max-type */
25
25
  & :where(svg) {
26
- width: var(--space-4);
27
- height: var(--space-4);
26
+ width: var(--content-icon-size-2);
27
+ height: var(--content-icon-size-2);
28
28
  }
29
29
  }
30
30
  &:where(.rt-r-size-3) {
31
31
  /* stylelint-disable-next-line selector-max-type */
32
32
  & :where(svg) {
33
- width: var(--space-5);
34
- height: var(--space-5);
33
+ width: var(--content-icon-size-3);
34
+ height: var(--content-icon-size-3);
35
35
  }
36
36
  }
37
37
  &:where(.rt-r-size-4) {
38
38
  /* stylelint-disable-next-line selector-max-type */
39
39
  & :where(svg) {
40
- width: var(--space-5);
41
- height: var(--space-5);
40
+ width: var(--content-icon-size-4);
41
+ height: var(--content-icon-size-4);
42
42
  }
43
43
  }
44
44
  }
45
45
 
46
46
  .rt-IconButton:where(.rt-variant-ghost) {
47
+ &:where([data-flush='true']) {
48
+ /* We reset the defined margin variables to avoid inheriting them from a higher component */
49
+ /* If a margin IS defined on the component itself, the utility class will win and reset it */
50
+ --margin-top: 0px;
51
+ --margin-right: 0px;
52
+ --margin-bottom: 0px;
53
+ --margin-left: 0px;
54
+
55
+ /* Define the overrides to incorporate the negative margins using ghost padding */
56
+ --margin-top-override: calc(var(--margin-top) - var(--icon-button-ghost-padding));
57
+ --margin-right-override: calc(var(--margin-right) - var(--icon-button-ghost-padding));
58
+ --margin-bottom-override: calc(var(--margin-bottom) - var(--icon-button-ghost-padding));
59
+ --margin-left-override: calc(var(--margin-left) - var(--icon-button-ghost-padding));
60
+
61
+ margin-top: var(--margin-top-override);
62
+ margin-right: var(--margin-right-override);
63
+ margin-bottom: var(--margin-bottom-override);
64
+ margin-left: var(--margin-left-override);
65
+
66
+ /* Reset the overrides on direct children */
67
+ :where(&) > * {
68
+ --margin-top-override: initial;
69
+ --margin-right-override: initial;
70
+ --margin-bottom-override: initial;
71
+ --margin-left-override: initial;
72
+ }
73
+ }
74
+
47
75
  &:where(.rt-r-size-1) {
48
76
  --icon-button-ghost-padding: var(--space-1);
49
77
  }