@kortix/ui 0.0.0-stage → 0.14.3

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 (416) hide show
  1. package/README.md +155 -2
  2. package/dist/_vendor/kortix-shared.js +341 -0
  3. package/dist/chat/agent-picker.d.ts +8 -0
  4. package/dist/chat/agent-picker.js +18 -0
  5. package/dist/chat/composer.d.ts +31 -0
  6. package/dist/chat/composer.js +114 -0
  7. package/dist/chat/index.d.ts +22 -0
  8. package/dist/chat/index.js +22 -0
  9. package/dist/chat/markdown.d.ts +10 -0
  10. package/dist/chat/markdown.js +36 -0
  11. package/dist/chat/message-list.d.ts +25 -0
  12. package/dist/chat/message-list.js +73 -0
  13. package/dist/chat/message-view.d.ts +17 -0
  14. package/dist/chat/message-view.js +86 -0
  15. package/dist/chat/model-picker.d.ts +10 -0
  16. package/dist/chat/model-picker.js +68 -0
  17. package/dist/chat/permission-prompt.d.ts +10 -0
  18. package/dist/chat/permission-prompt.js +40 -0
  19. package/dist/chat/question-prompt.d.ts +8 -0
  20. package/dist/chat/question-prompt.js +60 -0
  21. package/dist/chat/send-failure.d.ts +9 -0
  22. package/dist/chat/send-failure.js +21 -0
  23. package/dist/chat/session-thread.d.ts +28 -0
  24. package/dist/chat/session-thread.js +47 -0
  25. package/dist/chat/streaming-markdown.d.ts +21 -0
  26. package/dist/chat/streaming-markdown.js +59 -0
  27. package/dist/chat/tool-call.d.ts +4 -0
  28. package/dist/chat/tool-call.js +150 -0
  29. package/dist/chat/user-message-parts.d.ts +6 -0
  30. package/dist/chat/user-message-parts.js +11 -0
  31. package/dist/components/ui/accordion.d.ts +7 -0
  32. package/dist/components/ui/accordion.js +18 -0
  33. package/dist/components/ui/alert-dialog.d.ts +19 -0
  34. package/dist/components/ui/alert-dialog.js +48 -0
  35. package/dist/components/ui/alert.d.ts +13 -0
  36. package/dist/components/ui/alert.js +67 -0
  37. package/dist/components/ui/avatar.d.ts +11 -0
  38. package/dist/components/ui/avatar.js +23 -0
  39. package/dist/components/ui/back-pill.d.ts +13 -0
  40. package/dist/components/ui/back-pill.js +18 -0
  41. package/dist/components/ui/badge.d.ts +10 -0
  42. package/dist/components/ui/badge.js +42 -0
  43. package/dist/components/ui/breadcrumb.d.ts +11 -0
  44. package/dist/components/ui/breadcrumb.js +28 -0
  45. package/dist/components/ui/bubble.d.ts +20 -0
  46. package/dist/components/ui/bubble.js +38 -0
  47. package/dist/components/ui/button-group.d.ts +9 -0
  48. package/dist/components/ui/button-group.js +32 -0
  49. package/dist/components/ui/button.d.ts +13 -0
  50. package/dist/components/ui/button.js +67 -0
  51. package/dist/components/ui/calendar.d.ts +4 -0
  52. package/dist/components/ui/calendar.js +39 -0
  53. package/dist/components/ui/card.d.ts +96 -0
  54. package/dist/components/ui/card.js +291 -0
  55. package/dist/components/ui/chain-of-thought.d.ts +75 -0
  56. package/dist/components/ui/chain-of-thought.js +66 -0
  57. package/dist/components/ui/chart.d.ts +65 -0
  58. package/dist/components/ui/chart.js +118 -0
  59. package/dist/components/ui/checkbox-group.d.ts +19 -0
  60. package/dist/components/ui/checkbox-group.js +41 -0
  61. package/dist/components/ui/checkbox.d.ts +14 -0
  62. package/dist/components/ui/checkbox.js +27 -0
  63. package/dist/components/ui/collapsible.d.ts +5 -0
  64. package/dist/components/ui/collapsible.js +14 -0
  65. package/dist/components/ui/command.d.ts +58 -0
  66. package/dist/components/ui/command.js +135 -0
  67. package/dist/components/ui/confirm-dialog.d.ts +19 -0
  68. package/dist/components/ui/confirm-dialog.js +30 -0
  69. package/dist/components/ui/context-menu.d.ts +45 -0
  70. package/dist/components/ui/context-menu.js +93 -0
  71. package/dist/components/ui/count-badge.d.ts +26 -0
  72. package/dist/components/ui/count-badge.js +26 -0
  73. package/dist/components/ui/data-grid.d.ts +24 -0
  74. package/dist/components/ui/data-grid.js +107 -0
  75. package/dist/components/ui/date-range-picker.d.ts +119 -0
  76. package/dist/components/ui/date-range-picker.js +190 -0
  77. package/dist/components/ui/definition-list.d.ts +15 -0
  78. package/dist/components/ui/definition-list.js +26 -0
  79. package/dist/components/ui/dialog.d.ts +29 -0
  80. package/dist/components/ui/dialog.js +52 -0
  81. package/dist/components/ui/disclosure.d.ts +121 -0
  82. package/dist/components/ui/disclosure.js +138 -0
  83. package/dist/components/ui/dot-matrix/dotm-3x3-10.d.ts +4 -0
  84. package/dist/components/ui/dot-matrix/dotm-3x3-10.js +29 -0
  85. package/dist/components/ui/dot-matrix/dotm-3x3-12.d.ts +4 -0
  86. package/dist/components/ui/dot-matrix/dotm-3x3-12.js +19 -0
  87. package/dist/components/ui/dot-matrix/dotm-3x3-13.d.ts +4 -0
  88. package/dist/components/ui/dot-matrix/dotm-3x3-13.js +19 -0
  89. package/dist/components/ui/dot-matrix/dotm-3x3-15.d.ts +4 -0
  90. package/dist/components/ui/dot-matrix/dotm-3x3-15.js +22 -0
  91. package/dist/components/ui/dot-matrix/dotm-3x3-16.d.ts +4 -0
  92. package/dist/components/ui/dot-matrix/dotm-3x3-16.js +5 -0
  93. package/dist/components/ui/dot-matrix/dotm-3x3-18.d.ts +4 -0
  94. package/dist/components/ui/dot-matrix/dotm-3x3-18.js +5 -0
  95. package/dist/components/ui/dot-matrix/dotm-3x3-19.d.ts +4 -0
  96. package/dist/components/ui/dot-matrix/dotm-3x3-19.js +5 -0
  97. package/dist/components/ui/dot-matrix/dotm-3x3-2.d.ts +4 -0
  98. package/dist/components/ui/dot-matrix/dotm-3x3-2.js +3 -0
  99. package/dist/components/ui/dot-matrix/dotm-3x3-20.d.ts +4 -0
  100. package/dist/components/ui/dot-matrix/dotm-3x3-20.js +5 -0
  101. package/dist/components/ui/dot-matrix/dotm-3x3-21.d.ts +4 -0
  102. package/dist/components/ui/dot-matrix/dotm-3x3-21.js +5 -0
  103. package/dist/components/ui/dot-matrix/dotm-3x3-3.d.ts +4 -0
  104. package/dist/components/ui/dot-matrix/dotm-3x3-3.js +3 -0
  105. package/dist/components/ui/dot-matrix/dotm-3x3-4.d.ts +4 -0
  106. package/dist/components/ui/dot-matrix/dotm-3x3-4.js +3 -0
  107. package/dist/components/ui/dot-matrix/dotm-3x3-5.d.ts +4 -0
  108. package/dist/components/ui/dot-matrix/dotm-3x3-5.js +3 -0
  109. package/dist/components/ui/dot-matrix/dotm-3x3-6.d.ts +4 -0
  110. package/dist/components/ui/dot-matrix/dotm-3x3-6.js +19 -0
  111. package/dist/components/ui/dot-matrix/dotm-3x3-7.d.ts +4 -0
  112. package/dist/components/ui/dot-matrix/dotm-3x3-7.js +19 -0
  113. package/dist/components/ui/dot-matrix/dotm-3x3-8.d.ts +4 -0
  114. package/dist/components/ui/dot-matrix/dotm-3x3-8.js +19 -0
  115. package/dist/components/ui/dot-matrix/dotm-3x3-9.d.ts +4 -0
  116. package/dist/components/ui/dot-matrix/dotm-3x3-9.js +23 -0
  117. package/dist/components/ui/dot-matrix/dotm-circular-1.d.ts +4 -0
  118. package/dist/components/ui/dot-matrix/dotm-circular-1.js +28 -0
  119. package/dist/components/ui/dot-matrix/dotm-circular-10.d.ts +4 -0
  120. package/dist/components/ui/dot-matrix/dotm-circular-10.js +40 -0
  121. package/dist/components/ui/dot-matrix/dotm-circular-11.d.ts +4 -0
  122. package/dist/components/ui/dot-matrix/dotm-circular-11.js +37 -0
  123. package/dist/components/ui/dot-matrix/dotm-circular-12.d.ts +4 -0
  124. package/dist/components/ui/dot-matrix/dotm-circular-12.js +42 -0
  125. package/dist/components/ui/dot-matrix/dotm-circular-14.d.ts +4 -0
  126. package/dist/components/ui/dot-matrix/dotm-circular-14.js +37 -0
  127. package/dist/components/ui/dot-matrix/dotm-circular-15.d.ts +4 -0
  128. package/dist/components/ui/dot-matrix/dotm-circular-15.js +49 -0
  129. package/dist/components/ui/dot-matrix/dotm-circular-17.d.ts +4 -0
  130. package/dist/components/ui/dot-matrix/dotm-circular-17.js +31 -0
  131. package/dist/components/ui/dot-matrix/dotm-circular-2.d.ts +4 -0
  132. package/dist/components/ui/dot-matrix/dotm-circular-2.js +37 -0
  133. package/dist/components/ui/dot-matrix/dotm-circular-3.d.ts +4 -0
  134. package/dist/components/ui/dot-matrix/dotm-circular-3.js +54 -0
  135. package/dist/components/ui/dot-matrix/dotm-circular-4.d.ts +4 -0
  136. package/dist/components/ui/dot-matrix/dotm-circular-4.js +35 -0
  137. package/dist/components/ui/dot-matrix/dotm-circular-5.d.ts +4 -0
  138. package/dist/components/ui/dot-matrix/dotm-circular-5.js +30 -0
  139. package/dist/components/ui/dot-matrix/dotm-circular-6.d.ts +4 -0
  140. package/dist/components/ui/dot-matrix/dotm-circular-6.js +37 -0
  141. package/dist/components/ui/dot-matrix/dotm-circular-7.d.ts +4 -0
  142. package/dist/components/ui/dot-matrix/dotm-circular-7.js +25 -0
  143. package/dist/components/ui/dot-matrix/dotm-circular-8.d.ts +4 -0
  144. package/dist/components/ui/dot-matrix/dotm-circular-8.js +26 -0
  145. package/dist/components/ui/dot-matrix/dotm-circular-9.d.ts +4 -0
  146. package/dist/components/ui/dot-matrix/dotm-circular-9.js +41 -0
  147. package/dist/components/ui/dot-matrix/dotm-square-1.d.ts +4 -0
  148. package/dist/components/ui/dot-matrix/dotm-square-1.js +27 -0
  149. package/dist/components/ui/dot-matrix/dotm-square-10.d.ts +4 -0
  150. package/dist/components/ui/dot-matrix/dotm-square-10.js +27 -0
  151. package/dist/components/ui/dot-matrix/dotm-square-11.d.ts +4 -0
  152. package/dist/components/ui/dot-matrix/dotm-square-11.js +25 -0
  153. package/dist/components/ui/dot-matrix/dotm-square-12.d.ts +4 -0
  154. package/dist/components/ui/dot-matrix/dotm-square-12.js +28 -0
  155. package/dist/components/ui/dot-matrix/dotm-square-13.d.ts +4 -0
  156. package/dist/components/ui/dot-matrix/dotm-square-13.js +45 -0
  157. package/dist/components/ui/dot-matrix/dotm-square-14.d.ts +4 -0
  158. package/dist/components/ui/dot-matrix/dotm-square-14.js +38 -0
  159. package/dist/components/ui/dot-matrix/dotm-square-15.d.ts +4 -0
  160. package/dist/components/ui/dot-matrix/dotm-square-15.js +31 -0
  161. package/dist/components/ui/dot-matrix/dotm-square-16.d.ts +4 -0
  162. package/dist/components/ui/dot-matrix/dotm-square-16.js +33 -0
  163. package/dist/components/ui/dot-matrix/dotm-square-17.d.ts +4 -0
  164. package/dist/components/ui/dot-matrix/dotm-square-17.js +27 -0
  165. package/dist/components/ui/dot-matrix/dotm-square-18.d.ts +4 -0
  166. package/dist/components/ui/dot-matrix/dotm-square-18.js +29 -0
  167. package/dist/components/ui/dot-matrix/dotm-square-19.d.ts +4 -0
  168. package/dist/components/ui/dot-matrix/dotm-square-19.js +74 -0
  169. package/dist/components/ui/dot-matrix/dotm-square-2.d.ts +4 -0
  170. package/dist/components/ui/dot-matrix/dotm-square-2.js +72 -0
  171. package/dist/components/ui/dot-matrix/dotm-square-20.d.ts +4 -0
  172. package/dist/components/ui/dot-matrix/dotm-square-20.js +79 -0
  173. package/dist/components/ui/dot-matrix/dotm-square-3.d.ts +4 -0
  174. package/dist/components/ui/dot-matrix/dotm-square-3.js +23 -0
  175. package/dist/components/ui/dot-matrix/dotm-square-4.d.ts +4 -0
  176. package/dist/components/ui/dot-matrix/dotm-square-4.js +41 -0
  177. package/dist/components/ui/dot-matrix/dotm-square-5.d.ts +4 -0
  178. package/dist/components/ui/dot-matrix/dotm-square-5.js +23 -0
  179. package/dist/components/ui/dot-matrix/dotm-square-6.d.ts +4 -0
  180. package/dist/components/ui/dot-matrix/dotm-square-6.js +20 -0
  181. package/dist/components/ui/dot-matrix/dotm-square-7.d.ts +4 -0
  182. package/dist/components/ui/dot-matrix/dotm-square-7.js +43 -0
  183. package/dist/components/ui/dot-matrix/dotm-square-8.d.ts +4 -0
  184. package/dist/components/ui/dot-matrix/dotm-square-8.js +57 -0
  185. package/dist/components/ui/dot-matrix/dotm-square-9.d.ts +4 -0
  186. package/dist/components/ui/dot-matrix/dotm-square-9.js +89 -0
  187. package/dist/components/ui/dot-matrix/session-dot-matrix.d.ts +46 -0
  188. package/dist/components/ui/dot-matrix/session-dot-matrix.js +153 -0
  189. package/dist/components/ui/drawer.d.ts +15 -0
  190. package/dist/components/ui/drawer.js +35 -0
  191. package/dist/components/ui/dropdown-menu.d.ts +49 -0
  192. package/dist/components/ui/dropdown-menu.js +113 -0
  193. package/dist/components/ui/emoji-picker.d.ts +15 -0
  194. package/dist/components/ui/emoji-picker.js +137 -0
  195. package/dist/components/ui/emoji-tint.d.ts +41 -0
  196. package/dist/components/ui/emoji-tint.js +131 -0
  197. package/dist/components/ui/empty.d.ts +11 -0
  198. package/dist/components/ui/empty.js +33 -0
  199. package/dist/components/ui/entity-avatar.d.ts +84 -0
  200. package/dist/components/ui/entity-avatar.js +106 -0
  201. package/dist/components/ui/faded-scroll-area.d.ts +8 -0
  202. package/dist/components/ui/faded-scroll-area.js +80 -0
  203. package/dist/components/ui/favicon-avatar.d.ts +32 -0
  204. package/dist/components/ui/favicon-avatar.js +18 -0
  205. package/dist/components/ui/field.d.ts +15 -0
  206. package/dist/components/ui/field.js +48 -0
  207. package/dist/components/ui/file-tree.d.ts +32 -0
  208. package/dist/components/ui/file-tree.js +30 -0
  209. package/dist/components/ui/glyph-face.d.ts +18 -0
  210. package/dist/components/ui/glyph-face.js +37 -0
  211. package/dist/components/ui/glyph-paths-source.d.ts +2 -0
  212. package/dist/components/ui/glyph-paths-source.js +40 -0
  213. package/dist/components/ui/glyph-paths.generated.d.ts +2 -0
  214. package/dist/components/ui/glyph-paths.generated.js +207 -0
  215. package/dist/components/ui/glyph-picker.d.ts +22 -0
  216. package/dist/components/ui/glyph-picker.js +118 -0
  217. package/dist/components/ui/glyph-registry.d.ts +36 -0
  218. package/dist/components/ui/glyph-registry.js +479 -0
  219. package/dist/components/ui/glyph-tint.d.ts +6 -0
  220. package/dist/components/ui/glyph-tint.js +93 -0
  221. package/dist/components/ui/hint.d.ts +14 -0
  222. package/dist/components/ui/hint.js +12 -0
  223. package/dist/components/ui/histogram-bars.d.ts +38 -0
  224. package/dist/components/ui/histogram-bars.js +93 -0
  225. package/dist/components/ui/hover-card.d.ts +28 -0
  226. package/dist/components/ui/hover-card.js +35 -0
  227. package/dist/components/ui/icon-provider.d.ts +23 -0
  228. package/dist/components/ui/icon-provider.js +30 -0
  229. package/dist/components/ui/info-banner.d.ts +14 -0
  230. package/dist/components/ui/info-banner.js +72 -0
  231. package/dist/components/ui/inline-meta.d.ts +6 -0
  232. package/dist/components/ui/inline-meta.js +8 -0
  233. package/dist/components/ui/input-group.d.ts +19 -0
  234. package/dist/components/ui/input-group.js +73 -0
  235. package/dist/components/ui/input.d.ts +26 -0
  236. package/dist/components/ui/input.js +23 -0
  237. package/dist/components/ui/item.d.ts +23 -0
  238. package/dist/components/ui/item.js +67 -0
  239. package/dist/components/ui/kbd.d.ts +3 -0
  240. package/dist/components/ui/kbd.js +20 -0
  241. package/dist/components/ui/kortix-asterisk.d.ts +6 -0
  242. package/dist/components/ui/kortix-asterisk.js +17 -0
  243. package/dist/components/ui/kortix-icons.d.ts +2 -0
  244. package/dist/components/ui/kortix-icons.js +17 -0
  245. package/dist/components/ui/kortix-loader.d.ts +76 -0
  246. package/dist/components/ui/kortix-loader.js +74 -0
  247. package/dist/components/ui/kortix-logo.d.ts +30 -0
  248. package/dist/components/ui/kortix-logo.js +47 -0
  249. package/dist/components/ui/label.d.ts +4 -0
  250. package/dist/components/ui/label.js +9 -0
  251. package/dist/components/ui/list.d.ts +15 -0
  252. package/dist/components/ui/list.js +25 -0
  253. package/dist/components/ui/loading.d.ts +19 -0
  254. package/dist/components/ui/loading.js +31 -0
  255. package/dist/components/ui/local-time.d.ts +34 -0
  256. package/dist/components/ui/local-time.js +60 -0
  257. package/dist/components/ui/map.d.ts +101 -0
  258. package/dist/components/ui/map.js +257 -0
  259. package/dist/components/ui/marker.d.ts +14 -0
  260. package/dist/components/ui/marker.js +28 -0
  261. package/dist/components/ui/menu-recipe.d.ts +102 -0
  262. package/dist/components/ui/menu-recipe.js +129 -0
  263. package/dist/components/ui/mermaid-render.d.ts +51 -0
  264. package/dist/components/ui/mermaid-render.js +65 -0
  265. package/dist/components/ui/mermaid-renderer.d.ts +13 -0
  266. package/dist/components/ui/mermaid-renderer.js +340 -0
  267. package/dist/components/ui/message.d.ts +15 -0
  268. package/dist/components/ui/message.js +26 -0
  269. package/dist/components/ui/modal.d.ts +104 -0
  270. package/dist/components/ui/modal.js +180 -0
  271. package/dist/components/ui/navigation-menu.d.ts +16 -0
  272. package/dist/components/ui/navigation-menu.js +35 -0
  273. package/dist/components/ui/page-search-bar.d.ts +11 -0
  274. package/dist/components/ui/page-search-bar.js +13 -0
  275. package/dist/components/ui/phone-input.d.ts +7 -0
  276. package/dist/components/ui/phone-input.js +59 -0
  277. package/dist/components/ui/pixel-kortix-mark.d.ts +13 -0
  278. package/dist/components/ui/pixel-kortix-mark.js +40 -0
  279. package/dist/components/ui/popover.d.ts +10 -0
  280. package/dist/components/ui/popover.js +38 -0
  281. package/dist/components/ui/portal.d.ts +5 -0
  282. package/dist/components/ui/portal.js +15 -0
  283. package/dist/components/ui/preview-image.d.ts +14 -0
  284. package/dist/components/ui/preview-image.js +58 -0
  285. package/dist/components/ui/progress-ring.d.ts +6 -0
  286. package/dist/components/ui/progress-ring.js +9 -0
  287. package/dist/components/ui/progress.d.ts +6 -0
  288. package/dist/components/ui/progress.js +8 -0
  289. package/dist/components/ui/radio-group.d.ts +12 -0
  290. package/dist/components/ui/radio-group.js +20 -0
  291. package/dist/components/ui/resizable.d.ts +24 -0
  292. package/dist/components/ui/resizable.js +16 -0
  293. package/dist/components/ui/scroll-area.d.ts +5 -0
  294. package/dist/components/ui/scroll-area.js +11 -0
  295. package/dist/components/ui/section-card.d.ts +37 -0
  296. package/dist/components/ui/section-card.js +14 -0
  297. package/dist/components/ui/section.d.ts +10 -0
  298. package/dist/components/ui/section.js +22 -0
  299. package/dist/components/ui/select.d.ts +25 -0
  300. package/dist/components/ui/select.js +59 -0
  301. package/dist/components/ui/separator.d.ts +4 -0
  302. package/dist/components/ui/separator.js +8 -0
  303. package/dist/components/ui/shader-safe.d.ts +48 -0
  304. package/dist/components/ui/shader-safe.js +74 -0
  305. package/dist/components/ui/sheet.d.ts +32 -0
  306. package/dist/components/ui/sheet.js +55 -0
  307. package/dist/components/ui/sidebar-context.d.ts +72 -0
  308. package/dist/components/ui/sidebar-context.js +36 -0
  309. package/dist/components/ui/sidebar-menu-primitives.d.ts +38 -0
  310. package/dist/components/ui/sidebar-menu-primitives.js +97 -0
  311. package/dist/components/ui/sidebar-panel.d.ts +36 -0
  312. package/dist/components/ui/sidebar-panel.js +265 -0
  313. package/dist/components/ui/sidebar-peek.d.ts +27 -0
  314. package/dist/components/ui/sidebar-peek.js +70 -0
  315. package/dist/components/ui/sidebar-width.d.ts +48 -0
  316. package/dist/components/ui/sidebar-width.js +62 -0
  317. package/dist/components/ui/sidebar.d.ts +18 -0
  318. package/dist/components/ui/sidebar.js +194 -0
  319. package/dist/components/ui/skeleton.d.ts +3 -0
  320. package/dist/components/ui/skeleton.js +6 -0
  321. package/dist/components/ui/slider-native.d.ts +7 -0
  322. package/dist/components/ui/slider-native.js +16 -0
  323. package/dist/components/ui/slider.d.ts +14 -0
  324. package/dist/components/ui/slider.js +48 -0
  325. package/dist/components/ui/sliding-tab-indicator.d.ts +61 -0
  326. package/dist/components/ui/sliding-tab-indicator.js +128 -0
  327. package/dist/components/ui/split-sheet.d.ts +61 -0
  328. package/dist/components/ui/split-sheet.js +239 -0
  329. package/dist/components/ui/spotlight-card.d.ts +8 -0
  330. package/dist/components/ui/spotlight-card.js +43 -0
  331. package/dist/components/ui/status-ring.d.ts +38 -0
  332. package/dist/components/ui/status-ring.js +38 -0
  333. package/dist/components/ui/status.d.ts +58 -0
  334. package/dist/components/ui/status.js +76 -0
  335. package/dist/components/ui/stepper.d.ts +28 -0
  336. package/dist/components/ui/stepper.js +73 -0
  337. package/dist/components/ui/switch.d.ts +8 -0
  338. package/dist/components/ui/switch.js +131 -0
  339. package/dist/components/ui/system-message.d.ts +23 -0
  340. package/dist/components/ui/system-message.js +51 -0
  341. package/dist/components/ui/table.d.ts +10 -0
  342. package/dist/components/ui/table.js +28 -0
  343. package/dist/components/ui/tabs.d.ts +73 -0
  344. package/dist/components/ui/tabs.js +207 -0
  345. package/dist/components/ui/tag.d.ts +7 -0
  346. package/dist/components/ui/tag.js +22 -0
  347. package/dist/components/ui/text-shimmer.d.ts +13 -0
  348. package/dist/components/ui/text-shimmer.js +91 -0
  349. package/dist/components/ui/textarea.d.ts +33 -0
  350. package/dist/components/ui/textarea.js +87 -0
  351. package/dist/components/ui/toast.d.ts +105 -0
  352. package/dist/components/ui/toast.js +233 -0
  353. package/dist/components/ui/toggle.d.ts +12 -0
  354. package/dist/components/ui/toggle.js +26 -0
  355. package/dist/components/ui/tooltip.d.ts +9 -0
  356. package/dist/components/ui/tooltip.js +16 -0
  357. package/dist/components/ui/trigger-variants.d.ts +14 -0
  358. package/dist/components/ui/trigger-variants.js +67 -0
  359. package/dist/components/ui/type-to-confirm-dialog.d.ts +88 -0
  360. package/dist/components/ui/type-to-confirm-dialog.js +101 -0
  361. package/dist/components/ui/typed-title-logic.d.ts +22 -0
  362. package/dist/components/ui/typed-title-logic.js +33 -0
  363. package/dist/components/ui/typed-title.d.ts +38 -0
  364. package/dist/components/ui/typed-title.js +66 -0
  365. package/dist/components/ui/typing-animation.d.ts +36 -0
  366. package/dist/components/ui/typing-animation.js +141 -0
  367. package/dist/components/ui/user-avatar.d.ts +47 -0
  368. package/dist/components/ui/user-avatar.js +46 -0
  369. package/dist/hooks/use-debounce.d.ts +4 -0
  370. package/dist/hooks/use-debounce.js +17 -0
  371. package/dist/hooks/use-is-dark.d.ts +2 -0
  372. package/dist/hooks/use-is-dark.js +27 -0
  373. package/dist/hooks/use-mobile.d.ts +2 -0
  374. package/dist/hooks/use-mobile.js +15 -0
  375. package/dist/hooks/use-proximity-hover.d.ts +52 -0
  376. package/dist/hooks/use-proximity-hover.js +232 -0
  377. package/dist/icons/close.d.ts +2 -0
  378. package/dist/icons/close.js +7 -0
  379. package/dist/icons/copy.d.ts +3 -0
  380. package/dist/icons/copy.js +6 -0
  381. package/dist/icons/sidebar-toggle.d.ts +13 -0
  382. package/dist/icons/sidebar-toggle.js +13 -0
  383. package/dist/index.d.ts +24 -0
  384. package/dist/index.js +33 -0
  385. package/dist/lib/dotmatrix-core.d.ts +113 -0
  386. package/dist/lib/dotmatrix-core.js +920 -0
  387. package/dist/lib/dotmatrix-hooks.d.ts +28 -0
  388. package/dist/lib/dotmatrix-hooks.js +151 -0
  389. package/dist/lib/favicon.d.ts +4 -0
  390. package/dist/lib/favicon.js +21 -0
  391. package/dist/lib/font-weight.d.ts +6 -0
  392. package/dist/lib/font-weight.js +6 -0
  393. package/dist/lib/icon-config.d.ts +33 -0
  394. package/dist/lib/icon-config.js +22 -0
  395. package/dist/lib/icon-context.d.ts +34 -0
  396. package/dist/lib/icon-context.js +81 -0
  397. package/dist/lib/portal-root.d.ts +8 -0
  398. package/dist/lib/portal-root.js +26 -0
  399. package/dist/lib/settle.d.ts +16 -0
  400. package/dist/lib/settle.js +29 -0
  401. package/dist/lib/springs.d.ts +31 -0
  402. package/dist/lib/springs.js +29 -0
  403. package/dist/lib/utils.d.ts +2 -0
  404. package/dist/lib/utils.js +5 -0
  405. package/dist/lib/z-stack.d.ts +55 -0
  406. package/dist/lib/z-stack.js +130 -0
  407. package/dist/providers/ui-provider.d.ts +141 -0
  408. package/dist/providers/ui-provider.js +93 -0
  409. package/dist/styles/dotmatrix-loader.css +1239 -0
  410. package/dist/styles/fonts.css +46 -0
  411. package/dist/styles/tailwind.css +10 -0
  412. package/dist/styles/theme.css +1019 -0
  413. package/dist/styles/tokens.css +146 -0
  414. package/dist/styles.css +2 -0
  415. package/package.json +881 -4
  416. package/skills/kortix-ui/SKILL.md +150 -0
@@ -0,0 +1,1019 @@
1
+ /* @kortix/ui component layer. Tailwind v4 input, not plain CSS.
2
+ *
3
+ * A Tailwind host imports the bundle once, after `@import 'tailwindcss'`:
4
+ * @import '@kortix/ui/tailwind.css';
5
+ * It loads tw-animate-css, tokens.css, this file and the tailwind-scrollbar /
6
+ * tailwind-scrollbar-hide plugins. A host that imports tokens.css and theme.css
7
+ * directly must add `@import 'tw-animate-css'` and both `@plugin` lines itself,
8
+ * or overlays lose their enter/exit animations and `scrollbar-hide` is undefined.
9
+ * A host without Tailwind loads the prebuilt '@kortix/ui/styles.css' instead.
10
+ *
11
+ * It holds what @kortix/ui components need from the stylesheet: the `dark`
12
+ * variant, the host-neutral base rules (body colors, borders, color-scheme,
13
+ * selection, pointer cursor), the @theme keys their classes resolve against, the @utility
14
+ * definitions, keyframes and spinner classes. Values come from CSS variables
15
+ * (tokens.css), so a white-label host re-themes by overriding those variables
16
+ * in :root / .dark. Never fork a component to change a color.
17
+ *
18
+ * Fonts: --font-roobert is set only on Kortix-owned surfaces (brand D8a);
19
+ * every other host gets the system stack from tokens.css (--font-sans-system,
20
+ * --font-mono-system). A host that skips tokens.css and leaves those unset falls
21
+ * back to the generic ui-sans-serif / ui-monospace stacks. */
22
+
23
+ /* Tailwind scans the package source for class names. */
24
+ @source "../";
25
+
26
+ @import './dotmatrix-loader.css';
27
+
28
+ @custom-variant dark (&:where(.dark, .dark *));
29
+
30
+ /* Host-neutral base rules. Every host gets them, so the page itself follows the
31
+ tokens: the body paints --background and --foreground (a white-label
32
+ override of either reaches the page), borders and outlines default to
33
+ --border / --ring, native controls follow the theme (color-scheme), the
34
+ selection follows --selection (default: the inverted --primary), and every
35
+ interactive element shows the pointer cursor (Tailwind v4 sets
36
+ `cursor: default` on <button>). */
37
+ @layer base {
38
+ ::selection {
39
+ background: var(--selection, color-mix(in oklch, var(--primary) 72%, transparent));
40
+ color: var(--selection-foreground, var(--primary-foreground));
41
+ }
42
+
43
+ ::-moz-selection {
44
+ background: var(--selection, color-mix(in oklch, var(--primary) 72%, transparent));
45
+ color: var(--selection-foreground, var(--primary-foreground));
46
+ }
47
+
48
+ * {
49
+ /* stylelint-disable-next-line at-rule-no-unknown */
50
+ @apply border-border outline-ring/50;
51
+ }
52
+
53
+ /* Disabled elements keep the default cursor: :disabled, aria-disabled, data-disabled. */
54
+ :is(
55
+ a[href],
56
+ button,
57
+ input[type='checkbox'],
58
+ input[type='file'],
59
+ input[type='radio'],
60
+ label[for],
61
+ select,
62
+ summary,
63
+ [role='button'],
64
+ [role='checkbox'],
65
+ [role='link'],
66
+ [role='menuitem'],
67
+ [role='menuitemcheckbox'],
68
+ [role='menuitemradio'],
69
+ [role='option'],
70
+ [role='radio'],
71
+ [role='switch'],
72
+ [role='tab'],
73
+ [role='treeitem']
74
+ ):not(:disabled):not([aria-disabled='true']):not([data-disabled]) {
75
+ cursor: pointer;
76
+ }
77
+
78
+ :root {
79
+ color-scheme: light;
80
+ }
81
+
82
+ .dark {
83
+ color-scheme: dark;
84
+ }
85
+
86
+ body {
87
+ /* stylelint-disable-next-line at-rule-no-unknown */
88
+ @apply bg-background text-foreground;
89
+ min-height: 100dvh;
90
+ }
91
+ }
92
+
93
+ @theme inline {
94
+ --color-background: var(--background);
95
+ --color-pane: var(--pane);
96
+ --color-surface: var(--surface);
97
+ --color-foreground: var(--foreground);
98
+ --color-foreground-strong: var(--foreground-strong);
99
+ --color-foreground-weak: var(--foreground-weak);
100
+ --font-sans: var(--font-roobert, var(--font-sans-system, ui-sans-serif, system-ui, sans-serif));
101
+ --font-mono: var(--font-roobert-mono, var(--font-mono-system, ui-monospace, monospace));
102
+ --color-sidebar-ring: var(--sidebar-ring);
103
+ --color-sidebar-border: var(--sidebar-border);
104
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
105
+ --color-sidebar-accent: var(--sidebar-accent);
106
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
107
+ --color-sidebar-primary: var(--sidebar-primary);
108
+ --color-sidebar-foreground: var(--sidebar-foreground);
109
+ --color-sidebar: var(--sidebar);
110
+ --color-sidebar-row: var(--sidebar-row);
111
+ --color-sidebar-row-control: var(--sidebar-row-control);
112
+ --color-chart-5: var(--chart-5);
113
+ --color-chart-4: var(--chart-4);
114
+ --color-chart-3: var(--chart-3);
115
+ --color-chart-2: var(--chart-2);
116
+ --color-chart-1: var(--chart-1);
117
+ --color-ring: var(--ring);
118
+ --color-input: var(--input);
119
+ --color-border: var(--border);
120
+ /* Interaction overlays — translucent ink, not solid surfaces, so a hover or
121
+ selection tint blends over whatever substrate is behind it (canvas,
122
+ surface-1, an image). Used by Card's proximity highlight + selected fill. */
123
+ --color-hover: var(--hover);
124
+ --color-active: var(--active);
125
+ --color-destructive-foreground: var(--destructive-foreground);
126
+ --color-destructive: var(--destructive);
127
+ --color-accent-foreground: var(--accent-foreground);
128
+ --color-accent: var(--accent);
129
+ --color-muted-foreground: var(--muted-foreground);
130
+ --color-muted: var(--muted);
131
+ --color-secondary-foreground: var(--secondary-foreground);
132
+ --color-secondary: var(--secondary);
133
+ --color-primary-foreground: var(--primary-foreground);
134
+ --color-primary: var(--primary);
135
+ --color-popover-foreground: var(--popover-foreground);
136
+ --color-popover: var(--popover);
137
+ --color-card-foreground: var(--card-foreground);
138
+ --color-card: var(--card);
139
+ --color-kortix-base: var(--kortix-base);
140
+ --color-kortix-blue: var(--kortix-blue);
141
+ --color-kortix-yellow: var(--kortix-yellow);
142
+ --color-kortix-orange: var(--kortix-orange);
143
+ --color-kortix-green: var(--kortix-green);
144
+ --color-kortix-purple: var(--kortix-purple);
145
+ --color-kortix-red: var(--kortix-red);
146
+ --color-liquid-glass: var(--liquid-glass-bg);
147
+ --color-liquid-glass-hover: var(--liquid-glass-bg-hover);
148
+ --shadow-liquid-glass: var(--liquid-glass-shadow);
149
+ /* Terminal surface. Only the PTY pane itself is always dark, in every app
150
+ theme, because it mirrors a real shell — so these are literals, not
151
+ light/dark pairs. Chrome around it (the connect bar, the panel shell, the
152
+ connection status) is app UI and paints Kortix tokens. `terminalTheme` in
153
+ features/session/pty-terminal.tsx must keep `background` equal to
154
+ --terminal-surface and `foreground` equal to --terminal-fg: xterm's ITheme
155
+ needs concrete colors, not CSS vars. */
156
+ --color-terminal-surface: var(--terminal-surface);
157
+ --color-terminal-fg: var(--terminal-fg);
158
+ --color-terminal-border: var(--terminal-border);
159
+ /* @generated kortix-brand:start theme — edit .agents/skills/kortix-brand/references/visual/visual-system.json, then run generate-tokens.ts */
160
+ /* Type scale. Roles and surfaces are in references/visual/typography.md. */
161
+ --text-xs: 0.8125rem;
162
+ --text-xs--line-height: calc(1 / 0.8125);
163
+ --text-sm: 0.875rem;
164
+ --text-sm--line-height: calc(1.25 / 0.875);
165
+ --text-md: 0.9rem;
166
+ --text-md--line-height: calc(1.375 / 0.9375);
167
+ --text-base: 1rem;
168
+ --text-base--line-height: calc(1.5 / 1);
169
+ --text-lg: 1.125rem;
170
+ --text-lg--line-height: calc(1.75 / 1.125);
171
+ --text-xl: 1.25rem;
172
+ --text-xl--line-height: calc(1.75 / 1.25);
173
+ --text-2xl: 1.5rem;
174
+ --text-2xl--line-height: calc(2 / 1.5);
175
+ --text-3xl: 1.875rem;
176
+ --text-3xl--line-height: calc(2.25 / 1.875);
177
+ --text-4xl: 2.25rem;
178
+ --text-4xl--line-height: calc(2.5 / 2.25);
179
+ --text-5xl: 3rem;
180
+ --text-5xl--line-height: 1;
181
+ --text-6xl: 3.75rem;
182
+ --text-6xl--line-height: 1;
183
+ --text-7xl: 4.5rem;
184
+ --text-7xl--line-height: 1;
185
+ --text-8xl: 6rem;
186
+ --text-8xl--line-height: 1;
187
+ /* Emoji-picker active cell. Hues are DERIVED from the glyph (emoji-tint.ts) and must stay stable. Fill stays pale; the 1px inset ring carries WCAG 1.4.11 3:1 against --popover (measured 3.03-3.19:1). Emitted as light-dark() in @theme. */
188
+ --color-emoji-fill-red: light-dark(hsl(4 46% 88%), hsl(4 28% 26%));
189
+ --color-emoji-fill-amber: light-dark(hsl(32 52% 87%), hsl(32 30% 25%));
190
+ --color-emoji-fill-green: light-dark(hsl(96 34% 87%), hsl(96 22% 24%));
191
+ --color-emoji-fill-teal: light-dark(hsl(178 36% 86%), hsl(178 26% 24%));
192
+ --color-emoji-fill-blue: light-dark(hsl(212 46% 88%), hsl(212 30% 27%));
193
+ --color-emoji-fill-violet: light-dark(hsl(280 32% 88%), hsl(280 22% 27%));
194
+ --color-emoji-ring-red: light-dark(hsl(4 46% 63%), hsl(4 46% 45%));
195
+ --color-emoji-ring-amber: light-dark(hsl(32 52% 51%), hsl(32 52% 35%));
196
+ --color-emoji-ring-green: light-dark(hsl(96 34% 46%), hsl(96 34% 32%));
197
+ --color-emoji-ring-teal: light-dark(hsl(178 36% 46%), hsl(178 36% 32%));
198
+ --color-emoji-ring-blue: light-dark(hsl(212 46% 60%), hsl(212 46% 42%));
199
+ --color-emoji-ring-violet: light-dark(hsl(280 32% 63%), hsl(280 32% 46%));
200
+ /* Project glyph icon palette, CHOSEN by the user. Separate from emoji on purpose. The ring token paints both the inset ring and the glyph, tuned (L only) to clear 3:1 against the fill and --popover/--card in both themes. */
201
+ --color-glyph-fill-grey: light-dark(hsl(220 8% 88%), hsl(220 6% 26%));
202
+ --color-glyph-fill-red: light-dark(hsl(4 46% 88%), hsl(4 28% 26%));
203
+ --color-glyph-fill-orange: light-dark(hsl(24 60% 88%), hsl(24 32% 26%));
204
+ --color-glyph-fill-yellow: light-dark(hsl(46 62% 87%), hsl(46 34% 25%));
205
+ --color-glyph-fill-lime: light-dark(hsl(84 42% 87%), hsl(84 26% 24%));
206
+ --color-glyph-fill-blue: light-dark(hsl(212 46% 88%), hsl(212 30% 27%));
207
+ --color-glyph-fill-purple: light-dark(hsl(275 34% 88%), hsl(275 24% 27%));
208
+ --color-glyph-fill-magenta: light-dark(hsl(318 40% 88%), hsl(318 26% 27%));
209
+ --color-glyph-ring-grey: light-dark(hsl(220 8% 50%), hsl(220 8% 58%));
210
+ --color-glyph-ring-red: light-dark(hsl(4 46% 53%), hsl(4 46% 60%));
211
+ --color-glyph-ring-orange: light-dark(hsl(24 60% 46%), hsl(24 60% 55%));
212
+ --color-glyph-ring-yellow: light-dark(hsl(46 62% 37%), hsl(46 55% 47%));
213
+ --color-glyph-ring-lime: light-dark(hsl(84 42% 37%), hsl(84 40% 46%));
214
+ --color-glyph-ring-blue: light-dark(hsl(212 46% 50%), hsl(212 46% 59%));
215
+ --color-glyph-ring-purple: light-dark(hsl(275 34% 56%), hsl(275 34% 61%));
216
+ --color-glyph-ring-magenta: light-dark(hsl(318 40% 52%), hsl(318 40% 61%));
217
+ /* Motion. Tailwind 4 reads duration utilities from --transition-duration-*. */
218
+ --transition-duration-fast: 100ms;
219
+ --transition-duration-normal: 150ms;
220
+ --transition-duration-moderate: 200ms;
221
+ --transition-duration-slow: 300ms;
222
+ --transition-duration-slower: 500ms;
223
+ --ease-default: cubic-bezier(0.2, 0, 0, 1);
224
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
225
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
226
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
227
+ /* @generated kortix-brand:end */
228
+ /* App typography scale. Keep html at 100% so browser and OS zoom
229
+ /* Standard border radius values */
230
+ --radius-sm: calc(var(--radius) - 4px);
231
+ --radius-md: calc(var(--radius) - 2px);
232
+ --radius-lg: var(--radius);
233
+ --radius-xl: calc(var(--radius) + 4px);
234
+ /* Standard radius for all main form elements and UI components */
235
+ --radius-2xl: 1rem;
236
+ --border-width: 1.5px;
237
+ --spacing-sidebar: 1.5rem;
238
+ --animate-accordion-down: accordion-down 0.2s ease-out;
239
+ --animate-accordion-up: accordion-up 0.2s ease-out;
240
+ --animate-collapsible-down: collapsible-down 0.2s ease-out;
241
+ --animate-collapsible-up: collapsible-up 0.15s ease-out;
242
+ --animate-marquee: marquee var(--duration) infinite linear;
243
+ --animate-marquee-reverse: marquee-reverse var(--duration) infinite linear;
244
+ --animate-marquee-vertical: marquee-vertical var(--duration) linear infinite;
245
+ --animate-orbit: orbit calc(var(--duration) * 1s) linear infinite;
246
+ --animate-slide-down: slide-down 300ms cubic-bezier(0.87, 0, 0.13, 1);
247
+ --animate-slide-up: slide-up 300ms cubic-bezier(0.87, 0, 0.13, 1);
248
+ --scaleIn: scaleIn 200ms ease;
249
+ --scaleOut: scaleOut 200ms ease;
250
+ --fadeIn: fadeIn 200ms ease;
251
+ --fadeOut: fadeOut 200ms ease;
252
+ --enterFromLeft: enterFromLeft 250ms ease;
253
+ --enterFromRight: enterFromRight 250ms ease;
254
+ --exitToLeft: exitToLeft 250ms ease;
255
+ --exitToRight: exitToRight 250ms ease;
256
+ --animate-elliptical-orbit: elliptical-orbit 20s linear infinite;
257
+ --animate-shiny-text: shiny-text 5s infinite;
258
+ --animate-kortix-bullet-flow: kortix-bullet-flow 4s ease-in-out infinite;
259
+ /* Error feedback — damped horizontal shake (decaying amplitude, transform-only) */
260
+ --animate-shake: shake 400ms var(--ease-in-out) both;
261
+
262
+ /* Marketing chips: ±6px vertical float */
263
+ --animate-chip-drift: chip-drift 6s ease-in-out infinite;
264
+
265
+ @keyframes chip-drift {
266
+ 0%,
267
+ 100% {
268
+ transform: translateY(-6px);
269
+ }
270
+ 50% {
271
+ transform: translateY(6px);
272
+ }
273
+ }
274
+
275
+ @keyframes shake {
276
+ 0%,
277
+ 100% {
278
+ transform: translateX(0);
279
+ }
280
+ 10% {
281
+ transform: translateX(-6px);
282
+ }
283
+ 30% {
284
+ transform: translateX(5px);
285
+ }
286
+ 50% {
287
+ transform: translateX(-3px);
288
+ }
289
+ 70% {
290
+ transform: translateX(2px);
291
+ }
292
+ 90% {
293
+ transform: translateX(-1px);
294
+ }
295
+ }
296
+
297
+ @keyframes kortix-bullet-flow {
298
+ 0%,
299
+ 100% {
300
+ background-position: 0% 0%;
301
+ }
302
+ 50% {
303
+ background-position: 0% 100%;
304
+ }
305
+ }
306
+
307
+ @keyframes orbit {
308
+ 0% {
309
+ transform: rotate(calc(var(--angle) * 1deg)) translateY(calc(var(--radius) * 1px))
310
+ rotate(calc(var(--angle) * -1deg));
311
+ }
312
+ 100% {
313
+ transform: rotate(calc(var(--angle) * 1deg + 360deg)) translateY(calc(var(--radius) * 1px))
314
+ rotate(calc((var(--angle) * -1deg) - 360deg));
315
+ }
316
+ }
317
+
318
+ @keyframes accordion-down {
319
+ from {
320
+ height: 0;
321
+ }
322
+ to {
323
+ height: var(--radix-accordion-content-height);
324
+ }
325
+ }
326
+
327
+ @keyframes accordion-up {
328
+ from {
329
+ height: var(--radix-accordion-content-height);
330
+ }
331
+ to {
332
+ height: 0;
333
+ }
334
+ }
335
+
336
+ @keyframes collapsible-down {
337
+ from {
338
+ height: 0;
339
+ opacity: 0;
340
+ }
341
+ to {
342
+ height: var(--radix-collapsible-content-height);
343
+ opacity: 1;
344
+ }
345
+ }
346
+
347
+ @keyframes collapsible-up {
348
+ from {
349
+ height: var(--radix-collapsible-content-height);
350
+ opacity: 1;
351
+ }
352
+ to {
353
+ height: 0;
354
+ opacity: 0;
355
+ }
356
+ }
357
+
358
+ @keyframes marquee {
359
+ from {
360
+ transform: translateX(0);
361
+ }
362
+ to {
363
+ transform: translateX(calc(-100% - var(--gap)));
364
+ }
365
+ }
366
+
367
+ @keyframes marquee-reverse {
368
+ from {
369
+ transform: translateX(calc(-100% - var(--gap)));
370
+ }
371
+ to {
372
+ transform: translateX(0);
373
+ }
374
+ }
375
+
376
+ @keyframes marquee-vertical {
377
+ from {
378
+ transform: translateY(0);
379
+ }
380
+ to {
381
+ transform: translateY(calc(-100% - var(--gap)));
382
+ }
383
+ }
384
+ @keyframes slide-down {
385
+ from {
386
+ height: 0px;
387
+ }
388
+ to {
389
+ height: var(--radix-accordion-content-height);
390
+ }
391
+ }
392
+
393
+ @keyframes slide-up {
394
+ from {
395
+ height: var(--radix-accordion-content-height);
396
+ }
397
+ to {
398
+ height: 0px;
399
+ }
400
+ }
401
+
402
+ /* Add this to your globals.css */
403
+ @keyframes enterFromRight {
404
+ from {
405
+ opacity: 0;
406
+ transform: translateX(200px);
407
+ }
408
+ to {
409
+ opacity: 1;
410
+ transform: translateX(0);
411
+ }
412
+ }
413
+
414
+ @keyframes enterFromLeft {
415
+ from {
416
+ opacity: 0;
417
+ transform: translateX(-200px);
418
+ }
419
+ to {
420
+ opacity: 1;
421
+ transform: translateX(0);
422
+ }
423
+ }
424
+
425
+ @keyframes exitToRight {
426
+ from {
427
+ opacity: 1;
428
+ transform: translateX(0);
429
+ }
430
+ to {
431
+ opacity: 0;
432
+ transform: translateX(200px);
433
+ }
434
+ }
435
+
436
+ @keyframes exitToLeft {
437
+ from {
438
+ opacity: 1;
439
+ transform: translateX(0);
440
+ }
441
+ to {
442
+ opacity: 0;
443
+ transform: translateX(-200px);
444
+ }
445
+ }
446
+
447
+ @keyframes scaleIn {
448
+ from {
449
+ opacity: 0;
450
+ transform: rotateX(-30deg) scale(0.9);
451
+ }
452
+ to {
453
+ opacity: 1;
454
+ transform: rotateX(0deg) scale(1);
455
+ }
456
+ }
457
+
458
+ @keyframes scaleOut {
459
+ from {
460
+ opacity: 1;
461
+ transform: rotateX(0deg) scale(1);
462
+ }
463
+ to {
464
+ opacity: 0;
465
+ transform: rotateX(-10deg) scale(0.95);
466
+ }
467
+ }
468
+
469
+ @keyframes fadeIn {
470
+ from {
471
+ opacity: 0;
472
+ }
473
+ to {
474
+ opacity: 1;
475
+ }
476
+ }
477
+
478
+ @keyframes fadeOut {
479
+ from {
480
+ opacity: 1;
481
+ }
482
+ to {
483
+ opacity: 0;
484
+ }
485
+ }
486
+
487
+ @keyframes elliptical-orbit {
488
+ from {
489
+ transform: rotate(var(--angle, 0) deg) translate(var(--h-radius, 160px), 0)
490
+ rotate(calc(var(--angle, 0) deg * -1));
491
+ }
492
+ to {
493
+ transform: rotate(calc(var(--angle, 0) deg + 360deg)) translate(var(--h-radius, 160px), 0)
494
+ rotate(calc((var(--angle, 0) deg + 360deg) * -1));
495
+ }
496
+ }
497
+
498
+ @keyframes shiny-text {
499
+ 0%,
500
+ 90%,
501
+ 100% {
502
+ background-position: calc(-100% - var(--shiny-width)) 0;
503
+ }
504
+ 30%,
505
+ 60% {
506
+ background-position: calc(100% + var(--shiny-width)) 0;
507
+ }
508
+ }
509
+
510
+ @keyframes meteor {
511
+ 0% {
512
+ transform: rotate(var(--angle)) translateX(0);
513
+ opacity: 1;
514
+ }
515
+ 70% {
516
+ opacity: 1;
517
+ }
518
+ 100% {
519
+ transform: rotate(var(--angle)) translateX(-500px);
520
+ opacity: 0;
521
+ }
522
+ }
523
+
524
+ --animate-blink-cursor: blink-cursor 1.2s step-end infinite;
525
+ @keyframes blink-cursor {
526
+ 0%,
527
+ 49% {
528
+ opacity: 1;
529
+ }
530
+ 50%,
531
+ 100% {
532
+ opacity: 0;
533
+ }
534
+ }
535
+ }
536
+
537
+ /* Shake is pure positional motion; the error state is already conveyed by
538
+ color/message, so drop it entirely under reduced motion. */
539
+ @media (prefers-reduced-motion: reduce) {
540
+ .animate-shake {
541
+ animation: none;
542
+ }
543
+ }
544
+
545
+ /* Limited-iteration pulse — e.g. animate-pulse-3 runs the default pulse 3 times */
546
+ @utility animate-pulse-* {
547
+ animation-name: pulse;
548
+ animation-duration: 2s;
549
+ animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
550
+ animation-iteration-count: --value(integer);
551
+ animation-iteration-count: --value([integer]);
552
+ }
553
+
554
+ @keyframes kortix-spin {
555
+ to {
556
+ transform: rotate(360deg);
557
+ }
558
+ }
559
+
560
+ /* ─── Smooth shadow ring — five soft layers plus a 1px ring in the border token.
561
+ Use on a floating card instead of border + shadow-*: className="smooth-shadow-ring" */
562
+ @utility smooth-shadow-ring {
563
+ box-shadow:
564
+ 0 17.54px 23.39px oklch(0 0 0 / 0.04),
565
+ 0 9.4px 12.5px oklch(0 0 0 / 0.03),
566
+ 0 5.25px 7px oklch(0 0 0 / 0.02),
567
+ 0 2.79px 3.72px -2px oklch(0 0 0 / 0.01),
568
+ 0 1.16px 1.5px oklch(0 0 0 / 0.01),
569
+ 0 0 0 1px color-mix(in oklab, var(--border) 60%, transparent);
570
+ }
571
+
572
+ /* The lighter `ring-sm` preset of the same plugin (shadow.floriankiem.com):
573
+ wider, fainter layers. Toasts use it. */
574
+ @utility smooth-shadow-ring-sm {
575
+ box-shadow:
576
+ 0 18px 47px oklch(0 0 0 / 0.03),
577
+ 0 7.5px 19px oklch(0 0 0 / 0.02),
578
+ 0 4px 10.5px oklch(0 0 0 / 0.02),
579
+ 0 2.3px 5.8px oklch(0 0 0 / 0.01),
580
+ 0 1.2px 3.1px oklch(0 0 0 / 0.01),
581
+ 0 0.5px 1.3px oklch(0 0 0 / 0.01),
582
+ 0 0 0 1px color-mix(in oklab, var(--border) 60%, transparent);
583
+ }
584
+
585
+ /* ─── Liquid glass — frosted tinted surface (tokens: --liquid-glass-*) ─────
586
+ Theme-aware: light drop-shadow, dark inset rim. Specular lives on
587
+ background-image so this does not steal ::before from hit-area.
588
+ Use: className="liquid-glass rounded-full" */
589
+ @utility liquid-glass {
590
+ border: 1px solid var(--border);
591
+ background-color: var(--liquid-glass-bg);
592
+ background-image: var(--liquid-glass-highlight);
593
+ -webkit-backdrop-filter: blur(var(--liquid-glass-blur)) saturate(var(--liquid-glass-saturate));
594
+ backdrop-filter: blur(var(--liquid-glass-blur)) saturate(var(--liquid-glass-saturate));
595
+ box-shadow: var(--liquid-glass-shadow);
596
+
597
+ &:hover {
598
+ background-color: var(--liquid-glass-bg-hover);
599
+ }
600
+ }
601
+
602
+ /* ─── Hit area — expand interactive targets without layout shift ───────────
603
+ https://bazza.dev/craft/2026/hit-area */
604
+ @utility hit-area-debug {
605
+ position: relative;
606
+ &::before {
607
+ content: '';
608
+ position: absolute;
609
+ top: var(--hit-area-t, 0px);
610
+ right: var(--hit-area-r, 0px);
611
+ bottom: var(--hit-area-b, 0px);
612
+ left: var(--hit-area-l, 0px);
613
+ pointer-events: inherit;
614
+ @apply border border-dashed border-blue-500 bg-blue-500/10;
615
+ }
616
+ &:hover::before {
617
+ @apply border border-dashed border-green-500 bg-green-500/10;
618
+ }
619
+ }
620
+
621
+ @utility hit-area {
622
+ position: relative;
623
+ &::before {
624
+ content: '';
625
+ position: absolute;
626
+ top: var(--hit-area-t, 0px);
627
+ right: var(--hit-area-r, 0px);
628
+ bottom: var(--hit-area-b, 0px);
629
+ left: var(--hit-area-l, 0px);
630
+ pointer-events: inherit;
631
+ }
632
+ }
633
+
634
+ @utility hit-area-* {
635
+ position: relative;
636
+ --hit-area-t: --spacing(--value(number) * -1);
637
+ --hit-area-t: calc(--value([*]) * -1);
638
+ --hit-area-b: --spacing(--value(number) * -1);
639
+ --hit-area-b: calc(--value([*]) * -1);
640
+ --hit-area-l: --spacing(--value(number) * -1);
641
+ --hit-area-l: calc(--value([*]) * -1);
642
+ --hit-area-r: --spacing(--value(number) * -1);
643
+ --hit-area-r: calc(--value([*]) * -1);
644
+ &::before {
645
+ content: '';
646
+ position: absolute;
647
+ top: var(--hit-area-t, 0px);
648
+ right: var(--hit-area-r, 0px);
649
+ bottom: var(--hit-area-b, 0px);
650
+ left: var(--hit-area-l, 0px);
651
+ pointer-events: inherit;
652
+ }
653
+ }
654
+
655
+ @utility hit-area-x-* {
656
+ position: relative;
657
+ --hit-area-l: --spacing(--value(number) * -1);
658
+ --hit-area-l: calc(--value([*]) * -1);
659
+ --hit-area-r: --spacing(--value(number) * -1);
660
+ --hit-area-r: calc(--value([*]) * -1);
661
+ &::before {
662
+ content: '';
663
+ position: absolute;
664
+ top: var(--hit-area-t, 0px);
665
+ right: var(--hit-area-r, 0px);
666
+ bottom: var(--hit-area-b, 0px);
667
+ left: var(--hit-area-l, 0px);
668
+ pointer-events: inherit;
669
+ }
670
+ }
671
+
672
+ @utility hit-area-y-* {
673
+ position: relative;
674
+ --hit-area-t: --spacing(--value(number) * -1);
675
+ --hit-area-t: calc(--value([*]) * -1);
676
+ --hit-area-b: --spacing(--value(number) * -1);
677
+ --hit-area-b: calc(--value([*]) * -1);
678
+ &::before {
679
+ content: '';
680
+ position: absolute;
681
+ top: var(--hit-area-t, 0px);
682
+ right: var(--hit-area-r, 0px);
683
+ bottom: var(--hit-area-b, 0px);
684
+ left: var(--hit-area-l, 0px);
685
+ pointer-events: inherit;
686
+ }
687
+ }
688
+
689
+ @utility hit-area-t-* {
690
+ position: relative;
691
+ --hit-area-t: --spacing(--value(number) * -1);
692
+ --hit-area-t: calc(--value([*]) * -1);
693
+ &::before {
694
+ content: '';
695
+ position: absolute;
696
+ top: var(--hit-area-t, 0px);
697
+ right: var(--hit-area-r, 0px);
698
+ bottom: var(--hit-area-b, 0px);
699
+ left: var(--hit-area-l, 0px);
700
+ pointer-events: inherit;
701
+ }
702
+ }
703
+
704
+ @utility hit-area-r-* {
705
+ position: relative;
706
+ --hit-area-r: --spacing(--value(number) * -1);
707
+ --hit-area-r: calc(--value([*]) * -1);
708
+ &::before {
709
+ content: '';
710
+ position: absolute;
711
+ top: var(--hit-area-t, 0px);
712
+ right: var(--hit-area-r, 0px);
713
+ bottom: var(--hit-area-b, 0px);
714
+ left: var(--hit-area-l, 0px);
715
+ pointer-events: inherit;
716
+ }
717
+ }
718
+
719
+ @utility hit-area-b-* {
720
+ position: relative;
721
+ --hit-area-b: --spacing(--value(number) * -1);
722
+ --hit-area-b: calc(--value([*]) * -1);
723
+ &::before {
724
+ content: '';
725
+ position: absolute;
726
+ top: var(--hit-area-t, 0px);
727
+ right: var(--hit-area-r, 0px);
728
+ bottom: var(--hit-area-b, 0px);
729
+ left: var(--hit-area-l, 0px);
730
+ pointer-events: inherit;
731
+ }
732
+ }
733
+
734
+ @utility hit-area-l-* {
735
+ position: relative;
736
+ --hit-area-l: --spacing(--value(number) * -1);
737
+ --hit-area-l: calc(--value([*]) * -1);
738
+ &::before {
739
+ content: '';
740
+ position: absolute;
741
+ top: var(--hit-area-t, 0px);
742
+ right: var(--hit-area-r, 0px);
743
+ bottom: var(--hit-area-b, 0px);
744
+ left: var(--hit-area-l, 0px);
745
+ pointer-events: inherit;
746
+ }
747
+ }
748
+
749
+ @utility font-kerning-none {
750
+ font-kerning: none;
751
+ }
752
+
753
+ @utility font-kerning-normal {
754
+ font-kerning: normal;
755
+ }
756
+
757
+ @utility font-kerning-auto {
758
+ font-kerning: auto;
759
+ }
760
+
761
+ @keyframes typing {
762
+ 0%,
763
+ 100% {
764
+ transform: translateY(0);
765
+ opacity: 0.5;
766
+ }
767
+ 50% {
768
+ transform: translateY(-2px);
769
+ opacity: 1;
770
+ }
771
+ }
772
+
773
+ @keyframes loading-dots {
774
+ 0%,
775
+ 100% {
776
+ opacity: 0;
777
+ }
778
+ 50% {
779
+ opacity: 1;
780
+ }
781
+ }
782
+
783
+ @keyframes wave {
784
+ 0%,
785
+ 100% {
786
+ transform: scaleY(1);
787
+ }
788
+ 50% {
789
+ transform: scaleY(0.6);
790
+ }
791
+ }
792
+
793
+ @keyframes blink {
794
+ 0%,
795
+ 100% {
796
+ opacity: 1;
797
+ }
798
+ 50% {
799
+ opacity: 0;
800
+ }
801
+ }
802
+
803
+ @keyframes text-blink {
804
+ 0%,
805
+ 100% {
806
+ color: var(--primary);
807
+ }
808
+ 50% {
809
+ color: var(--muted-foreground);
810
+ }
811
+ }
812
+
813
+ @keyframes bounce-dots {
814
+ 0%,
815
+ 100% {
816
+ transform: scale(0.8);
817
+ opacity: 0.5;
818
+ }
819
+ 50% {
820
+ transform: scale(1.2);
821
+ opacity: 1;
822
+ }
823
+ }
824
+
825
+ @keyframes thin-pulse {
826
+ 0%,
827
+ 100% {
828
+ transform: scale(0.95);
829
+ opacity: 0.8;
830
+ }
831
+ 50% {
832
+ transform: scale(1.05);
833
+ opacity: 0.4;
834
+ }
835
+ }
836
+
837
+ @keyframes pulse-dot {
838
+ 0%,
839
+ 100% {
840
+ transform: scale(1);
841
+ opacity: 0.8;
842
+ }
843
+ 50% {
844
+ transform: scale(1.5);
845
+ opacity: 1;
846
+ }
847
+ }
848
+
849
+ @keyframes shimmer-text {
850
+ 0% {
851
+ background-position: 150% center;
852
+ }
853
+ 100% {
854
+ background-position: -150% center;
855
+ }
856
+ }
857
+
858
+ @keyframes wave-bars {
859
+ 0%,
860
+ 100% {
861
+ transform: scaleY(1);
862
+ opacity: 0.5;
863
+ }
864
+ 50% {
865
+ transform: scaleY(0.6);
866
+ opacity: 1;
867
+ }
868
+ }
869
+
870
+ @keyframes shimmer {
871
+ 0% {
872
+ background-position: 200% 50%;
873
+ }
874
+ 100% {
875
+ background-position: -200% 50%;
876
+ }
877
+ }
878
+
879
+ @keyframes spinner-fade {
880
+ 0% {
881
+ opacity: 0;
882
+ }
883
+ 100% {
884
+ opacity: 1;
885
+ }
886
+ }
887
+
888
+ /* Google/Material circular spinner. Two INDEPENDENTLY-SEAMLESS animations
889
+ compose into the signature "arc sweeps forward, growing then shrinking":
890
+ • the <svg> rotates the whole thing at a CONSTANT rate (linear) — base spin.
891
+ • the arc <circle> rotates a further 360° per cycle (ease-in-out, so it
892
+ speeds up then slows down) while its length grows then shrinks via
893
+ stroke-dashoffset.
894
+ Both loops return to their EXACT start state at 100% (offset 58→58, rotate
895
+ 360°≡0°) AND meet at matching velocity (ease-in-out is ~0 at both ends, linear
896
+ is constant), so the loop boundary is invisible — no stop/restart glitch.
897
+ The old version jumped: its dash ended long (dasharray 37) and restarted as a
898
+ dot (dasharray 1) at a different offset, collapsing visibly every cycle. */
899
+ @keyframes spinner-orbit {
900
+ to {
901
+ transform: rotate(360deg);
902
+ }
903
+ }
904
+
905
+ @keyframes spinner-spin {
906
+ to {
907
+ transform: rotate(360deg);
908
+ }
909
+ }
910
+
911
+ /* r=10 → circumference ≈ 62.83. Visible arc = 62.83 − dashoffset, so it breathes
912
+ between ~28° (offset 58) and ~280° (offset 14). Rotate advances monotonically,
913
+ so the arc's head and tail only ever move forward — they never rewind. */
914
+ @keyframes spinner-dash {
915
+ 0% {
916
+ stroke-dashoffset: 58;
917
+ transform: rotate(0deg);
918
+ }
919
+ 50% {
920
+ stroke-dashoffset: 14;
921
+ transform: rotate(180deg);
922
+ }
923
+ 100% {
924
+ stroke-dashoffset: 58;
925
+ transform: rotate(360deg);
926
+ }
927
+ }
928
+
929
+ .animate-spinner-orbit {
930
+ transform-origin: center;
931
+ animation: spinner-orbit 1.4s linear infinite;
932
+ }
933
+
934
+ /* Refresh icon etc. — constant rotation, so linear. (ease-in-out on an infinite
935
+ full turn visibly stutters at every seam: ends fast, restarts slow.) */
936
+ .animate-spinner-spin {
937
+ transform-origin: center;
938
+ animation: spinner-spin 1s linear infinite;
939
+ }
940
+
941
+ .animate-spinner-dash {
942
+ transform-origin: center;
943
+ transform-box: fill-box;
944
+ stroke-dasharray: 62.83;
945
+ animation: spinner-dash 1.4s cubic-bezier(0.77, 0, 0.175, 1) infinite;
946
+ }
947
+
948
+ @keyframes spinner-spokes {
949
+ to {
950
+ transform: rotate(360deg);
951
+ }
952
+ }
953
+
954
+ /* The spoke spinner TICKS rather than sweeps: steps(8) over a full turn lands
955
+ each frame exactly one spoke on (45°), so the opacity ramp appears to chase
956
+ itself around the wheel while the geometry never sits between positions. A
957
+ smooth rotation here would just look like a spinning asterisk. 0.8s/8 = 100ms
958
+ a tick — near the classic platform cadence, fast enough to read as busy. */
959
+ .animate-spinner-spokes {
960
+ transform-origin: center;
961
+ animation: spinner-spokes 0.8s steps(8) infinite;
962
+ }
963
+
964
+ /* Reduced motion: keep a calm, constant-speed spin (a loader still needs to
965
+ signal activity) but drop the arc's grow/shrink and speed modulation. */
966
+ @media (prefers-reduced-motion: reduce) {
967
+ .animate-spinner-orbit,
968
+ .animate-spinner-spin {
969
+ animation: spinner-orbit 1.4s linear infinite;
970
+ }
971
+
972
+ .animate-spinner-dash {
973
+ animation: none;
974
+ stroke-dashoffset: 34;
975
+ transform: none;
976
+ }
977
+
978
+ /* Same bargain as above: a loader still has to signal activity, so keep the
979
+ rotation but drop the stepping — the 100ms strobe is the part that grates. */
980
+ .animate-spinner-spokes {
981
+ animation: spinner-spokes 1.4s linear infinite;
982
+ }
983
+ }
984
+
985
+ @keyframes sweep-out {
986
+ 0% {
987
+ width: 0;
988
+ opacity: 0;
989
+ }
990
+ 10% {
991
+ opacity: 1;
992
+ }
993
+ 60% {
994
+ width: 100%;
995
+ opacity: 1;
996
+ }
997
+ 100% {
998
+ width: 100%;
999
+ opacity: 0;
1000
+ }
1001
+ }
1002
+
1003
+ .horizontal-sweep {
1004
+ width: 0;
1005
+ background: linear-gradient(
1006
+ to right,
1007
+ transparent,
1008
+ var(--kortix-blue),
1009
+ var(--kortix-blue),
1010
+ transparent
1011
+ );
1012
+ animation: sweep-out 2.5s ease-out infinite;
1013
+ /* delay so it starts ~when the vertical mask reaches bottom */
1014
+ animation-delay: 1.25s;
1015
+ }
1016
+
1017
+ @utility px-mobile {
1018
+ @apply px-6 xl:px-0;
1019
+ }