@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
@@ -51,13 +51,17 @@ const SelectTrigger = React.forwardRef<SelectTriggerElement, SelectTriggerProps>
51
51
  // Pass size prop def to allow it to be extracted
52
52
  { size: selectRootPropDefs.size },
53
53
  selectTriggerPropDefs,
54
- marginPropDefs
54
+ marginPropDefs,
55
55
  );
56
+
57
+ // Extract panelBackground separately since it needs to be passed as data attribute
58
+ const { panelBackground } = props;
56
59
  return (
57
60
  <SelectPrimitive.Trigger asChild>
58
61
  <button
59
62
  data-accent-color={color}
60
63
  data-radius={radius}
64
+ data-panel-background={panelBackground}
61
65
  {...triggerProps}
62
66
  ref={forwardedRef}
63
67
  className={classNames('rt-reset', 'rt-SelectTrigger', className)}
@@ -71,7 +75,7 @@ const SelectTrigger = React.forwardRef<SelectTriggerElement, SelectTriggerProps>
71
75
  </button>
72
76
  </SelectPrimitive.Trigger>
73
77
  );
74
- }
78
+ },
75
79
  );
76
80
  SelectTrigger.displayName = 'Select.Trigger';
77
81
 
@@ -90,7 +94,7 @@ const SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>
90
94
  { size: context?.size, ...props },
91
95
  // Pass size prop def to allow it to be extracted
92
96
  { size: selectRootPropDefs.size },
93
- selectContentPropDefs
97
+ selectContentPropDefs,
94
98
  );
95
99
  const themeContext = useThemeContext();
96
100
  const resolvedColor = color || themeContext.accentColor;
@@ -104,13 +108,17 @@ const SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>
104
108
  asChild={false}
105
109
  ref={forwardedRef}
106
110
  className={classNames(
107
- { 'rt-PopperContent': contentProps.position === 'popper' },
111
+ 'rt-PopperContent',
112
+ 'rt-BaseMenuContent',
108
113
  'rt-SelectContent',
109
- className
114
+ className,
110
115
  )}
111
116
  >
112
117
  <ScrollAreaPrimitive.Root type="auto" className="rt-ScrollAreaRoot">
113
- <SelectPrimitive.Viewport asChild className="rt-SelectViewport">
118
+ <SelectPrimitive.Viewport
119
+ asChild
120
+ className={classNames('rt-BaseMenuViewport', 'rt-SelectViewport')}
121
+ >
114
122
  <ScrollAreaPrimitive.Viewport
115
123
  className="rt-ScrollAreaViewport"
116
124
  style={{ overflowY: undefined }}
@@ -129,7 +137,7 @@ const SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>
129
137
  </Theme>
130
138
  </SelectPrimitive.Portal>
131
139
  );
132
- }
140
+ },
133
141
  );
134
142
  SelectContent.displayName = 'Select.Content';
135
143
 
@@ -143,7 +151,7 @@ const SelectItem = React.forwardRef<SelectItemElement, SelectItemProps>((props,
143
151
  {...itemProps}
144
152
  asChild={false}
145
153
  ref={forwardedRef}
146
- className={classNames('rt-SelectItem', className)}
154
+ className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SelectItem', className)}
147
155
  >
148
156
  <SelectPrimitive.ItemIndicator className="rt-SelectItemIndicator">
149
157
  <ThickCheckIcon className="rt-SelectItemIndicatorIcon" />
@@ -165,7 +173,7 @@ const SelectGroup = React.forwardRef<SelectGroupElement, SelectGroupProps>(
165
173
  ref={forwardedRef}
166
174
  className={classNames('rt-SelectGroup', className)}
167
175
  />
168
- )
176
+ ),
169
177
  );
170
178
  SelectGroup.displayName = 'Select.Group';
171
179
 
@@ -178,9 +186,9 @@ const SelectLabel = React.forwardRef<SelectLabelElement, SelectLabelProps>(
178
186
  {...props}
179
187
  asChild={false}
180
188
  ref={forwardedRef}
181
- className={classNames('rt-SelectLabel', className)}
189
+ className={classNames('rt-BaseMenuLabel', 'rt-SelectLabel', className)}
182
190
  />
183
- )
191
+ ),
184
192
  );
185
193
  SelectLabel.displayName = 'Select.Label';
186
194
 
@@ -193,9 +201,9 @@ const SelectSeparator = React.forwardRef<SelectSeparatorElement, SelectSeparator
193
201
  {...props}
194
202
  asChild={false}
195
203
  ref={forwardedRef}
196
- className={classNames('rt-SelectSeparator', className)}
204
+ className={classNames('rt-BaseMenuSeparator', 'rt-SelectSeparator', className)}
197
205
  />
198
- )
206
+ ),
199
207
  );
200
208
  SelectSeparator.displayName = 'Select.Separator';
201
209
 
@@ -15,9 +15,10 @@
15
15
  /* Sidebar Root Container */
16
16
  .rt-SidebarRoot {
17
17
  --sidebar-width: 16rem; /* Fixed width */
18
+ --sidebar-base-border-radius: 0; /* Default to no radius */
18
19
 
19
20
  width: var(--sidebar-width);
20
- height: 100vh;
21
+ height: 100%;
21
22
  flex-shrink: 0;
22
23
  display: flex;
23
24
  flex-direction: column;
@@ -32,10 +33,11 @@
32
33
 
33
34
  /* Floating type - ONLY visual changes */
34
35
  &:where([data-type="floating"]) {
35
- border-radius: var(--radius-4);
36
+ border-radius: var(--sidebar-base-border-radius);
36
37
  margin: var(--space-2);
37
- height: calc(100vh - var(--space-4));
38
+ height: calc(100% - var(--space-4));
38
39
  overflow: visible; /* Ensure shadow is not clipped */
40
+ position: relative; /* Ensure proper stacking context for floating sidebars */
39
41
 
40
42
  /* Ensure Theme wrapper has proper border radius in floating mode */
41
43
  & :where(.radix-themes) {
@@ -44,17 +46,67 @@
44
46
  }
45
47
  }
46
48
 
49
+ /* Set border radius for floating sidebars based on size - set on the root where it's used */
50
+ .rt-SidebarRoot:where([data-type="floating"]) {
51
+ /* Default radius for floating sidebars */
52
+ --sidebar-base-border-radius: var(--radius-5);
53
+
54
+ &:where(.rt-r-size-1) {
55
+ --sidebar-base-border-radius: var(--radius-5);
56
+ }
57
+
58
+ &:where(.rt-r-size-2) {
59
+ --sidebar-base-border-radius: var(--radius-6);
60
+ }
61
+ }
62
+
47
63
  /* Sidebar Container */
48
64
  .rt-SidebarContainer {
65
+ --sidebar-base-border-radius: 0; /* Default to no radius */
49
66
  display: flex;
50
67
  flex-direction: column;
51
68
  height: 100%;
52
69
  width: 100%;
53
- background-color: var(--color-panel-solid);
70
+ background-color: var(--color-panel);
71
+ backdrop-filter: var(--backdrop-filter-panel);
54
72
  border-radius: inherit;
55
73
  flex: 1;
56
74
  }
57
75
 
76
+ .rt-SidebarContainer:where(.rt-variant-surface) {
77
+ background-color: var(--color-panel);
78
+ backdrop-filter: var(--backdrop-filter-panel);
79
+
80
+ /* Component-level overrides (higher specificity) - remap --color-panel */
81
+ &:where([data-panel-background='solid']) {
82
+ --color-panel: var(--color-panel-solid);
83
+ backdrop-filter: none;
84
+ --backdrop-filter-panel: none;
85
+ --backdrop-filter-components: none;
86
+ }
87
+
88
+ &:where([data-panel-background='translucent']) {
89
+ --color-panel: var(--color-panel-translucent);
90
+ backdrop-filter: var(--backdrop-filter-panel);
91
+ --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
92
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
93
+ }
94
+
95
+ /* Floating sidebars get full inset border */
96
+ :where(.rt-SidebarRoot[data-type="floating"]) & {
97
+ box-shadow: inset 0 0 0 1px var(--gray-a6);
98
+ }
99
+
100
+ /* Non-floating sidebars get border only on the content-facing side */
101
+ :where(.rt-SidebarRoot[data-type="sidebar"][data-side="left"]) & {
102
+ box-shadow: inset -1px 0 0 0 var(--gray-a6);
103
+ }
104
+
105
+ :where(.rt-SidebarRoot[data-type="sidebar"][data-side="right"]) & {
106
+ box-shadow: inset 1px 0 0 0 var(--gray-a6);
107
+ }
108
+ }
109
+
58
110
  /* Sidebar Header */
59
111
  .rt-SidebarHeader {
60
112
  display: flex;
@@ -92,15 +144,7 @@
92
144
  box-shadow var(--duration-2) var(--ease-1),
93
145
  filter var(--duration-2) var(--ease-1);
94
146
 
95
- /* Hover states - use data-highlighted from component */
96
- &:where([data-highlighted]:not([data-disabled])) {
97
- background-color: var(--gray-a3);
98
- }
99
-
100
- /* Active/Press state */
101
- &:where(:active:not([data-disabled])) {
102
- background-color: var(--gray-a4);
103
- }
147
+ /* Note: Hover/active states are handled by menu variants */
104
148
 
105
149
  /* Focus state */
106
150
  &:where(:focus-visible) {
@@ -269,23 +313,7 @@
269
313
  color: var(--gray-a8);
270
314
  }
271
315
 
272
- /* Hover state (mouse) + programmatic highlight */
273
- &:where([data-highlighted]:not([data-disabled])) {
274
- background-color: var(--gray-a3);
275
- }
276
-
277
- @media (hover: hover) {
278
- &:where(:hover:not([data-disabled])) {
279
- background-color: var(--gray-a3);
280
- }
281
- }
282
-
283
- /* Active/Press state */
284
- &:where(:active:not([data-disabled])) {
285
- background-color: var(--gray-a4);
286
- }
287
-
288
- /* Active navigation state */
316
+ /* Active navigation state - always accent-based */
289
317
  &:where([data-active], .rt-active) {
290
318
  background-color: var(--accent-a3);
291
319
  color: var(--accent-a12);
@@ -307,6 +335,13 @@
307
335
  color: var(--gray-a10);
308
336
  }
309
337
 
338
+ /* Ensure shortcuts inherit color in disabled/highlighted/active states */
339
+ &:where([data-disabled], [data-highlighted], [data-active]) {
340
+ & :where(.rt-SidebarMenuShortcut) {
341
+ color: inherit;
342
+ }
343
+ }
344
+
310
345
  /* Reduced motion support */
311
346
  @media (prefers-reduced-motion: reduce) {
312
347
  transition: none;
@@ -426,15 +461,7 @@
426
461
  box-shadow var(--duration-2) var(--ease-1),
427
462
  filter var(--duration-2) var(--ease-1);
428
463
 
429
- /* Hover states - use data-highlighted from component */
430
- &:where([data-highlighted]:not([data-disabled])) {
431
- background-color: var(--gray-a3);
432
- }
433
-
434
- /* Active/Press state */
435
- &:where(:active:not([data-disabled])) {
436
- background-color: var(--gray-a4);
437
- }
464
+ /* Note: Hover/active states are handled by menu variants */
438
465
 
439
466
  /* Focus state */
440
467
  &:where(:focus-visible) {
@@ -567,7 +594,6 @@
567
594
  .rt-SidebarContainer {
568
595
  &:where(.rt-r-size-1) {
569
596
  --sidebar-base-padding: var(--space-3);
570
- --sidebar-base-border-radius: var(--radius-4);
571
597
  /* Ensure header/footer menu buttons share the same sizing variables as content */
572
598
  --sidebar-content-padding: var(--space-1);
573
599
  --sidebar-item-padding-left: var(--space-2);
@@ -577,7 +603,6 @@
577
603
  }
578
604
  &:where(.rt-r-size-2) {
579
605
  --sidebar-base-padding: var(--space-4);
580
- --sidebar-base-border-radius: var(--radius-4);
581
606
  /* Ensure header/footer menu buttons share the same sizing variables as content */
582
607
  --sidebar-content-padding: var(--space-2);
583
608
  --sidebar-item-padding-left: var(--space-3);
@@ -633,16 +658,16 @@
633
658
 
634
659
  /* stylelint-disable-next-line selector-max-type */
635
660
  & :where(svg) {
636
- width: calc(var(--space-3) * 1.175);
637
- height: calc(var(--space-3) * 1.175);
661
+ width: var(--content-icon-size-1);
662
+ height: var(--content-icon-size-1);
638
663
  flex-shrink: 0;
639
664
  }
640
665
  }
641
666
 
642
667
  /* Sub-trigger icon sizing - matches base menu exactly */
643
668
  & :where(.rt-BaseMenuSubTriggerIcon) {
644
- width: calc(8px * var(--scaling));
645
- height: calc(8px * var(--scaling));
669
+ width: var(--indicator-icon-size-1);
670
+ height: var(--indicator-icon-size-1);
646
671
  flex-shrink: 0;
647
672
  margin-left: auto;
648
673
  }
@@ -665,8 +690,8 @@
665
690
 
666
691
  /* stylelint-disable-next-line selector-max-type */
667
692
  & :where(svg) {
668
- width: calc(var(--space-3) * 1.175);
669
- height: calc(var(--space-3) * 1.175);
693
+ width: var(--content-icon-size-1);
694
+ height: var(--content-icon-size-1);
670
695
  flex-shrink: 0;
671
696
  }
672
697
  }
@@ -679,8 +704,8 @@
679
704
 
680
705
  /* stylelint-disable-next-line selector-max-type */
681
706
  & :where(svg) {
682
- width: calc(var(--space-3) * 1.175);
683
- height: calc(var(--space-3) * 1.175);
707
+ width: var(--content-icon-size-1);
708
+ height: var(--content-icon-size-1);
684
709
  flex-shrink: 0;
685
710
  }
686
711
  }
@@ -691,20 +716,20 @@
691
716
  font-size: var(--font-size-2);
692
717
  line-height: var(--line-height-2);
693
718
  letter-spacing: var(--letter-spacing-2);
694
- border-radius: var(--radius-2);
719
+ border-radius: var(--radius-3);
695
720
 
696
721
  /* stylelint-disable-next-line selector-max-type */
697
722
  & :where(svg) {
698
- width: var(--space-4);
699
- height: var(--space-4);
723
+ width: var(--content-icon-size-2);
724
+ height: var(--content-icon-size-2);
700
725
  flex-shrink: 0;
701
726
  }
702
727
  }
703
728
 
704
729
  /* Sub-trigger icon sizing - matches base menu exactly */
705
730
  & :where(.rt-BaseMenuSubTriggerIcon) {
706
- width: calc(10px * var(--scaling));
707
- height: calc(10px * var(--scaling));
731
+ width: var(--indicator-icon-size-2);
732
+ height: var(--indicator-icon-size-2);
708
733
  flex-shrink: 0;
709
734
  margin-left: auto;
710
735
  }
@@ -723,12 +748,12 @@
723
748
  font-size: var(--font-size-2);
724
749
  line-height: var(--line-height-2);
725
750
  letter-spacing: var(--letter-spacing-2);
726
- border-radius: var(--radius-2);
751
+ border-radius: var(--radius-3);
727
752
 
728
753
  /* stylelint-disable-next-line selector-max-type */
729
754
  & :where(svg) {
730
- width: var(--space-4);
731
- height: var(--space-4);
755
+ width: var(--content-icon-size-2);
756
+ height: var(--content-icon-size-2);
732
757
  flex-shrink: 0;
733
758
  }
734
759
  }
@@ -737,12 +762,12 @@
737
762
  font-size: var(--font-size-2);
738
763
  line-height: var(--line-height-2);
739
764
  letter-spacing: var(--letter-spacing-2);
740
- border-radius: var(--radius-2);
765
+ border-radius: var(--radius-3);
741
766
 
742
767
  /* stylelint-disable-next-line selector-max-type */
743
768
  & :where(svg) {
744
- width: var(--space-4);
745
- height: var(--space-4);
769
+ width: var(--content-icon-size-2);
770
+ height: var(--content-icon-size-2);
746
771
  flex-shrink: 0;
747
772
  }
748
773
  }
@@ -759,21 +784,31 @@
759
784
  .rt-SidebarContainer {
760
785
  &:where(.rt-variant-ghost) {
761
786
  background-color: transparent;
787
+ backdrop-filter: none;
762
788
  border: none;
763
789
  }
764
790
  &:where(.rt-variant-soft) {
765
- background-color: var(--accent-a2);
766
- }
767
- &:where(.rt-variant-surface) {
768
- background-color: var(--color-surface);
791
+ /* Use solid accent for solid panels, alpha accent for translucent panels */
792
+ background-color: var(--accent-2);
769
793
 
770
- /* Border on the side opposite to sidebar position */
771
- &:where([data-side="left"]) {
772
- border-right: 1px solid var(--gray-a6);
794
+ /* Theme-level translucent override */
795
+ :where([data-panel-background='translucent']) & {
796
+ background-color: var(--accent-a2);
797
+ backdrop-filter: var(--backdrop-filter-panel);
773
798
  }
774
-
775
- &:where([data-side="right"]) {
776
- border-left: 1px solid var(--gray-a6);
799
+
800
+ /* Component-level overrides (higher specificity) */
801
+ &:where([data-panel-background='solid']) {
802
+ background-color: var(--accent-2);
803
+ backdrop-filter: none;
804
+ --backdrop-filter-components: none;
805
+ }
806
+
807
+ &:where([data-panel-background='translucent']) {
808
+ background-color: var(--accent-a2);
809
+ backdrop-filter: var(--backdrop-filter-panel);
810
+ --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
811
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
777
812
  }
778
813
  }
779
814
  }
@@ -785,13 +820,6 @@
785
820
  }
786
821
  }
787
822
 
788
- /* Floating borders - only for surface variant */
789
- .rt-SidebarContainer:where(.rt-variant-surface) {
790
- :where(.rt-SidebarRoot[data-type="floating"]) & {
791
- border: 1px solid var(--gray-a6);
792
- }
793
- }
794
-
795
823
  /* Menu Button Variants - Independent of Container */
796
824
 
797
825
  /* Menu Variant: Solid */
@@ -865,8 +893,38 @@
865
893
  .rt-SidebarFooter:where(.rt-menu-variant-soft) {
866
894
  /* Active navigation state for soft variant */
867
895
  & :where(.rt-SidebarMenuButton[data-active]) {
868
- background-color: var(--accent-a4);
869
- color: var(--accent-a12);
896
+ /* Use solid accent for solid panels, alpha accent for translucent panels */
897
+ background-color: var(--accent-3);
898
+ color: var(--accent-12);
899
+
900
+ /* Theme-level translucent override */
901
+ :where([data-panel-background='translucent']) & {
902
+ background-color: var(--accent-a3);
903
+ color: var(--accent-a12);
904
+ /* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
905
+ backdrop-filter: var(--backdrop-filter-components);
906
+ }
907
+
908
+ /* Component-level overrides (higher specificity) */
909
+ :where(.rt-SidebarContainer[data-panel-background='solid']) & {
910
+ background-color: var(--accent-3);
911
+ color: var(--accent-12);
912
+ backdrop-filter: none;
913
+ --backdrop-filter-components: none;
914
+ }
915
+
916
+ :where(.rt-SidebarContainer[data-panel-background='translucent']) & {
917
+ background-color: var(--accent-a3);
918
+ color: var(--accent-a12);
919
+ /* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
920
+ backdrop-filter: var(--backdrop-filter-components);
921
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
922
+ }
923
+
924
+ /* Avoid double backdrop-filter on surface variant - container already has backdrop-filter */
925
+ :where(.rt-SidebarContainer.rt-variant-surface) & {
926
+ backdrop-filter: none;
927
+ }
870
928
 
871
929
  /* In soft variant, improve contrast for gray text while maintaining hierarchy */
872
930
  & :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
@@ -876,7 +934,34 @@
876
934
 
877
935
  /* Hover/highlighted state for soft variant */
878
936
  & :where(.rt-SidebarMenuButton[data-highlighted]) {
879
- background-color: var(--accent-a4);
937
+ /* Use solid accent for solid panels, alpha accent for translucent panels */
938
+ background-color: var(--accent-3);
939
+
940
+ /* Theme-level translucent override */
941
+ :where([data-panel-background='translucent']) & {
942
+ background-color: var(--accent-a3);
943
+ /* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
944
+ backdrop-filter: var(--backdrop-filter-components);
945
+ }
946
+
947
+ /* Component-level overrides (higher specificity) */
948
+ :where(.rt-SidebarContainer[data-panel-background='solid']) & {
949
+ background-color: var(--accent-3);
950
+ backdrop-filter: none;
951
+ --backdrop-filter-components: none;
952
+ }
953
+
954
+ :where(.rt-SidebarContainer[data-panel-background='translucent']) & {
955
+ background-color: var(--accent-a3);
956
+ /* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
957
+ backdrop-filter: var(--backdrop-filter-components);
958
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
959
+ }
960
+
961
+ /* Avoid double backdrop-filter on surface variant - container already has backdrop-filter */
962
+ :where(.rt-SidebarContainer.rt-variant-surface) & {
963
+ backdrop-filter: none;
964
+ }
880
965
 
881
966
  /* In soft variant, improve contrast for gray text while maintaining hierarchy */
882
967
  & :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
@@ -885,12 +970,6 @@
885
970
  }
886
971
  }
887
972
 
888
-
889
-
890
-
891
-
892
-
893
-
894
973
  /* Ensure menu items inherit proper theming and spacing for sidebar */
895
974
  .rt-SidebarContent :where(.rt-BaseMenuItem) {
896
975
  border-radius: var(--radius-2);
@@ -925,4 +1004,40 @@
925
1004
  .rt-SidebarRoot {
926
1005
  display: none;
927
1006
  }
1007
+ }
1008
+
1009
+ /* Reduce right padding on menu buttons with trailing elements */
1010
+ .rt-SidebarMenuButton:where(:has(.rt-SidebarMenuShortcut, .rt-SidebarMenuBadge)) {
1011
+ /* Size-specific right padding reduction */
1012
+ :where(.rt-SidebarContent.rt-r-size-1) & {
1013
+ padding-right: calc(var(--space-1) * 0.75); /* 3px - matches top/bottom padding */
1014
+ }
1015
+
1016
+ :where(.rt-SidebarContent.rt-r-size-2) & {
1017
+ padding-right: var(--space-1); /* 4px - matches top/bottom padding */
1018
+ }
1019
+
1020
+ /* Also apply to header and footer menu buttons */
1021
+ :where(.rt-SidebarContainer.rt-r-size-1) & {
1022
+ padding-right: calc(var(--space-1) * 0.75); /* 3px - matches top/bottom padding */
1023
+ }
1024
+
1025
+ :where(.rt-SidebarContainer.rt-r-size-2) & {
1026
+ padding-right: var(--space-1); /* 4px - matches top/bottom padding */
1027
+ }
1028
+ }
1029
+
1030
+ .rt-SidebarMenuShortcut {
1031
+ display: flex;
1032
+ align-items: center;
1033
+ margin-left: auto;
1034
+ padding-left: var(--space-4);
1035
+ color: var(--gray-a11);
1036
+ }
1037
+
1038
+ .rt-SidebarMenuBadge {
1039
+ display: flex;
1040
+ align-items: center;
1041
+ margin-left: auto;
1042
+ padding-left: var(--space-2);
928
1043
  }
@@ -24,10 +24,21 @@ const sidebarPropDefs = {
24
24
  ...asChildPropDef,
25
25
  size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },
26
26
  variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'surface' },
27
- menuVariant: { type: 'enum', className: 'rt-menu-variant', values: menuVariants, default: 'soft' },
27
+ menuVariant: {
28
+ type: 'enum',
29
+ className: 'rt-menu-variant',
30
+ values: menuVariants,
31
+ default: 'soft',
32
+ },
28
33
  type: { type: 'enum', className: 'rt-type', values: types, default: 'sidebar' },
29
34
  side: { type: 'enum', className: 'rt-side', values: sides, default: 'left' },
30
- collapsible: { type: 'enum', className: 'rt-collapsible', values: collapsibleModes, default: 'offcanvas' },
35
+ collapsible: {
36
+ type: 'enum',
37
+ className: 'rt-collapsible',
38
+ values: collapsibleModes,
39
+ default: 'offcanvas',
40
+ },
41
+ panelBackground: { type: 'enum', values: ['solid', 'translucent'], default: undefined },
31
42
  ...colorPropDef,
32
43
  ...highContrastPropDef,
33
44
  } satisfies {
@@ -37,6 +48,7 @@ const sidebarPropDefs = {
37
48
  type: PropDef<(typeof types)[number]>;
38
49
  side: PropDef<(typeof sides)[number]>;
39
50
  collapsible: PropDef<(typeof collapsibleModes)[number]>;
51
+ panelBackground: PropDef<'solid' | 'translucent'>;
40
52
  };
41
53
 
42
- export { sidebarPropDefs };
54
+ export { sidebarPropDefs };