@adea-ai/ui 0.60.3 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (862) hide show
  1. package/README.md +108 -34
  2. package/dist/components/composites/account-menu/account-menu.d.ts +48 -0
  3. package/dist/components/composites/account-menu/account-menu.d.ts.map +1 -0
  4. package/dist/components/composites/account-menu/account-menu.js +119 -0
  5. package/dist/components/composites/account-menu/account-menu.js.map +1 -0
  6. package/dist/components/composites/account-menu/index.d.ts +2 -0
  7. package/dist/components/composites/account-menu/index.d.ts.map +1 -0
  8. package/dist/components/composites/list-row/index.d.ts +2 -0
  9. package/dist/components/composites/list-row/index.d.ts.map +1 -0
  10. package/dist/components/composites/list-row/list-row.d.ts +44 -0
  11. package/dist/components/composites/list-row/list-row.d.ts.map +1 -0
  12. package/dist/components/composites/list-row/list-row.js +124 -0
  13. package/dist/components/composites/list-row/list-row.js.map +1 -0
  14. package/dist/components/composites/settings/index.d.ts +2 -0
  15. package/dist/components/composites/settings/index.d.ts.map +1 -0
  16. package/dist/components/composites/settings/settings.d.ts +49 -0
  17. package/dist/components/composites/settings/settings.d.ts.map +1 -0
  18. package/dist/components/composites/settings/settings.js +148 -0
  19. package/dist/components/composites/settings/settings.js.map +1 -0
  20. package/dist/components/composites/stat/index.d.ts +2 -0
  21. package/dist/components/composites/stat/index.d.ts.map +1 -0
  22. package/dist/components/composites/stat/stat.d.ts +48 -0
  23. package/dist/components/composites/stat/stat.d.ts.map +1 -0
  24. package/dist/components/composites/stat/stat.js +148 -0
  25. package/dist/components/composites/stat/stat.js.map +1 -0
  26. package/dist/components/composites/update-dialog/index.d.ts +2 -0
  27. package/dist/components/composites/update-dialog/index.d.ts.map +1 -0
  28. package/dist/components/composites/update-dialog/update-dialog.d.ts +108 -0
  29. package/dist/components/composites/update-dialog/update-dialog.d.ts.map +1 -0
  30. package/dist/components/composites/update-dialog/update-dialog.js +452 -0
  31. package/dist/components/composites/update-dialog/update-dialog.js.map +1 -0
  32. package/dist/components/composites/workspace-mark/index.d.ts +2 -0
  33. package/dist/components/composites/workspace-mark/index.d.ts.map +1 -0
  34. package/dist/components/composites/workspace-mark/workspace-mark.d.ts +24 -0
  35. package/dist/components/composites/workspace-mark/workspace-mark.d.ts.map +1 -0
  36. package/dist/components/composites/workspace-mark/workspace-mark.js +76 -0
  37. package/dist/components/composites/workspace-mark/workspace-mark.js.map +1 -0
  38. package/dist/components/conversation/conversation-avatar.d.ts +21 -0
  39. package/dist/components/conversation/conversation-avatar.d.ts.map +1 -0
  40. package/dist/components/conversation/conversation-avatar.js +52 -0
  41. package/dist/components/conversation/conversation-avatar.js.map +1 -0
  42. package/dist/components/conversation/conversation-surface.d.ts +27 -0
  43. package/dist/components/conversation/conversation-surface.d.ts.map +1 -0
  44. package/dist/components/conversation/conversation-surface.js +118 -0
  45. package/dist/components/conversation/conversation-surface.js.map +1 -0
  46. package/dist/components/conversation/index.d.ts +6 -0
  47. package/dist/components/conversation/index.d.ts.map +1 -0
  48. package/dist/components/conversation/message-composer.d.ts +70 -0
  49. package/dist/components/conversation/message-composer.d.ts.map +1 -0
  50. package/dist/components/conversation/message-composer.js +235 -0
  51. package/dist/components/conversation/message-composer.js.map +1 -0
  52. package/dist/components/conversation/message-row.d.ts +101 -0
  53. package/dist/components/conversation/message-row.d.ts.map +1 -0
  54. package/dist/components/conversation/message-row.js +389 -0
  55. package/dist/components/conversation/message-row.js.map +1 -0
  56. package/dist/components/conversation/thread-panel.d.ts +45 -0
  57. package/dist/components/conversation/thread-panel.d.ts.map +1 -0
  58. package/dist/components/conversation/thread-panel.js +123 -0
  59. package/dist/components/conversation/thread-panel.js.map +1 -0
  60. package/dist/components/layout/app-shell/app-shell.d.ts +45 -0
  61. package/dist/components/layout/app-shell/app-shell.d.ts.map +1 -0
  62. package/dist/components/layout/app-shell/app-shell.js +89 -0
  63. package/dist/components/layout/app-shell/app-shell.js.map +1 -0
  64. package/dist/components/layout/app-shell/index.d.ts +2 -0
  65. package/dist/components/layout/app-shell/index.d.ts.map +1 -0
  66. package/dist/components/layout/page/index.d.ts +2 -0
  67. package/dist/components/layout/page/index.d.ts.map +1 -0
  68. package/dist/components/layout/page/page.d.ts +31 -0
  69. package/dist/components/layout/page/page.d.ts.map +1 -0
  70. package/dist/components/layout/page/page.js +143 -0
  71. package/dist/components/layout/page/page.js.map +1 -0
  72. package/dist/components/layout/panel/index.d.ts +2 -0
  73. package/dist/components/layout/panel/index.d.ts.map +1 -0
  74. package/dist/components/layout/panel/panel.d.ts +44 -0
  75. package/dist/components/layout/panel/panel.d.ts.map +1 -0
  76. package/dist/components/layout/panel/panel.js +151 -0
  77. package/dist/components/layout/panel/panel.js.map +1 -0
  78. package/dist/components/layout/side-rail/index.d.ts +3 -0
  79. package/dist/components/layout/side-rail/index.d.ts.map +1 -0
  80. package/dist/components/layout/side-rail/side-rail-context.d.ts +23 -0
  81. package/dist/components/layout/side-rail/side-rail-context.d.ts.map +1 -0
  82. package/dist/components/layout/side-rail/side-rail-context.js +18 -0
  83. package/dist/components/layout/side-rail/side-rail-context.js.map +1 -0
  84. package/dist/components/layout/side-rail/side-rail.d.ts +101 -0
  85. package/dist/components/layout/side-rail/side-rail.d.ts.map +1 -0
  86. package/dist/components/layout/side-rail/side-rail.js +336 -0
  87. package/dist/components/layout/side-rail/side-rail.js.map +1 -0
  88. package/dist/components/layout/sidebar-nav/index.d.ts +2 -0
  89. package/dist/components/layout/sidebar-nav/index.d.ts.map +1 -0
  90. package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts +62 -0
  91. package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts.map +1 -0
  92. package/dist/components/layout/sidebar-nav/sidebar-nav.js +231 -0
  93. package/dist/components/layout/sidebar-nav/sidebar-nav.js.map +1 -0
  94. package/dist/components/layout/status-bar/index.d.ts +2 -0
  95. package/dist/components/layout/status-bar/index.d.ts.map +1 -0
  96. package/dist/components/layout/status-bar/status-bar.d.ts +23 -0
  97. package/dist/components/layout/status-bar/status-bar.d.ts.map +1 -0
  98. package/dist/components/layout/status-bar/status-bar.js +68 -0
  99. package/dist/components/layout/status-bar/status-bar.js.map +1 -0
  100. package/dist/components/layout/top-bar/index.d.ts +2 -0
  101. package/dist/components/layout/top-bar/index.d.ts.map +1 -0
  102. package/dist/components/layout/top-bar/top-bar.d.ts +59 -0
  103. package/dist/components/layout/top-bar/top-bar.d.ts.map +1 -0
  104. package/dist/components/layout/top-bar/top-bar.js +118 -0
  105. package/dist/components/layout/top-bar/top-bar.js.map +1 -0
  106. package/dist/components/motion/index.d.ts +3 -0
  107. package/dist/components/motion/index.d.ts.map +1 -0
  108. package/dist/components/motion/index.js +3 -0
  109. package/dist/components/motion/presence.d.ts +29 -0
  110. package/dist/components/motion/presence.d.ts.map +1 -0
  111. package/dist/components/motion/presence.js +10 -0
  112. package/dist/components/motion/presence.js.map +1 -0
  113. package/dist/components/theme/appearance-panel.d.ts +25 -0
  114. package/dist/components/theme/appearance-panel.d.ts.map +1 -0
  115. package/dist/components/theme/appearance-panel.js +162 -0
  116. package/dist/components/theme/appearance-panel.js.map +1 -0
  117. package/dist/components/theme/index.d.ts +5 -0
  118. package/dist/components/theme/index.d.ts.map +1 -0
  119. package/dist/components/theme/theme-picker.d.ts +54 -0
  120. package/dist/components/theme/theme-picker.d.ts.map +1 -0
  121. package/dist/components/theme/theme-picker.js +156 -0
  122. package/dist/components/theme/theme-picker.js.map +1 -0
  123. package/dist/components/theme/theme-provider.d.ts +130 -0
  124. package/dist/components/theme/theme-provider.d.ts.map +1 -0
  125. package/dist/components/theme/theme-provider.js +164 -0
  126. package/dist/components/theme/theme-provider.js.map +1 -0
  127. package/dist/components/theme/theme-toggle.d.ts +19 -0
  128. package/dist/components/theme/theme-toggle.d.ts.map +1 -0
  129. package/dist/components/theme/theme-toggle.js +69 -0
  130. package/dist/components/theme/theme-toggle.js.map +1 -0
  131. package/dist/components/ui/accordion/accordion.d.ts +18 -0
  132. package/dist/components/ui/accordion/accordion.d.ts.map +1 -0
  133. package/dist/components/ui/accordion/accordion.js +60 -0
  134. package/dist/components/ui/accordion/accordion.js.map +1 -0
  135. package/dist/components/ui/accordion/index.d.ts +2 -0
  136. package/dist/components/ui/accordion/index.d.ts.map +1 -0
  137. package/dist/components/ui/alert/alert.d.ts +26 -0
  138. package/dist/components/ui/alert/alert.d.ts.map +1 -0
  139. package/dist/components/ui/alert/alert.js +89 -0
  140. package/dist/components/ui/alert/alert.js.map +1 -0
  141. package/dist/components/ui/alert/index.d.ts +2 -0
  142. package/dist/components/ui/alert/index.d.ts.map +1 -0
  143. package/dist/components/ui/alert-dialog/alert-dialog.d.ts +29 -0
  144. package/dist/components/ui/alert-dialog/alert-dialog.d.ts.map +1 -0
  145. package/dist/components/ui/alert-dialog/alert-dialog.js +155 -0
  146. package/dist/components/ui/alert-dialog/alert-dialog.js.map +1 -0
  147. package/dist/components/ui/alert-dialog/index.d.ts +2 -0
  148. package/dist/components/ui/alert-dialog/index.d.ts.map +1 -0
  149. package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +22 -0
  150. package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts.map +1 -0
  151. package/dist/components/ui/aspect-ratio/aspect-ratio.js +29 -0
  152. package/dist/components/ui/aspect-ratio/aspect-ratio.js.map +1 -0
  153. package/dist/components/ui/aspect-ratio/index.d.ts +2 -0
  154. package/dist/components/ui/aspect-ratio/index.d.ts.map +1 -0
  155. package/dist/components/ui/avatar/avatar.d.ts +41 -0
  156. package/dist/components/ui/avatar/avatar.d.ts.map +1 -0
  157. package/dist/components/ui/avatar/avatar.js +106 -0
  158. package/dist/components/ui/avatar/avatar.js.map +1 -0
  159. package/dist/components/ui/avatar/index.d.ts +2 -0
  160. package/dist/components/ui/avatar/index.d.ts.map +1 -0
  161. package/dist/components/ui/badge/badge.d.ts +22 -0
  162. package/dist/components/ui/badge/badge.d.ts.map +1 -0
  163. package/dist/components/ui/badge/badge.js +58 -0
  164. package/dist/components/ui/badge/badge.js.map +1 -0
  165. package/dist/components/ui/badge/index.d.ts +2 -0
  166. package/dist/components/ui/badge/index.d.ts.map +1 -0
  167. package/dist/components/ui/board/board.d.ts +78 -0
  168. package/dist/components/ui/board/board.d.ts.map +1 -0
  169. package/dist/components/ui/board/board.js +200 -0
  170. package/dist/components/ui/board/board.js.map +1 -0
  171. package/dist/components/ui/board/index.d.ts +2 -0
  172. package/dist/components/ui/board/index.d.ts.map +1 -0
  173. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +24 -0
  174. package/dist/components/ui/breadcrumb/breadcrumb.d.ts.map +1 -0
  175. package/dist/components/ui/breadcrumb/breadcrumb.js +109 -0
  176. package/dist/components/ui/breadcrumb/breadcrumb.js.map +1 -0
  177. package/dist/components/ui/breadcrumb/index.d.ts +2 -0
  178. package/dist/components/ui/breadcrumb/index.d.ts.map +1 -0
  179. package/dist/components/ui/button/button.d.ts +30 -0
  180. package/dist/components/ui/button/button.d.ts.map +1 -0
  181. package/dist/components/ui/button/button.js +80 -0
  182. package/dist/components/ui/button/button.js.map +1 -0
  183. package/dist/components/ui/button/index.d.ts +2 -0
  184. package/dist/components/ui/button/index.d.ts.map +1 -0
  185. package/dist/components/ui/button-group/button-group.d.ts +39 -0
  186. package/dist/components/ui/button-group/button-group.d.ts.map +1 -0
  187. package/dist/components/ui/button-group/button-group.js +63 -0
  188. package/dist/components/ui/button-group/button-group.js.map +1 -0
  189. package/dist/components/ui/button-group/index.d.ts +2 -0
  190. package/dist/components/ui/button-group/index.d.ts.map +1 -0
  191. package/dist/components/ui/calendar/calendar.d.ts +93 -0
  192. package/dist/components/ui/calendar/calendar.d.ts.map +1 -0
  193. package/dist/components/ui/calendar/calendar.js +243 -0
  194. package/dist/components/ui/calendar/calendar.js.map +1 -0
  195. package/dist/components/ui/calendar/index.d.ts +2 -0
  196. package/dist/components/ui/calendar/index.d.ts.map +1 -0
  197. package/dist/components/ui/card/card.d.ts +23 -0
  198. package/dist/components/ui/card/card.d.ts.map +1 -0
  199. package/dist/components/ui/card/card.js +98 -0
  200. package/dist/components/ui/card/card.js.map +1 -0
  201. package/dist/components/ui/card/index.d.ts +2 -0
  202. package/dist/components/ui/card/index.d.ts.map +1 -0
  203. package/dist/components/ui/carousel/carousel.d.ts +66 -0
  204. package/dist/components/ui/carousel/carousel.d.ts.map +1 -0
  205. package/dist/components/ui/carousel/carousel.js +178 -0
  206. package/dist/components/ui/carousel/carousel.js.map +1 -0
  207. package/dist/components/ui/carousel/index.d.ts +2 -0
  208. package/dist/components/ui/carousel/index.d.ts.map +1 -0
  209. package/dist/components/ui/chart/chart.d.ts +154 -0
  210. package/dist/components/ui/chart/chart.d.ts.map +1 -0
  211. package/dist/components/ui/chart/chart.js +373 -0
  212. package/dist/components/ui/chart/chart.js.map +1 -0
  213. package/dist/components/ui/chart/index.d.ts +2 -0
  214. package/dist/components/ui/chart/index.d.ts.map +1 -0
  215. package/dist/components/ui/checkbox/checkbox.d.ts +33 -0
  216. package/dist/components/ui/checkbox/checkbox.d.ts.map +1 -0
  217. package/dist/components/ui/checkbox/checkbox.js +76 -0
  218. package/dist/components/ui/checkbox/checkbox.js.map +1 -0
  219. package/dist/components/ui/checkbox/index.d.ts +2 -0
  220. package/dist/components/ui/checkbox/index.d.ts.map +1 -0
  221. package/dist/components/ui/code-block/code-block.d.ts +75 -0
  222. package/dist/components/ui/code-block/code-block.d.ts.map +1 -0
  223. package/dist/components/ui/code-block/code-block.js +186 -0
  224. package/dist/components/ui/code-block/code-block.js.map +1 -0
  225. package/dist/components/ui/code-block/index.d.ts +2 -0
  226. package/dist/components/ui/code-block/index.d.ts.map +1 -0
  227. package/dist/components/ui/collapsible/collapsible.d.ts +17 -0
  228. package/dist/components/ui/collapsible/collapsible.d.ts.map +1 -0
  229. package/dist/components/ui/collapsible/collapsible.js +38 -0
  230. package/dist/components/ui/collapsible/collapsible.js.map +1 -0
  231. package/dist/components/ui/collapsible/index.d.ts +2 -0
  232. package/dist/components/ui/collapsible/index.d.ts.map +1 -0
  233. package/dist/components/ui/combobox/combobox.d.ts +28 -0
  234. package/dist/components/ui/combobox/combobox.d.ts.map +1 -0
  235. package/dist/components/ui/combobox/combobox.js +102 -0
  236. package/dist/components/ui/combobox/combobox.js.map +1 -0
  237. package/dist/components/ui/combobox/index.d.ts +2 -0
  238. package/dist/components/ui/combobox/index.d.ts.map +1 -0
  239. package/dist/components/ui/command/command.d.ts +53 -0
  240. package/dist/components/ui/command/command.d.ts.map +1 -0
  241. package/dist/components/ui/command/command.js +137 -0
  242. package/dist/components/ui/command/command.js.map +1 -0
  243. package/dist/components/ui/command/index.d.ts +2 -0
  244. package/dist/components/ui/command/index.d.ts.map +1 -0
  245. package/dist/components/ui/context-menu/context-menu.d.ts +32 -0
  246. package/dist/components/ui/context-menu/context-menu.d.ts.map +1 -0
  247. package/dist/components/ui/context-menu/context-menu.js +119 -0
  248. package/dist/components/ui/context-menu/context-menu.js.map +1 -0
  249. package/dist/components/ui/context-menu/index.d.ts +2 -0
  250. package/dist/components/ui/context-menu/index.d.ts.map +1 -0
  251. package/dist/components/ui/detail-panel/detail-panel.d.ts +61 -0
  252. package/dist/components/ui/detail-panel/detail-panel.d.ts.map +1 -0
  253. package/dist/components/ui/detail-panel/detail-panel.js +132 -0
  254. package/dist/components/ui/detail-panel/detail-panel.js.map +1 -0
  255. package/dist/components/ui/detail-panel/index.d.ts +2 -0
  256. package/dist/components/ui/detail-panel/index.d.ts.map +1 -0
  257. package/dist/components/ui/dialog/dialog.d.ts +40 -0
  258. package/dist/components/ui/dialog/dialog.d.ts.map +1 -0
  259. package/dist/components/ui/dialog/dialog.js +125 -0
  260. package/dist/components/ui/dialog/dialog.js.map +1 -0
  261. package/dist/components/ui/dialog/index.d.ts +2 -0
  262. package/dist/components/ui/dialog/index.d.ts.map +1 -0
  263. package/dist/components/ui/diff-block/diff-block.d.ts +95 -0
  264. package/dist/components/ui/diff-block/diff-block.d.ts.map +1 -0
  265. package/dist/components/ui/diff-block/diff-block.js +230 -0
  266. package/dist/components/ui/diff-block/diff-block.js.map +1 -0
  267. package/dist/components/ui/diff-block/diff-block.test.d.ts +2 -0
  268. package/dist/components/ui/diff-block/diff-block.test.d.ts.map +1 -0
  269. package/dist/components/ui/diff-block/index.d.ts +2 -0
  270. package/dist/components/ui/diff-block/index.d.ts.map +1 -0
  271. package/dist/components/ui/drawer/drawer.d.ts +39 -0
  272. package/dist/components/ui/drawer/drawer.d.ts.map +1 -0
  273. package/dist/components/ui/drawer/drawer.js +106 -0
  274. package/dist/components/ui/drawer/drawer.js.map +1 -0
  275. package/dist/components/ui/drawer/index.d.ts +2 -0
  276. package/dist/components/ui/drawer/index.d.ts.map +1 -0
  277. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +48 -0
  278. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts.map +1 -0
  279. package/dist/components/ui/dropdown-menu/dropdown-menu.js +151 -0
  280. package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +1 -0
  281. package/dist/components/ui/dropdown-menu/index.d.ts +2 -0
  282. package/dist/components/ui/dropdown-menu/index.d.ts.map +1 -0
  283. package/dist/components/ui/empty/empty.d.ts +27 -0
  284. package/dist/components/ui/empty/empty.d.ts.map +1 -0
  285. package/dist/components/ui/{empty.js → empty/empty.js} +28 -23
  286. package/dist/components/ui/empty/empty.js.map +1 -0
  287. package/dist/components/ui/empty/index.d.ts +2 -0
  288. package/dist/components/ui/empty/index.d.ts.map +1 -0
  289. package/dist/components/ui/entity-icon/entity-icon.d.ts +59 -0
  290. package/dist/components/ui/entity-icon/entity-icon.d.ts.map +1 -0
  291. package/dist/components/ui/entity-icon/entity-icon.js +145 -0
  292. package/dist/components/ui/entity-icon/entity-icon.js.map +1 -0
  293. package/dist/components/ui/entity-icon/index.d.ts +2 -0
  294. package/dist/components/ui/entity-icon/index.d.ts.map +1 -0
  295. package/dist/components/ui/field/field.d.ts +39 -0
  296. package/dist/components/ui/field/field.d.ts.map +1 -0
  297. package/dist/components/ui/field/field.js +111 -0
  298. package/dist/components/ui/field/field.js.map +1 -0
  299. package/dist/components/ui/field/index.d.ts +2 -0
  300. package/dist/components/ui/field/index.d.ts.map +1 -0
  301. package/dist/components/ui/hover-card/hover-card.d.ts +17 -0
  302. package/dist/components/ui/hover-card/hover-card.d.ts.map +1 -0
  303. package/dist/components/ui/hover-card/hover-card.js +40 -0
  304. package/dist/components/ui/hover-card/hover-card.js.map +1 -0
  305. package/dist/components/ui/hover-card/index.d.ts +2 -0
  306. package/dist/components/ui/hover-card/index.d.ts.map +1 -0
  307. package/dist/components/ui/input/index.d.ts +2 -0
  308. package/dist/components/ui/input/index.d.ts.map +1 -0
  309. package/dist/components/ui/input/input.d.ts +15 -0
  310. package/dist/components/ui/input/input.d.ts.map +1 -0
  311. package/dist/components/ui/input/input.js +36 -0
  312. package/dist/components/ui/input/input.js.map +1 -0
  313. package/dist/components/ui/input-group/index.d.ts +2 -0
  314. package/dist/components/ui/input-group/index.d.ts.map +1 -0
  315. package/dist/components/ui/input-group/input-group.d.ts +34 -0
  316. package/dist/components/ui/input-group/input-group.d.ts.map +1 -0
  317. package/dist/components/ui/input-group/input-group.js +93 -0
  318. package/dist/components/ui/input-group/input-group.js.map +1 -0
  319. package/dist/components/ui/input-otp/index.d.ts +2 -0
  320. package/dist/components/ui/input-otp/index.d.ts.map +1 -0
  321. package/dist/components/ui/input-otp/input-otp.d.ts +37 -0
  322. package/dist/components/ui/input-otp/input-otp.d.ts.map +1 -0
  323. package/dist/components/ui/input-otp/input-otp.js +92 -0
  324. package/dist/components/ui/input-otp/input-otp.js.map +1 -0
  325. package/dist/components/ui/item/index.d.ts +2 -0
  326. package/dist/components/ui/item/index.d.ts.map +1 -0
  327. package/dist/components/ui/item/item.d.ts +49 -0
  328. package/dist/components/ui/item/item.d.ts.map +1 -0
  329. package/dist/components/ui/item/item.js +163 -0
  330. package/dist/components/ui/item/item.js.map +1 -0
  331. package/dist/components/ui/kbd/index.d.ts +2 -0
  332. package/dist/components/ui/kbd/index.d.ts.map +1 -0
  333. package/dist/components/ui/kbd/kbd.d.ts +14 -0
  334. package/dist/components/ui/kbd/kbd.d.ts.map +1 -0
  335. package/dist/components/ui/kbd/kbd.js +40 -0
  336. package/dist/components/ui/kbd/kbd.js.map +1 -0
  337. package/dist/components/ui/label/index.d.ts +2 -0
  338. package/dist/components/ui/label/index.d.ts.map +1 -0
  339. package/dist/components/ui/label/label.d.ts +17 -0
  340. package/dist/components/ui/label/label.d.ts.map +1 -0
  341. package/dist/components/ui/label/label.js +33 -0
  342. package/dist/components/ui/label/label.js.map +1 -0
  343. package/dist/components/ui/menubar/index.d.ts +2 -0
  344. package/dist/components/ui/menubar/index.d.ts.map +1 -0
  345. package/dist/components/ui/menubar/menubar.d.ts +38 -0
  346. package/dist/components/ui/menubar/menubar.d.ts.map +1 -0
  347. package/dist/components/ui/menubar/menubar.js +138 -0
  348. package/dist/components/ui/menubar/menubar.js.map +1 -0
  349. package/dist/components/ui/modal-dialog/index.d.ts +2 -0
  350. package/dist/components/ui/modal-dialog/index.d.ts.map +1 -0
  351. package/dist/components/ui/modal-dialog/modal-dialog.d.ts +35 -0
  352. package/dist/components/ui/modal-dialog/modal-dialog.d.ts.map +1 -0
  353. package/dist/components/ui/modal-dialog/modal-dialog.js +78 -0
  354. package/dist/components/ui/modal-dialog/modal-dialog.js.map +1 -0
  355. package/dist/components/ui/navigation-menu/index.d.ts +2 -0
  356. package/dist/components/ui/navigation-menu/index.d.ts.map +1 -0
  357. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +77 -0
  358. package/dist/components/ui/navigation-menu/navigation-menu.d.ts.map +1 -0
  359. package/dist/components/ui/navigation-menu/navigation-menu.js +116 -0
  360. package/dist/components/ui/navigation-menu/navigation-menu.js.map +1 -0
  361. package/dist/components/ui/pagination/index.d.ts +2 -0
  362. package/dist/components/ui/pagination/index.d.ts.map +1 -0
  363. package/dist/components/ui/pagination/pagination.d.ts +33 -0
  364. package/dist/components/ui/pagination/pagination.d.ts.map +1 -0
  365. package/dist/components/ui/pagination/pagination.js +92 -0
  366. package/dist/components/ui/pagination/pagination.js.map +1 -0
  367. package/dist/components/ui/popover/index.d.ts +2 -0
  368. package/dist/components/ui/popover/index.d.ts.map +1 -0
  369. package/dist/components/ui/popover/popover.d.ts +26 -0
  370. package/dist/components/ui/popover/popover.d.ts.map +1 -0
  371. package/dist/components/ui/popover/popover.js +66 -0
  372. package/dist/components/ui/popover/popover.js.map +1 -0
  373. package/dist/components/ui/progress/index.d.ts +2 -0
  374. package/dist/components/ui/progress/index.d.ts.map +1 -0
  375. package/dist/components/ui/progress/progress.d.ts +29 -0
  376. package/dist/components/ui/progress/progress.d.ts.map +1 -0
  377. package/dist/components/ui/progress/progress.js +53 -0
  378. package/dist/components/ui/progress/progress.js.map +1 -0
  379. package/dist/components/ui/radio-group/index.d.ts +2 -0
  380. package/dist/components/ui/radio-group/index.d.ts.map +1 -0
  381. package/dist/components/ui/radio-group/radio-group.d.ts +26 -0
  382. package/dist/components/ui/radio-group/radio-group.d.ts.map +1 -0
  383. package/dist/components/ui/radio-group/radio-group.js +77 -0
  384. package/dist/components/ui/radio-group/radio-group.js.map +1 -0
  385. package/dist/components/ui/resizable/index.d.ts +2 -0
  386. package/dist/components/ui/resizable/index.d.ts.map +1 -0
  387. package/dist/components/ui/resizable/resizable.d.ts +33 -0
  388. package/dist/components/ui/resizable/resizable.d.ts.map +1 -0
  389. package/dist/components/ui/resizable/resizable.js +57 -0
  390. package/dist/components/ui/resizable/resizable.js.map +1 -0
  391. package/dist/components/ui/scroll-area/index.d.ts +2 -0
  392. package/dist/components/ui/scroll-area/index.d.ts.map +1 -0
  393. package/dist/components/ui/scroll-area/scroll-area.d.ts +26 -0
  394. package/dist/components/ui/scroll-area/scroll-area.d.ts.map +1 -0
  395. package/dist/components/ui/scroll-area/scroll-area.js +36 -0
  396. package/dist/components/ui/scroll-area/scroll-area.js.map +1 -0
  397. package/dist/components/ui/select/index.d.ts +2 -0
  398. package/dist/components/ui/select/index.d.ts.map +1 -0
  399. package/dist/components/ui/select/select.d.ts +63 -0
  400. package/dist/components/ui/select/select.d.ts.map +1 -0
  401. package/dist/components/ui/select/select.js +142 -0
  402. package/dist/components/ui/select/select.js.map +1 -0
  403. package/dist/components/ui/separator/index.d.ts +2 -0
  404. package/dist/components/ui/separator/index.d.ts.map +1 -0
  405. package/dist/components/ui/separator/separator.d.ts +17 -0
  406. package/dist/components/ui/separator/separator.d.ts.map +1 -0
  407. package/dist/components/ui/separator/separator.js +24 -0
  408. package/dist/components/ui/separator/separator.js.map +1 -0
  409. package/dist/components/ui/sheet/index.d.ts +2 -0
  410. package/dist/components/ui/sheet/index.d.ts.map +1 -0
  411. package/dist/components/ui/sheet/sheet.d.ts +32 -0
  412. package/dist/components/ui/sheet/sheet.d.ts.map +1 -0
  413. package/dist/components/ui/sheet/sheet.js +118 -0
  414. package/dist/components/ui/sheet/sheet.js.map +1 -0
  415. package/dist/components/ui/skeleton/index.d.ts +2 -0
  416. package/dist/components/ui/skeleton/index.d.ts.map +1 -0
  417. package/dist/components/ui/skeleton/skeleton.d.ts +15 -0
  418. package/dist/components/ui/skeleton/skeleton.d.ts.map +1 -0
  419. package/dist/components/ui/skeleton/skeleton.js +31 -0
  420. package/dist/components/ui/skeleton/skeleton.js.map +1 -0
  421. package/dist/components/ui/slider/index.d.ts +2 -0
  422. package/dist/components/ui/slider/index.d.ts.map +1 -0
  423. package/dist/components/ui/slider/slider.d.ts +22 -0
  424. package/dist/components/ui/slider/slider.d.ts.map +1 -0
  425. package/dist/components/ui/slider/slider.js +59 -0
  426. package/dist/components/ui/slider/slider.js.map +1 -0
  427. package/dist/components/ui/spinner/index.d.ts +2 -0
  428. package/dist/components/ui/spinner/index.d.ts.map +1 -0
  429. package/dist/components/ui/spinner/spinner.d.ts +25 -0
  430. package/dist/components/ui/spinner/spinner.d.ts.map +1 -0
  431. package/dist/components/ui/spinner/spinner.js +57 -0
  432. package/dist/components/ui/spinner/spinner.js.map +1 -0
  433. package/dist/components/ui/status-chip/index.d.ts +2 -0
  434. package/dist/components/ui/status-chip/index.d.ts.map +1 -0
  435. package/dist/components/ui/status-chip/status-chip.d.ts +70 -0
  436. package/dist/components/ui/status-chip/status-chip.d.ts.map +1 -0
  437. package/dist/components/ui/status-chip/status-chip.js +140 -0
  438. package/dist/components/ui/status-chip/status-chip.js.map +1 -0
  439. package/dist/components/ui/switch/index.d.ts +2 -0
  440. package/dist/components/ui/switch/index.d.ts.map +1 -0
  441. package/dist/components/ui/switch/switch.d.ts +36 -0
  442. package/dist/components/ui/switch/switch.d.ts.map +1 -0
  443. package/dist/components/ui/switch/switch.js +74 -0
  444. package/dist/components/ui/switch/switch.js.map +1 -0
  445. package/dist/components/ui/table/index.d.ts +2 -0
  446. package/dist/components/ui/table/index.d.ts.map +1 -0
  447. package/dist/components/ui/table/table.d.ts +29 -0
  448. package/dist/components/ui/table/table.d.ts.map +1 -0
  449. package/dist/components/ui/table/table.js +129 -0
  450. package/dist/components/ui/table/table.js.map +1 -0
  451. package/dist/components/ui/tabs/index.d.ts +2 -0
  452. package/dist/components/ui/tabs/index.d.ts.map +1 -0
  453. package/dist/components/ui/tabs/tabs.d.ts +23 -0
  454. package/dist/components/ui/tabs/tabs.d.ts.map +1 -0
  455. package/dist/components/ui/tabs/tabs.js +43 -0
  456. package/dist/components/ui/tabs/tabs.js.map +1 -0
  457. package/dist/components/ui/textarea/index.d.ts +2 -0
  458. package/dist/components/ui/textarea/index.d.ts.map +1 -0
  459. package/dist/components/ui/textarea/textarea.d.ts +14 -0
  460. package/dist/components/ui/textarea/textarea.d.ts.map +1 -0
  461. package/dist/components/ui/textarea/textarea.js +30 -0
  462. package/dist/components/ui/textarea/textarea.js.map +1 -0
  463. package/dist/components/ui/toast/index.d.ts +2 -0
  464. package/dist/components/ui/toast/index.d.ts.map +1 -0
  465. package/dist/components/ui/toast/toast.d.ts +68 -0
  466. package/dist/components/ui/toast/toast.d.ts.map +1 -0
  467. package/dist/components/ui/toast/toast.js +186 -0
  468. package/dist/components/ui/toast/toast.js.map +1 -0
  469. package/dist/components/ui/toggle/index.d.ts +2 -0
  470. package/dist/components/ui/toggle/index.d.ts.map +1 -0
  471. package/dist/components/ui/toggle/toggle.d.ts +22 -0
  472. package/dist/components/ui/toggle/toggle.d.ts.map +1 -0
  473. package/dist/components/ui/toggle/toggle.js +64 -0
  474. package/dist/components/ui/toggle/toggle.js.map +1 -0
  475. package/dist/components/ui/toggle-group/index.d.ts +2 -0
  476. package/dist/components/ui/toggle-group/index.d.ts.map +1 -0
  477. package/dist/components/ui/toggle-group/toggle-group.d.ts +35 -0
  478. package/dist/components/ui/toggle-group/toggle-group.d.ts.map +1 -0
  479. package/dist/components/ui/toggle-group/toggle-group.js +38 -0
  480. package/dist/components/ui/toggle-group/toggle-group.js.map +1 -0
  481. package/dist/components/ui/tooltip/index.d.ts +2 -0
  482. package/dist/components/ui/tooltip/index.d.ts.map +1 -0
  483. package/dist/components/ui/tooltip/tooltip.d.ts +18 -0
  484. package/dist/components/ui/tooltip/tooltip.d.ts.map +1 -0
  485. package/dist/components/ui/tooltip/tooltip.js +67 -0
  486. package/dist/components/ui/tooltip/tooltip.js.map +1 -0
  487. package/dist/index.d.ts +96 -19
  488. package/dist/index.d.ts.map +1 -0
  489. package/dist/index.js +90 -20
  490. package/dist/lib/keyed-rows.d.ts +36 -0
  491. package/dist/lib/keyed-rows.d.ts.map +1 -0
  492. package/dist/lib/keyed-rows.js +53 -0
  493. package/dist/lib/keyed-rows.js.map +1 -0
  494. package/dist/lib/keyed-rows.test.d.ts +2 -0
  495. package/dist/lib/keyed-rows.test.d.ts.map +1 -0
  496. package/dist/lib/overlay.d.ts +44 -0
  497. package/dist/lib/overlay.d.ts.map +1 -0
  498. package/dist/lib/overlay.js +57 -0
  499. package/dist/lib/overlay.js.map +1 -0
  500. package/dist/lib/themes.d.ts +197 -0
  501. package/dist/lib/themes.d.ts.map +1 -0
  502. package/dist/lib/themes.js +303 -0
  503. package/dist/lib/themes.js.map +1 -0
  504. package/dist/lib/tokens.d.ts +103 -0
  505. package/dist/lib/tokens.d.ts.map +1 -0
  506. package/dist/lib/tokens.js +805 -0
  507. package/dist/lib/tokens.js.map +1 -0
  508. package/dist/lib/utils.d.ts +27 -0
  509. package/dist/lib/utils.d.ts.map +1 -0
  510. package/dist/lib/utils.js +61 -3
  511. package/dist/lib/utils.js.map +1 -0
  512. package/dist/lib/variants.d.ts +57 -0
  513. package/dist/lib/variants.d.ts.map +1 -0
  514. package/dist/lib/variants.js +49 -0
  515. package/dist/lib/variants.js.map +1 -0
  516. package/dist/lib/version-notes.d.ts +24 -0
  517. package/dist/lib/version-notes.d.ts.map +1 -0
  518. package/dist/lib/version-notes.js +41 -1
  519. package/dist/lib/version-notes.js.map +1 -0
  520. package/dist/r/accordion.json +23 -0
  521. package/dist/r/account-menu.json +25 -0
  522. package/dist/r/alert-dialog.json +22 -0
  523. package/dist/r/alert.json +22 -0
  524. package/dist/r/app-shell.json +20 -0
  525. package/dist/r/aspect-ratio.json +20 -0
  526. package/dist/r/avatar.json +20 -0
  527. package/dist/r/badge.json +22 -0
  528. package/dist/r/board.json +20 -0
  529. package/dist/r/breadcrumb.json +22 -0
  530. package/dist/r/button-group.json +22 -0
  531. package/dist/r/button.json +22 -0
  532. package/dist/r/calendar.json +25 -0
  533. package/dist/r/card.json +20 -0
  534. package/dist/r/carousel.json +26 -0
  535. package/dist/r/chart.json +23 -0
  536. package/dist/r/checkbox.json +23 -0
  537. package/dist/r/code-block.json +24 -0
  538. package/dist/r/collapsible.json +22 -0
  539. package/dist/r/combobox.json +23 -0
  540. package/dist/r/command.json +23 -0
  541. package/dist/r/context-menu.json +23 -0
  542. package/dist/r/conversation.json +48 -0
  543. package/dist/r/detail-panel.json +24 -0
  544. package/dist/r/dialog.json +23 -0
  545. package/dist/r/diff-block.json +20 -0
  546. package/dist/r/drawer.json +22 -0
  547. package/dist/r/dropdown-menu.json +23 -0
  548. package/dist/r/empty.json +20 -0
  549. package/dist/r/entity-icon.json +20 -0
  550. package/dist/r/field.json +22 -0
  551. package/dist/r/hover-card.json +22 -0
  552. package/dist/r/input-group.json +20 -0
  553. package/dist/r/input-otp.json +22 -0
  554. package/dist/r/input.json +20 -0
  555. package/dist/r/item.json +20 -0
  556. package/dist/r/kbd.json +20 -0
  557. package/dist/r/label.json +20 -0
  558. package/dist/r/list-row.json +22 -0
  559. package/dist/r/menubar.json +23 -0
  560. package/dist/r/modal-dialog.json +22 -0
  561. package/dist/r/navigation-menu.json +23 -0
  562. package/dist/r/page.json +20 -0
  563. package/dist/r/pagination.json +23 -0
  564. package/dist/r/panel.json +20 -0
  565. package/dist/r/popover.json +22 -0
  566. package/dist/r/progress.json +22 -0
  567. package/dist/r/radio-group.json +23 -0
  568. package/dist/r/registry.json +1676 -0
  569. package/dist/r/resizable.json +23 -0
  570. package/dist/r/scroll-area.json +20 -0
  571. package/dist/r/select.json +23 -0
  572. package/dist/r/separator.json +22 -0
  573. package/dist/r/settings.json +20 -0
  574. package/dist/r/sheet.json +25 -0
  575. package/dist/r/side-rail.json +27 -0
  576. package/dist/r/sidebar-nav.json +23 -0
  577. package/dist/r/skeleton.json +20 -0
  578. package/dist/r/slider.json +22 -0
  579. package/dist/r/spinner.json +22 -0
  580. package/dist/r/stat.json +22 -0
  581. package/dist/r/status-bar.json +20 -0
  582. package/dist/r/status-chip.json +22 -0
  583. package/dist/r/switch.json +22 -0
  584. package/dist/r/table.json +20 -0
  585. package/dist/r/tabs.json +22 -0
  586. package/dist/r/textarea.json +20 -0
  587. package/dist/r/theme.json +36 -0
  588. package/dist/r/toast.json +23 -0
  589. package/dist/r/toggle-group.json +24 -0
  590. package/dist/r/toggle.json +22 -0
  591. package/dist/r/tooltip.json +22 -0
  592. package/dist/r/top-bar.json +20 -0
  593. package/dist/r/update-dialog.json +27 -0
  594. package/dist/r/workspace-mark.json +22 -0
  595. package/package.json +75 -21
  596. package/registry.json +1676 -0
  597. package/src/components/composites/account-menu/account-menu.tsx +150 -0
  598. package/src/components/composites/account-menu/index.ts +1 -0
  599. package/src/components/composites/list-row/index.ts +1 -0
  600. package/src/components/composites/list-row/list-row.tsx +116 -0
  601. package/src/components/composites/settings/index.ts +1 -0
  602. package/src/components/composites/settings/settings.tsx +142 -0
  603. package/src/components/composites/stat/index.ts +9 -0
  604. package/src/components/composites/stat/stat.tsx +155 -0
  605. package/src/components/composites/update-dialog/index.ts +7 -0
  606. package/src/components/composites/update-dialog/update-dialog.tsx +529 -0
  607. package/src/components/composites/workspace-mark/index.ts +1 -0
  608. package/src/components/composites/workspace-mark/workspace-mark.tsx +72 -0
  609. package/src/components/conversation/conversation-avatar.tsx +60 -0
  610. package/src/components/conversation/conversation-surface.tsx +107 -0
  611. package/src/components/conversation/index.ts +25 -0
  612. package/src/components/conversation/message-composer.tsx +239 -0
  613. package/src/components/conversation/message-row.tsx +387 -0
  614. package/src/components/conversation/thread-panel.tsx +141 -0
  615. package/src/components/layout/app-shell/app-shell.tsx +92 -0
  616. package/src/components/layout/app-shell/index.ts +1 -0
  617. package/src/components/layout/page/index.ts +9 -0
  618. package/src/components/layout/page/page.tsx +122 -0
  619. package/src/components/layout/panel/index.ts +12 -0
  620. package/src/components/layout/panel/panel.tsx +166 -0
  621. package/src/components/layout/side-rail/index.ts +12 -0
  622. package/src/components/layout/side-rail/side-rail-context.ts +42 -0
  623. package/src/components/layout/side-rail/side-rail.tsx +405 -0
  624. package/src/components/layout/sidebar-nav/index.ts +14 -0
  625. package/src/components/layout/sidebar-nav/sidebar-nav.tsx +244 -0
  626. package/src/components/layout/status-bar/index.ts +1 -0
  627. package/src/components/layout/status-bar/status-bar.tsx +73 -0
  628. package/src/components/layout/top-bar/index.ts +10 -0
  629. package/src/components/layout/top-bar/top-bar.tsx +166 -0
  630. package/src/components/motion/index.ts +2 -0
  631. package/src/components/motion/presence.tsx +32 -0
  632. package/src/components/theme/appearance-panel.tsx +179 -0
  633. package/src/components/theme/index.ts +22 -0
  634. package/src/components/theme/theme-picker.tsx +174 -0
  635. package/src/components/theme/theme-provider.tsx +309 -0
  636. package/src/components/theme/theme-toggle.tsx +64 -0
  637. package/src/components/ui/accordion/accordion.tsx +66 -0
  638. package/src/components/ui/accordion/index.ts +1 -0
  639. package/src/components/ui/alert/alert.tsx +95 -0
  640. package/src/components/ui/alert/index.ts +1 -0
  641. package/src/components/ui/alert-dialog/alert-dialog.tsx +176 -0
  642. package/src/components/ui/alert-dialog/index.ts +13 -0
  643. package/src/components/ui/aspect-ratio/aspect-ratio.tsx +38 -0
  644. package/src/components/ui/aspect-ratio/index.ts +1 -0
  645. package/src/components/ui/avatar/avatar.tsx +114 -0
  646. package/src/components/ui/avatar/index.ts +9 -0
  647. package/src/components/ui/badge/badge.tsx +59 -0
  648. package/src/components/ui/badge/index.ts +1 -0
  649. package/src/components/ui/board/board.tsx +254 -0
  650. package/src/components/ui/board/index.ts +10 -0
  651. package/src/components/ui/breadcrumb/breadcrumb.tsx +117 -0
  652. package/src/components/ui/breadcrumb/index.ts +9 -0
  653. package/src/components/ui/button/button.tsx +89 -0
  654. package/src/components/ui/button/index.ts +1 -0
  655. package/src/components/ui/button-group/button-group.tsx +92 -0
  656. package/src/components/ui/button-group/index.ts +6 -0
  657. package/src/components/ui/calendar/calendar.tsx +277 -0
  658. package/src/components/ui/calendar/index.ts +1 -0
  659. package/src/components/ui/card/card.tsx +82 -0
  660. package/src/components/ui/card/index.ts +10 -0
  661. package/src/components/ui/carousel/carousel.tsx +209 -0
  662. package/src/components/ui/carousel/index.ts +1 -0
  663. package/src/components/ui/chart/chart.tsx +413 -0
  664. package/src/components/ui/chart/index.ts +17 -0
  665. package/src/components/ui/checkbox/checkbox.tsx +99 -0
  666. package/src/components/ui/checkbox/index.ts +1 -0
  667. package/src/components/ui/code-block/code-block.tsx +238 -0
  668. package/src/components/ui/code-block/index.ts +1 -0
  669. package/src/components/ui/collapsible/collapsible.tsx +54 -0
  670. package/src/components/ui/collapsible/index.ts +1 -0
  671. package/src/components/ui/combobox/combobox.tsx +142 -0
  672. package/src/components/ui/combobox/index.ts +10 -0
  673. package/src/components/ui/command/command.tsx +214 -0
  674. package/src/components/ui/command/index.ts +12 -0
  675. package/src/components/ui/context-menu/context-menu.tsx +163 -0
  676. package/src/components/ui/context-menu/index.ts +15 -0
  677. package/src/components/ui/detail-panel/detail-panel.tsx +161 -0
  678. package/src/components/ui/detail-panel/index.ts +9 -0
  679. package/src/components/ui/dialog/dialog.tsx +138 -0
  680. package/src/components/ui/dialog/index.ts +14 -0
  681. package/src/components/ui/diff-block/diff-block.tsx +286 -0
  682. package/src/components/ui/diff-block/index.ts +11 -0
  683. package/src/components/ui/drawer/drawer.tsx +144 -0
  684. package/src/components/ui/drawer/index.ts +13 -0
  685. package/src/components/ui/dropdown-menu/dropdown-menu.tsx +203 -0
  686. package/src/components/ui/dropdown-menu/index.ts +18 -0
  687. package/src/components/ui/empty/empty.tsx +104 -0
  688. package/src/components/ui/empty/index.ts +10 -0
  689. package/src/components/ui/entity-icon/entity-icon.tsx +154 -0
  690. package/src/components/ui/entity-icon/index.ts +1 -0
  691. package/src/components/ui/field/field.tsx +131 -0
  692. package/src/components/ui/field/index.ts +11 -0
  693. package/src/components/ui/hover-card/hover-card.tsx +48 -0
  694. package/src/components/ui/hover-card/index.ts +1 -0
  695. package/src/components/ui/input/index.ts +1 -0
  696. package/src/components/ui/input/input.tsx +41 -0
  697. package/src/components/ui/input-group/index.ts +8 -0
  698. package/src/components/ui/input-group/input-group.tsx +111 -0
  699. package/src/components/ui/input-otp/index.ts +1 -0
  700. package/src/components/ui/input-otp/input-otp.tsx +108 -0
  701. package/src/components/ui/item/index.ts +10 -0
  702. package/src/components/ui/item/item.tsx +146 -0
  703. package/src/components/ui/kbd/index.ts +1 -0
  704. package/src/components/ui/kbd/kbd.tsx +42 -0
  705. package/src/components/ui/label/index.ts +1 -0
  706. package/src/components/ui/label/label.tsx +36 -0
  707. package/src/components/ui/menubar/index.ts +16 -0
  708. package/src/components/ui/menubar/menubar.tsx +190 -0
  709. package/src/components/ui/modal-dialog/index.ts +1 -0
  710. package/src/components/ui/modal-dialog/modal-dialog.tsx +95 -0
  711. package/src/components/ui/navigation-menu/index.ts +13 -0
  712. package/src/components/ui/navigation-menu/navigation-menu.tsx +229 -0
  713. package/src/components/ui/pagination/index.ts +8 -0
  714. package/src/components/ui/pagination/pagination.tsx +144 -0
  715. package/src/components/ui/popover/index.ts +10 -0
  716. package/src/components/ui/popover/popover.tsx +81 -0
  717. package/src/components/ui/progress/index.ts +1 -0
  718. package/src/components/ui/progress/progress.tsx +67 -0
  719. package/src/components/ui/radio-group/index.ts +1 -0
  720. package/src/components/ui/radio-group/radio-group.tsx +78 -0
  721. package/src/components/ui/resizable/index.ts +6 -0
  722. package/src/components/ui/resizable/resizable.tsx +74 -0
  723. package/src/components/ui/scroll-area/index.ts +1 -0
  724. package/src/components/ui/scroll-area/scroll-area.tsx +66 -0
  725. package/src/components/ui/select/index.ts +11 -0
  726. package/src/components/ui/select/select.tsx +188 -0
  727. package/src/components/ui/separator/index.ts +1 -0
  728. package/src/components/ui/separator/separator.tsx +40 -0
  729. package/src/components/ui/sheet/index.ts +13 -0
  730. package/src/components/ui/sheet/sheet.tsx +132 -0
  731. package/src/components/ui/skeleton/index.ts +1 -0
  732. package/src/components/ui/skeleton/skeleton.tsx +28 -0
  733. package/src/components/ui/slider/index.ts +1 -0
  734. package/src/components/ui/slider/slider.tsx +81 -0
  735. package/src/components/ui/spinner/index.ts +1 -0
  736. package/src/components/ui/spinner/spinner.tsx +58 -0
  737. package/src/components/ui/status-chip/index.ts +8 -0
  738. package/src/components/ui/status-chip/status-chip.tsx +142 -0
  739. package/src/components/ui/switch/index.ts +1 -0
  740. package/src/components/ui/switch/switch.tsx +100 -0
  741. package/src/components/ui/table/index.ts +11 -0
  742. package/src/components/ui/table/table.tsx +125 -0
  743. package/src/components/ui/tabs/index.ts +8 -0
  744. package/src/components/ui/tabs/tabs.tsx +77 -0
  745. package/src/components/ui/textarea/index.ts +1 -0
  746. package/src/components/ui/textarea/textarea.tsx +36 -0
  747. package/src/components/ui/toast/index.ts +1 -0
  748. package/src/components/ui/toast/toast.tsx +220 -0
  749. package/src/components/ui/toggle/index.ts +1 -0
  750. package/src/components/ui/toggle/toggle.tsx +60 -0
  751. package/src/components/ui/toggle-group/index.ts +6 -0
  752. package/src/components/ui/toggle-group/toggle-group.tsx +66 -0
  753. package/src/components/ui/tooltip/index.ts +9 -0
  754. package/src/components/ui/tooltip/tooltip.tsx +102 -0
  755. package/src/index.ts +154 -0
  756. package/src/lib/keyed-rows.ts +68 -0
  757. package/src/lib/overlay.ts +70 -0
  758. package/src/lib/themes.ts +490 -0
  759. package/src/lib/tokens.ts +688 -0
  760. package/src/lib/utils.ts +74 -4
  761. package/src/lib/variants.ts +62 -0
  762. package/src/lib/version-notes.ts +35 -0
  763. package/src/styles/base.css +489 -484
  764. package/src/styles/fonts.css +26 -0
  765. package/src/styles/globals.css +14 -3
  766. package/src/styles/theme.css +838 -229
  767. package/LICENSE +0 -201
  768. package/dist/components/account-drawer.d.ts +0 -11
  769. package/dist/components/account-drawer.js +0 -120
  770. package/dist/components/appearance.d.ts +0 -261
  771. package/dist/components/appearance.js +0 -802
  772. package/dist/components/on-screen-controls.d.ts +0 -8
  773. package/dist/components/on-screen-controls.js +0 -162
  774. package/dist/components/scene-settings.d.ts +0 -33
  775. package/dist/components/scene-settings.js +0 -253
  776. package/dist/components/theme-preview.d.ts +0 -40
  777. package/dist/components/theme-preview.js +0 -210
  778. package/dist/components/theme-provider.d.ts +0 -52
  779. package/dist/components/theme-provider.js +0 -128
  780. package/dist/components/theme-swatch.d.ts +0 -12
  781. package/dist/components/theme-swatch.js +0 -66
  782. package/dist/components/theme-toggle.d.ts +0 -7
  783. package/dist/components/theme-toggle.js +0 -64
  784. package/dist/components/ui/badge.d.ts +0 -8
  785. package/dist/components/ui/badge.js +0 -34
  786. package/dist/components/ui/button.d.ts +0 -9
  787. package/dist/components/ui/button.js +0 -52
  788. package/dist/components/ui/card.d.ts +0 -4
  789. package/dist/components/ui/card.js +0 -28
  790. package/dist/components/ui/dialog.d.ts +0 -15
  791. package/dist/components/ui/dialog.js +0 -104
  792. package/dist/components/ui/drawer.d.ts +0 -24
  793. package/dist/components/ui/drawer.js +0 -120
  794. package/dist/components/ui/dropdown-menu.d.ts +0 -35
  795. package/dist/components/ui/dropdown-menu.js +0 -180
  796. package/dist/components/ui/empty.d.ts +0 -12
  797. package/dist/components/ui/field.d.ts +0 -25
  798. package/dist/components/ui/field.js +0 -188
  799. package/dist/components/ui/input.d.ts +0 -3
  800. package/dist/components/ui/input.js +0 -22
  801. package/dist/components/ui/label.d.ts +0 -3
  802. package/dist/components/ui/label.js +0 -17
  803. package/dist/components/ui/radio-group.d.ts +0 -5
  804. package/dist/components/ui/radio-group.js +0 -39
  805. package/dist/components/ui/separator.d.ts +0 -7
  806. package/dist/components/ui/separator.js +0 -20
  807. package/dist/components/ui/skeleton.d.ts +0 -3
  808. package/dist/components/ui/skeleton.js +0 -17
  809. package/dist/components/ui/spinner.d.ts +0 -5
  810. package/dist/components/ui/spinner.js +0 -17
  811. package/dist/components/ui/switch.d.ts +0 -8
  812. package/dist/components/ui/switch.js +0 -59
  813. package/dist/components/ui/tabs.d.ts +0 -11
  814. package/dist/components/ui/tabs.js +0 -57
  815. package/dist/components/ui/toggle-group.d.ts +0 -13
  816. package/dist/components/ui/toggle-group.js +0 -95
  817. package/dist/components/ui/toggle.d.ts +0 -10
  818. package/dist/components/ui/toggle.js +0 -41
  819. package/dist/components/ui/tooltip.d.ts +0 -15
  820. package/dist/components/ui/tooltip.js +0 -55
  821. package/dist/components/version-dialog.d.ts +0 -25
  822. package/dist/components/version-dialog.js +0 -330
  823. package/dist/components/workspace-brand.d.ts +0 -5
  824. package/dist/components/workspace-brand.js +0 -13
  825. package/dist/components/workspace-logo.d.ts +0 -3
  826. package/dist/components/workspace-logo.js +0 -17
  827. package/src/components/account-drawer.tsx +0 -114
  828. package/src/components/appearance.ts +0 -1112
  829. package/src/components/on-screen-controls.tsx +0 -149
  830. package/src/components/scene-settings.tsx +0 -199
  831. package/src/components/theme-preview.tsx +0 -170
  832. package/src/components/theme-provider.tsx +0 -214
  833. package/src/components/theme-swatch.tsx +0 -49
  834. package/src/components/theme-toggle.tsx +0 -48
  835. package/src/components/ui/badge.tsx +0 -40
  836. package/src/components/ui/button.tsx +0 -58
  837. package/src/components/ui/card.tsx +0 -21
  838. package/src/components/ui/dialog.tsx +0 -132
  839. package/src/components/ui/drawer.tsx +0 -168
  840. package/src/components/ui/dropdown-menu.tsx +0 -235
  841. package/src/components/ui/empty.tsx +0 -97
  842. package/src/components/ui/field.tsx +0 -220
  843. package/src/components/ui/input.tsx +0 -20
  844. package/src/components/ui/label.tsx +0 -19
  845. package/src/components/ui/radio-group.tsx +0 -41
  846. package/src/components/ui/separator.tsx +0 -28
  847. package/src/components/ui/skeleton.tsx +0 -16
  848. package/src/components/ui/spinner.tsx +0 -20
  849. package/src/components/ui/switch.tsx +0 -59
  850. package/src/components/ui/tabs.tsx +0 -76
  851. package/src/components/ui/toggle-group.tsx +0 -98
  852. package/src/components/ui/toggle.tsx +0 -42
  853. package/src/components/ui/tooltip.tsx +0 -61
  854. package/src/components/version-dialog.tsx +0 -368
  855. package/src/components/workspace-brand.tsx +0 -18
  856. package/src/components/workspace-logo.tsx +0 -21
  857. package/src/index.tsx +0 -53
  858. package/src/styles/auth-shell.css +0 -167
  859. package/src/styles/conventional-workspace.css +0 -2858
  860. package/src/styles/dev-view.css +0 -899
  861. package/src/styles/workspace-shell.css +0 -82
  862. package/tsconfig.json +0 -11
@@ -1,42 +1,26 @@
1
- /* Neutral Tailwind base layer for the shared UI kit: the state variants and
2
- utilities the components rely on. Framework-neutral CSS only — no component
3
- runtime, no styling tokens (those live in theme.css and friends). */
1
+ /* ============================================================================
2
+ * Adea base layer
3
+ * ============================================================================
4
+ *
5
+ * Framework-neutral CSS that the components depend on but that carries no
6
+ * token values (those live in `theme.css`):
7
+ *
8
+ * - the component-state variants Kobalte and corvu emit data attributes for
9
+ * - keyframes and entrance animations
10
+ * - the named utilities the design system exposes to consumers
11
+ * - the base layer: focus ring, scrollbars, selection, reduced-motion
12
+ *
13
+ * Everything here ships as CSS. Nothing in this file may be duplicated in a
14
+ * component's class list.
15
+ * ========================================================================== */
4
16
 
5
17
  @import 'tw-animate-css';
6
18
 
7
- @theme inline {
8
- @keyframes accordion-down {
9
- from {
10
- height: 0;
11
- }
12
- to {
13
- height: var(--accordion-panel-height, auto);
14
- }
15
- }
16
-
17
- @keyframes accordion-up {
18
- from {
19
- height: var(--accordion-panel-height, auto);
20
- }
21
- to {
22
- height: 0;
23
- }
24
- }
25
- }
26
-
27
- /* A tooltip is informational: neither its popper positioner nor its content may
28
- intercept the pointer and block the control the tooltip describes. The layer
29
- stack writes `pointer-events: auto` inline on the active layer, so the
30
- content needs `!important` to stay out of the pointer path. */
31
- [data-popper-positioner]:has(> [data-slot='tooltip-content']) {
32
- pointer-events: none;
33
- }
34
-
35
- [data-slot='tooltip-content'] {
36
- pointer-events: none !important;
37
- }
38
-
39
- /* Custom variants */
19
+ /* --- State variants ------------------------------------------------------
20
+ * Kobalte and corvu communicate state through data attributes. Spelling the
21
+ * mapping once here means a component writes `data-open:opacity-100` and gets
22
+ * the right behaviour from either library.
23
+ * ------------------------------------------------------------------------ */
40
24
  @custom-variant data-open {
41
25
  &:where([data-state='open']),
42
26
  &:where([data-open]:not([data-open='false'])) {
@@ -51,6 +35,16 @@
51
35
  }
52
36
  }
53
37
 
38
+ /* Kobalte marks every expanded disclosure and every open overlay with
39
+ `data-expanded`; the `data-state` spelling is kept too so a component
40
+ written against either protocol behaves the same. */
41
+ @custom-variant data-expanded {
42
+ &:where([data-state='expanded']),
43
+ &:where([data-expanded]:not([data-expanded='false'])) {
44
+ @slot;
45
+ }
46
+ }
47
+
54
48
  @custom-variant data-checked {
55
49
  &:where([data-state='checked']),
56
50
  &:where([data-checked]:not([data-checked='false'])) {
@@ -78,6 +72,19 @@
78
72
  }
79
73
  }
80
74
 
75
+ @custom-variant data-highlighted {
76
+ &:where([data-highlighted]) {
77
+ @slot;
78
+ }
79
+ }
80
+
81
+ @custom-variant data-invalid {
82
+ &:where([data-invalid='true']),
83
+ &:where([data-invalid]:not([data-invalid='false'])) {
84
+ @slot;
85
+ }
86
+ }
87
+
81
88
  @custom-variant data-active {
82
89
  &:where([data-state='active']),
83
90
  &:where([data-active]:not([data-active='false'])) {
@@ -97,543 +104,541 @@
97
104
  }
98
105
  }
99
106
 
100
- @utility no-scrollbar {
101
- -ms-overflow-style: none;
102
- scrollbar-width: none;
103
-
104
- &::-webkit-scrollbar {
105
- display: none;
106
- }
107
- }
108
-
109
- /* scroll-fade */
110
- @property --scroll-fade-t {
111
- syntax: '<length-percentage>';
112
- inherits: false;
113
- initial-value: 0px;
114
- }
115
- @property --scroll-fade-b {
116
- syntax: '<length-percentage>';
117
- inherits: false;
118
- initial-value: 0px;
119
- }
120
- @property --scroll-fade-s {
121
- syntax: '<length-percentage>';
122
- inherits: false;
123
- initial-value: 0px;
124
- }
125
- @property --scroll-fade-e {
126
- syntax: '<length-percentage>';
127
- inherits: false;
128
- initial-value: 0px;
129
- }
130
- @property --scroll-fade-mask {
131
- syntax: '*';
132
- inherits: false;
133
- }
134
-
107
+ /* --- Keyframes -----------------------------------------------------------
108
+ * Entrances only. Exits reuse the same geometry inverted through
109
+ * `tw-animate-css`, and state changes use a transition rather than a keyframe
110
+ * so they stay interruptible.
111
+ * ------------------------------------------------------------------------ */
135
112
  @theme inline {
136
- @keyframes scroll-fade-reveal-t {
113
+ @keyframes ds-rise {
137
114
  from {
138
- --scroll-fade-t: 0px;
115
+ opacity: 0;
116
+ transform: translateY(8px);
139
117
  }
140
118
  to {
141
- --scroll-fade-t: var(
142
- --_scroll-fade-size-t,
143
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
144
- );
119
+ opacity: 1;
120
+ transform: translateY(0);
145
121
  }
146
122
  }
147
- @keyframes scroll-fade-reveal-b {
123
+
124
+ @keyframes ds-scale-in {
148
125
  from {
149
- --scroll-fade-b: var(
150
- --_scroll-fade-size-b,
151
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
152
- );
126
+ opacity: 0;
127
+ transform: scale(0.96);
153
128
  }
154
129
  to {
155
- --scroll-fade-b: 0px;
130
+ opacity: 1;
131
+ transform: scale(1);
156
132
  }
157
133
  }
158
- @keyframes scroll-fade-reveal-s {
134
+
135
+ @keyframes ds-shimmer {
159
136
  from {
160
- --scroll-fade-s: 0px;
137
+ background-position: 100% 0;
161
138
  }
162
139
  to {
163
- --scroll-fade-s: var(
164
- --_scroll-fade-size-s,
165
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
166
- );
140
+ background-position: 0 0;
167
141
  }
168
142
  }
169
- @keyframes scroll-fade-reveal-e {
143
+
144
+ @keyframes ds-indeterminate {
170
145
  from {
171
- --scroll-fade-e: var(
172
- --_scroll-fade-size-e,
173
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
174
- );
146
+ transform: translateX(-100%);
175
147
  }
176
148
  to {
177
- --scroll-fade-e: 0px;
149
+ transform: translateX(400%);
150
+ }
151
+ }
152
+
153
+ @keyframes ds-caret {
154
+ 0%,
155
+ 100% {
156
+ opacity: 1;
157
+ }
158
+ 50% {
159
+ opacity: 0;
178
160
  }
179
161
  }
180
162
  }
181
163
 
182
- @utility scroll-fade {
183
- --_scroll-fade-size-t: var(
184
- --scroll-fade-t-size,
185
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
186
- );
187
- --_scroll-fade-size-b: var(
188
- --scroll-fade-b-size,
189
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
190
- );
191
- --scroll-fade-block: linear-gradient(
164
+ /* --- Named utilities ----------------------------------------------------- */
165
+
166
+ /**
167
+ * Visible to a screen reader, invisible on screen.
168
+ *
169
+ * This is the single most important utility in the system and it must be
170
+ * available in every build, which is why it lives here rather than in the
171
+ * optional stylesheet. `display: none` would remove the content from the
172
+ * accessibility tree as well; this clips it to a pixel instead, so the text is
173
+ * still announced, still translatable, and still reachable by find-in-page.
174
+ */
175
+ @utility visually-hidden {
176
+ position: absolute;
177
+ width: 1px;
178
+ height: 1px;
179
+ padding: 0;
180
+ margin: -1px;
181
+ overflow: hidden;
182
+ clip-path: inset(50%);
183
+ white-space: nowrap;
184
+ border-width: 0;
185
+ }
186
+
187
+ /**
188
+ * Reverses `visually-hidden` at a breakpoint, for a label that is only visible
189
+ * when there is room for it. Written as a companion because the two rules have
190
+ * to travel together to stay correct.
191
+ */
192
+ @utility visually-hidden-until-* {
193
+ @media (width >= --value(--breakpoint-*)) {
194
+ position: static;
195
+ width: auto;
196
+ height: auto;
197
+ padding: 0;
198
+ margin: 0;
199
+ overflow: visible;
200
+ clip-path: none;
201
+ white-space: normal;
202
+ }
203
+ }
204
+
205
+ @utility no-scrollbar {
206
+ -ms-overflow-style: none;
207
+ scrollbar-width: none;
208
+
209
+ &::-webkit-scrollbar {
210
+ display: none;
211
+ }
212
+ }
213
+
214
+ /**
215
+ * The drag region of a frameless desktop window.
216
+ *
217
+ * Both macOS and Windows need draggable chrome and both need the controls
218
+ * inside it to opt back out — otherwise a button in the title bar drags the
219
+ * window instead of pressing. Keeping the pair together keeps the opt-out next
220
+ * to the opt-in instead of in a platform switch.
221
+ */
222
+ @utility window-drag {
223
+ -webkit-app-region: drag;
224
+ app-region: drag;
225
+ }
226
+
227
+ @utility window-no-drag {
228
+ -webkit-app-region: no-drag;
229
+ app-region: no-drag;
230
+ }
231
+
232
+ /**
233
+ * Inset the shell clear of the native window controls: the macOS traffic-light
234
+ * cluster (84px) and the Windows caption overlay (142px).
235
+ *
236
+ * Applied to the top bar's inline padding so its content box is what remains,
237
+ * which is why the search field stays optically centred in the space the user
238
+ * can actually see rather than in the window.
239
+ */
240
+ @utility window-inset-macos {
241
+ padding-inline-start: 84px;
242
+ }
243
+
244
+ @utility window-inset-windows {
245
+ padding-inline-end: 142px;
246
+ }
247
+
248
+ /**
249
+ * iOS/macOS display-cutout and home-indicator insets, resolved once.
250
+ *
251
+ * `--safe-top` is deliberately 0 outside a standalone display: with browser
252
+ * chrome on screen the user agent's own bar already clears the status bar, so a
253
+ * non-zero `env()` there paints a dead band above the header.
254
+ */
255
+ @utility p-safe {
256
+ padding-top: var(--safe-top, env(safe-area-inset-top, 0px));
257
+ padding-right: env(safe-area-inset-right, 0px);
258
+ padding-bottom: env(safe-area-inset-bottom, 0px);
259
+ padding-left: env(safe-area-inset-left, 0px);
260
+ }
261
+
262
+ @utility pb-safe {
263
+ padding-bottom: env(safe-area-inset-bottom, 0px);
264
+ }
265
+
266
+ /**
267
+ * Truncate to one line inside a flex child.
268
+ *
269
+ * Tailwind's `truncate` is the same declaration; this exists as a named
270
+ * intent so a reviewer can see that `min-width: 0` — the part that is easy to
271
+ * forget and that makes the ellipsis actually appear inside a flex row — was
272
+ * deliberate rather than incidental.
273
+ */
274
+ @utility text-truncate {
275
+ overflow: hidden;
276
+ text-overflow: ellipsis;
277
+ white-space: nowrap;
278
+ min-width: 0;
279
+ }
280
+
281
+ /**
282
+ * A fade at the top and bottom edge of a scroll box, so a long list reads as
283
+ * continuing rather than ending at the fold.
284
+ */
285
+ @utility scroll-shadow-y {
286
+ -webkit-mask-image: linear-gradient(
192
287
  to bottom,
193
288
  transparent 0,
194
- #000 var(--scroll-fade-t, 0px),
195
- #000 calc(100% - var(--scroll-fade-b, 0px)),
289
+ #000 2rem,
290
+ #000 calc(100% - 2rem),
196
291
  transparent 100%
197
292
  );
198
- -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
199
- mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
200
- -webkit-mask-composite: source-in;
201
- mask-composite: intersect;
202
- -webkit-mask-repeat: no-repeat;
203
- mask-repeat: no-repeat;
204
-
205
- @supports (animation-timeline: scroll()) {
206
- animation:
207
- scroll-fade-reveal-t 1ms ease-in-out,
208
- scroll-fade-reveal-b 1ms ease-in-out;
209
- animation-timeline: scroll(self y), scroll(self y);
210
- animation-range:
211
- 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
212
- calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
213
- animation-fill-mode: both;
214
- }
215
-
216
- @supports not (animation-timeline: scroll()) {
217
- --scroll-fade-t: var(--_scroll-fade-size-t);
218
- --scroll-fade-b: var(--_scroll-fade-size-b);
219
- }
220
- }
221
-
222
- @utility scroll-fade-y {
223
- --_scroll-fade-size-t: var(
224
- --scroll-fade-t-size,
225
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
226
- );
227
- --_scroll-fade-size-b: var(
228
- --scroll-fade-b-size,
229
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
230
- );
231
- --scroll-fade-block: linear-gradient(
293
+ mask-image: linear-gradient(
232
294
  to bottom,
233
295
  transparent 0,
234
- #000 var(--scroll-fade-t, 0px),
235
- #000 calc(100% - var(--scroll-fade-b, 0px)),
296
+ #000 2rem,
297
+ #000 calc(100% - 2rem),
236
298
  transparent 100%
237
299
  );
238
- -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
239
- mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
240
- -webkit-mask-composite: source-in;
241
- mask-composite: intersect;
242
- -webkit-mask-repeat: no-repeat;
243
- mask-repeat: no-repeat;
244
-
245
- @supports (animation-timeline: scroll()) {
246
- animation:
247
- scroll-fade-reveal-t 1ms ease-in-out,
248
- scroll-fade-reveal-b 1ms ease-in-out;
249
- animation-timeline: scroll(self y), scroll(self y);
250
- animation-range:
251
- 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
252
- calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
253
- animation-fill-mode: both;
254
- }
255
-
256
- @supports not (animation-timeline: scroll()) {
257
- --scroll-fade-t: var(--_scroll-fade-size-t);
258
- --scroll-fade-b: var(--_scroll-fade-size-b);
259
- }
260
- }
261
-
262
- @utility scroll-fade-x {
263
- --_scroll-fade-size-s: var(
264
- --scroll-fade-s-size,
265
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
266
- );
267
- --_scroll-fade-size-e: var(
268
- --scroll-fade-e-size,
269
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
270
- );
271
- --scroll-fade-inline: linear-gradient(
272
- to right,
273
- transparent 0,
274
- #000 var(--scroll-fade-s, 0px),
275
- #000 calc(100% - var(--scroll-fade-e, 0px)),
276
- transparent 100%
277
- );
278
- &:where([dir='rtl'], [dir='rtl'] *) {
279
- --scroll-fade-inline: linear-gradient(
280
- to left,
281
- transparent 0,
282
- #000 var(--scroll-fade-s, 0px),
283
- #000 calc(100% - var(--scroll-fade-e, 0px)),
284
- transparent 100%
285
- );
286
- }
287
- -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
288
- mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
289
- -webkit-mask-composite: source-in;
290
- mask-composite: intersect;
291
- -webkit-mask-repeat: no-repeat;
292
- mask-repeat: no-repeat;
293
-
294
- @supports (animation-timeline: scroll()) {
295
- animation:
296
- scroll-fade-reveal-s 1ms ease-in-out,
297
- scroll-fade-reveal-e 1ms ease-in-out;
298
- animation-timeline: scroll(self inline), scroll(self inline);
299
- animation-range:
300
- 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
301
- calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
302
- animation-fill-mode: both;
303
- }
304
-
305
- @supports not (animation-timeline: scroll()) {
306
- --scroll-fade-s: var(--_scroll-fade-size-s);
307
- --scroll-fade-e: var(--_scroll-fade-size-e);
308
- }
309
- }
310
-
311
- @utility scroll-fade-t {
312
- --_scroll-fade-size-t: var(
313
- --scroll-fade-t-size,
314
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
315
- );
316
- --scroll-fade-mask: linear-gradient(
317
- to bottom,
318
- transparent 0,
319
- #000 var(--scroll-fade-t, 0px),
320
- #000 100%
321
- );
322
- -webkit-mask-image: var(--scroll-fade-mask);
323
- mask-image: var(--scroll-fade-mask);
324
- -webkit-mask-composite: source-in;
325
- mask-composite: intersect;
326
- -webkit-mask-repeat: no-repeat;
327
- mask-repeat: no-repeat;
328
-
329
- @supports (animation-timeline: scroll()) {
330
- animation: scroll-fade-reveal-t 1ms ease-in-out;
331
- animation-timeline: scroll(self y);
332
- animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
333
- animation-fill-mode: both;
334
- }
335
-
336
- @supports not (animation-timeline: scroll()) {
337
- --scroll-fade-t: var(--_scroll-fade-size-t);
338
- }
339
300
  }
340
301
 
341
- @utility scroll-fade-b {
342
- --_scroll-fade-size-b: var(
343
- --scroll-fade-b-size,
344
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
345
- );
346
- --scroll-fade-mask: linear-gradient(
347
- to bottom,
348
- #000 0,
349
- #000 calc(100% - var(--scroll-fade-b, 0px)),
350
- transparent 100%
351
- );
352
- -webkit-mask-image: var(--scroll-fade-mask);
353
- mask-image: var(--scroll-fade-mask);
354
- -webkit-mask-composite: source-in;
355
- mask-composite: intersect;
356
- -webkit-mask-repeat: no-repeat;
357
- mask-repeat: no-repeat;
302
+ /**
303
+ * A hairline rule that survives a fractional device pixel ratio. Used for the
304
+ * rail and panel divides, where a blurry seam is the first thing the eye finds.
305
+ */
306
+ @utility hairline-x {
307
+ background-image: linear-gradient(to right, var(--border), var(--border));
308
+ background-size: 1px 100%;
309
+ background-repeat: no-repeat;
310
+ background-position: right center;
311
+ }
358
312
 
359
- @supports (animation-timeline: scroll()) {
360
- animation: scroll-fade-reveal-b 1ms ease-in-out;
361
- animation-timeline: scroll(self y);
362
- animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
363
- animation-fill-mode: both;
364
- }
313
+ @utility hairline-y {
314
+ background-image: linear-gradient(to bottom, var(--border), var(--border));
315
+ background-size: 100% 1px;
316
+ background-repeat: no-repeat;
317
+ background-position: center bottom;
318
+ }
365
319
 
366
- @supports not (animation-timeline: scroll()) {
367
- --scroll-fade-b: var(--_scroll-fade-size-b);
368
- }
320
+ @utility animate-rise {
321
+ animation: ds-rise var(--duration-slow) var(--ease-out) backwards;
369
322
  }
370
323
 
371
- @utility scroll-fade-l {
372
- --_scroll-fade-size-s: var(
373
- --scroll-fade-s-size,
374
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
375
- );
376
- --scroll-fade-mask: linear-gradient(
377
- to right,
378
- transparent 0,
379
- #000 var(--scroll-fade-s, 0px),
380
- #000 100%
381
- );
382
- -webkit-mask-image: var(--scroll-fade-mask);
383
- mask-image: var(--scroll-fade-mask);
384
- -webkit-mask-composite: source-in;
385
- mask-composite: intersect;
386
- -webkit-mask-repeat: no-repeat;
387
- mask-repeat: no-repeat;
324
+ @utility animate-scale-in {
325
+ animation: ds-scale-in var(--duration-normal) var(--ease-out) backwards;
326
+ }
388
327
 
389
- @supports (animation-timeline: scroll()) {
390
- animation: scroll-fade-reveal-s 1ms ease-in-out;
391
- animation-timeline: scroll(self x);
392
- animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
393
- animation-fill-mode: both;
394
- }
328
+ @utility animate-indeterminate {
329
+ animation: ds-indeterminate 1.4s ease-in-out infinite;
330
+ }
395
331
 
396
- @supports not (animation-timeline: scroll()) {
397
- --scroll-fade-s: var(--_scroll-fade-size-s);
398
- }
332
+ @utility animate-caret {
333
+ animation: ds-caret 1.1s step-end infinite;
399
334
  }
400
335
 
401
- @utility scroll-fade-r {
402
- --_scroll-fade-size-e: var(
403
- --scroll-fade-e-size,
404
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
405
- );
406
- --scroll-fade-mask: linear-gradient(
407
- to right,
408
- #000 0,
409
- #000 calc(100% - var(--scroll-fade-e, 0px)),
336
+ /* A skeleton shimmer that pauses for reduced motion — see the media query at
337
+ the foot of this file. */
338
+ @utility animate-shimmer {
339
+ background-image: linear-gradient(
340
+ 90deg,
341
+ transparent 0%,
342
+ color-mix(in oklch, var(--foreground) 8%, transparent) 50%,
410
343
  transparent 100%
411
344
  );
412
- -webkit-mask-image: var(--scroll-fade-mask);
413
- mask-image: var(--scroll-fade-mask);
414
- -webkit-mask-composite: source-in;
415
- mask-composite: intersect;
416
- -webkit-mask-repeat: no-repeat;
417
- mask-repeat: no-repeat;
418
-
419
- @supports (animation-timeline: scroll()) {
420
- animation: scroll-fade-reveal-e 1ms ease-in-out;
421
- animation-timeline: scroll(self x);
422
- animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
423
- animation-fill-mode: both;
424
- }
425
-
426
- @supports not (animation-timeline: scroll()) {
427
- --scroll-fade-e: var(--_scroll-fade-size-e);
345
+ background-size: 200% 100%;
346
+ background-repeat: no-repeat;
347
+ animation: ds-shimmer 1.6s ease-in-out infinite;
348
+ }
349
+
350
+ /**
351
+ * A streaming caret: the block that trails the last character of a turn that is
352
+ * still arriving. It is a caret rather than a spinner because the text is already
353
+ * readable and growing — the reader wants to know *where* the stream is, not that
354
+ * something is happening somewhere.
355
+ *
356
+ * `inline-block` with a `1ch` width so it sits in the text flow, and the blink is
357
+ * a step rather than a fade so it reads as a terminal cursor. It is removed under
358
+ * `prefers-reduced-motion` — the accessibility block below zeroes the duration,
359
+ * which would leave a static block; the component hides it there instead.
360
+ */
361
+ @utility streaming-caret {
362
+ display: inline-block;
363
+ width: 0.5ch;
364
+ height: 1em;
365
+ margin-left: 0.1em;
366
+ translate: 0 0.1em;
367
+ background: var(--foreground);
368
+ animation: ds-caret 1s steps(2, start) infinite;
369
+
370
+ @media (prefers-reduced-motion: reduce) {
371
+ display: none;
428
372
  }
429
373
  }
430
374
 
431
- @utility scroll-fade-s {
432
- --_scroll-fade-size-s: var(
433
- --scroll-fade-s-size,
434
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
435
- );
436
- --scroll-fade-mask: linear-gradient(
437
- to right,
438
- transparent 0,
439
- #000 var(--scroll-fade-s, 0px),
440
- #000 100%
441
- );
442
- &:where([dir='rtl'], [dir='rtl'] *) {
443
- --scroll-fade-mask: linear-gradient(
444
- to left,
445
- transparent 0,
446
- #000 var(--scroll-fade-s, 0px),
447
- #000 100%
448
- );
375
+ @keyframes ds-caret {
376
+ 0%,
377
+ 50% {
378
+ opacity: 1;
449
379
  }
450
- -webkit-mask-image: var(--scroll-fade-mask);
451
- mask-image: var(--scroll-fade-mask);
452
- -webkit-mask-composite: source-in;
453
- mask-composite: intersect;
454
- -webkit-mask-repeat: no-repeat;
455
- mask-repeat: no-repeat;
456
-
457
- @supports (animation-timeline: scroll()) {
458
- animation: scroll-fade-reveal-s 1ms ease-in-out;
459
- animation-timeline: scroll(self inline);
460
- animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
461
- animation-fill-mode: both;
380
+ 50.01%,
381
+ 100% {
382
+ opacity: 0;
462
383
  }
384
+ }
463
385
 
464
- @supports not (animation-timeline: scroll()) {
465
- --scroll-fade-s: var(--_scroll-fade-size-s);
466
- }
386
+ /* The glass treatment used by the top bar, the rail, and floating overlays.
387
+ `--glass-*` are private: a consumer chooses *whether* to be glassy through
388
+ the component prop, not by reaching for these. */
389
+ @utility glass-panel {
390
+ background: color-mix(in oklch, var(--chrome) calc(var(--chrome-alpha) * 100%), transparent);
391
+ backdrop-filter: blur(18px) saturate(1.6);
392
+ -webkit-backdrop-filter: blur(18px) saturate(1.6);
393
+ box-shadow: inset 0 1px 0 oklch(1 0 0 / 0.08);
467
394
  }
468
395
 
469
- @utility scroll-fade-e {
470
- --_scroll-fade-size-e: var(
471
- --scroll-fade-e-size,
472
- var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
473
- );
474
- --scroll-fade-mask: linear-gradient(
475
- to right,
476
- #000 0,
477
- #000 calc(100% - var(--scroll-fade-e, 0px)),
478
- transparent 100%
479
- );
480
- &:where([dir='rtl'], [dir='rtl'] *) {
481
- --scroll-fade-mask: linear-gradient(
482
- to left,
483
- #000 0,
484
- #000 calc(100% - var(--scroll-fade-e, 0px)),
485
- transparent 100%
486
- );
487
- }
488
- -webkit-mask-image: var(--scroll-fade-mask);
489
- mask-image: var(--scroll-fade-mask);
490
- -webkit-mask-composite: source-in;
491
- mask-composite: intersect;
492
- -webkit-mask-repeat: no-repeat;
493
- mask-repeat: no-repeat;
396
+ @utility glass-surface {
397
+ background: color-mix(in oklch, var(--card) 72%, transparent);
398
+ backdrop-filter: blur(12px) saturate(1.4);
399
+ -webkit-backdrop-filter: blur(12px) saturate(1.4);
400
+ }
494
401
 
495
- @supports (animation-timeline: scroll()) {
496
- animation: scroll-fade-reveal-e 1ms ease-in-out;
497
- animation-timeline: scroll(self inline);
498
- animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
499
- animation-fill-mode: both;
500
- }
402
+ /* The focus ring. Applied by components that cannot use the global outline
403
+ because they need the ring to follow their own radius. */
404
+ @utility focus-ring {
405
+ transition:
406
+ border-color var(--duration-normal) var(--ease-out),
407
+ box-shadow var(--duration-normal) var(--ease-out);
501
408
 
502
- @supports not (animation-timeline: scroll()) {
503
- --scroll-fade-e: var(--_scroll-fade-size-e);
409
+ &:focus-visible {
410
+ outline: none;
411
+ border-color: var(--ring);
412
+ box-shadow: 0 0 0 3px var(--primary-subtle);
504
413
  }
505
414
  }
506
415
 
507
- @utility scroll-fade-* {
508
- --scroll-fade-size: calc(var(--spacing) * --value(integer));
509
- --scroll-fade-size: --value([length], [percentage]);
416
+ /* --- Scrollbars ----------------------------------------------------------
417
+ * Themed, thin, and out of the way. A default scrollbar is the single most
418
+ * obvious "this is a web page" tell in a desktop application: on macOS it is
419
+ * an overlay that vanishes, but on Windows and Linux it is a 15px chrome bar
420
+ * with the platform's own palette, which no theme can reach.
421
+ *
422
+ * The thumb is `--muted` at rest and `--foreground` on hover, so it is visible
423
+ * against every surface without a per-theme value, and it never competes with
424
+ * content for attention.
425
+ * ------------------------------------------------------------------------ */
426
+ ::-webkit-scrollbar {
427
+ width: 10px;
428
+ height: 10px;
510
429
  }
511
430
 
512
- @utility scroll-fade-t-* {
513
- --scroll-fade-t-size: calc(var(--spacing) * --value(integer));
514
- --scroll-fade-t-size: --value([length], [percentage]);
431
+ ::-webkit-scrollbar-track {
432
+ background: transparent;
515
433
  }
516
434
 
517
- @utility scroll-fade-b-* {
518
- --scroll-fade-b-size: calc(var(--spacing) * --value(integer));
519
- --scroll-fade-b-size: --value([length], [percentage]);
435
+ ::-webkit-scrollbar-thumb {
436
+ border: 3px solid transparent;
437
+ border-radius: 9999px;
438
+ background: var(--muted);
439
+ background-clip: content-box;
520
440
  }
521
441
 
522
- @utility scroll-fade-s-* {
523
- --scroll-fade-s-size: calc(var(--spacing) * --value(integer));
524
- --scroll-fade-s-size: --value([length], [percentage]);
442
+ ::-webkit-scrollbar-thumb:hover {
443
+ background: var(--muted-foreground);
444
+ background-clip: content-box;
525
445
  }
526
446
 
527
- @utility scroll-fade-e-* {
528
- --scroll-fade-e-size: calc(var(--spacing) * --value(integer));
529
- --scroll-fade-e-size: --value([length], [percentage]);
447
+ ::-webkit-scrollbar-corner {
448
+ background: transparent;
530
449
  }
531
450
 
532
- @utility scroll-fade-none {
533
- --scroll-fade-mask: none;
451
+ /* Firefox, which has no ::-webkit-scrollbar. */
452
+ @supports (scrollbar-width: thin) {
453
+ * {
454
+ scrollbar-width: thin;
455
+ scrollbar-color: var(--muted) transparent;
456
+ }
534
457
  }
535
458
 
536
- /* shimmer */
537
- @property --shimmer-angle {
538
- syntax: '<angle>';
539
- inherits: true;
540
- initial-value: 20deg;
541
- }
542
- @property --shimmer-image {
543
- syntax: '*';
544
- inherits: false;
545
- }
546
- @property --shimmer-text-fill {
547
- syntax: '*';
548
- inherits: false;
549
- }
459
+ /**
460
+ * An auto-hiding scrollbar, for a horizontal scroller inside a bordered
461
+ * surface — a code block, a diff, a wide table. The bar appears on hover and
462
+ * while the region has focus, so the surface reads as continuous code at rest
463
+ * and the affordance is there the moment a reader needs it.
464
+ */
465
+ @utility scroll-fade {
466
+ &::-webkit-scrollbar {
467
+ height: 6px;
468
+ width: 6px;
469
+ }
550
470
 
551
- @theme inline {
552
- @keyframes tw-shimmer {
553
- from {
554
- background-position: 100% 0;
555
- }
556
- to {
557
- background-position: 0 0;
471
+ &::-webkit-scrollbar-thumb {
472
+ border: 0;
473
+ border-radius: 9999px;
474
+ background: transparent;
475
+ transition: background var(--duration-normal) var(--ease-out);
476
+ }
477
+
478
+ &:hover::-webkit-scrollbar-thumb,
479
+ &:focus-within::-webkit-scrollbar-thumb {
480
+ background: var(--muted-foreground);
481
+ }
482
+
483
+ @supports (scrollbar-width: thin) {
484
+ scrollbar-width: thin;
485
+ scrollbar-color: transparent transparent;
486
+
487
+ &:hover,
488
+ &:focus-within {
489
+ scrollbar-color: var(--muted-foreground) transparent;
558
490
  }
559
491
  }
560
492
  }
561
493
 
562
- @utility shimmer {
563
- --_spread: var(--shimmer-spread, calc(3ch + 40px));
564
- --_base: currentColor;
565
- --_highlight: var(--shimmer-color, oklch(from currentColor l c h / calc(alpha* 0.2)));
494
+ /* --- Base layer ---------------------------------------------------------- */
495
+ @layer base {
496
+ *,
497
+ *::before,
498
+ *::after {
499
+ border-color: var(--border);
500
+ }
566
501
 
567
- background-image: var(
568
- --shimmer-image,
569
- linear-gradient(
570
- calc(90deg + var(--shimmer-angle)),
571
- var(--_base) calc(50% - var(--_spread)),
572
- color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * 0.5),
573
- var(--_highlight) 50%,
574
- color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * 0.5),
575
- var(--_base) calc(50% + var(--_spread))
576
- )
577
- );
578
- background-repeat: no-repeat;
579
- background-size: calc(200% + var(--_spread) * 2) 100%;
580
- background-position: 0 0;
581
- background-clip: text;
582
- -webkit-background-clip: text;
583
- -webkit-text-fill-color: var(--shimmer-text-fill, transparent);
584
- animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite;
502
+ * {
503
+ /* A ring is drawn outside the box so it can never shift layout. */
504
+ outline-color: var(--ring);
505
+ outline-offset: 2px;
506
+ }
585
507
 
586
- @variant dark {
587
- --_highlight: var(
588
- --shimmer-color,
589
- oklch(from currentColor max(0.8, calc(l + 0.4)) c h / calc(alpha + 0.4))
590
- );
508
+ html {
509
+ /* From Chromium 140 the viewport propagates overscroll-behavior from the
510
+ ROOT element, so a `body` declaration is ignored and the macOS
511
+ rubber-band bounce returns inside a desktop webview. */
512
+ overscroll-behavior-y: none;
513
+ -webkit-font-smoothing: antialiased;
514
+ -moz-osx-font-smoothing: grayscale;
515
+ /* The interface default: 14px/1.55, matching the `text-sm` rung. */
516
+ font-family: var(--font-sans);
517
+ font-size: var(--text-sm);
518
+ line-height: var(--text-sm--line-height);
519
+ font-synthesis-weight: none;
520
+ text-rendering: optimizeLegibility;
591
521
  }
592
522
 
593
- &:where([dir='rtl'], [dir='rtl'] *) {
594
- animation-direction: reverse;
523
+ body {
524
+ margin: 0;
525
+ background: var(--background);
526
+ color: var(--foreground);
527
+ transition:
528
+ background-color var(--duration-normal) var(--ease-out),
529
+ color var(--duration-normal) var(--ease-out);
595
530
  }
596
- }
597
531
 
598
- @utility shimmer-once {
599
- animation-iteration-count: 1;
600
- }
532
+ /* Keyboard focus only. `:focus-visible` rather than `:focus` so a pointer
533
+ click never paints a ring. */
534
+ :focus-visible {
535
+ outline: 2px solid var(--ring);
536
+ outline-offset: 2px;
537
+ }
601
538
 
602
- @utility shimmer-reverse {
603
- animation-direction: reverse;
604
- }
539
+ ::selection {
540
+ background: var(--primary-subtle);
541
+ color: var(--foreground);
542
+ }
605
543
 
606
- @utility shimmer-none {
607
- --shimmer-image: none;
608
- --shimmer-text-fill: currentColor;
609
- }
544
+ /* Product expectation: every enabled control shows the pointer cursor
545
+ regardless of Tailwind preflight. */
546
+ button:not(:disabled),
547
+ [role='button']:not([aria-disabled='true']),
548
+ [role='tab']:not([aria-disabled='true']),
549
+ [role='menuitem']:not([aria-disabled='true']),
550
+ [role='option']:not([aria-disabled='true']) {
551
+ cursor: pointer;
552
+ }
610
553
 
611
- @utility shimmer-color-* {
612
- --shimmer-color: --value(--color, [color]);
613
- --shimmer-color: color-mix(
614
- in oklch,
615
- --value(--color, [color]) calc(--modifier(integer) * 1%),
616
- transparent
617
- );
554
+ button,
555
+ input,
556
+ select,
557
+ textarea {
558
+ font: inherit;
559
+ letter-spacing: inherit;
560
+ }
561
+
562
+ /* Scrollbars. The thumb is `--muted-foreground`, the lightest rung that
563
+ clears the WCAG 1.4.11 3:1 non-text floor against every surface a scroll
564
+ box sits on; it darkens to `--foreground` on hover so the affordance
565
+ reads as live. */
566
+ ::-webkit-scrollbar {
567
+ width: 10px;
568
+ height: 10px;
569
+ }
570
+
571
+ ::-webkit-scrollbar-track {
572
+ background: transparent;
573
+ }
574
+
575
+ ::-webkit-scrollbar-thumb {
576
+ background: color-mix(in oklch, var(--muted-foreground) 45%, transparent);
577
+ border: 3px solid transparent;
578
+ border-radius: 9999px;
579
+ background-clip: content-box;
580
+ }
581
+
582
+ ::-webkit-scrollbar-thumb:hover {
583
+ background: color-mix(in oklch, var(--muted-foreground) 75%, transparent);
584
+ background-clip: content-box;
585
+ }
586
+
587
+ ::-webkit-scrollbar-corner {
588
+ background: transparent;
589
+ }
590
+
591
+ code,
592
+ kbd,
593
+ pre,
594
+ samp {
595
+ font-family: var(--font-mono);
596
+ font-feature-settings: 'liga' 0;
597
+ }
618
598
  }
619
599
 
620
- @utility shimmer-duration-* {
621
- --shimmer-duration: calc(--value(integer) * 1ms);
600
+ /* --- Accessibility overrides ---------------------------------------------
601
+ * Kept last so they win the cascade against the rules above.
602
+ * ------------------------------------------------------------------------ */
603
+ @media (prefers-reduced-motion: reduce) {
604
+ *,
605
+ *::before,
606
+ *::after {
607
+ animation-duration: 0.01ms !important;
608
+ animation-iteration-count: 1 !important;
609
+ animation-delay: 0s !important;
610
+ transition-duration: 0.01ms !important;
611
+ scroll-behavior: auto !important;
612
+ }
622
613
  }
623
614
 
624
- @utility shimmer-spread-* {
625
- --shimmer-spread: calc(var(--spacing) * --value(integer));
626
- --shimmer-spread: --value([length], [percentage]);
615
+ @media (prefers-reduced-transparency: reduce) {
616
+ .glass-panel,
617
+ .glass-surface {
618
+ backdrop-filter: none !important;
619
+ -webkit-backdrop-filter: none !important;
620
+ background: var(--background) !important;
621
+ }
627
622
  }
628
623
 
629
- @utility shimmer-angle-* {
630
- --shimmer-angle: calc(--value(integer) * 1deg);
624
+ @media (prefers-contrast: more) {
625
+ :root {
626
+ --border: var(--foreground);
627
+ }
628
+
629
+ .glass-panel,
630
+ .glass-surface {
631
+ background: var(--background) !important;
632
+ border: 1px solid var(--foreground) !important;
633
+ }
631
634
  }
632
635
 
633
- @media (prefers-reduced-motion: reduce) {
634
- .shimmer {
635
- animation: none;
636
- background-image: none;
637
- -webkit-text-fill-color: currentColor;
636
+ /* An engine without backdrop-filter would render the glass tint alone, which
637
+ is 3-8% alpha — effectively a transparent panel. Fall back to a solid
638
+ surface instead, keeping borders and shadows so panels stay delimited. */
639
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
640
+ .glass-panel,
641
+ .glass-surface {
642
+ background: var(--background) !important;
638
643
  }
639
644
  }