@webjsdev/ui 0.3.17 → 0.5.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 (360) hide show
  1. package/README.md +67 -8
  2. package/THIRD_PARTY_NOTICES.md +349 -0
  3. package/package.json +4 -2
  4. package/packages/registry/blocks/_shared/placeholder.svg +1 -0
  5. package/packages/registry/blocks/charts/chart-area-axes.ts +72 -0
  6. package/packages/registry/blocks/charts/chart-area-default.ts +64 -0
  7. package/packages/registry/blocks/charts/chart-area-gradient.ts +82 -0
  8. package/packages/registry/blocks/charts/chart-area-icons.ts +77 -0
  9. package/packages/registry/blocks/charts/chart-area-interactive.ts +204 -0
  10. package/packages/registry/blocks/charts/chart-area-legend.ts +72 -0
  11. package/packages/registry/blocks/charts/chart-area-linear.ts +64 -0
  12. package/packages/registry/blocks/charts/chart-area-stacked-expand.ts +77 -0
  13. package/packages/registry/blocks/charts/chart-area-stacked.ts +71 -0
  14. package/packages/registry/blocks/charts/chart-area-step.ts +68 -0
  15. package/packages/registry/blocks/charts/chart-bar-active.ts +93 -0
  16. package/packages/registry/blocks/charts/chart-bar-default.ts +60 -0
  17. package/packages/registry/blocks/charts/chart-bar-horizontal.ts +62 -0
  18. package/packages/registry/blocks/charts/chart-bar-interactive.ts +185 -0
  19. package/packages/registry/blocks/charts/chart-bar-label-custom.ts +78 -0
  20. package/packages/registry/blocks/charts/chart-bar-label.ts +66 -0
  21. package/packages/registry/blocks/charts/chart-bar-mixed.ts +87 -0
  22. package/packages/registry/blocks/charts/chart-bar-multiple.ts +67 -0
  23. package/packages/registry/blocks/charts/chart-bar-negative.ts +61 -0
  24. package/packages/registry/blocks/charts/chart-bar-stacked.ts +68 -0
  25. package/packages/registry/blocks/charts/chart-line-default.ts +61 -0
  26. package/packages/registry/blocks/charts/chart-line-dots-colors.ts +86 -0
  27. package/packages/registry/blocks/charts/chart-line-dots-custom.ts +75 -0
  28. package/packages/registry/blocks/charts/chart-line-dots.ts +65 -0
  29. package/packages/registry/blocks/charts/chart-line-interactive.ts +185 -0
  30. package/packages/registry/blocks/charts/chart-line-label-custom.ts +94 -0
  31. package/packages/registry/blocks/charts/chart-line-label.ts +73 -0
  32. package/packages/registry/blocks/charts/chart-line-linear.ts +61 -0
  33. package/packages/registry/blocks/charts/chart-line-multiple.ts +71 -0
  34. package/packages/registry/blocks/charts/chart-line-step.ts +61 -0
  35. package/packages/registry/blocks/charts/chart-pie-donut-active.ts +86 -0
  36. package/packages/registry/blocks/charts/chart-pie-donut-text.ts +89 -0
  37. package/packages/registry/blocks/charts/chart-pie-donut.ts +77 -0
  38. package/packages/registry/blocks/charts/chart-pie-interactive.ts +120 -0
  39. package/packages/registry/blocks/charts/chart-pie-label-custom.ts +82 -0
  40. package/packages/registry/blocks/charts/chart-pie-label-list.ts +86 -0
  41. package/packages/registry/blocks/charts/chart-pie-label.ts +77 -0
  42. package/packages/registry/blocks/charts/chart-pie-legend.ts +79 -0
  43. package/packages/registry/blocks/charts/chart-pie-separator-none.ts +77 -0
  44. package/packages/registry/blocks/charts/chart-pie-simple.ts +77 -0
  45. package/packages/registry/blocks/charts/chart-pie-stacked.ts +99 -0
  46. package/packages/registry/blocks/charts/chart-radar-default.ts +61 -0
  47. package/packages/registry/blocks/charts/chart-radar-dots.ts +61 -0
  48. package/packages/registry/blocks/charts/chart-radar-grid-circle-fill.ts +61 -0
  49. package/packages/registry/blocks/charts/chart-radar-grid-circle-no-lines.ts +61 -0
  50. package/packages/registry/blocks/charts/chart-radar-grid-circle.ts +61 -0
  51. package/packages/registry/blocks/charts/chart-radar-grid-custom.ts +61 -0
  52. package/packages/registry/blocks/charts/chart-radar-grid-fill.ts +61 -0
  53. package/packages/registry/blocks/charts/chart-radar-grid-none.ts +60 -0
  54. package/packages/registry/blocks/charts/chart-radar-icons.ts +76 -0
  55. package/packages/registry/blocks/charts/chart-radar-label-custom.ts +77 -0
  56. package/packages/registry/blocks/charts/chart-radar-legend.ts +70 -0
  57. package/packages/registry/blocks/charts/chart-radar-lines-only.ts +68 -0
  58. package/packages/registry/blocks/charts/chart-radar-multiple.ts +68 -0
  59. package/packages/registry/blocks/charts/chart-radar-radius.ts +68 -0
  60. package/packages/registry/blocks/charts/chart-radial-grid.ts +80 -0
  61. package/packages/registry/blocks/charts/chart-radial-label.ts +85 -0
  62. package/packages/registry/blocks/charts/chart-radial-shape.ts +81 -0
  63. package/packages/registry/blocks/charts/chart-radial-simple.ts +79 -0
  64. package/packages/registry/blocks/charts/chart-radial-stacked.ts +69 -0
  65. package/packages/registry/blocks/charts/chart-radial-text.ts +82 -0
  66. package/packages/registry/blocks/charts/chart-tooltip-advanced.ts +84 -0
  67. package/packages/registry/blocks/charts/chart-tooltip-default.ts +62 -0
  68. package/packages/registry/blocks/charts/chart-tooltip-formatter.ts +75 -0
  69. package/packages/registry/blocks/charts/chart-tooltip-icons.ts +68 -0
  70. package/packages/registry/blocks/charts/chart-tooltip-indicator-line.ts +62 -0
  71. package/packages/registry/blocks/charts/chart-tooltip-indicator-none.ts +62 -0
  72. package/packages/registry/blocks/charts/chart-tooltip-label-custom.ts +65 -0
  73. package/packages/registry/blocks/charts/chart-tooltip-label-formatter.ts +66 -0
  74. package/packages/registry/blocks/charts/chart-tooltip-label-none.ts +62 -0
  75. package/packages/registry/blocks/dashboard-01/components/app-sidebar.ts +108 -0
  76. package/packages/registry/blocks/dashboard-01/components/chart-area-interactive.ts +276 -0
  77. package/packages/registry/blocks/dashboard-01/components/dashboard-data.ts +89 -0
  78. package/packages/registry/blocks/dashboard-01/components/data-table.ts +644 -0
  79. package/packages/registry/blocks/dashboard-01/components/nav-documents.ts +65 -0
  80. package/packages/registry/blocks/dashboard-01/components/nav-main.ts +61 -0
  81. package/packages/registry/blocks/dashboard-01/components/nav-secondary.ts +40 -0
  82. package/packages/registry/blocks/dashboard-01/components/nav-user.ts +66 -0
  83. package/packages/registry/blocks/dashboard-01/components/section-cards.ts +59 -0
  84. package/packages/registry/blocks/dashboard-01/components/site-header.ts +52 -0
  85. package/packages/registry/blocks/dashboard-01/page.ts +39 -0
  86. package/packages/registry/blocks/login-01/components/login-form.ts +70 -0
  87. package/packages/registry/blocks/login-01/page.ts +19 -0
  88. package/packages/registry/blocks/login-02/components/login-form.ts +68 -0
  89. package/packages/registry/blocks/login-02/page.ts +36 -0
  90. package/packages/registry/blocks/login-03/components/login-form.ts +89 -0
  91. package/packages/registry/blocks/login-03/page.ts +28 -0
  92. package/packages/registry/blocks/login-04/components/login-form.ts +91 -0
  93. package/packages/registry/blocks/login-04/page.ts +20 -0
  94. package/packages/registry/blocks/login-05/components/login-form.ts +75 -0
  95. package/packages/registry/blocks/login-05/page.ts +19 -0
  96. package/packages/registry/blocks/preview/cards/activate-agent-dialog.ts +77 -0
  97. package/packages/registry/blocks/preview/cards/analytics-card.ts +64 -0
  98. package/packages/registry/blocks/preview/cards/anomaly-alert.ts +35 -0
  99. package/packages/registry/blocks/preview/cards/bar-chart-card.ts +91 -0
  100. package/packages/registry/blocks/preview/cards/book-appointment.ts +51 -0
  101. package/packages/registry/blocks/preview/cards/codespaces-card.ts +172 -0
  102. package/packages/registry/blocks/preview/cards/contributions-activity.ts +63 -0
  103. package/packages/registry/blocks/preview/cards/contributors.ts +51 -0
  104. package/packages/registry/blocks/preview/cards/environment-variables.ts +47 -0
  105. package/packages/registry/blocks/preview/cards/feedback-form.ts +61 -0
  106. package/packages/registry/blocks/preview/cards/file-upload.ts +51 -0
  107. package/packages/registry/blocks/preview/cards/github-profile.ts +66 -0
  108. package/packages/registry/blocks/preview/cards/icon-preview-grid.ts +47 -0
  109. package/packages/registry/blocks/preview/cards/invite-team.ts +78 -0
  110. package/packages/registry/blocks/preview/cards/invoice.ts +91 -0
  111. package/packages/registry/blocks/preview/cards/live-waveform.ts +330 -0
  112. package/packages/registry/blocks/preview/cards/no-team-members.ts +61 -0
  113. package/packages/registry/blocks/preview/cards/not-found.ts +46 -0
  114. package/packages/registry/blocks/preview/cards/observability-card.ts +44 -0
  115. package/packages/registry/blocks/preview/cards/pie-chart-card.ts +84 -0
  116. package/packages/registry/blocks/preview/cards/report-bug.ts +71 -0
  117. package/packages/registry/blocks/preview/cards/shipping-address.ts +79 -0
  118. package/packages/registry/blocks/preview/cards/shortcuts.ts +57 -0
  119. package/packages/registry/blocks/preview/cards/skeleton-loading.ts +37 -0
  120. package/packages/registry/blocks/preview/cards/sleep-report.ts +85 -0
  121. package/packages/registry/blocks/preview/cards/style-overview.ts +64 -0
  122. package/packages/registry/blocks/preview/cards/typography-specimen.ts +107 -0
  123. package/packages/registry/blocks/preview/cards/ui-elements.ts +164 -0
  124. package/packages/registry/blocks/preview/cards/usage-card.ts +63 -0
  125. package/packages/registry/blocks/preview/cards/visitors.ts +71 -0
  126. package/packages/registry/blocks/preview/cards/weekly-fitness-summary.ts +54 -0
  127. package/packages/registry/blocks/preview/page.ts +103 -0
  128. package/packages/registry/blocks/preview-02/cards/account-access.ts +70 -0
  129. package/packages/registry/blocks/preview-02/cards/card-overview.ts +75 -0
  130. package/packages/registry/blocks/preview-02/cards/claimable-balance.ts +54 -0
  131. package/packages/registry/blocks/preview-02/cards/contribution-history.ts +80 -0
  132. package/packages/registry/blocks/preview-02/cards/cover-art.ts +41 -0
  133. package/packages/registry/blocks/preview-02/cards/dividend-income.ts +76 -0
  134. package/packages/registry/blocks/preview-02/cards/empty-connect-bank.ts +38 -0
  135. package/packages/registry/blocks/preview-02/cards/empty-distribute-track.ts +38 -0
  136. package/packages/registry/blocks/preview-02/cards/empty-explore-catalog.ts +39 -0
  137. package/packages/registry/blocks/preview-02/cards/faq.ts +79 -0
  138. package/packages/registry/blocks/preview-02/cards/front-door.ts +40 -0
  139. package/packages/registry/blocks/preview-02/cards/index-investing.ts +31 -0
  140. package/packages/registry/blocks/preview-02/cards/kitchen-island.ts +90 -0
  141. package/packages/registry/blocks/preview-02/cards/loading-card.ts +34 -0
  142. package/packages/registry/blocks/preview-02/cards/new-milestone.ts +53 -0
  143. package/packages/registry/blocks/preview-02/cards/notification-settings.ts +126 -0
  144. package/packages/registry/blocks/preview-02/cards/payments.ts +88 -0
  145. package/packages/registry/blocks/preview-02/cards/payout-threshold.ts +92 -0
  146. package/packages/registry/blocks/preview-02/cards/power-usage.ts +84 -0
  147. package/packages/registry/blocks/preview-02/cards/preferences.ts +89 -0
  148. package/packages/registry/blocks/preview-02/cards/qr-connect.ts +54 -0
  149. package/packages/registry/blocks/preview-02/cards/receiving-method.ts +89 -0
  150. package/packages/registry/blocks/preview-02/cards/recent-transactions.ts +101 -0
  151. package/packages/registry/blocks/preview-02/cards/release-catalog.ts +73 -0
  152. package/packages/registry/blocks/preview-02/cards/roller-shades.ts +110 -0
  153. package/packages/registry/blocks/preview-02/cards/savings-progress.ts +68 -0
  154. package/packages/registry/blocks/preview-02/cards/savings-targets.ts +132 -0
  155. package/packages/registry/blocks/preview-02/cards/sidebar-nav.ts +88 -0
  156. package/packages/registry/blocks/preview-02/cards/social-links.ts +57 -0
  157. package/packages/registry/blocks/preview-02/cards/stock-performance.ts +106 -0
  158. package/packages/registry/blocks/preview-02/cards/syncing-state.ts +37 -0
  159. package/packages/registry/blocks/preview-02/cards/transfer-funds.ts +111 -0
  160. package/packages/registry/blocks/preview-02/cards/upcoming-payments.ts +69 -0
  161. package/packages/registry/blocks/preview-02/page.ts +111 -0
  162. package/packages/registry/blocks/preview-03/cards/files-chat.ts +75 -0
  163. package/packages/registry/blocks/preview-03/cards/group-chat.ts +114 -0
  164. package/packages/registry/blocks/preview-03/cards/reasoning-chat.ts +88 -0
  165. package/packages/registry/blocks/preview-03/cards/simple-chat.ts +53 -0
  166. package/packages/registry/blocks/preview-03/components/chat-card.ts +126 -0
  167. package/packages/registry/blocks/preview-03/components/chat-player.ts +174 -0
  168. package/packages/registry/blocks/preview-03/components/part-file.ts +77 -0
  169. package/packages/registry/blocks/preview-03/components/part-reasoning.ts +25 -0
  170. package/packages/registry/blocks/preview-03/components/part-source.ts +48 -0
  171. package/packages/registry/blocks/preview-03/components/part-text.ts +69 -0
  172. package/packages/registry/blocks/preview-03/components/part-tool.ts +71 -0
  173. package/packages/registry/blocks/preview-03/components/prompt-input.ts +86 -0
  174. package/packages/registry/blocks/preview-03/page.ts +39 -0
  175. package/packages/registry/blocks/sidebar-01/components/app-sidebar.ts +113 -0
  176. package/packages/registry/blocks/sidebar-01/components/search-form.ts +33 -0
  177. package/packages/registry/blocks/sidebar-01/components/version-switcher.ts +50 -0
  178. package/packages/registry/blocks/sidebar-01/page.ts +58 -0
  179. package/packages/registry/blocks/sidebar-02/components/app-sidebar.ts +131 -0
  180. package/packages/registry/blocks/sidebar-02/components/search-form.ts +33 -0
  181. package/packages/registry/blocks/sidebar-02/components/version-switcher.ts +50 -0
  182. package/packages/registry/blocks/sidebar-02/page.ts +53 -0
  183. package/packages/registry/blocks/sidebar-03/components/app-sidebar.ts +134 -0
  184. package/packages/registry/blocks/sidebar-03/page.ts +60 -0
  185. package/packages/registry/blocks/sidebar-04/components/app-sidebar.ts +136 -0
  186. package/packages/registry/blocks/sidebar-04/page.ts +58 -0
  187. package/packages/registry/blocks/sidebar-05/components/app-sidebar.ts +147 -0
  188. package/packages/registry/blocks/sidebar-05/components/search-form.ts +33 -0
  189. package/packages/registry/blocks/sidebar-05/page.ts +58 -0
  190. package/packages/registry/blocks/sidebar-06/components/app-sidebar.ts +105 -0
  191. package/packages/registry/blocks/sidebar-06/components/nav-main.ts +56 -0
  192. package/packages/registry/blocks/sidebar-06/components/sidebar-opt-in-form.ts +44 -0
  193. package/packages/registry/blocks/sidebar-06/page.ts +57 -0
  194. package/packages/registry/blocks/sidebar-07/components/app-sidebar.ts +108 -0
  195. package/packages/registry/blocks/sidebar-07/components/nav-main.ts +61 -0
  196. package/packages/registry/blocks/sidebar-07/components/nav-projects.ts +65 -0
  197. package/packages/registry/blocks/sidebar-07/components/nav-user.ts +70 -0
  198. package/packages/registry/blocks/sidebar-07/components/team-switcher.ts +66 -0
  199. package/packages/registry/blocks/sidebar-07/page.ts +59 -0
  200. package/packages/registry/blocks/sidebar-08/components/app-sidebar.ts +122 -0
  201. package/packages/registry/blocks/sidebar-08/components/nav-main.ts +68 -0
  202. package/packages/registry/blocks/sidebar-08/components/nav-projects.ts +65 -0
  203. package/packages/registry/blocks/sidebar-08/components/nav-secondary.ts +40 -0
  204. package/packages/registry/blocks/sidebar-08/components/nav-user.ts +70 -0
  205. package/packages/registry/blocks/sidebar-08/page.ts +59 -0
  206. package/packages/registry/blocks/sidebar-09/components/app-sidebar.ts +213 -0
  207. package/packages/registry/blocks/sidebar-09/components/nav-user.ts +70 -0
  208. package/packages/registry/blocks/sidebar-09/page.ts +52 -0
  209. package/packages/registry/blocks/sidebar-10/components/app-sidebar.ts +125 -0
  210. package/packages/registry/blocks/sidebar-10/components/nav-actions.ts +84 -0
  211. package/packages/registry/blocks/sidebar-10/components/nav-favorites.ts +66 -0
  212. package/packages/registry/blocks/sidebar-10/components/nav-main.ts +37 -0
  213. package/packages/registry/blocks/sidebar-10/components/nav-secondary.ts +43 -0
  214. package/packages/registry/blocks/sidebar-10/components/nav-workspaces.ts +78 -0
  215. package/packages/registry/blocks/sidebar-10/components/team-switcher.ts +63 -0
  216. package/packages/registry/blocks/sidebar-10/page.ts +46 -0
  217. package/packages/registry/blocks/sidebar-11/components/app-sidebar.ts +114 -0
  218. package/packages/registry/blocks/sidebar-11/page.ts +63 -0
  219. package/packages/registry/blocks/sidebar-12/components/app-sidebar.ts +63 -0
  220. package/packages/registry/blocks/sidebar-12/components/calendars.ts +53 -0
  221. package/packages/registry/blocks/sidebar-12/components/date-picker.ts +26 -0
  222. package/packages/registry/blocks/sidebar-12/components/nav-user.ts +70 -0
  223. package/packages/registry/blocks/sidebar-12/page.ts +43 -0
  224. package/packages/registry/blocks/sidebar-13/components/settings-dialog.ts +114 -0
  225. package/packages/registry/blocks/sidebar-13/page.ts +21 -0
  226. package/packages/registry/blocks/sidebar-14/components/app-sidebar.ts +120 -0
  227. package/packages/registry/blocks/sidebar-14/page.ts +55 -0
  228. package/packages/registry/blocks/sidebar-15/components/calendars.ts +53 -0
  229. package/packages/registry/blocks/sidebar-15/components/date-picker.ts +26 -0
  230. package/packages/registry/blocks/sidebar-15/components/nav-favorites.ts +66 -0
  231. package/packages/registry/blocks/sidebar-15/components/nav-main.ts +35 -0
  232. package/packages/registry/blocks/sidebar-15/components/nav-secondary.ts +43 -0
  233. package/packages/registry/blocks/sidebar-15/components/nav-user.ts +70 -0
  234. package/packages/registry/blocks/sidebar-15/components/nav-workspaces.ts +75 -0
  235. package/packages/registry/blocks/sidebar-15/components/sidebar-left.ts +126 -0
  236. package/packages/registry/blocks/sidebar-15/components/sidebar-right.ts +62 -0
  237. package/packages/registry/blocks/sidebar-15/components/team-switcher.ts +63 -0
  238. package/packages/registry/blocks/sidebar-15/page.ts +47 -0
  239. package/packages/registry/blocks/sidebar-16/components/app-sidebar.ts +124 -0
  240. package/packages/registry/blocks/sidebar-16/components/nav-main.ts +67 -0
  241. package/packages/registry/blocks/sidebar-16/components/nav-projects.ts +65 -0
  242. package/packages/registry/blocks/sidebar-16/components/nav-secondary.ts +40 -0
  243. package/packages/registry/blocks/sidebar-16/components/nav-user.ts +70 -0
  244. package/packages/registry/blocks/sidebar-16/components/search-form.ts +27 -0
  245. package/packages/registry/blocks/sidebar-16/components/site-header.ts +42 -0
  246. package/packages/registry/blocks/sidebar-16/page.ts +38 -0
  247. package/packages/registry/blocks/signup-01/components/signup-form.ts +78 -0
  248. package/packages/registry/blocks/signup-01/page.ts +19 -0
  249. package/packages/registry/blocks/signup-02/components/signup-form.ts +78 -0
  250. package/packages/registry/blocks/signup-02/page.ts +36 -0
  251. package/packages/registry/blocks/signup-03/components/signup-form.ts +79 -0
  252. package/packages/registry/blocks/signup-03/page.ts +28 -0
  253. package/packages/registry/blocks/signup-04/components/signup-form.ts +100 -0
  254. package/packages/registry/blocks/signup-04/page.ts +20 -0
  255. package/packages/registry/blocks/signup-05/components/signup-form.ts +75 -0
  256. package/packages/registry/blocks/signup-05/page.ts +20 -0
  257. package/packages/registry/components/accordion.ts +20 -7
  258. package/packages/registry/components/alert-dialog.ts +58 -13
  259. package/packages/registry/components/alert.ts +11 -6
  260. package/packages/registry/components/attachment.ts +119 -0
  261. package/packages/registry/components/avatar.ts +17 -8
  262. package/packages/registry/components/badge.ts +16 -9
  263. package/packages/registry/components/breadcrumb.ts +6 -6
  264. package/packages/registry/components/bubble.ts +95 -0
  265. package/packages/registry/components/button-group.ts +73 -0
  266. package/packages/registry/components/button.ts +35 -25
  267. package/packages/registry/components/calendar.ts +566 -0
  268. package/packages/registry/components/card.ts +8 -8
  269. package/packages/registry/components/carousel.ts +352 -0
  270. package/packages/registry/components/chart-element.ts +547 -0
  271. package/packages/registry/components/chart-geometry.ts +457 -0
  272. package/packages/registry/components/chart.ts +932 -0
  273. package/packages/registry/components/checkbox.ts +22 -84
  274. package/packages/registry/components/code-block.ts +191 -0
  275. package/packages/registry/components/collapsible.ts +5 -2
  276. package/packages/registry/components/combobox.ts +802 -0
  277. package/packages/registry/components/command.ts +618 -0
  278. package/packages/registry/components/context-menu.ts +302 -0
  279. package/packages/registry/components/dialog.ts +156 -45
  280. package/packages/registry/components/direction.ts +43 -0
  281. package/packages/registry/components/drawer.ts +226 -0
  282. package/packages/registry/components/dropdown-menu.ts +262 -83
  283. package/packages/registry/components/empty.ts +8 -8
  284. package/packages/registry/components/field.ts +20 -18
  285. package/packages/registry/components/floating.ts +124 -0
  286. package/packages/registry/components/hover-card.ts +19 -8
  287. package/packages/registry/components/input-group.ts +118 -0
  288. package/packages/registry/components/input-otp.ts +365 -0
  289. package/packages/registry/components/input.ts +3 -3
  290. package/packages/registry/components/item.ts +134 -0
  291. package/packages/registry/components/kbd.ts +2 -2
  292. package/packages/registry/components/label.ts +1 -1
  293. package/packages/registry/components/marker.ts +63 -0
  294. package/packages/registry/components/menubar.ts +388 -0
  295. package/packages/registry/components/message-scroller.ts +470 -0
  296. package/packages/registry/components/message.ts +69 -0
  297. package/packages/registry/components/native-select.ts +5 -5
  298. package/packages/registry/components/navigation-menu.ts +564 -0
  299. package/packages/registry/components/pagination.ts +5 -5
  300. package/packages/registry/components/popover.ts +30 -84
  301. package/packages/registry/components/progress.ts +7 -3
  302. package/packages/registry/components/questionnaire.ts +840 -0
  303. package/packages/registry/components/radio-group.ts +18 -73
  304. package/packages/registry/components/resizable.ts +330 -0
  305. package/packages/registry/components/scroll-area.ts +46 -0
  306. package/packages/registry/components/select.ts +650 -0
  307. package/packages/registry/components/separator.ts +1 -1
  308. package/packages/registry/components/sheet.ts +128 -0
  309. package/packages/registry/components/sidebar.ts +457 -0
  310. package/packages/registry/components/skeleton.ts +1 -1
  311. package/packages/registry/components/slider.ts +333 -0
  312. package/packages/registry/components/sonner.ts +74 -7
  313. package/packages/registry/components/spinner.ts +7 -4
  314. package/packages/registry/components/switch.ts +117 -9
  315. package/packages/registry/components/table.ts +11 -9
  316. package/packages/registry/components/tabs.ts +76 -25
  317. package/packages/registry/components/textarea.ts +1 -1
  318. package/packages/registry/components/toggle-group.ts +30 -11
  319. package/packages/registry/components/toggle.ts +20 -13
  320. package/packages/registry/components/tooltip.ts +68 -7
  321. package/packages/registry/components/trace.ts +75 -0
  322. package/packages/registry/lib/dom.ts +3 -4
  323. package/packages/registry/lib/icons-hugeicons.ts +955 -0
  324. package/packages/registry/lib/icons-phosphor.ts +955 -0
  325. package/packages/registry/lib/icons-remixicon.ts +955 -0
  326. package/packages/registry/lib/icons-tabler.ts +955 -0
  327. package/packages/registry/lib/icons.ts +768 -0
  328. package/packages/registry/lib/utils.ts +52 -8
  329. package/packages/registry/registry.json +4056 -72
  330. package/packages/registry/styles/shadcn-tailwind.css +654 -0
  331. package/packages/registry/styles/style-luma.css +1987 -0
  332. package/packages/registry/styles/style-lyra.css +1965 -0
  333. package/packages/registry/styles/style-maia.css +1987 -0
  334. package/packages/registry/styles/style-mira.css +1992 -0
  335. package/packages/registry/styles/style-new-york.css +1597 -0
  336. package/packages/registry/styles/style-nova.css +1990 -0
  337. package/packages/registry/styles/style-rhea.css +1987 -0
  338. package/packages/registry/styles/style-sera.css +1977 -0
  339. package/packages/registry/styles/style-vega.css +1990 -0
  340. package/packages/registry/styles/supplement.json +54 -0
  341. package/packages/registry/styles/tw-animate.css +6 -0
  342. package/packages/registry/themes/base-colors.js +8 -2
  343. package/packages/registry/themes/fonts.js +120 -0
  344. package/packages/registry/themes/index.css +2 -0
  345. package/packages/registry/themes/items.js +61 -0
  346. package/packages/registry/themes/preset.js +302 -0
  347. package/packages/registry/themes/themes.js +1193 -0
  348. package/src/commands/add.js +266 -14
  349. package/src/commands/diff.js +34 -20
  350. package/src/commands/info.js +7 -0
  351. package/src/commands/init.js +127 -10
  352. package/src/commands/list.js +43 -11
  353. package/src/commands/view.js +33 -5
  354. package/src/lint/rules/no-restyle.js +1 -1
  355. package/src/registry/extract.js +194 -5
  356. package/src/registry/icons.js +31 -0
  357. package/src/registry/local.js +15 -1
  358. package/src/registry/schema.js +13 -0
  359. package/src/registry/style-bake.js +506 -0
  360. package/src/utils/theme.js +110 -21
@@ -0,0 +1,1597 @@
1
+ /* The new-york style (#1666): the look every @webjsdev/ui component had
2
+ before the kit moved to base form, and the default when components.json
3
+ names no style. It holds, per semantic name, the classes the base-form
4
+ component no longer carries inline. test/style-bake-snapshot.test.js holds
5
+ the bake of this file to the pre-conversion classes, so edit it only to
6
+ change the look on purpose, and re-capture the fixture in the same commit. */
7
+ .style-new-york {
8
+ /* MARK: accordion */
9
+ .cn-accordion-item {
10
+ @apply border-b last:border-b-0;
11
+ }
12
+
13
+ .cn-accordion-trigger {
14
+ @apply w-full cursor-pointer list-none items-center gap-4 py-4 text-start text-sm font-medium hover:underline focus-visible:ring-2 focus-visible:ring-ring/50 marker:hidden [&::-webkit-details-marker]:hidden;
15
+ }
16
+
17
+ .cn-accordion-content {
18
+ @apply pb-4 text-sm;
19
+ }
20
+
21
+ /* MARK: alert */
22
+ .cn-alert {
23
+ @apply grid grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current has-data-[slot=alert-action]:pe-18;
24
+ }
25
+
26
+ .cn-alert-action {
27
+ @apply absolute top-2.5 end-3;
28
+ }
29
+
30
+ .cn-alert-variant-default {
31
+ @apply bg-card text-card-foreground;
32
+ }
33
+
34
+ .cn-alert-variant-destructive {
35
+ @apply bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current;
36
+ }
37
+
38
+ .cn-alert-title {
39
+ @apply col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight;
40
+ }
41
+
42
+ .cn-alert-description {
43
+ @apply col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed;
44
+ }
45
+
46
+ .cn-alert-dialog-overlay {
47
+ @apply bg-black/50;
48
+ }
49
+
50
+ .cn-alert-dialog-content {
51
+ @apply top-[50%] left-[50%] max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg;
52
+ }
53
+
54
+ .cn-alert-dialog-header {
55
+ @apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-start;
56
+ }
57
+
58
+ .cn-alert-dialog-title {
59
+ @apply text-lg font-semibold;
60
+ }
61
+
62
+ .cn-alert-dialog-description {
63
+ @apply text-sm text-muted-foreground;
64
+ }
65
+
66
+ .cn-alert-dialog-media {
67
+ @apply mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8;
68
+ }
69
+
70
+ /* MARK: avatar */
71
+ .cn-avatar {
72
+ @apply size-8 overflow-hidden rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;
73
+ }
74
+
75
+ .cn-avatar-fallback {
76
+ @apply rounded-full bg-muted text-muted-foreground;
77
+ }
78
+
79
+ .cn-avatar-badge {
80
+ @apply bg-primary text-primary-foreground ring-background group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2 group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2;
81
+ }
82
+
83
+ .cn-avatar-group-count {
84
+ @apply size-8 rounded-full bg-muted text-sm text-muted-foreground group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;
85
+ }
86
+
87
+ /* MARK: badge */
88
+ .cn-badge {
89
+ @apply gap-1 rounded-full border border-transparent px-2 py-0.5 text-xs font-medium transition-[color,box-shadow] [&>svg]:size-3;
90
+ }
91
+
92
+ .cn-badge-variant-default {
93
+ @apply bg-primary text-primary-foreground [a&]:hover:bg-primary/90;
94
+ }
95
+
96
+ .cn-badge-variant-secondary {
97
+ @apply bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90;
98
+ }
99
+
100
+ .cn-badge-variant-destructive {
101
+ @apply bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90;
102
+ }
103
+
104
+ .cn-badge-variant-outline {
105
+ @apply border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground;
106
+ }
107
+
108
+ .cn-badge-variant-ghost {
109
+ @apply [a&]:hover:bg-accent [a&]:hover:text-accent-foreground;
110
+ }
111
+
112
+ .cn-badge-variant-link {
113
+ @apply text-primary underline-offset-4 [a&]:hover:underline;
114
+ }
115
+
116
+ /* MARK: breadcrumb */
117
+ .cn-breadcrumb-list {
118
+ @apply gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5;
119
+ }
120
+
121
+ .cn-breadcrumb-item {
122
+ @apply gap-1.5;
123
+ }
124
+
125
+ .cn-breadcrumb-link {
126
+ @apply transition-colors hover:text-foreground;
127
+ }
128
+
129
+ .cn-breadcrumb-page {
130
+ @apply font-normal text-foreground;
131
+ }
132
+
133
+ .cn-breadcrumb-separator {
134
+ @apply [&>svg]:size-3.5;
135
+ }
136
+
137
+ .cn-breadcrumb-ellipsis {
138
+ @apply size-9;
139
+ }
140
+
141
+ /* MARK: button */
142
+ .cn-button {
143
+ @apply cursor-pointer gap-2 rounded-md text-sm font-medium focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4;
144
+ }
145
+
146
+ .cn-button-variant-default {
147
+ @apply bg-primary text-primary-foreground hover:bg-primary/90;
148
+ }
149
+
150
+ .cn-button-variant-destructive {
151
+ @apply bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40;
152
+ }
153
+
154
+ .cn-button-variant-outline {
155
+ @apply border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50;
156
+ }
157
+
158
+ .cn-button-variant-secondary {
159
+ @apply bg-secondary text-secondary-foreground hover:bg-secondary/80;
160
+ }
161
+
162
+ .cn-button-variant-ghost {
163
+ @apply hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50;
164
+ }
165
+
166
+ .cn-button-variant-link {
167
+ @apply text-primary underline-offset-4 hover:underline;
168
+ }
169
+
170
+ .cn-button-size-default {
171
+ @apply h-9 px-4 py-2 has-[>svg]:px-3;
172
+ }
173
+
174
+ .cn-button-size-xs {
175
+ @apply h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3;
176
+ }
177
+
178
+ .cn-button-size-sm {
179
+ @apply h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5;
180
+ }
181
+
182
+ .cn-button-size-lg {
183
+ @apply h-10 rounded-md px-6 has-[>svg]:px-4;
184
+ }
185
+
186
+ .cn-button-size-icon {
187
+ @apply size-9;
188
+ }
189
+
190
+ .cn-button-size-icon-xs {
191
+ @apply size-6 rounded-md [&_svg:not([class*='size-'])]:size-3;
192
+ }
193
+
194
+ .cn-button-size-icon-sm {
195
+ @apply size-8;
196
+ }
197
+
198
+ .cn-button-size-icon-lg {
199
+ @apply size-10;
200
+ }
201
+
202
+ /* MARK: card */
203
+ /* --card-spacing is the padding shadcn's styles space a card by, which a
204
+ block reads for its own content; new-york pads by 6, and by 4 when small. */
205
+ .cn-card {
206
+ @apply rounded-xl border bg-card text-card-foreground shadow-sm [--card-spacing:--spacing(6)] data-[size=sm]:[--card-spacing:--spacing(4)];
207
+ }
208
+
209
+ .cn-card-size-sm {
210
+ @apply gap-3 py-3;
211
+ }
212
+
213
+ .cn-card-size-default {
214
+ @apply gap-6 py-6;
215
+ }
216
+
217
+ .cn-card-header {
218
+ @apply grid-rows-[auto_auto] gap-2 px-6 [.border-b]:pb-6 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:gap-1 group-data-[size=sm]/card:[.border-b]:pb-3;
219
+ }
220
+
221
+ .cn-card-title {
222
+ @apply leading-none font-semibold group-data-[size=sm]/card:text-sm;
223
+ }
224
+
225
+ .cn-card-description {
226
+ @apply text-sm text-muted-foreground;
227
+ }
228
+
229
+ .cn-card-content {
230
+ @apply px-6 group-data-[size=sm]/card:px-4;
231
+ }
232
+
233
+ .cn-card-footer {
234
+ @apply px-6 [.border-t]:pt-6 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:[.border-t]:pt-3;
235
+ }
236
+
237
+ /* MARK: chart */
238
+ .cn-chart-tooltip {
239
+ @apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl;
240
+ }
241
+
242
+ /* MARK: checkbox */
243
+ .cn-checkbox {
244
+ @apply size-4 appearance-none rounded-[4px] border border-input bg-transparent shadow-xs transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 checked:border-primary checked:bg-primary checked:bg-no-repeat checked:bg-center checked:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40;
245
+ }
246
+
247
+ /* MARK: dialog */
248
+ .cn-dialog-header {
249
+ @apply gap-2 text-center sm:text-start;
250
+ }
251
+
252
+ .cn-dialog-title {
253
+ @apply text-lg leading-none font-semibold;
254
+ }
255
+
256
+ .cn-dialog-description {
257
+ @apply text-sm text-muted-foreground;
258
+ }
259
+
260
+ .cn-dialog-content {
261
+ @apply top-[50%] left-[50%] grid max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 sm:max-w-lg;
262
+ }
263
+
264
+ .cn-collapsible-trigger {
265
+ @apply flex w-full items-center justify-between gap-2 rounded-md text-sm font-medium outline-none transition-all focus-visible:ring-2 focus-visible:ring-ring/50;
266
+ }
267
+
268
+ .cn-collapsible-content {
269
+ @apply text-sm;
270
+ }
271
+
272
+ /* The <ui-switch> thumb is a real element, as in shadcn, where the plain
273
+ markup switch draws its thumb as the track's ::after. new-york's
274
+ cn-switch-thumb rule is that ::after, so the real thumb draws itself here
275
+ and hides the pseudo-element. */
276
+ .cn-switch-knob {
277
+ @apply size-4 rounded-full bg-background translate-x-px rtl:-translate-x-px data-checked:translate-x-[calc(100%-2px)] rtl:data-checked:-translate-x-[calc(100%-2px)] dark:bg-foreground dark:data-checked:bg-primary-foreground group-data-[size=sm]/switch:size-3 group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-1px)] rtl:group-data-[size=sm]/switch:data-checked:-translate-x-[calc(100%-1px)] after:hidden;
278
+ }
279
+
280
+ /* shadcn's new-york sidebar trigger is an icon button sized down to 7. */
281
+ .cn-sidebar-trigger {
282
+ @apply size-7;
283
+ }
284
+
285
+ .cn-dialog-overlay {
286
+ @apply bg-black/50;
287
+ }
288
+
289
+ .cn-dialog-close {
290
+ @apply absolute top-4 end-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4;
291
+ }
292
+
293
+ /* MARK: dropdown */
294
+ .cn-dropdown-menu-content {
295
+ @apply fixed max-h-[--available-height] min-w-[8rem] m-0 rounded-md border bg-popover p-1 text-popover-foreground shadow-md;
296
+ }
297
+
298
+ .cn-dropdown-menu-item {
299
+ @apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:hover:bg-destructive/10 data-[variant=destructive]:hover:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 dark:data-[variant=destructive]:hover:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4;
300
+ }
301
+
302
+ .cn-dropdown-menu-checkbox-item {
303
+ @apply gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8;
304
+ }
305
+
306
+ .cn-dropdown-menu-radio-item {
307
+ @apply gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8;
308
+ }
309
+
310
+ .cn-dropdown-menu-label {
311
+ @apply px-2 pt-2 pb-1.5 text-xs font-semibold text-muted-foreground data-[inset]:ps-8;
312
+ }
313
+
314
+ .cn-dropdown-menu-separator {
315
+ @apply -mx-1 my-1 h-px bg-border;
316
+ }
317
+
318
+ .cn-dropdown-menu-shortcut {
319
+ @apply ms-auto text-xs tracking-widest text-muted-foreground;
320
+ }
321
+
322
+ .cn-dropdown-menu-sub-trigger {
323
+ @apply rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg:not([class*='size-'])]:size-4 [&>svg:last-child]:ms-auto;
324
+ }
325
+
326
+ .cn-dropdown-menu-sub-content {
327
+ @apply fixed min-w-[8rem] m-0 rounded-md border bg-popover p-1 text-popover-foreground shadow-lg;
328
+ }
329
+
330
+ .cn-dropdown-menu-item-indicator {
331
+ @apply absolute start-2 flex size-3.5 items-center justify-center;
332
+ }
333
+
334
+ /* MARK: empty */
335
+ .cn-empty-media {
336
+ @apply mb-2;
337
+ }
338
+
339
+ .cn-empty-media-default {
340
+ @apply bg-transparent;
341
+ }
342
+
343
+ .cn-empty-media-icon {
344
+ @apply flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6;
345
+ }
346
+
347
+ .cn-empty {
348
+ @apply gap-6 rounded-lg border-dashed p-6 md:p-12;
349
+ }
350
+
351
+ .cn-empty-header {
352
+ @apply gap-2 text-center;
353
+ }
354
+
355
+ .cn-empty-title {
356
+ @apply text-lg font-medium tracking-tight;
357
+ }
358
+
359
+ .cn-empty-description {
360
+ @apply text-sm/relaxed;
361
+ }
362
+
363
+ .cn-empty-content {
364
+ @apply gap-4 text-sm;
365
+ }
366
+
367
+ /* MARK: field */
368
+ .cn-field-legend-variant-legend {
369
+ @apply text-base;
370
+ }
371
+
372
+ .cn-field-legend-variant-label {
373
+ @apply text-sm;
374
+ }
375
+
376
+ .cn-field-orientation-vertical {
377
+ @apply [&>*]:w-full;
378
+ }
379
+
380
+ .cn-field-orientation-horizontal {
381
+ @apply [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:[&>[type=checkbox],[type=radio]]:mt-px;
382
+ }
383
+
384
+ .cn-field-orientation-responsive {
385
+ @apply [&>*]:w-full @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[type=checkbox],[type=radio]]:mt-px;
386
+ }
387
+
388
+ .cn-field {
389
+ @apply gap-3 data-[invalid=true]:text-destructive;
390
+ }
391
+
392
+ .cn-field-set {
393
+ @apply gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;
394
+ }
395
+
396
+ .cn-field-legend {
397
+ @apply mb-3 font-medium;
398
+ }
399
+
400
+ .cn-field-group {
401
+ @apply gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4;
402
+ }
403
+
404
+ .cn-field-content {
405
+ @apply gap-1.5;
406
+ }
407
+
408
+ .cn-field-label {
409
+ @apply items-center gap-2 text-sm leading-snug font-medium select-none group-data-[disabled=true]/field:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50 has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4 has-checked:border-primary has-checked:bg-primary/5 dark:has-checked:bg-primary/10;
410
+ }
411
+
412
+ .cn-field-title {
413
+ @apply gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50;
414
+ }
415
+
416
+ .cn-field-description {
417
+ @apply text-sm text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5 [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary;
418
+ }
419
+
420
+ .cn-field-error {
421
+ @apply text-sm text-destructive;
422
+ }
423
+
424
+ .cn-field-separator {
425
+ @apply -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2 before:absolute before:inset-x-0 before:top-1/2 before:h-px before:bg-border;
426
+ }
427
+
428
+ .cn-field-separator-content {
429
+ @apply px-2 text-muted-foreground;
430
+ }
431
+
432
+ /* MARK: hover */
433
+ .cn-hover-card-content {
434
+ @apply fixed w-64 m-0 rounded-md border bg-popover p-4 text-popover-foreground shadow-md;
435
+ }
436
+
437
+ /* MARK: input */
438
+ .cn-input {
439
+ @apply h-9 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground file:h-7 file:text-sm file:font-medium md:text-sm dark:bg-input/30;
440
+ }
441
+
442
+ .cn-input-focus {
443
+ @apply focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50;
444
+ }
445
+
446
+ .cn-input-invalid {
447
+ @apply aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40;
448
+ }
449
+
450
+ /* MARK: kbd */
451
+ .cn-kbd {
452
+ @apply h-5 w-fit min-w-5 gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground [&_svg:not([class*='size-'])]:size-3 [[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10;
453
+ }
454
+
455
+ .cn-kbd-group {
456
+ @apply gap-1;
457
+ }
458
+
459
+ /* MARK: label */
460
+ .cn-label {
461
+ @apply gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;
462
+ }
463
+
464
+ /* MARK: native */
465
+ .cn-native-select {
466
+ @apply h-9 w-full min-w-0 appearance-none rounded-md border border-input bg-transparent px-3 py-2 pe-9 text-sm shadow-xs transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground data-[size=sm]:h-8 data-[size=sm]:py-1 dark:bg-input/30 dark:hover:bg-input/50;
467
+ }
468
+
469
+ .cn-native-select-part-2 {
470
+ @apply focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50;
471
+ }
472
+
473
+ .cn-native-select-part-3 {
474
+ @apply aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40;
475
+ }
476
+
477
+ .cn-native-select-icon {
478
+ @apply top-1/2 end-3.5 size-4 -translate-y-1/2 text-muted-foreground opacity-50;
479
+ }
480
+
481
+ /* MARK: pagination */
482
+ .cn-pagination-content {
483
+ @apply flex-row gap-1;
484
+ }
485
+
486
+ .cn-pagination-ellipsis {
487
+ @apply size-9;
488
+ }
489
+
490
+ /* MARK: popover */
491
+ .cn-popover-content {
492
+ @apply m-0 rounded-md border bg-popover p-4 text-popover-foreground shadow-md;
493
+ }
494
+
495
+ .cn-popover-header {
496
+ @apply flex flex-col gap-1 text-sm;
497
+ }
498
+
499
+ /* MARK: progress */
500
+ .cn-progress {
501
+ @apply block h-2 overflow-hidden rounded-full bg-primary/20;
502
+ }
503
+
504
+ /* MARK: radio */
505
+ .cn-radio-group-item {
506
+ @apply size-4 appearance-none rounded-full border-input bg-transparent shadow-xs transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 checked:border-primary checked:text-primary checked:bg-no-repeat checked:bg-center dark:bg-input/30 dark:aria-invalid:ring-destructive/40;
507
+ }
508
+
509
+ .cn-radio-group {
510
+ @apply grid gap-3;
511
+ }
512
+
513
+ /* MARK: separator */
514
+ .cn-separator {
515
+ @apply shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px;
516
+ }
517
+
518
+ /* MARK: skeleton */
519
+ .cn-skeleton {
520
+ @apply rounded-md bg-accent;
521
+ }
522
+
523
+ /* MARK: switch */
524
+ .cn-switch {
525
+ @apply shrink-0 cursor-pointer rounded-full border border-transparent shadow-xs peer-focus-visible:border-ring peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50 bg-input dark:bg-input/80 peer-checked:bg-primary data-checked:bg-primary;
526
+ }
527
+
528
+ .cn-switch-size-default {
529
+ @apply h-[1.15rem] w-8;
530
+ }
531
+
532
+ .cn-switch-size-sm {
533
+ @apply h-3.5 w-6;
534
+ }
535
+
536
+ .cn-switch-thumb-size-default {
537
+ @apply after:size-4 after:translate-x-px rtl:after:-translate-x-px peer-checked:after:translate-x-[calc(100%-2px)] rtl:peer-checked:after:-translate-x-[calc(100%-2px)];
538
+ }
539
+
540
+ .cn-switch-thumb-size-sm {
541
+ @apply after:size-3 after:translate-x-px rtl:after:-translate-x-px peer-checked:after:translate-x-[calc(100%-1px)] rtl:peer-checked:after:-translate-x-[calc(100%-1px)];
542
+ }
543
+
544
+ .cn-switch-thumb {
545
+ @apply after:pointer-events-none after:absolute after:start-0 after:rounded-full after:bg-background after:transition-transform peer-checked:after:bg-primary-foreground dark:after:bg-foreground;
546
+ }
547
+
548
+ /* MARK: table */
549
+ .cn-table-container {
550
+ @apply relative w-full overflow-x-auto;
551
+ }
552
+
553
+ .cn-table {
554
+ @apply w-full caption-bottom text-sm;
555
+ }
556
+
557
+ .cn-table-header {
558
+ @apply [&_tr]:border-b;
559
+ }
560
+
561
+ .cn-table-body {
562
+ @apply [&_tr:last-child]:border-0;
563
+ }
564
+
565
+ .cn-table-footer {
566
+ @apply border-t bg-muted/50 font-medium [&>tr]:last:border-b-0;
567
+ }
568
+
569
+ .cn-table-row {
570
+ @apply border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted;
571
+ }
572
+
573
+ .cn-table-head {
574
+ @apply h-10 px-2 text-start align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px];
575
+ }
576
+
577
+ .cn-table-cell {
578
+ @apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px];
579
+ }
580
+
581
+ .cn-table-caption {
582
+ @apply mt-4 text-sm text-muted-foreground;
583
+ }
584
+
585
+ /* MARK: tabs */
586
+ .cn-tabs {
587
+ @apply gap-2 data-[orientation=horizontal]:flex-col;
588
+ }
589
+
590
+ .cn-tabs-list {
591
+ @apply rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none;
592
+ }
593
+
594
+ .cn-tabs-trigger {
595
+ @apply cursor-pointer select-none gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg:not([class*='size-'])]:size-4;
596
+ }
597
+
598
+ .cn-tabs-trigger-part-2 {
599
+ @apply group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent;
600
+ }
601
+
602
+ .cn-tabs-trigger-part-3 {
603
+ @apply data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground;
604
+ }
605
+
606
+ .cn-tabs-trigger-part-4 {
607
+ @apply after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-end-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100;
608
+ }
609
+
610
+ /* MARK: textarea */
611
+ .cn-textarea {
612
+ @apply rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40;
613
+ }
614
+
615
+ /* MARK: toggle */
616
+ .cn-toggle {
617
+ @apply cursor-pointer gap-2 rounded-md text-sm font-medium select-none transition-[color,box-shadow] hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4;
618
+ }
619
+
620
+ .cn-toggle-variant-default {
621
+ @apply bg-transparent;
622
+ }
623
+
624
+ .cn-toggle-variant-outline {
625
+ @apply border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground;
626
+ }
627
+
628
+ .cn-toggle-size-default {
629
+ @apply h-9 min-w-9 px-2;
630
+ }
631
+
632
+ .cn-toggle-size-sm {
633
+ @apply h-8 min-w-8 px-1.5;
634
+ }
635
+
636
+ .cn-toggle-size-lg {
637
+ @apply h-10 min-w-10 px-2.5;
638
+ }
639
+
640
+ .cn-toggle-group {
641
+ @apply rounded-md not-data-[spacing]:gap-0 data-[spacing]:not-data-[spacing=0]:data-[variant=outline]:shadow-xs data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch;
642
+ }
643
+
644
+ .cn-toggle-group-item {
645
+ @apply w-auto min-w-0 px-3 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-s-md data-[spacing=0]:last:rounded-e-md data-[spacing=0]:data-[variant=outline]:border-s-0 data-[spacing=0]:data-[variant=outline]:first:border-s not-data-[spacing]:rounded-none not-data-[spacing]:shadow-none not-data-[spacing]:first:rounded-s-md not-data-[spacing]:last:rounded-e-md not-data-[spacing]:data-[variant=outline]:border-s-0 not-data-[spacing]:data-[variant=outline]:first:border-s;
646
+ }
647
+
648
+ /* MARK: tooltip */
649
+ .cn-tooltip-content {
650
+ @apply fixed m-0 border-0 overflow-visible rounded-md px-3 py-1.5 text-xs text-balance;
651
+ }
652
+
653
+ .cn-tooltip-arrow {
654
+ @apply size-2.5 rotate-45 rounded-[2px];
655
+ }
656
+
657
+ /* MARK: button-group */
658
+ .cn-button-group {
659
+ @apply has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-e-md;
660
+ }
661
+
662
+ .cn-button-group-text {
663
+ @apply gap-2 rounded-md border bg-muted px-4 text-sm font-medium shadow-xs [&_svg:not([class*='size-'])]:size-4;
664
+ }
665
+
666
+ .cn-button-group-separator {
667
+ @apply m-0! bg-input data-[orientation=vertical]:h-auto;
668
+ }
669
+
670
+ /* MARK: marker */
671
+ .cn-marker {
672
+ @apply min-h-4 gap-2 text-start text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground;
673
+ }
674
+
675
+ .cn-marker-variant-separator {
676
+ @apply before:me-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ms-1 after:h-px after:min-w-0 after:flex-1 after:bg-border;
677
+ }
678
+
679
+ .cn-marker-variant-border {
680
+ @apply border-b border-border pb-2;
681
+ }
682
+
683
+ .cn-marker-icon {
684
+ @apply size-4 [&_svg:not([class*='size-'])]:size-4;
685
+ }
686
+
687
+ .cn-marker-content {
688
+ @apply group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground;
689
+ }
690
+
691
+ /* MARK: message */
692
+ .cn-message-group {
693
+ @apply gap-2;
694
+ }
695
+
696
+ .cn-message {
697
+ @apply gap-2 text-sm;
698
+ }
699
+
700
+ .cn-message-avatar {
701
+ @apply min-w-8 group-has-data-[slot=message-footer]/message:-translate-y-8;
702
+ }
703
+
704
+ .cn-message-content {
705
+ @apply gap-2.5 group-data-[align=end]/message:*:data-slot:self-end;
706
+ }
707
+
708
+ .cn-message-header {
709
+ @apply px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0;
710
+ }
711
+
712
+ .cn-message-footer {
713
+ @apply px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0;
714
+ }
715
+
716
+ /* MARK: item */
717
+ .cn-item-separator {
718
+ @apply my-0;
719
+ }
720
+
721
+ .cn-item {
722
+ @apply rounded-md border border-transparent text-sm [a]:hover:bg-accent/50;
723
+ }
724
+
725
+ .cn-item-variant-default {
726
+ @apply bg-transparent;
727
+ }
728
+
729
+ .cn-item-variant-outline {
730
+ @apply border-border;
731
+ }
732
+
733
+ .cn-item-variant-muted {
734
+ @apply bg-muted/50;
735
+ }
736
+
737
+ .cn-item-size-default {
738
+ @apply gap-4 p-4;
739
+ }
740
+
741
+ .cn-item-size-sm {
742
+ @apply gap-2.5 px-4 py-3;
743
+ }
744
+
745
+ .cn-item-media {
746
+ @apply gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start;
747
+ }
748
+
749
+ .cn-item-media-variant-default {
750
+ @apply bg-transparent;
751
+ }
752
+
753
+ .cn-item-media-variant-icon {
754
+ @apply size-8 rounded-sm border bg-muted [&_svg:not([class*='size-'])]:size-4;
755
+ }
756
+
757
+ .cn-item-media-variant-image {
758
+ @apply size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover;
759
+ }
760
+
761
+ .cn-item-content {
762
+ @apply gap-1;
763
+ }
764
+
765
+ .cn-item-title {
766
+ @apply gap-2 text-sm leading-snug font-medium;
767
+ }
768
+
769
+ .cn-item-description {
770
+ @apply text-sm leading-normal text-balance text-muted-foreground;
771
+ }
772
+
773
+ .cn-item-actions {
774
+ @apply gap-2;
775
+ }
776
+
777
+ .cn-item-header {
778
+ @apply gap-2;
779
+ }
780
+
781
+ .cn-item-footer {
782
+ @apply gap-2;
783
+ }
784
+
785
+ /* MARK: bubble */
786
+ .cn-bubble-group {
787
+ @apply gap-2;
788
+ }
789
+
790
+ .cn-bubble {
791
+ @apply max-w-[80%] gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full;
792
+ }
793
+
794
+ .cn-bubble-variant-default {
795
+ @apply *:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80;
796
+ }
797
+
798
+ .cn-bubble-variant-secondary {
799
+ @apply *:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)];
800
+ }
801
+
802
+ .cn-bubble-variant-muted {
803
+ @apply *:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)];
804
+ }
805
+
806
+ .cn-bubble-variant-tinted {
807
+ @apply *:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)];
808
+ }
809
+
810
+ .cn-bubble-variant-outline {
811
+ @apply *:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30;
812
+ }
813
+
814
+ .cn-bubble-variant-ghost {
815
+ @apply border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50;
816
+ }
817
+
818
+ .cn-bubble-variant-destructive {
819
+ @apply *:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30;
820
+ }
821
+
822
+ .cn-bubble-content {
823
+ @apply rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed group-data-[align=end]/bubble:self-end [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50;
824
+ }
825
+
826
+ .cn-bubble-reactions {
827
+ @apply shrink-0 gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0;
828
+ }
829
+
830
+ .cn-bubble-reactions-side-top {
831
+ @apply top-0 -translate-y-3/4;
832
+ }
833
+
834
+ .cn-bubble-reactions-side-bottom {
835
+ @apply bottom-0 translate-y-3/4;
836
+ }
837
+
838
+ .cn-bubble-reactions-align-start {
839
+ @apply start-3;
840
+ }
841
+
842
+ .cn-bubble-reactions-align-end {
843
+ @apply end-3;
844
+ }
845
+
846
+ /* MARK: attachment */
847
+ .cn-attachment {
848
+ @apply w-fit rounded-xl focus-within:ring-1 focus-within:ring-ring/50;
849
+ }
850
+
851
+ .cn-attachment-size-default {
852
+ @apply gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2;
853
+ }
854
+
855
+ .cn-attachment-size-sm {
856
+ @apply gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5;
857
+ }
858
+
859
+ .cn-attachment-size-xs {
860
+ @apply gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1;
861
+ }
862
+
863
+ .cn-attachment-orientation-horizontal {
864
+ @apply min-w-40;
865
+ }
866
+
867
+ .cn-attachment-orientation-vertical {
868
+ @apply w-24 has-data-[slot=attachment-content]:w-30;
869
+ }
870
+
871
+ .cn-attachment-media {
872
+ @apply w-10 rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5;
873
+ }
874
+
875
+ .cn-attachment-media-variant-image {
876
+ @apply opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100;
877
+ }
878
+
879
+ .cn-attachment-content {
880
+ @apply leading-tight group-data-[orientation=vertical]/attachment:px-1;
881
+ }
882
+
883
+ .cn-attachment-title {
884
+ @apply font-medium;
885
+ }
886
+
887
+ .cn-attachment-description {
888
+ @apply mt-0.5 text-xs;
889
+ }
890
+
891
+ .cn-attachment-actions {
892
+ @apply relative z-20 group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:end-3 group-data-[orientation=vertical]/attachment:gap-1;
893
+ }
894
+
895
+ .cn-attachment-group {
896
+ @apply scroll-px-1 gap-3 py-1;
897
+ }
898
+
899
+ /* MARK: input-group */
900
+ .cn-input-group {
901
+ @apply rounded-md border border-input shadow-xs transition-[color,box-shadow] dark:bg-input/30 has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3;
902
+ }
903
+
904
+ .cn-input-group-addon {
905
+ @apply h-auto gap-2 py-1.5 text-sm font-medium text-muted-foreground group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4;
906
+ }
907
+
908
+ .cn-input-group-addon-align-inline-start {
909
+ @apply ps-3 has-[>button]:ms-[-0.45rem] has-[>kbd]:ms-[-0.35rem];
910
+ }
911
+
912
+ .cn-input-group-addon-align-inline-end {
913
+ @apply pe-3 has-[>button]:me-[-0.45rem] has-[>kbd]:me-[-0.35rem];
914
+ }
915
+
916
+ .cn-input-group-addon-align-block-start {
917
+ @apply px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3;
918
+ }
919
+
920
+ .cn-input-group-addon-align-block-end {
921
+ @apply px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3;
922
+ }
923
+
924
+ .cn-input-group-button {
925
+ @apply gap-2 text-sm;
926
+ }
927
+
928
+ .cn-input-group-button-size-xs {
929
+ @apply h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5;
930
+ }
931
+
932
+ .cn-input-group-button-size-sm {
933
+ @apply h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5;
934
+ }
935
+
936
+ .cn-input-group-button-size-icon-xs {
937
+ @apply size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0;
938
+ }
939
+
940
+ .cn-input-group-button-size-icon-sm {
941
+ @apply size-8 p-0 has-[>svg]:p-0;
942
+ }
943
+
944
+ .cn-input-group-text {
945
+ @apply gap-2 text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4;
946
+ }
947
+
948
+ .cn-input-group-input {
949
+ @apply rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent;
950
+ }
951
+
952
+ .cn-input-group-textarea {
953
+ @apply rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent;
954
+ }
955
+
956
+ /* MARK: trace */
957
+ .cn-trace {
958
+ @apply gap-2 *:has-[>[data-slot=trace-line]]:rounded-md *:has-[>[data-slot=trace-line]]:focus-visible:ring-3 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50;
959
+ }
960
+
961
+ .cn-trace-line {
962
+ @apply gap-2 text-sm;
963
+ }
964
+
965
+ .cn-trace-icon {
966
+ @apply size-4 [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ms-1;
967
+ }
968
+
969
+ .cn-trace-collapsible-trigger {
970
+ @apply gap-1 rounded-md focus-visible:ring-3 focus-visible:ring-ring/50;
971
+ }
972
+
973
+ .cn-trace-collapsible-content-inner {
974
+ @apply mt-2 mb-1 ms-[calc(--spacing(2)-1px)] border-s pe-1 ps-4 leading-relaxed;
975
+ }
976
+
977
+ /* MARK: sheet */
978
+ .cn-sheet-overlay {
979
+ @apply bg-black/50;
980
+ }
981
+
982
+ .cn-sheet-content {
983
+ @apply fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:sm:max-w-sm data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:sm:max-w-sm data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t;
984
+ }
985
+
986
+ .cn-sheet-close {
987
+ @apply absolute top-4 end-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary [&_svg:not([class*='size-'])]:size-4;
988
+ }
989
+
990
+ .cn-sheet-header {
991
+ @apply gap-1.5 p-4;
992
+ }
993
+
994
+ .cn-sheet-footer {
995
+ @apply gap-2 p-4;
996
+ }
997
+
998
+ .cn-sheet-title {
999
+ @apply font-semibold text-foreground;
1000
+ }
1001
+
1002
+ .cn-sheet-description {
1003
+ @apply text-sm text-muted-foreground;
1004
+ }
1005
+
1006
+ /* MARK: drawer */
1007
+ .cn-drawer-overlay {
1008
+ @apply bg-black/50;
1009
+ }
1010
+
1011
+ .cn-drawer-content {
1012
+ @apply flex h-auto flex-col bg-background data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=left]:border-r;
1013
+ }
1014
+
1015
+ .cn-drawer-handle {
1016
+ @apply mt-4 h-2 w-[100px] rounded-full bg-muted;
1017
+ }
1018
+
1019
+ .cn-drawer-header {
1020
+ @apply gap-0.5 p-4 md:gap-1.5 md:text-start;
1021
+ }
1022
+
1023
+ .cn-drawer-footer {
1024
+ @apply gap-2 p-4;
1025
+ }
1026
+
1027
+ .cn-drawer-title {
1028
+ @apply font-semibold text-foreground;
1029
+ }
1030
+
1031
+ .cn-drawer-description {
1032
+ @apply text-sm text-muted-foreground;
1033
+ }
1034
+
1035
+ /* MARK: context-menu */
1036
+ .cn-context-menu-content {
1037
+ @apply fixed max-h-[--available-height] min-w-[8rem] m-0 rounded-md border bg-popover p-1 text-popover-foreground shadow-md;
1038
+ }
1039
+
1040
+ .cn-context-menu-item {
1041
+ @apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:hover:bg-destructive/10 data-[variant=destructive]:hover:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 dark:data-[variant=destructive]:hover:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4;
1042
+ }
1043
+
1044
+ .cn-context-menu-checkbox-item {
1045
+ @apply gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8;
1046
+ }
1047
+
1048
+ .cn-context-menu-radio-item {
1049
+ @apply gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8;
1050
+ }
1051
+
1052
+ .cn-context-menu-label {
1053
+ @apply px-2 pt-2 pb-1.5 text-xs font-semibold text-muted-foreground data-[inset]:ps-8;
1054
+ }
1055
+
1056
+ .cn-context-menu-separator {
1057
+ @apply -mx-1 my-1 h-px bg-border;
1058
+ }
1059
+
1060
+ .cn-context-menu-shortcut {
1061
+ @apply ms-auto text-xs tracking-widest text-muted-foreground;
1062
+ }
1063
+
1064
+ .cn-context-menu-sub-trigger {
1065
+ @apply rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg:not([class*='size-'])]:size-4 [&>svg:last-child]:ms-auto;
1066
+ }
1067
+
1068
+ .cn-context-menu-sub-content {
1069
+ @apply fixed min-w-[8rem] m-0 rounded-md border bg-popover p-1 text-popover-foreground shadow-lg;
1070
+ }
1071
+
1072
+ .cn-context-menu-item-indicator {
1073
+ @apply absolute start-2 flex size-3.5 items-center justify-center;
1074
+ }
1075
+
1076
+ /* MARK: menubar */
1077
+ .cn-menubar {
1078
+ @apply h-9 gap-1 rounded-md border bg-background p-1 shadow-xs;
1079
+ }
1080
+
1081
+ .cn-menubar-trigger {
1082
+ @apply rounded-sm px-2 py-1 text-sm font-medium focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground;
1083
+ }
1084
+
1085
+ .cn-menubar-content {
1086
+ @apply fixed max-h-[--available-height] min-w-[12rem] m-0 rounded-md border bg-popover p-1 text-popover-foreground shadow-md;
1087
+ }
1088
+
1089
+ .cn-menubar-item {
1090
+ @apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:hover:bg-destructive/10 data-[variant=destructive]:hover:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 dark:data-[variant=destructive]:hover:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4;
1091
+ }
1092
+
1093
+ .cn-menubar-checkbox-item {
1094
+ @apply gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8;
1095
+ }
1096
+
1097
+ .cn-menubar-checkbox-item-indicator {
1098
+ @apply absolute start-2 flex size-3.5 items-center justify-center;
1099
+ }
1100
+
1101
+ .cn-menubar-radio-item {
1102
+ @apply gap-2 rounded-sm py-1.5 pe-2 ps-8 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8;
1103
+ }
1104
+
1105
+ .cn-menubar-radio-item-indicator {
1106
+ @apply absolute start-2 flex size-3.5 items-center justify-center;
1107
+ }
1108
+
1109
+ .cn-menubar-label {
1110
+ @apply px-2 pt-2 pb-1.5 text-xs font-semibold text-muted-foreground data-[inset]:ps-8;
1111
+ }
1112
+
1113
+ .cn-menubar-separator {
1114
+ @apply -mx-1 my-1 h-px bg-border;
1115
+ }
1116
+
1117
+ .cn-menubar-shortcut {
1118
+ @apply ms-auto text-xs tracking-widest text-muted-foreground;
1119
+ }
1120
+
1121
+ .cn-menubar-sub-trigger {
1122
+ @apply rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg:not([class*='size-'])]:size-4 [&>svg:last-child]:ms-auto;
1123
+ }
1124
+
1125
+ .cn-menubar-sub-content {
1126
+ @apply fixed min-w-[8rem] m-0 rounded-md border bg-popover p-1 text-popover-foreground shadow-lg;
1127
+ }
1128
+
1129
+ /* MARK: navigation-menu */
1130
+ .cn-navigation-menu {
1131
+ @apply max-w-max;
1132
+ }
1133
+
1134
+ .cn-navigation-menu-list {
1135
+ @apply gap-1;
1136
+ }
1137
+
1138
+ .cn-navigation-menu-trigger {
1139
+ @apply rounded-md bg-background px-4 py-2 text-sm font-medium transition-[color,box-shadow] hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:opacity-50 data-[state=open]:bg-accent/50 data-[state=open]:text-accent-foreground data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent;
1140
+ }
1141
+
1142
+ .cn-navigation-menu-trigger-icon {
1143
+ @apply relative top-[1px] ms-1 size-3 transition duration-300 group-data-[state=open]/navigation-menu-trigger:rotate-180;
1144
+ }
1145
+
1146
+ .cn-navigation-menu-content {
1147
+ @apply p-2 pe-2.5 text-popover-foreground group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:shadow;
1148
+ }
1149
+
1150
+ .cn-navigation-menu-viewport {
1151
+ @apply rounded-md border bg-popover text-popover-foreground shadow;
1152
+ }
1153
+
1154
+ .cn-navigation-menu-link {
1155
+ @apply flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground data-[active=true]:hover:bg-accent data-[active=true]:focus:bg-accent [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
1156
+ }
1157
+
1158
+ .cn-navigation-menu-indicator-arrow {
1159
+ @apply rounded-ss-sm bg-border shadow-md;
1160
+ }
1161
+
1162
+ /* MARK: select */
1163
+ .cn-select-trigger {
1164
+ @apply gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
1165
+ }
1166
+
1167
+ .cn-select-trigger-icon {
1168
+ @apply size-4 opacity-50;
1169
+ }
1170
+
1171
+ .cn-select-content {
1172
+ @apply fixed m-0 min-w-[8rem] rounded-md border bg-popover p-0 text-popover-foreground shadow-md;
1173
+ }
1174
+
1175
+ .cn-select-viewport {
1176
+ @apply p-1 data-[position=popper]:scroll-my-1;
1177
+ }
1178
+
1179
+ .cn-select-label {
1180
+ @apply px-2 py-1.5 text-xs text-muted-foreground;
1181
+ }
1182
+
1183
+ .cn-select-item {
1184
+ @apply gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;
1185
+ }
1186
+
1187
+ .cn-select-item-indicator {
1188
+ @apply absolute end-2 flex size-3.5 items-center justify-center;
1189
+ }
1190
+
1191
+ .cn-select-item-indicator-icon {
1192
+ @apply size-4;
1193
+ }
1194
+
1195
+ .cn-select-separator {
1196
+ @apply -mx-1 my-1 h-px bg-border;
1197
+ }
1198
+
1199
+ .cn-select-scroll-up-button {
1200
+ @apply flex cursor-default items-center justify-center py-1;
1201
+ }
1202
+
1203
+ .cn-select-scroll-down-button {
1204
+ @apply flex cursor-default items-center justify-center py-1;
1205
+ }
1206
+
1207
+ /* MARK: slider */
1208
+ .cn-slider {
1209
+ @apply data-[orientation=vertical]:min-h-44;
1210
+ }
1211
+
1212
+ .cn-slider-track {
1213
+ @apply rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5;
1214
+ }
1215
+
1216
+ .cn-slider-range {
1217
+ @apply bg-primary;
1218
+ }
1219
+
1220
+ .cn-slider-thumb {
1221
+ @apply size-4 rounded-full border border-primary bg-white shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;
1222
+ }
1223
+
1224
+ /* MARK: input-otp */
1225
+ .cn-input-otp {
1226
+ @apply gap-2;
1227
+ }
1228
+
1229
+ .cn-input-otp-slot {
1230
+ @apply h-9 w-9 border-y border-e border-input text-sm shadow-xs transition-all outline-none first:rounded-s-md first:border-s last:rounded-e-md aria-invalid:border-destructive data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40;
1231
+ }
1232
+
1233
+ .cn-input-otp-caret-line {
1234
+ @apply h-4 w-px animate-caret-blink bg-foreground duration-1000;
1235
+ }
1236
+
1237
+ /* MARK: command */
1238
+ .cn-command {
1239
+ @apply h-full w-full rounded-md bg-popover text-popover-foreground;
1240
+ }
1241
+
1242
+ .cn-command-dialog {
1243
+ @apply **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5;
1244
+ }
1245
+
1246
+ .cn-command-input-wrapper {
1247
+ @apply flex h-9 items-center border-b;
1248
+ }
1249
+
1250
+ .cn-command-input-group {
1251
+ @apply h-full rounded-none border-0 bg-transparent shadow-none dark:bg-transparent;
1252
+ }
1253
+
1254
+ .cn-command-input {
1255
+ @apply flex h-10 w-full rounded-md bg-transparent py-3 ps-2 pe-3 text-sm placeholder:text-muted-foreground;
1256
+ }
1257
+
1258
+ .cn-command-input-icon {
1259
+ @apply size-4 shrink-0 opacity-50;
1260
+ }
1261
+
1262
+ .cn-command-list {
1263
+ @apply max-h-[300px] scroll-py-1;
1264
+ }
1265
+
1266
+ .cn-command-empty {
1267
+ @apply py-6 text-center text-sm;
1268
+ }
1269
+
1270
+ .cn-command-group {
1271
+ @apply overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground;
1272
+ }
1273
+
1274
+ .cn-command-separator {
1275
+ @apply -mx-1 h-px bg-border;
1276
+ }
1277
+
1278
+ .cn-command-item {
1279
+ @apply relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
1280
+ }
1281
+
1282
+ .cn-command-shortcut {
1283
+ @apply ms-auto text-xs tracking-widest text-muted-foreground;
1284
+ }
1285
+
1286
+ /* MARK: combobox */
1287
+ .cn-combobox-trigger {
1288
+ @apply [&_svg:not([class*='size-'])]:size-4;
1289
+ }
1290
+
1291
+ .cn-combobox-trigger-icon {
1292
+ @apply size-4 text-muted-foreground;
1293
+ }
1294
+
1295
+ .cn-combobox-content {
1296
+ @apply fixed m-0 max-h-96 overflow-hidden rounded-md bg-popover p-0 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none;
1297
+ }
1298
+
1299
+ .cn-combobox-list {
1300
+ @apply max-h-[min(calc(--spacing(96)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 p-1 data-[empty]:p-0;
1301
+ }
1302
+
1303
+ .cn-combobox-item {
1304
+ @apply gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
1305
+ }
1306
+
1307
+ .cn-combobox-item-indicator {
1308
+ @apply pointer-events-none absolute end-2 flex size-4 items-center justify-center;
1309
+ }
1310
+
1311
+ .cn-combobox-item-indicator-icon {
1312
+ @apply size-4 pointer-coarse:size-5;
1313
+ }
1314
+
1315
+ .cn-combobox-item-text {
1316
+ @apply flex flex-1 gap-2;
1317
+ }
1318
+
1319
+ .cn-combobox-label {
1320
+ @apply px-2 py-1.5 text-xs text-muted-foreground pointer-coarse:px-3 pointer-coarse:py-2 pointer-coarse:text-sm;
1321
+ }
1322
+
1323
+ .cn-combobox-empty {
1324
+ @apply hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-[empty]/combobox-content:flex;
1325
+ }
1326
+
1327
+ .cn-combobox-separator {
1328
+ @apply -mx-1 my-1 h-px bg-border;
1329
+ }
1330
+
1331
+ .cn-combobox-chips {
1332
+ @apply flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-[3px] has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1.5 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40;
1333
+ }
1334
+
1335
+ .cn-combobox-chip {
1336
+ @apply flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-data-[slot=combobox-chip-remove]:pe-0;
1337
+ }
1338
+
1339
+ .cn-combobox-chip-remove {
1340
+ @apply -ms-1 opacity-50 hover:opacity-100;
1341
+ }
1342
+
1343
+ /* MARK: calendar */
1344
+ .cn-calendar {
1345
+ @apply p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(8)];
1346
+ }
1347
+
1348
+ .cn-calendar-dropdown-box {
1349
+ @apply border border-input shadow-xs has-focus:border-ring has-focus:ring-[3px] has-focus:ring-ring/50;
1350
+ }
1351
+
1352
+ .cn-calendar-dropdown-label {
1353
+ @apply h-8 ps-2 pe-1;
1354
+ }
1355
+
1356
+ /* MARK: questionnaire */
1357
+ .cn-questionnaire {
1358
+ @apply gap-4;
1359
+ }
1360
+
1361
+ .cn-questionnaire-progress {
1362
+ @apply text-xs;
1363
+ }
1364
+
1365
+ .cn-questionnaire-item {
1366
+ @apply flex flex-col gap-4;
1367
+ }
1368
+
1369
+ .cn-questionnaire-title {
1370
+ @apply text-base leading-snug font-medium;
1371
+ }
1372
+
1373
+ .cn-questionnaire-description {
1374
+ @apply text-sm text-muted-foreground;
1375
+ }
1376
+
1377
+ .cn-questionnaire-choices {
1378
+ @apply gap-2;
1379
+ }
1380
+
1381
+ .cn-questionnaire-choice {
1382
+ @apply gap-2.5 rounded-md border border-input bg-transparent px-3 py-2.5 text-sm shadow-xs hover:bg-muted/50 data-[checked]:border-primary/40 data-[checked]:bg-muted has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-[3px] has-[>input:focus-visible]:ring-ring/50 dark:bg-input/20 dark:data-[checked]:bg-muted;
1383
+ }
1384
+
1385
+ .cn-questionnaire-choice-indicator {
1386
+ @apply size-4 translate-y-[--spacing(0.45)] rounded-[4px] border-input shadow-xs group-data-[checked]/questionnaire-choice:border-primary group-data-[checked]/questionnaire-choice:bg-primary group-data-[checked]/questionnaire-choice:text-primary-foreground dark:bg-input/30;
1387
+ }
1388
+
1389
+ .cn-questionnaire-choice-indicator-dot {
1390
+ @apply size-2 bg-primary-foreground;
1391
+ }
1392
+
1393
+ .cn-questionnaire-choice-indicator-check {
1394
+ @apply size-3.5;
1395
+ }
1396
+
1397
+ .cn-questionnaire-choice-content {
1398
+ @apply gap-0.5;
1399
+ }
1400
+
1401
+ .cn-questionnaire-choice-description {
1402
+ @apply text-muted-foreground;
1403
+ }
1404
+
1405
+ .cn-questionnaire-shortcut {
1406
+ @apply size-5 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground;
1407
+ }
1408
+
1409
+ .cn-questionnaire-input-wrapper {
1410
+ @apply w-full;
1411
+ }
1412
+
1413
+ .cn-questionnaire-input {
1414
+ @apply h-9 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30;
1415
+ }
1416
+
1417
+ .cn-questionnaire-error {
1418
+ @apply mt-2 text-sm;
1419
+ }
1420
+
1421
+ .cn-questionnaire-actions {
1422
+ @apply gap-2 sm:min-h-9;
1423
+ }
1424
+
1425
+ /* MARK: carousel */
1426
+ .cn-carousel-previous {
1427
+ @apply size-8 rounded-full;
1428
+ }
1429
+
1430
+ .cn-carousel-next {
1431
+ @apply size-8 rounded-full;
1432
+ }
1433
+
1434
+ /* MARK: resizable */
1435
+ .cn-resizable-handle-icon {
1436
+ @apply h-4 w-3 items-center justify-center rounded-xs border bg-border;
1437
+ }
1438
+
1439
+ /* MARK: message-scroller */
1440
+ .cn-message-scroller-content {
1441
+ @apply gap-6;
1442
+ }
1443
+
1444
+ /* MARK: code-block */
1445
+ .cn-code-block {
1446
+ @apply rounded-md text-sm group-data-[size=sm]/code-block:text-xs has-[>[data-slot=code-block-content]:focus-visible]:ring-[3px] has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50;
1447
+ }
1448
+
1449
+ .cn-code-block-variant-default {
1450
+ @apply border border-input text-foreground shadow-xs dark:bg-input/30 has-[>[data-slot=code-block-content]:focus-visible]:border-ring;
1451
+ }
1452
+
1453
+ .cn-code-block-variant-destructive {
1454
+ @apply border border-destructive/30 text-destructive dark:border-destructive/40;
1455
+ }
1456
+
1457
+ .cn-code-block-header {
1458
+ @apply gap-2 px-3 pt-3 text-muted-foreground group-data-[variant=destructive]/code-block:text-destructive group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pt-2.5;
1459
+ }
1460
+
1461
+ .cn-code-block-footer {
1462
+ @apply gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pb-2.5;
1463
+ }
1464
+
1465
+ .cn-code-block-title {
1466
+ @apply font-sans text-sm font-medium text-foreground group-data-[variant=destructive]/code-block:text-destructive *:[svg]:me-1.5 [&_svg:not([class*='size-'])]:size-3.5 group-data-[size=sm]/code-block:text-xs;
1467
+ }
1468
+
1469
+ .cn-code-block-actions {
1470
+ @apply -my-1 -me-1.5 gap-1 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:end-2 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10;
1471
+ }
1472
+
1473
+ .cn-code-block-content {
1474
+ @apply px-3 py-3 leading-relaxed group-has-data-[slot=code-block-header]/code-block:pt-2 group-has-data-[slot=code-block-footer]/code-block:pb-2 group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:py-2.5;
1475
+ }
1476
+
1477
+ .cn-code-block-line {
1478
+ @apply -mx-3 px-3 in-data-numbered:gap-x-3 before:min-w-6 before:text-end before:text-muted-foreground after:start-1 after:text-muted-foreground group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5;
1479
+ }
1480
+
1481
+ .cn-code-block-line-variant-highlighted {
1482
+ @apply bg-muted;
1483
+ }
1484
+
1485
+ .cn-code-block-line-variant-added {
1486
+ @apply bg-muted after:content-['+'];
1487
+ }
1488
+
1489
+ .cn-code-block-line-variant-removed {
1490
+ @apply bg-destructive/10 after:text-destructive after:content-['−'];
1491
+ }
1492
+
1493
+ /* MARK: sidebar */
1494
+ .cn-sidebar-gap {
1495
+ @apply transition-[width] duration-200 ease-linear;
1496
+ }
1497
+
1498
+ .cn-sidebar-inner {
1499
+ @apply bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm;
1500
+ }
1501
+
1502
+ .cn-sidebar-rail {
1503
+ @apply hover:after:bg-sidebar-border;
1504
+ }
1505
+
1506
+ .cn-sidebar-inset {
1507
+ @apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2;
1508
+ }
1509
+
1510
+ .cn-sidebar-input {
1511
+ @apply h-8 w-full bg-background shadow-none;
1512
+ }
1513
+
1514
+ .cn-sidebar-separator {
1515
+ @apply mx-2 bg-sidebar-border;
1516
+ }
1517
+
1518
+ .cn-sidebar-header {
1519
+ @apply gap-2 p-2;
1520
+ }
1521
+
1522
+ .cn-sidebar-footer {
1523
+ @apply gap-2 p-2;
1524
+ }
1525
+
1526
+ .cn-sidebar-content {
1527
+ @apply gap-2;
1528
+ }
1529
+
1530
+ .cn-sidebar-group {
1531
+ @apply p-2;
1532
+ }
1533
+
1534
+ .cn-sidebar-group-label {
1535
+ @apply h-8 rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0;
1536
+ }
1537
+
1538
+ .cn-sidebar-group-action {
1539
+ @apply absolute top-3.5 end-3 w-5 rounded-md p-0 text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4;
1540
+ }
1541
+
1542
+ .cn-sidebar-menu {
1543
+ @apply gap-1;
1544
+ }
1545
+
1546
+ .cn-sidebar-menu-button {
1547
+ @apply gap-2 rounded-md p-2 text-start text-sm ring-sidebar-ring transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pe-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground;
1548
+ }
1549
+
1550
+ .cn-sidebar-menu-button-variant-default {
1551
+ @apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;
1552
+ }
1553
+
1554
+ .cn-sidebar-menu-button-variant-outline {
1555
+ @apply bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)];
1556
+ }
1557
+
1558
+ .cn-sidebar-menu-button-size-default {
1559
+ @apply h-8 text-sm;
1560
+ }
1561
+
1562
+ .cn-sidebar-menu-button-size-sm {
1563
+ @apply h-7 text-xs;
1564
+ }
1565
+
1566
+ .cn-sidebar-menu-button-size-lg {
1567
+ @apply h-12 text-sm group-data-[collapsible=icon]:p-0!;
1568
+ }
1569
+
1570
+ .cn-sidebar-menu-action {
1571
+ @apply absolute end-1 w-5 rounded-md p-0 text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5;
1572
+ }
1573
+
1574
+ .cn-sidebar-menu-badge {
1575
+ @apply pointer-events-none absolute end-1 h-5 min-w-5 rounded-md px-1 text-xs font-medium text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5;
1576
+ }
1577
+
1578
+ .cn-sidebar-menu-skeleton {
1579
+ @apply h-8 gap-2 rounded-md px-2;
1580
+ }
1581
+
1582
+ .cn-sidebar-menu-skeleton-icon {
1583
+ @apply size-4 rounded-md;
1584
+ }
1585
+
1586
+ .cn-sidebar-menu-skeleton-text {
1587
+ @apply h-4;
1588
+ }
1589
+
1590
+ .cn-sidebar-menu-sub {
1591
+ @apply mx-3.5 translate-x-px rtl:-translate-x-px gap-1 border-s border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;
1592
+ }
1593
+
1594
+ .cn-sidebar-menu-sub-button {
1595
+ @apply h-7 gap-2 rounded-md px-2 text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:text-sidebar-accent-foreground data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[size=sm]:text-xs data-[size=md]:text-sm;
1596
+ }
1597
+ }