@kortix/ui 0.0.0-bootstrap.0 → 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 +153 -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 +874 -4
  416. package/skills/kortix-ui/SKILL.md +150 -0
@@ -0,0 +1,190 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Button } from './button.js';
5
+ import { Calendar } from './calendar.js';
6
+ import { IconCalendar, IconChevronDown } from './kortix-icons.js';
7
+ import { Popover, PopoverContent, PopoverTrigger } from './popover.js';
8
+ import { cn } from '../../lib/utils.js';
9
+ const PRESET_ORDER = ['24h', '7d', '30d', '90d'];
10
+ const PRESET_DAYS = {
11
+ '24h': 1,
12
+ '7d': 7,
13
+ '30d': 30,
14
+ '90d': 90,
15
+ };
16
+ const PRESET_LABELS = {
17
+ '24h': 'Last 24 hours',
18
+ '7d': 'Last 7 days',
19
+ '30d': 'Last 30 days',
20
+ '90d': 'Last 90 days',
21
+ };
22
+ /**
23
+ * Resolve a preset to concrete UTC ISO bounds, anchored to `now`. Presets are
24
+ * a UI affordance only — every cost endpoint takes just `from`/`to`, so this
25
+ * is where a preset turns into the wire values.
26
+ */
27
+ export function resolvePreset(preset, now) {
28
+ const to = now.toISOString();
29
+ const from = new Date(now.getTime() - PRESET_DAYS[preset] * 86_400_000).toISOString();
30
+ return { preset, from, to };
31
+ }
32
+ /**
33
+ * Turn a calendar day selection into a half-open UTC window: `from` is the
34
+ * start of `startDay`, `to` is the start of the day *after* `endDay`, so the
35
+ * end day the user clicked is fully covered under `[from, to)`.
36
+ *
37
+ * `startDay`/`endDay` are the `Date` objects `react-day-picker` hands back —
38
+ * local midnight on the clicked calendar day. Reading their *local* calendar
39
+ * parts (`getFullYear`/`getMonth`/`getDate`) and rebuilding the instant with
40
+ * `Date.UTC` is what makes the result independent of the host's timezone;
41
+ * calling `.toISOString()` on the picked `Date` directly would instead bake
42
+ * in the host's UTC offset (see the test file for a worked example).
43
+ */
44
+ export function toUtcDayRange(startDay, endDay) {
45
+ const from = new Date(Date.UTC(startDay.getFullYear(), startDay.getMonth(), startDay.getDate())).toISOString();
46
+ const to = new Date(Date.UTC(endDay.getFullYear(), endDay.getMonth(), endDay.getDate() + 1)).toISOString();
47
+ return { preset: 'custom', from, to };
48
+ }
49
+ /**
50
+ * The inverse of `toUtcDayRange`, for feeding a stored `CostRange` back into
51
+ * `<Calendar mode="range">` on reopen. The stored bounds are UTC-midnight
52
+ * instants; `react-day-picker` highlights by *local* calendar day. Shifting
53
+ * the instant by milliseconds (an earlier version of this function did
54
+ * `getTime() - 86_400_000`) only relocates the instant — it does nothing to
55
+ * account for how a *different* host timezone reads that instant's local
56
+ * calendar day, so it "corrects" the display for positive-UTC-offset viewers
57
+ * by coincidence and is wrong in the opposite direction for negative-offset
58
+ * viewers (e.g. the Americas): both bounds land a day early there.
59
+ *
60
+ * The fix mirrors `toUtcDayRange` with its two steps reversed: read the
61
+ * *UTC* calendar parts off the stored instant (`getUTCFullYear`/
62
+ * `getUTCMonth`/`getUTCDate` — always host-independent), then rebuild via
63
+ * the *local* `Date` constructor, so the viewer's own host offset decides
64
+ * how the resulting `Date` reads back — the same offset `react-day-picker`
65
+ * itself will later use to highlight it. `new Date(y, m, d)` normalizes an
66
+ * out-of-range day (`d - 1` below zero, `d + 1` past the month's end), so
67
+ * month/year rollover needs no special-casing.
68
+ */
69
+ export function toCalendarSelection(value) {
70
+ const utcPartsToLocalDay = (iso, dayDelta = 0) => {
71
+ const instant = new Date(iso);
72
+ return new Date(instant.getUTCFullYear(), instant.getUTCMonth(), instant.getUTCDate() + dayDelta);
73
+ };
74
+ // A preset's from/to are real instants (e.g. `now` minus N days), not day
75
+ // boundaries — pass them through unadjusted. Only a custom range's bounds
76
+ // are calendar days that need this local/UTC reconciliation; its `to` is
77
+ // also the exclusive day-after boundary, so the last inclusive calendar
78
+ // day the user clicked is one day earlier.
79
+ if (value.preset !== 'custom') {
80
+ return { from: new Date(value.from), to: new Date(value.to) };
81
+ }
82
+ return { from: utcPartsToLocalDay(value.from), to: utcPartsToLocalDay(value.to, -1) };
83
+ }
84
+ /**
85
+ * The widest label `formatRangeLabel` can ever emit, used to reserve the
86
+ * trigger's width so the control does not resize when the range changes.
87
+ *
88
+ * The shape is fixed: `MMM D – MMM D, YYYY`. Every `en-US` short month name is
89
+ * three characters, the year is always four digits, and the widest day number
90
+ * is two digits — so a two-digit/two-digit pair is the maximum at 21
91
+ * characters. Digits are rendered `tabular-nums` on the trigger, so any
92
+ * two-digit day is exactly as wide as `28` and this string is not merely the
93
+ * longest, it is the widest for its digit positions.
94
+ *
95
+ * NOT `Dec 28, 2026 – Jan 3, 2027`: `formatRangeLabel` prints the year once,
96
+ * after the second day, so a range spanning a year boundary is *shorter* than
97
+ * this (`Dec 28 – Jan 3, 2027`), not longer. Sizing to the two-year shape
98
+ * would reserve ~5 characters of permanent dead space.
99
+ *
100
+ * The four preset labels are all shorter (`Last 24 hours`, 13 characters), so
101
+ * this one string governs the trigger width in every state.
102
+ */
103
+ export const WIDEST_RANGE_LABEL = 'Dec 28 – Dec 30, 2026';
104
+ /** Human label for the trigger button: the preset name, or both dates for a custom range. */
105
+ export function formatRangeLabel(range) {
106
+ if (range.preset !== 'custom')
107
+ return PRESET_LABELS[range.preset];
108
+ const from = new Date(range.from);
109
+ // `to` is the exclusive day-after boundary (half-open [from, to)) — the
110
+ // last inclusive calendar day the user clicked is one day earlier.
111
+ const to = new Date(new Date(range.to).getTime() - 86_400_000);
112
+ const day = (value) => value.toLocaleDateString('en-US', { month: 'short', day: 'numeric', timeZone: 'UTC' });
113
+ return `${day(from)} – ${day(to)}, ${to.getUTCFullYear()}`;
114
+ }
115
+ /**
116
+ * What a click on `day` does, given the half-made range currently on screen.
117
+ *
118
+ * This deliberately ignores the range `react-day-picker` hands to `onSelect`,
119
+ * because that value is the bug. Its `addToRange` folds the clicked day into
120
+ * whatever is currently `selected`, and `selected` is always a *complete*
121
+ * range here — a preset resolves to real bounds, so `from` and `to` are both
122
+ * set before the user ever opens the calendar. Feeding a complete range in
123
+ * takes the `from && to` branch, which returns another complete range from a
124
+ * single click:
125
+ *
126
+ * addToRange(Jul 10, { from: Jul 1, to: Jul 31 }) -> { from: Jul 1, to: Jul 10 }
127
+ *
128
+ * So the first click looked finished, the picker committed and closed, and a
129
+ * second date could never be chosen. Worse, the committed range was one the
130
+ * user never asked for: their click became the *end* of the previous range
131
+ * instead of the start of a new one.
132
+ *
133
+ * Deriving from the clicked day instead makes the two clicks explicit — the
134
+ * first opens a range, the second closes it, in whichever order they are
135
+ * clicked. Clicking the same day twice is a legitimate single-day range and
136
+ * completes normally.
137
+ */
138
+ export function nextRangeDraft(draft, day) {
139
+ // Nothing pending — this click opens a new range rather than editing the
140
+ // committed one.
141
+ if (!draft?.from || draft.to) {
142
+ return { kind: 'pending', draft: { from: day, to: undefined } };
143
+ }
144
+ const start = draft.from;
145
+ return day.getTime() < start.getTime()
146
+ ? { kind: 'complete', from: day, to: start }
147
+ : { kind: 'complete', from: start, to: day };
148
+ }
149
+ /**
150
+ * The main control for all three levels of the cost explorer (project,
151
+ * sessions, session). A Popover holding a vertical preset rail beside a range
152
+ * Calendar; both paths resolve to concrete UTC ISO bounds before calling
153
+ * `onChange`.
154
+ */
155
+ export function DateRangePicker({ value, onChange }) {
156
+ const [open, setOpen] = useState(false);
157
+ // The range being picked, if the user is mid-selection. While this is set it
158
+ // is what the calendar shows, so the first click reads as "start here"
159
+ // instead of silently editing the committed range.
160
+ const [draft, setDraft] = useState(undefined);
161
+ const selected = draft ?? toCalendarSelection(value);
162
+ const handleOpenChange = (next) => {
163
+ setOpen(next);
164
+ // Closing with only a start day chosen abandons it. Keeping it would mean
165
+ // the next open silently treats an old click as the range's start.
166
+ if (!next)
167
+ setDraft(undefined);
168
+ };
169
+ const handlePresetSelect = (preset) => {
170
+ setDraft(undefined);
171
+ onChange(resolvePreset(preset, new Date()));
172
+ setOpen(false);
173
+ };
174
+ // `range` is ignored on purpose — see `nextRangeDraft`. The clicked day is
175
+ // the only trustworthy input react-day-picker gives us here.
176
+ const handleCalendarSelect = (_range, day) => {
177
+ const step = nextRangeDraft(draft, day);
178
+ if (step.kind === 'pending') {
179
+ setDraft(step.draft);
180
+ return;
181
+ }
182
+ setDraft(undefined);
183
+ onChange(toUtcDayRange(step.from, step.to));
184
+ setOpen(false);
185
+ };
186
+ return (_jsxs(Popover, { open: open, onOpenChange: handleOpenChange, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "gap-1.5 font-normal", children: [_jsx(IconCalendar, { className: "size-3.5 shrink-0" }), _jsxs("span", { className: "grid text-left tabular-nums", children: [_jsx("span", { "aria-hidden": "true", className: "invisible col-start-1 row-start-1", children: WIDEST_RANGE_LABEL }), _jsx("span", { className: "col-start-1 row-start-1", children: formatRangeLabel(value) })] }), _jsx(IconChevronDown, { className: cn('size-3 shrink-0 opacity-50 transition-transform duration-200 ease-out', open && 'rotate-180') })] }) }), _jsx(PopoverContent, { align: "start", sideOffset: 8, className: "w-auto p-0 shadow-md", children: _jsxs("div", { className: "flex flex-col sm:flex-row", children: [_jsx("div", { className: "grid grid-cols-2 gap-1 border-b p-2 sm:w-[136px] sm:grid-cols-1 sm:content-start sm:border-r sm:border-b-0", children: PRESET_ORDER.map((preset) => {
187
+ const active = value.preset === preset;
188
+ return (_jsx(Button, { type: "button", variant: "ghost", size: "sm", "aria-pressed": active, className: cn('h-7 w-full justify-start px-2.5 text-xs font-normal', active ? 'bg-primary/[0.06] text-foreground' : 'text-muted-foreground'), onClick: () => handlePresetSelect(preset), children: PRESET_LABELS[preset] }, preset));
189
+ }) }), _jsx(Calendar, { mode: "range", selected: selected, onSelect: handleCalendarSelect, defaultMonth: selected.from })] }) })] }));
190
+ }
@@ -0,0 +1,15 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DefinitionListProps {
3
+ dividers?: boolean;
4
+ className?: string;
5
+ children: ReactNode;
6
+ }
7
+ export declare function DefinitionList({ dividers, className, children }: DefinitionListProps): import("react").JSX.Element;
8
+ export interface DefinitionRowProps {
9
+ label: string;
10
+ /** Width reserved for the label column (default 110px) */
11
+ labelWidth?: number;
12
+ children: ReactNode;
13
+ title?: string;
14
+ }
15
+ export declare function DefinitionRow({ label, labelWidth, children, title }: DefinitionRowProps): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Kortix <DefinitionList> — key:value pair list.
5
+ *
6
+ * Used for:
7
+ * • Project About → Details panel
8
+ * • Issue detail sidebar → Properties
9
+ * • Trigger / Channel / Tunnel details
10
+ * • Anywhere you'd otherwise reach for a <table> with two columns
11
+ *
12
+ * Flat, dividerless by default. Set `dividers` to get a 1px rule between
13
+ * rows. Labels are fixed-width so values align.
14
+ *
15
+ * <DefinitionList>
16
+ * <DefinitionRow label="Path"><code>/workspace/foo</code></DefinitionRow>
17
+ * <DefinitionRow label="Created">2 days ago</DefinitionRow>
18
+ * </DefinitionList>
19
+ */
20
+ import { cn } from '../../lib/utils.js';
21
+ export function DefinitionList({ dividers, className, children }) {
22
+ return (_jsx("dl", { className: cn(dividers && 'divide-border border-border/60 divide-y border-y', className), children: children }));
23
+ }
24
+ export function DefinitionRow({ label, labelWidth = 110, children, title }) {
25
+ return (_jsxs("div", { className: "flex items-baseline gap-6 py-2.5", children: [_jsx("dt", { className: "text-muted-foreground/70 shrink-0 text-xs font-medium", style: { width: labelWidth }, children: label }), _jsx("dd", { className: "text-foreground/90 min-w-0 flex-1 truncate text-sm", title: title, children: children })] }));
26
+ }
@@ -0,0 +1,29 @@
1
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { type TriggerVariantProps } from './trigger-variants.js';
5
+ /** @deprecated In feature code use `Modal` (`@kortix/ui/modal`). `Dialog` is the primitive other components build on. */
6
+ declare const Dialog: ({ open, defaultOpen, onOpenChange, ...props }: DialogPrimitive.DialogProps) => React.JSX.Element;
7
+ declare const DialogTrigger: ({ className, variant, size, asChild, ...props }: Omit<React.ComponentProps<typeof DialogPrimitive.Trigger>, "size"> & TriggerVariantProps) => React.JSX.Element;
8
+ declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
9
+ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
10
+ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ /** @deprecated In feature code use `ModalContent` (`@kortix/ui/modal`). */
12
+ declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
13
+ variant?: "default" | "transparent" | null | undefined;
14
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
15
+ hideCloseButton?: boolean;
16
+ showOverlay?: boolean;
17
+ overlayClassName?: string;
18
+ } & React.RefAttributes<HTMLDivElement>>;
19
+ declare const DialogHeader: {
20
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
21
+ displayName: string;
22
+ };
23
+ declare const DialogFooter: {
24
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
25
+ displayName: string;
26
+ };
27
+ declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
28
+ declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
29
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import * as React from 'react';
4
+ import { Close } from '../../icons/close.js';
5
+ import { cn } from '../../lib/utils.js';
6
+ import { useUiStrings } from '../../providers/ui-provider.js';
7
+ import { dialogContentZ, DialogDepthProvider, dialogOverlayZ, useDialogDepth, useDialogRootLayer, } from '../../lib/z-stack.js';
8
+ import { cva } from 'class-variance-authority';
9
+ import { buttonVariants } from './button.js';
10
+ import { triggerVariants } from './trigger-variants.js';
11
+ /** @deprecated In feature code use `Modal` (`@kortix/ui/modal`). `Dialog` is the primitive other components build on. */
12
+ const Dialog = ({ open, defaultOpen, onOpenChange, ...props }) => {
13
+ const layer = useDialogRootLayer({ open, defaultOpen, onOpenChange });
14
+ return (_jsx(DialogDepthProvider, { depth: layer.depth, children: _jsx(DialogPrimitive.Root, { ...props, open: layer.open, onOpenChange: layer.onOpenChange }) }));
15
+ };
16
+ const DialogTrigger = ({ className, variant, size, asChild, ...props }) => (_jsx(DialogPrimitive.Trigger, { asChild: asChild,
17
+ // With `asChild` the child owns its styling — merging ours would double it.
18
+ className: asChild ? className : cn(triggerVariants({ variant, size }), className), ...props }));
19
+ const DialogPortal = DialogPrimitive.Portal;
20
+ const DialogClose = DialogPrimitive.Close;
21
+ const DialogOverlay = React.forwardRef(({ className, style, ...props }, ref) => {
22
+ const depth = useDialogDepth();
23
+ return (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 bg-black/65 backdrop-blur-xs duration-200', className), style: { zIndex: dialogOverlayZ(depth), ...style }, ...props }));
24
+ });
25
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
26
+ const DialogVariants = cva(cn('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 border p-5 shadow-lg duration-200 sm:max-w-lg sm:rounded-lg'), {
27
+ variants: {
28
+ variant: {
29
+ default: 'bg-sidebar border-muted/60',
30
+ transparent: 'bg-transparent border-none p-0',
31
+ },
32
+ },
33
+ defaultVariants: {
34
+ variant: 'transparent',
35
+ },
36
+ });
37
+ /** @deprecated In feature code use `ModalContent` (`@kortix/ui/modal`). */
38
+ const DialogContent = React.forwardRef(({ className, children, hideCloseButton = false, showOverlay = true, overlayClassName, style, ...props }, ref) => {
39
+ const depth = useDialogDepth();
40
+ const strings = useUiStrings();
41
+ return (_jsxs(DialogPortal, { children: [showOverlay && _jsx(DialogOverlay, { className: overlayClassName }), _jsxs(DialogPrimitive.Content, { ref: ref, className: cn(DialogVariants({ variant: 'default' }), className), style: { zIndex: dialogContentZ(depth), ...style }, ...props, children: [children, !hideCloseButton && (_jsxs(DialogPrimitive.Close, { className: cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'absolute top-3 right-3'), children: [_jsx(Close, { className: "h-4 w-4" }), _jsx("span", { className: "sr-only", children: strings.close })] }))] })] }));
42
+ });
43
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
44
+ const DialogHeader = ({ className, ...props }) => (_jsx("div", { className: cn('flex flex-col space-y-1.5 text-center sm:text-left', className), ...props }));
45
+ DialogHeader.displayName = 'DialogHeader';
46
+ const DialogFooter = ({ className, ...props }) => (_jsx("div", { className: cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className), ...props }));
47
+ DialogFooter.displayName = 'DialogFooter';
48
+ const DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn('text-lg leading-none font-semibold tracking-tight', className), ...props })));
49
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
50
+ const DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn('text-muted-foreground text-sm', className), ...props })));
51
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
52
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
@@ -0,0 +1,121 @@
1
+ import { Transition, Variant } from 'motion/react';
2
+ import * as React from 'react';
3
+ export type DisclosureContextType = {
4
+ open: boolean;
5
+ toggle: () => void;
6
+ /**
7
+ * Minted once per disclosure so the trigger can point `aria-controls` at the
8
+ * region it expands. `DisclosureContent` stamps the same id on its element —
9
+ * a locally-minted id there could not be reached by the trigger, which is why
10
+ * the attribute was missing entirely.
11
+ */
12
+ contentId: string;
13
+ variants?: {
14
+ expanded: Variant;
15
+ collapsed: Variant;
16
+ };
17
+ };
18
+ /**
19
+ * What activating the trigger should do. Extracted as a pure function so the
20
+ * contract has something to test: `apps/web` has no browser test harness (only
21
+ * `renderToStaticMarkup`), so a click cannot be simulated, and this is the exact
22
+ * decision that was wrong before.
23
+ *
24
+ * `nextOpen` negates the value the disclosure is CURRENTLY RENDERING. The old
25
+ * implementation negated a private copy of it instead, which is how a click
26
+ * could resolve to the state the disclosure was already in and appear to do
27
+ * nothing at all.
28
+ */
29
+ export declare function resolveDisclosureToggle(state: {
30
+ open: boolean;
31
+ isControlled: boolean;
32
+ }): {
33
+ nextOpen: boolean;
34
+ /** Only an uncontrolled disclosure owns state. A controlled one holds none —
35
+ * keeping a copy is what produced the two-sources-of-truth bug. */
36
+ writesInternalState: boolean;
37
+ };
38
+ export type DisclosureProviderProps = {
39
+ children: React.ReactNode;
40
+ /** Controlled. Omit entirely (not `false`) for an uncontrolled disclosure. */
41
+ open?: boolean;
42
+ /** Uncontrolled starting value. Ignored when `open` is provided. */
43
+ defaultOpen?: boolean;
44
+ onOpenChange?: (open: boolean) => void;
45
+ variants?: {
46
+ expanded: Variant;
47
+ collapsed: Variant;
48
+ };
49
+ };
50
+ /**
51
+ * Controlled OR uncontrolled, with exactly one source of truth for `open` —
52
+ * the same contract every Radix primitive in this codebase uses.
53
+ *
54
+ * This replaces a mirrored-state design that copied `open` into internal state
55
+ * and reconciled the two in a `useEffect`. That shape produced the reported
56
+ * "click does nothing, then it opens by itself" flakiness through four separate
57
+ * defects, all of which are structural rather than incidental:
58
+ *
59
+ * 1. `toggle` computed `!internalCopy`, not `!open`. Any moment the copy and
60
+ * the prop disagreed, a click moved the disclosure the wrong way — or
61
+ * landed on the value it already had, so nothing visibly happened.
62
+ * 2. The prop → copy sync ran in a PASSIVE effect, i.e. after paint. A
63
+ * prop-driven open animated a frame late and looked spontaneous, and in an
64
+ * exclusive accordion (session-scope-control.tsx) both sections were open
65
+ * together for that frame.
66
+ * 3. `onOpenChange` was called from inside the `setState` updater. React
67
+ * requires updaters to be pure and is free to invoke them more than once;
68
+ * a parent whose handler toggles (`onOpenChange={() => toggleThing()}` —
69
+ * what both session lists pass) then nets to zero and never moves.
70
+ * 4. `open` defaulted to `false`, so "controlled and closed" and "uncontrolled"
71
+ * were indistinguishable and no caller could opt out of being controlled.
72
+ *
73
+ * Here `open` is read straight from whichever source owns it, so a controlled
74
+ * parent's change lands in the same commit as its own render, and `toggle`
75
+ * always derives from the value actually on screen.
76
+ */
77
+ declare function DisclosureProvider({ children, open: openProp, defaultOpen, onOpenChange, variants, }: DisclosureProviderProps): React.JSX.Element;
78
+ export type DisclosureProps = {
79
+ /**
80
+ * Controlled value. Pass it WITH `onOpenChange`, or the disclosure is frozen
81
+ * — there is no internal copy to fall back on any more, by design.
82
+ * For "starts open, then the user decides", use `defaultOpen`.
83
+ */
84
+ open?: boolean;
85
+ /** Uncontrolled starting value. Ignored when `open` is provided. */
86
+ defaultOpen?: boolean;
87
+ onOpenChange?: (open: boolean) => void;
88
+ children: React.ReactNode;
89
+ className?: string;
90
+ variants?: {
91
+ expanded: Variant;
92
+ collapsed: Variant;
93
+ };
94
+ transition?: Transition;
95
+ variant?: 'default' | 'outline';
96
+ };
97
+ export declare function Disclosure({ open: openProp, defaultOpen, onOpenChange, children, className, transition, variants, variant, }: DisclosureProps): React.JSX.Element;
98
+ export declare function DisclosureTrigger({ children, className, variant, }: {
99
+ children: React.ReactNode;
100
+ className?: string;
101
+ variant?: 'default' | 'outline';
102
+ }): React.JSX.Element;
103
+ export declare function DisclosureContent({ children, className, contentClassName, variant, }: {
104
+ children: React.ReactNode;
105
+ className?: string;
106
+ contentClassName?: string;
107
+ variant?: 'default' | 'outline';
108
+ }): React.JSX.Element;
109
+ export type DisclosureBodyProps = {
110
+ children: React.ReactNode;
111
+ className?: string;
112
+ };
113
+ export declare function DisclosureBody({ children, className }: DisclosureBodyProps): React.JSX.Element;
114
+ declare const _default: {
115
+ Disclosure: typeof Disclosure;
116
+ DisclosureBody: typeof DisclosureBody;
117
+ DisclosureProvider: typeof DisclosureProvider;
118
+ DisclosureTrigger: typeof DisclosureTrigger;
119
+ DisclosureContent: typeof DisclosureContent;
120
+ };
121
+ export default _default;
@@ -0,0 +1,138 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { cn } from '../../lib/utils.js';
4
+ import { AnimatePresence, m, MotionConfig } from 'motion/react';
5
+ import * as React from 'react';
6
+ import { createContext, useCallback, useContext, useId, useMemo, useState } from 'react';
7
+ const DisclosureContext = createContext(undefined);
8
+ /**
9
+ * What activating the trigger should do. Extracted as a pure function so the
10
+ * contract has something to test: `apps/web` has no browser test harness (only
11
+ * `renderToStaticMarkup`), so a click cannot be simulated, and this is the exact
12
+ * decision that was wrong before.
13
+ *
14
+ * `nextOpen` negates the value the disclosure is CURRENTLY RENDERING. The old
15
+ * implementation negated a private copy of it instead, which is how a click
16
+ * could resolve to the state the disclosure was already in and appear to do
17
+ * nothing at all.
18
+ */
19
+ export function resolveDisclosureToggle(state) {
20
+ return { nextOpen: !state.open, writesInternalState: !state.isControlled };
21
+ }
22
+ /**
23
+ * Controlled OR uncontrolled, with exactly one source of truth for `open` —
24
+ * the same contract every Radix primitive in this codebase uses.
25
+ *
26
+ * This replaces a mirrored-state design that copied `open` into internal state
27
+ * and reconciled the two in a `useEffect`. That shape produced the reported
28
+ * "click does nothing, then it opens by itself" flakiness through four separate
29
+ * defects, all of which are structural rather than incidental:
30
+ *
31
+ * 1. `toggle` computed `!internalCopy`, not `!open`. Any moment the copy and
32
+ * the prop disagreed, a click moved the disclosure the wrong way — or
33
+ * landed on the value it already had, so nothing visibly happened.
34
+ * 2. The prop → copy sync ran in a PASSIVE effect, i.e. after paint. A
35
+ * prop-driven open animated a frame late and looked spontaneous, and in an
36
+ * exclusive accordion (session-scope-control.tsx) both sections were open
37
+ * together for that frame.
38
+ * 3. `onOpenChange` was called from inside the `setState` updater. React
39
+ * requires updaters to be pure and is free to invoke them more than once;
40
+ * a parent whose handler toggles (`onOpenChange={() => toggleThing()}` —
41
+ * what both session lists pass) then nets to zero and never moves.
42
+ * 4. `open` defaulted to `false`, so "controlled and closed" and "uncontrolled"
43
+ * were indistinguishable and no caller could opt out of being controlled.
44
+ *
45
+ * Here `open` is read straight from whichever source owns it, so a controlled
46
+ * parent's change lands in the same commit as its own render, and `toggle`
47
+ * always derives from the value actually on screen.
48
+ */
49
+ function DisclosureProvider({ children, open: openProp, defaultOpen = false, onOpenChange, variants, }) {
50
+ const isControlled = openProp !== undefined;
51
+ const contentId = useId();
52
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
53
+ const open = isControlled ? openProp : uncontrolledOpen;
54
+ const toggle = useCallback(() => {
55
+ const { nextOpen, writesInternalState } = resolveDisclosureToggle({ open, isControlled });
56
+ if (writesInternalState)
57
+ setUncontrolledOpen(nextOpen);
58
+ // In the event handler, once — never inside a state updater.
59
+ onOpenChange?.(nextOpen);
60
+ }, [open, isControlled, onOpenChange]);
61
+ /**
62
+ * A fresh object here re-rendered every `useDisclosure()` consumer on every
63
+ * render of this provider, whether or not `open` had changed — and a session
64
+ * transcript nests two to three disclosures per tool row (the chain step, the
65
+ * tool's own collapsible, sometimes a group), so the churn multiplied by every
66
+ * row on screen.
67
+ */
68
+ const value = useMemo(() => ({ open, toggle, contentId, variants }), [open, toggle, contentId, variants]);
69
+ return _jsx(DisclosureContext.Provider, { value: value, children: children });
70
+ }
71
+ function useDisclosure() {
72
+ const context = useContext(DisclosureContext);
73
+ if (!context) {
74
+ throw new Error('useDisclosure must be used within a DisclosureProvider');
75
+ }
76
+ return context;
77
+ }
78
+ function DisclosureRoot({ className, children, }) {
79
+ const { open } = useDisclosure();
80
+ return (_jsx("div", { className: className, "data-state": open ? 'open' : 'closed', children: children }));
81
+ }
82
+ export function Disclosure({ open: openProp, defaultOpen, onOpenChange, children, className, transition, variants, variant = 'default', }) {
83
+ return (_jsx(MotionConfig, { transition: transition, children: _jsx(DisclosureProvider, { open: openProp, defaultOpen: defaultOpen, onOpenChange: onOpenChange, variants: variants, children: _jsxs(DisclosureRoot, { className: cn(variant === 'outline' && 'group border-border w-full rounded-md border shadow-none', className), children: [React.Children.toArray(children)[0], React.Children.toArray(children)[1]] }) }) }));
84
+ }
85
+ export function DisclosureTrigger({ children, className, variant = 'default', }) {
86
+ const { toggle, open, contentId } = useDisclosure();
87
+ return (_jsx(_Fragment, { children: React.Children.map(children, (child) => {
88
+ if (!React.isValidElement(child))
89
+ return child;
90
+ const typedChild = child;
91
+ const childClassName = typedChild.props.className;
92
+ return React.cloneElement(typedChild, {
93
+ onClick: toggle,
94
+ role: 'button',
95
+ 'aria-expanded': open,
96
+ // The region is unmounted while collapsed, so only promise an id that
97
+ // is actually in the document.
98
+ 'aria-controls': open ? contentId : undefined,
99
+ tabIndex: 0,
100
+ onKeyDown: (e) => {
101
+ if (e.key === 'Enter' || e.key === ' ') {
102
+ e.preventDefault();
103
+ toggle();
104
+ }
105
+ },
106
+ className: cn(className, 'select-none', childClassName, variant === 'outline' &&
107
+ 'group-data-[state=open]:rounded-b-none group-data-[state=open]:border-b-0'),
108
+ });
109
+ }) }));
110
+ }
111
+ export function DisclosureContent({ children, className, contentClassName, variant = 'default', }) {
112
+ const { open, variants, contentId } = useDisclosure();
113
+ const BASE_VARIANTS = {
114
+ expanded: {
115
+ height: 'auto',
116
+ opacity: 1,
117
+ },
118
+ collapsed: {
119
+ height: 0,
120
+ opacity: 0,
121
+ },
122
+ };
123
+ const combinedVariants = {
124
+ expanded: { ...BASE_VARIANTS.expanded, ...variants?.expanded },
125
+ collapsed: { ...BASE_VARIANTS.collapsed, ...variants?.collapsed },
126
+ };
127
+ return (_jsx("div", { className: cn('overflow-hidden', variant === 'outline' && 'group-data-[state=open]:rounded-b-md', className), children: _jsx(AnimatePresence, { initial: false, children: open && (_jsx(m.div, { id: contentId, initial: "collapsed", animate: "expanded", exit: "collapsed", variants: combinedVariants, className: contentClassName, children: children })) }) }));
128
+ }
129
+ export function DisclosureBody({ children, className }) {
130
+ return _jsx("div", { className: cn('p-3 pt-0', className), children: children });
131
+ }
132
+ export default {
133
+ Disclosure,
134
+ DisclosureBody,
135
+ DisclosureProvider,
136
+ DisclosureTrigger,
137
+ DisclosureContent,
138
+ };
@@ -0,0 +1,4 @@
1
+ export declare const Dotm3x3_10: {
2
+ ({ pattern, dotShape, animated, hoverAnimated, speed, ...rest }: import("../../../lib/dotmatrix-core.js").DotMatrixCommonProps): import("react").JSX.Element;
3
+ displayName: string;
4
+ };
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { createDotm3x3Component, isCenterCell3, outerRingClockwise3NormFromIndex, outerRingClockwise3OrderValue, wave3PathOpacityFromNorm, } from '../../../lib/dotmatrix-core.js';
3
+ const animationResolver = ({ isActive, index, row, col, reducedMotion, phase, }) => {
4
+ if (!isActive) {
5
+ return { className: 'dmx-inactive' };
6
+ }
7
+ if (isCenterCell3(row, col)) {
8
+ if (reducedMotion || phase === 'idle') {
9
+ return { style: { opacity: 0.2 } };
10
+ }
11
+ return { className: 'dmx-core-pulse-3' };
12
+ }
13
+ const order = outerRingClockwise3OrderValue(index);
14
+ const path = outerRingClockwise3NormFromIndex(index);
15
+ const style = {
16
+ '--dmx-frame-order': order,
17
+ '--dmx-path': path,
18
+ };
19
+ if (reducedMotion || phase === 'idle') {
20
+ return {
21
+ style: {
22
+ ...style,
23
+ opacity: wave3PathOpacityFromNorm(path),
24
+ },
25
+ };
26
+ }
27
+ return { className: 'dmx-frame-chase-3', style };
28
+ };
29
+ export const Dotm3x3_10 = createDotm3x3Component('Dotm3x3_10', animationResolver, 1.75);
@@ -0,0 +1,4 @@
1
+ export declare const Dotm3x3_12: {
2
+ ({ pattern, dotShape, animated, hoverAnimated, speed, ...rest }: import("../../../lib/dotmatrix-core.js").DotMatrixCommonProps): import("react").JSX.Element;
3
+ displayName: string;
4
+ };
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { createDotm3x3Component } from '../../../lib/dotmatrix-core.js';
3
+ const animationResolver = ({ isActive, distanceFromCenter, reducedMotion, phase, }) => {
4
+ if (!isActive) {
5
+ return { className: 'dmx-inactive' };
6
+ }
7
+ const ring = Math.max(0, Math.min(2, Math.round(distanceFromCenter)));
8
+ const style = { '--dmx-distance': distanceFromCenter };
9
+ if (reducedMotion || phase === 'idle') {
10
+ return {
11
+ style: {
12
+ ...style,
13
+ opacity: 0.06 + (1 - ring / 2) * 0.82,
14
+ },
15
+ };
16
+ }
17
+ return { className: 'dmx-distance-ripple-3', style };
18
+ };
19
+ export const Dotm3x3_12 = createDotm3x3Component('Dotm3x3_12', animationResolver, 1.75);
@@ -0,0 +1,4 @@
1
+ export declare const Dotm3x3_13: {
2
+ ({ pattern, dotShape, animated, hoverAnimated, speed, ...rest }: import("../../../lib/dotmatrix-core.js").DotMatrixCommonProps): import("react").JSX.Element;
3
+ displayName: string;
4
+ };