@kushagradhawan/kookie-ui 0.1.17 → 0.1.19

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 +17 -6
  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 +17 -6
  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 +313 -242
  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
@@ -3,8 +3,10 @@
3
3
  .rt-TabsContent {
4
4
  position: relative;
5
5
  outline: 0;
6
+ transition: var(--transition-fast);
6
7
  }
7
8
 
8
9
  .rt-TabsContent:where(:focus-visible) {
9
- outline: 2px solid var(--focus-8);
10
+ outline: var(--focus-outline-width) solid var(--focus-8);
11
+ transition: var(--transition-focus);
10
12
  }
@@ -36,10 +36,15 @@ interface TabsListProps
36
36
  MarginProps,
37
37
  TabsListOwnProps {}
38
38
  const TabsList = React.forwardRef<TabsListElement, TabsListProps>((props, forwardedRef) => {
39
- const { className, color, ...listProps } = extractProps(props, tabsListPropDefs, marginPropDefs);
39
+ const { className, color, panelBackground, ...listProps } = extractProps(
40
+ props,
41
+ tabsListPropDefs,
42
+ marginPropDefs,
43
+ );
40
44
  return (
41
45
  <TabsPrimitive.List
42
46
  data-accent-color={color}
47
+ data-panel-background={panelBackground}
43
48
  {...listProps}
44
49
  asChild={false}
45
50
  ref={forwardedRef}
@@ -68,7 +73,7 @@ const TabsTrigger = React.forwardRef<TabsTriggerElement, TabsTriggerProps>(
68
73
  </span>
69
74
  </TabsPrimitive.Trigger>
70
75
  );
71
- }
76
+ },
72
77
  );
73
78
  TabsTrigger.displayName = 'Tabs.Trigger';
74
79
 
@@ -88,7 +93,7 @@ const TabsContent = React.forwardRef<TabsContentElement, TabsContentProps>(
88
93
  className={classNames('rt-TabsContent', className)}
89
94
  />
90
95
  );
91
- }
96
+ },
92
97
  );
93
98
  TabsContent.displayName = 'Tabs.Content';
94
99
 
@@ -7,14 +7,23 @@
7
7
  font-weight: var(--font-weight-regular);
8
8
  font-style: normal;
9
9
  text-align: start;
10
+ transition: var(--transition-text-field);
10
11
 
11
12
  /* Allows the `resize` property to work on the div */
12
13
  overflow: hidden;
13
14
 
14
15
  &:where(:focus-within) {
15
- outline: 2px solid var(--focus-8);
16
+ outline: 2px solid var(--text-area-focus-color, var(--focus-8));
16
17
  outline-offset: -1px;
17
18
  }
19
+
20
+ &::selection {
21
+ background-color: var(--text-area-selection-color, var(--focus-a5));
22
+ }
23
+
24
+ @media (prefers-reduced-motion: reduce) {
25
+ transition: none;
26
+ }
18
27
  }
19
28
 
20
29
  .rt-TextAreaInput {
@@ -25,6 +34,12 @@
25
34
  width: 100%;
26
35
  flex-grow: 1;
27
36
 
37
+ /* Remove default browser styling */
38
+ border: none;
39
+ outline: none;
40
+ background: transparent;
41
+ color: inherit;
42
+
28
43
  /* scrollbar */
29
44
  & {
30
45
  /* Arrow mouse cursor over the scrollbar */
@@ -56,6 +71,10 @@
56
71
  background-clip: text;
57
72
  -webkit-text-fill-color: var(--gray-12);
58
73
  }
74
+
75
+ &::selection {
76
+ background-color: var(--text-area-selection-color, var(--focus-a5));
77
+ }
59
78
  }
60
79
 
61
80
  /***************************************************************************************************
@@ -122,16 +141,41 @@
122
141
  * *
123
142
  ***************************************************************************************************/
124
143
 
125
- /* surface */
126
- .rt-TextAreaRoot:where(.rt-variant-surface) {
144
+ /* outline */
145
+ .rt-TextAreaRoot:where(.rt-variant-outline) {
146
+ --text-area-selection-color: var(--focus-a5);
147
+ --text-area-focus-color: var(--focus-8);
127
148
  --text-area-border-width: 1px;
128
149
 
129
150
  /* Blend inner shadow with page background */
130
151
  background-clip: content-box;
131
152
  background-color: var(--color-surface);
132
- box-shadow: inset 0 0 0 var(--text-area-border-width) var(--gray-a7);
153
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--gray-a6);
133
154
  color: var(--gray-12);
134
155
 
156
+ /* Theme-level translucent override */
157
+ :where([data-panel-background='translucent']) & {
158
+ backdrop-filter: var(--backdrop-filter-components);
159
+ }
160
+
161
+ /* Component-level overrides for surface variant */
162
+ &:where([data-panel-background='solid']) {
163
+ --color-surface: var(--color-surface-solid);
164
+ backdrop-filter: none;
165
+ }
166
+
167
+ &:where([data-panel-background='translucent']) {
168
+ --color-surface: var(--color-surface-translucent);
169
+ backdrop-filter: var(--backdrop-filter-components);
170
+ }
171
+
172
+ /* Hover effects */
173
+ @media (hover: hover) {
174
+ &:where(:hover:not(:has(.rt-TextAreaInput:focus))) {
175
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--gray-a8);
176
+ }
177
+ }
178
+
135
179
  & :where(.rt-TextAreaInput) {
136
180
  &::placeholder {
137
181
  color: var(--gray-a10);
@@ -142,7 +186,7 @@
142
186
  &:where(:has(.rt-TextAreaInput:where(:autofill, [data-com-onepassword-filled]):not(:disabled, :read-only))) {
143
187
  /* Blend with focus color */
144
188
  background-image: linear-gradient(var(--focus-a2), var(--focus-a2));
145
- box-shadow: inset 0 0 0 1px var(--focus-a5), inset 0 0 0 1px var(--gray-a5);
189
+ box-shadow: inset 0 0 0 1px var(--focus-a5);
146
190
  }
147
191
 
148
192
  &:where(:has(.rt-TextAreaInput:where(:disabled, :read-only))) {
@@ -154,23 +198,57 @@
154
198
 
155
199
  /* classic */
156
200
  .rt-TextAreaRoot:where(.rt-variant-classic) {
157
- --text-area-border-width: 1px;
201
+ --text-area-selection-color: var(--focus-a5);
202
+ --text-area-focus-color: var(--focus-8);
203
+ --text-area-border-width: 0px;
158
204
 
159
- background: linear-gradient(to bottom, var(--color-surface), var(--gray-1));
160
- box-shadow: var(--shadow-2);
205
+ position: relative;
206
+ top: calc(var(--classic-elevation-offset) / 3); /* More pronounced than before */
207
+ background-color: var(--color-surface);
161
208
  color: var(--gray-12);
162
209
 
210
+ /* 3D inset effect - same as TextField */
211
+ /* prettier-ignore */
212
+ box-shadow:
213
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-small) / 1.5) var(--gray-a3),
214
+ inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a1),
215
+ inset 0 calc(var(--classic-border-width) * 2) calc(var(--classic-shadow-blur-medium) / 3) var(--gray-a2),
216
+ 0 0 0 var(--classic-border-width) var(--gray-a5);
217
+
218
+ /* Theme-level translucent override */
219
+ :where([data-panel-background='translucent']) & {
220
+ backdrop-filter: var(--backdrop-filter-components);
221
+ }
222
+
223
+ /* Component-level overrides for surface variant */
224
+ &:where([data-panel-background='solid']) {
225
+ --color-surface: var(--color-surface-solid);
226
+ backdrop-filter: none;
227
+ }
228
+
229
+ &:where([data-panel-background='translucent']) {
230
+ --color-surface: var(--color-surface-translucent);
231
+ backdrop-filter: var(--backdrop-filter-components);
232
+ }
233
+
234
+ /* Hover effects - slightly reduced inset */
163
235
  @media (hover: hover) {
164
- &:where(:hover) {
165
- background: linear-gradient(to bottom, var(--gray-1), var(--gray-2));
166
- box-shadow: var(--shadow-2);
236
+ &:where(:hover:not(:has(.rt-TextAreaInput:focus))) {
237
+ /* prettier-ignore */
238
+ box-shadow:
239
+ inset 0 calc(var(--classic-border-width) / 1.5) calc(var(--classic-shadow-blur-small) / 2) var(--gray-a2),
240
+ inset 0 calc(-1 * var(--classic-border-width) / 1.5) var(--gray-a1),
241
+ inset 0 var(--classic-border-width) calc(var(--classic-shadow-blur-medium) / 4) var(--gray-a2),
242
+ 0 0 0 var(--classic-border-width) var(--gray-a6);
167
243
  }
168
244
  }
169
245
 
170
- &:where(:focus-within) {
246
+ /* Focus state - accent ring with minimal inset */
247
+ &:where(:has(.rt-TextAreaInput:focus)) {
248
+ /* prettier-ignore */
171
249
  box-shadow:
172
- inset 0 0 0 1px var(--focus-8),
173
- var(--shadow-1);
250
+ inset 0 calc(var(--classic-border-width) / 2) calc(var(--classic-shadow-blur-small) / 3) var(--gray-a1),
251
+ 0 0 0 2px var(--focus-8);
174
252
  }
175
253
 
176
254
  & :where(.rt-TextAreaInput) {
@@ -183,51 +261,265 @@
183
261
  &:where(:has(.rt-TextAreaInput:where(:autofill, [data-com-onepassword-filled]):not(:disabled, :read-only))) {
184
262
  /* Blend with focus color */
185
263
  background-image: linear-gradient(var(--focus-a2), var(--focus-a2));
186
- box-shadow: inset 0 0 0 1px var(--focus-a5), inset 0 0 0 1px var(--gray-a5);
264
+ box-shadow: var(--shadow-2);
187
265
  }
188
266
 
189
267
  &:where(:has(.rt-TextAreaInput:where(:disabled, :read-only))) {
190
268
  /* Blend with grey */
191
269
  background-image: linear-gradient(var(--gray-a2), var(--gray-a2));
192
- box-shadow: none;
270
+ box-shadow: var(--shadow-1);
193
271
  }
194
272
  }
195
273
 
196
274
  /* soft */
197
275
  .rt-TextAreaRoot:where(.rt-variant-soft) {
276
+ --text-area-selection-color: var(--accent-a5);
277
+ --text-area-focus-color: var(--accent-8);
198
278
  --text-area-border-width: 0px;
199
279
 
200
- background-color: var(--accent-a3);
280
+ /* Base state: solid accent for solid panels */
281
+ background-color: var(--accent-3);
201
282
  color: var(--accent-12);
202
283
 
203
- & :where(.rt-TextAreaInput) {
204
- &::selection {
205
- /* Use gray selection when component color is gray */
206
- background-color: var(--accent-a5);
284
+ /* Theme-level translucent override */
285
+ :where([data-panel-background='translucent']) & {
286
+ background-color: var(--accent-a3);
287
+ backdrop-filter: var(--backdrop-filter-components);
288
+ }
289
+
290
+ /* Component-level overrides (higher specificity) */
291
+ &:where([data-panel-background='solid']) {
292
+ background-color: var(--accent-3);
293
+ backdrop-filter: none;
294
+ --backdrop-filter-components: none;
295
+ }
296
+
297
+ &:where([data-panel-background='translucent']) {
298
+ background-color: var(--accent-a3);
299
+ backdrop-filter: var(--backdrop-filter-components);
300
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
301
+ }
302
+
303
+ /* Hover effects */
304
+ @media (hover: hover) {
305
+ &:where(:hover:not(:has(.rt-TextAreaInput:focus))) {
306
+ /* Base state: solid accent for solid panels */
307
+ background-color: var(--accent-4);
308
+
309
+ /* Theme-level translucent override for hover */
310
+ :where([data-panel-background='translucent']) & {
311
+ background-color: var(--accent-a4);
312
+ }
313
+
314
+ /* Component-level overrides for hover */
315
+ &:where([data-panel-background='solid']) {
316
+ background-color: var(--accent-4);
317
+ backdrop-filter: none;
318
+ --backdrop-filter-components: none;
319
+ }
320
+
321
+ &:where([data-panel-background='translucent']) {
322
+ background-color: var(--accent-a4);
323
+ backdrop-filter: var(--backdrop-filter-components);
324
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
325
+ }
207
326
  }
327
+ }
328
+
329
+ & :where(.rt-TextAreaInput) {
208
330
  &::placeholder {
209
331
  color: var(--accent-12);
210
- opacity: 0.65;
332
+ opacity: 0.6;
333
+ }
334
+ }
335
+
336
+ /* prettier-ignore */
337
+ &:where(:has(.rt-TextAreaInput:where(:autofill, [data-com-onepassword-filled]):not(:disabled, :read-only))) {
338
+ /* Use gray autofill color when component color is gray */
339
+ box-shadow: inset 0 0 0 1px var(--accent-a5), inset 0 0 0 1px var(--gray-a4);
340
+ }
341
+
342
+ &:where(:has(.rt-TextAreaInput:where(:disabled, :read-only))) {
343
+ background-color: var(--gray-a3);
344
+ }
345
+ }
346
+
347
+ /* ghost */
348
+ .rt-TextAreaRoot:where(.rt-variant-ghost) {
349
+ --text-area-selection-color: var(--accent-a5);
350
+ --text-area-focus-color: var(--accent-8);
351
+ --text-area-border-width: 0px;
352
+
353
+ background-color: transparent;
354
+ color: var(--gray-12);
355
+
356
+ & :where(.rt-TextAreaInput) {
357
+ &::placeholder {
358
+ color: var(--gray-a10);
211
359
  }
212
360
  }
213
361
 
362
+ /* Hover effects */
363
+ @media (hover: hover) {
364
+ &:where(:hover:not(:has(.rt-TextAreaInput:focus))) {
365
+ /* Base state: solid accent for solid panels */
366
+ background-color: var(--accent-2);
367
+
368
+ /* Theme-level translucent override for hover */
369
+ :where([data-panel-background='translucent']) & {
370
+ background-color: var(--accent-a2);
371
+ backdrop-filter: var(--backdrop-filter-components);
372
+ }
373
+
374
+ /* Component-level overrides for hover */
375
+ &:where([data-panel-background='solid']) {
376
+ background-color: var(--accent-2);
377
+ backdrop-filter: none;
378
+ --backdrop-filter-components: none;
379
+ }
380
+
381
+ &:where([data-panel-background='translucent']) {
382
+ background-color: var(--accent-a2);
383
+ backdrop-filter: var(--backdrop-filter-components);
384
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
385
+ }
386
+ }
387
+ }
388
+
389
+ /* Show styling only on focus/interaction */
214
390
  &:where(:focus-within) {
215
- /* Use gray outline when component color is gray */
216
- outline-color: var(--accent-8);
391
+ /* Base state: solid accent for solid panels */
392
+ background-color: var(--accent-2);
393
+
394
+ /* Theme-level translucent override */
395
+ :where([data-panel-background='translucent']) & {
396
+ background-color: var(--accent-a2);
397
+ backdrop-filter: var(--backdrop-filter-components);
398
+ }
399
+
400
+ /* Component-level overrides */
401
+ &:where([data-panel-background='solid']) {
402
+ background-color: var(--accent-2);
403
+ backdrop-filter: none;
404
+ }
405
+
406
+ &:where([data-panel-background='translucent']) {
407
+ background-color: var(--accent-a2);
408
+ backdrop-filter: var(--backdrop-filter-components);
409
+ }
217
410
  }
218
411
 
219
412
  /* prettier-ignore */
220
413
  &:where(:has(.rt-TextAreaInput:where(:autofill, [data-com-onepassword-filled]):not(:disabled, :read-only))) {
221
- /* Use gray autofill color when component color is gray */
414
+ background-color: var(--accent-a2);
222
415
  box-shadow: inset 0 0 0 1px var(--accent-a5), inset 0 0 0 1px var(--gray-a4);
223
416
  }
224
417
 
225
418
  &:where(:has(.rt-TextAreaInput:where(:disabled, :read-only))) {
226
- background-color: var(--gray-a3);
419
+ background-color: var(--gray-a2);
420
+ color: var(--gray-a8);
421
+ }
422
+ }
423
+
424
+ /* surface */
425
+ .rt-TextAreaRoot:where(.rt-variant-surface) {
426
+ --text-area-selection-color: var(--accent-a5);
427
+ --text-area-focus-color: var(--accent-8);
428
+ --text-area-border-width: 1px;
429
+
430
+ background-color: transparent;
431
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-7);
432
+ color: var(--gray-12);
433
+ transition: var(--transition-background-blur);
434
+
435
+ /* Theme-level panel awareness (NO backdrop filter for true transparency) */
436
+ :where([data-panel-background='translucent']) & {
437
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-a7);
438
+ }
439
+
440
+ /* Component-level overrides */
441
+ &:where([data-panel-background='solid']) {
442
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-7);
443
+ }
444
+
445
+ &:where([data-panel-background='translucent']) {
446
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-a7);
447
+ }
448
+
449
+ & :where(.rt-TextAreaInput) {
450
+ &::placeholder {
451
+ color: var(--gray-a10);
452
+ }
453
+ }
454
+
455
+ /* Hover effects */
456
+ @media (hover: hover) {
457
+ &:where(:hover:not(:has(.rt-TextAreaInput:focus))) {
458
+ /* Base state: solid accent for solid panels */
459
+ background-color: var(--accent-2);
460
+
461
+ /* Theme-level translucent override for hover */
462
+ :where([data-panel-background='translucent']) & {
463
+ background-color: var(--accent-a2);
464
+ backdrop-filter: var(--backdrop-filter-components);
465
+ }
466
+
467
+ /* Component-level overrides for hover */
468
+ &:where([data-panel-background='solid']) {
469
+ background-color: var(--accent-2);
470
+ backdrop-filter: none;
471
+ --backdrop-filter-components: none;
472
+ }
473
+
474
+ &:where([data-panel-background='translucent']) {
475
+ background-color: var(--accent-a2);
476
+ backdrop-filter: var(--backdrop-filter-components);
477
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
478
+ }
479
+ }
480
+ }
481
+
482
+ /* Interaction states get light background */
483
+ &:where(:focus-within) {
484
+ /* Base state: solid accent for solid panels */
485
+ background-color: var(--accent-2);
486
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-8);
487
+
488
+ /* Theme-level translucent override */
489
+ :where([data-panel-background='translucent']) & {
490
+ background-color: var(--accent-a2);
491
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-a8);
492
+ backdrop-filter: var(--backdrop-filter-components);
493
+ }
494
+
495
+ /* Component-level overrides */
496
+ &:where([data-panel-background='solid']) {
497
+ background-color: var(--accent-2);
498
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-8);
499
+ backdrop-filter: none;
500
+ }
501
+
502
+ &:where([data-panel-background='translucent']) {
503
+ background-color: var(--accent-a2);
504
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--accent-a8);
505
+ backdrop-filter: var(--backdrop-filter-components);
506
+ }
507
+ }
508
+
509
+ /* prettier-ignore */
510
+ &:where(:has(.rt-TextAreaInput:where(:autofill, [data-com-onepassword-filled]):not(:disabled, :read-only))) {
511
+ background-color: var(--accent-a2);
512
+ box-shadow: inset 0 0 0 1px var(--accent-a5), inset 0 0 0 1px var(--gray-a4);
513
+ }
514
+
515
+ &:where(:has(.rt-TextAreaInput:where(:disabled, :read-only))) {
516
+ background-color: var(--gray-a2);
517
+ box-shadow: inset 0 0 0 var(--text-area-border-width) var(--gray-a6);
518
+ color: var(--gray-a8);
227
519
  }
228
520
  }
229
521
 
230
- /* all disabled and read-only text-areas */
522
+ /* all disabled and read-only text areas */
231
523
  .rt-TextAreaInput {
232
524
  &:where(:disabled, :read-only) {
233
525
  cursor: text;
@@ -241,11 +533,10 @@
241
533
  &:where(:placeholder-shown) {
242
534
  cursor: var(--cursor-disabled);
243
535
  }
244
- &::selection {
245
- background-color: var(--gray-a5);
246
- }
247
- .rt-TextAreaRoot:where(:focus-within:has(&)) {
248
- outline-color: var(--gray-8);
536
+
537
+ .rt-TextAreaRoot:where(:has(&)) {
538
+ --text-area-selection-color: var(--gray-a5);
539
+ --text-area-focus-color: var(--gray-8);
249
540
  }
250
541
  }
251
542
  }
@@ -4,20 +4,23 @@ import { radiusPropDef } from '../props/radius.prop.js';
4
4
  import type { PropDef } from '../props/prop-def.js';
5
5
 
6
6
  const sizes = ['1', '2', '3'] as const;
7
- const variants = ['classic', 'surface', 'soft'] as const;
7
+ const variants = ['classic', 'surface', 'soft', 'outline', 'ghost'] as const;
8
8
  const resizeValues = ['none', 'vertical', 'horizontal', 'both'] as const;
9
+ const panelBackgrounds = ['solid', 'translucent'] as const;
9
10
 
10
11
  // prettier-ignore
11
12
  const textAreaPropDefs = {
12
13
  size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },
13
14
  variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'surface' },
14
15
  resize: { type: 'enum', className: 'rt-r-resize', values: resizeValues, responsive: true },
16
+ panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },
15
17
  ...colorPropDef,
16
18
  ...radiusPropDef,
17
19
  } satisfies {
18
20
  size: PropDef<(typeof sizes)[number]>;
19
21
  variant: PropDef<(typeof variants)[number]>;
20
22
  resize: PropDef<(typeof resizeValues)[number]>;
23
+ panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
21
24
  };
22
25
 
23
26
  export { textAreaPropDefs };
@@ -19,15 +19,16 @@ interface TextAreaProps
19
19
  MarginProps,
20
20
  TextAreaOwnProps {}
21
21
  const TextArea = React.forwardRef<TextAreaElement, TextAreaProps>((props, forwardedRef) => {
22
- const { className, color, radius, style, ...textAreaProps } = extractProps(
22
+ const { className, color, radius, panelBackground, style, ...textAreaProps } = extractProps(
23
23
  props,
24
24
  textAreaPropDefs,
25
- marginPropDefs
25
+ marginPropDefs,
26
26
  );
27
27
  return (
28
28
  <div
29
29
  data-accent-color={color}
30
30
  data-radius={radius}
31
+ data-panel-background={panelBackground}
31
32
  className={classNames('rt-TextAreaRoot', className)}
32
33
  style={style}
33
34
  >