@hanzo/ui 5.3.35 → 5.3.38

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 (1264) hide show
  1. package/dist/3d/button.js +1 -297
  2. package/dist/3d/button.mjs +1 -272
  3. package/dist/3d/card.js +1 -233
  4. package/dist/3d/card.mjs +1 -206
  5. package/dist/3d/carousel.js +1 -370
  6. package/dist/3d/carousel.mjs +1 -343
  7. package/dist/3d/grid.js +1 -361
  8. package/dist/3d/grid.mjs +1 -336
  9. package/dist/3d/index.js +1 -1517
  10. package/dist/3d/index.mjs +1 -1471
  11. package/dist/3d/marquee.js +1 -351
  12. package/dist/3d/marquee.mjs +1 -326
  13. package/dist/3d/pin.js +1 -45
  14. package/dist/3d/pin.mjs +1 -23
  15. package/dist/accordion.js +1 -79
  16. package/dist/accordion.mjs +1 -54
  17. package/dist/alert-dialog.js +1 -224
  18. package/dist/alert-dialog.mjs +1 -191
  19. package/dist/alert.js +1 -97
  20. package/dist/alert.mjs +1 -91
  21. package/dist/animation/animated-background.js +1 -423
  22. package/dist/animation/animated-background.mjs +1 -417
  23. package/dist/animation/animated-beam.js +1 -118
  24. package/dist/animation/animated-beam.mjs +1 -96
  25. package/dist/animation/animated-cursor.js +1 -274
  26. package/dist/animation/animated-cursor.mjs +1 -269
  27. package/dist/animation/animated-icon.js +2 -356
  28. package/dist/animation/animated-icon.mjs +2 -350
  29. package/dist/animation/animated-list.js +1 -338
  30. package/dist/animation/animated-list.mjs +1 -332
  31. package/dist/animation/animated-number.js +1 -282
  32. package/dist/animation/animated-number.mjs +1 -276
  33. package/dist/animation/animated-testimonials.js +1 -96
  34. package/dist/animation/animated-testimonials.mjs +1 -74
  35. package/dist/animation/animated-tooltip.js +1 -66
  36. package/dist/animation/animated-tooltip.mjs +1 -44
  37. package/dist/animation/apple-cards-carousel.js +1 -307
  38. package/dist/animation/apple-cards-carousel.mjs +1 -284
  39. package/dist/animation/apple-hello-effect.js +1 -59
  40. package/dist/animation/apple-hello-effect.mjs +1 -37
  41. package/dist/animation/index.js +2 -1951
  42. package/dist/animation/index.mjs +2 -1920
  43. package/dist/avatar.js +1 -70
  44. package/dist/avatar.mjs +1 -46
  45. package/dist/badge.js +1 -60
  46. package/dist/badge.mjs +1 -54
  47. package/dist/blocks/index.js +2 -1684
  48. package/dist/blocks/index.mjs +2 -1645
  49. package/dist/breadcrumb.js +1 -106
  50. package/dist/breadcrumb.mjs +1 -98
  51. package/dist/calendar-ext/index.js +1 -207
  52. package/dist/calendar-ext/index.mjs +1 -169
  53. package/dist/calendar.js +1 -193
  54. package/dist/calendar.mjs +1 -168
  55. package/dist/carousel.js +1 -282
  56. package/dist/carousel.mjs +1 -253
  57. package/dist/charts/index.js +6 -5840
  58. package/dist/charts/index.mjs +6 -5749
  59. package/dist/checkbox.js +1 -59
  60. package/dist/checkbox.mjs +1 -34
  61. package/dist/code/block.js +2 -225
  62. package/dist/code/block.mjs +2 -202
  63. package/dist/code/compare.js +5 -444
  64. package/dist/code/compare.mjs +5 -421
  65. package/dist/code/diff.js +12 -429
  66. package/dist/code/diff.mjs +11 -405
  67. package/dist/code/editor.js +1 -242
  68. package/dist/code/editor.mjs +1 -217
  69. package/dist/code/explorer.js +1 -290
  70. package/dist/code/explorer.mjs +1 -267
  71. package/dist/code/index.js +26 -2514
  72. package/dist/code/index.mjs +24 -2471
  73. package/dist/code/preview.js +6 -363
  74. package/dist/code/preview.mjs +6 -340
  75. package/dist/code/snippet.js +2 -273
  76. package/dist/code/snippet.mjs +2 -249
  77. package/dist/code/tabs.js +1 -74
  78. package/dist/code/tabs.mjs +1 -52
  79. package/dist/code/terminal.js +3 -436
  80. package/dist/code/terminal.mjs +3 -413
  81. package/dist/collapsible.js +1 -32
  82. package/dist/collapsible.mjs +1 -8
  83. package/dist/command.js +1 -282
  84. package/dist/command.mjs +1 -251
  85. package/dist/context-menu.js +1 -206
  86. package/dist/context-menu.mjs +1 -170
  87. package/dist/desktop/hooks.js +1 -223
  88. package/dist/desktop/hooks.mjs +1 -198
  89. package/dist/desktop/index.js +1 -685
  90. package/dist/desktop/index.mjs +1 -657
  91. package/dist/desktop/spotlight.js +1 -260
  92. package/dist/desktop/spotlight.mjs +1 -235
  93. package/dist/desktop/window.js +1 -273
  94. package/dist/desktop/window.mjs +1 -247
  95. package/dist/device/index.js +1 -2
  96. package/dist/device/index.mjs +0 -1
  97. package/dist/dialog.js +1 -245
  98. package/dist/dialog.mjs +1 -213
  99. package/dist/dock/basic.js +1 -173
  100. package/dist/dock/basic.mjs +1 -150
  101. package/dist/dock/index.js +1 -647
  102. package/dist/dock/index.mjs +1 -620
  103. package/dist/dock/limelight-nav.js +1 -314
  104. package/dist/dock/limelight-nav.mjs +1 -293
  105. package/dist/dock/macos.js +1 -140
  106. package/dist/dock/macos.mjs +1 -117
  107. package/dist/dock/menu.js +1 -69
  108. package/dist/dock/menu.mjs +1 -47
  109. package/dist/dock/message.js +1 -148
  110. package/dist/dock/message.mjs +1 -126
  111. package/dist/drawer.js +1 -114
  112. package/dist/drawer.mjs +1 -102
  113. package/dist/dropdown-menu.js +1 -201
  114. package/dist/dropdown-menu.mjs +1 -165
  115. package/dist/finance/AdvancedChart.js +2 -47
  116. package/dist/finance/AdvancedChart.mjs +2 -45
  117. package/dist/finance/CompanyProfile.js +2 -47
  118. package/dist/finance/CompanyProfile.mjs +2 -45
  119. package/dist/finance/CryptoScreener.js +2 -44
  120. package/dist/finance/CryptoScreener.mjs +2 -42
  121. package/dist/finance/Financials.js +2 -51
  122. package/dist/finance/Financials.mjs +2 -49
  123. package/dist/finance/ForexScreener.js +2 -45
  124. package/dist/finance/ForexScreener.mjs +2 -43
  125. package/dist/finance/MarketOverview.js +2 -103
  126. package/dist/finance/MarketOverview.mjs +2 -101
  127. package/dist/finance/NewsTimeline.js +2 -43
  128. package/dist/finance/NewsTimeline.mjs +2 -41
  129. package/dist/finance/OrderEntry.js +1 -130
  130. package/dist/finance/OrderEntry.mjs +1 -128
  131. package/dist/finance/OrdersHistory.js +1 -63
  132. package/dist/finance/OrdersHistory.mjs +1 -61
  133. package/dist/finance/PositionsList.js +1 -79
  134. package/dist/finance/PositionsList.mjs +1 -77
  135. package/dist/finance/StockScreener.js +2 -45
  136. package/dist/finance/StockScreener.mjs +2 -43
  137. package/dist/finance/SymbolInfo.js +2 -45
  138. package/dist/finance/SymbolInfo.mjs +2 -43
  139. package/dist/finance/TechnicalAnalysis.js +2 -53
  140. package/dist/finance/TechnicalAnalysis.mjs +2 -51
  141. package/dist/finance/TickerTape.js +2 -55
  142. package/dist/finance/TickerTape.mjs +2 -53
  143. package/dist/finance/TradingPanel.js +1 -190
  144. package/dist/finance/TradingPanel.mjs +1 -188
  145. package/dist/finance/index.js +2 -929
  146. package/dist/finance/index.mjs +2 -913
  147. package/dist/form/index.js +1 -153
  148. package/dist/form/index.mjs +1 -123
  149. package/dist/form.js +1 -171
  150. package/dist/form.mjs +1 -141
  151. package/dist/hover-card.js +1 -57
  152. package/dist/hover-card.mjs +1 -33
  153. package/dist/index.js +192 -9618
  154. package/dist/index.mjs +192 -9202
  155. package/dist/input-otp.js +1 -78
  156. package/dist/input-otp.mjs +1 -53
  157. package/dist/kanban/index.js +1 -593
  158. package/dist/kanban/index.mjs +1 -571
  159. package/dist/lib/utils.js +1 -28
  160. package/dist/lib/utils.mjs +1 -24
  161. package/dist/mermaid/index.js +1 -280
  162. package/dist/mermaid/index.mjs +1 -253
  163. package/dist/models/index.js +35 -0
  164. package/dist/models/index.mjs +35 -0
  165. package/dist/navigation/index.js +2 -97
  166. package/dist/navigation/index.mjs +2 -78
  167. package/dist/navigation-menu.js +1 -148
  168. package/dist/navigation-menu.mjs +1 -115
  169. package/dist/pattern/grid-pattern.js +3 -325
  170. package/dist/pattern/grid-pattern.mjs +3 -302
  171. package/dist/pattern/index.js +3 -325
  172. package/dist/pattern/index.mjs +3 -302
  173. package/dist/popover.js +1 -62
  174. package/dist/popover.mjs +1 -36
  175. package/dist/progress.js +1 -61
  176. package/dist/progress.mjs +1 -36
  177. package/dist/project/gantt.js +1 -64
  178. package/dist/project/gantt.mjs +1 -42
  179. package/dist/project/index.js +1 -635
  180. package/dist/project/index.mjs +1 -610
  181. package/dist/project/kanban.js +1 -596
  182. package/dist/project/kanban.mjs +1 -571
  183. package/dist/project/list.js +1 -34
  184. package/dist/project/list.mjs +1 -11
  185. package/dist/radio-group.js +1 -67
  186. package/dist/radio-group.mjs +1 -44
  187. package/dist/resizable.js +1 -71
  188. package/dist/resizable.mjs +1 -47
  189. package/dist/scroll-area.js +1 -88
  190. package/dist/scroll-area.mjs +1 -65
  191. package/dist/select.js +1 -139
  192. package/dist/select.mjs +1 -110
  193. package/dist/separator.js +1 -58
  194. package/dist/separator.mjs +1 -33
  195. package/dist/sheet.js +1 -147
  196. package/dist/sheet.mjs +1 -116
  197. package/dist/skeleton.js +1 -31
  198. package/dist/skeleton.mjs +1 -26
  199. package/dist/slider.js +1 -98
  200. package/dist/slider.mjs +1 -72
  201. package/dist/sonner.js +1 -33
  202. package/dist/sonner.mjs +1 -28
  203. package/dist/spline/index.js +1 -210
  204. package/dist/spline/index.mjs +1 -201
  205. package/dist/spline/media-stack.js +1 -192
  206. package/dist/spline/media-stack.mjs +1 -184
  207. package/dist/spline/player.js +1 -36
  208. package/dist/spline/player.mjs +1 -30
  209. package/dist/switch.js +1 -61
  210. package/dist/switch.mjs +1 -36
  211. package/dist/table.js +1 -109
  212. package/dist/table.mjs +1 -100
  213. package/dist/tabs.js +1 -127
  214. package/dist/tabs.mjs +1 -101
  215. package/dist/tailwind/index.js +1 -2
  216. package/dist/tailwind/index.mjs +1 -2011
  217. package/dist/textarea.js +1 -77
  218. package/dist/textarea.mjs +1 -55
  219. package/dist/toggle-group.js +1 -117
  220. package/dist/toggle-group.mjs +1 -92
  221. package/dist/toggle.js +1 -70
  222. package/dist/toggle.mjs +1 -47
  223. package/dist/tooltip.js +1 -66
  224. package/dist/tooltip.mjs +1 -39
  225. package/dist/types/index.js +1 -2
  226. package/dist/types/index.mjs +1 -51
  227. package/dist/ui/announcement.js +1 -133
  228. package/dist/ui/announcement.mjs +1 -111
  229. package/dist/ui/avatar-group.js +1 -87
  230. package/dist/ui/avatar-group.mjs +1 -64
  231. package/dist/ui/banner.js +1 -84
  232. package/dist/ui/banner.mjs +1 -61
  233. package/dist/ui/cursor.js +1 -77
  234. package/dist/ui/cursor.mjs +1 -55
  235. package/dist/ui/index.js +1 -494
  236. package/dist/ui/index.mjs +1 -461
  237. package/dist/ui/marquee.js +1 -73
  238. package/dist/ui/marquee.mjs +1 -51
  239. package/dist/ui/pill.js +1 -84
  240. package/dist/ui/pill.mjs +1 -61
  241. package/dist/ui/spinner.js +1 -27
  242. package/dist/ui/spinner.mjs +1 -25
  243. package/dist/ui/tags.js +1 -116
  244. package/dist/ui/tags.mjs +1 -94
  245. package/dist/ui/ticker.js +1 -72
  246. package/dist/ui/ticker.mjs +1 -50
  247. package/dist/util/index.js +1 -80
  248. package/dist/util/index.mjs +1 -404
  249. package/package.json +23 -10
  250. package/dist/assets/ai-icons.d.ts +0 -28
  251. package/dist/assets/ai-icons.d.ts.map +0 -1
  252. package/dist/assets/ai-icons.js +0 -60
  253. package/dist/assets/crypto.d.ts +0 -7
  254. package/dist/assets/crypto.d.ts.map +0 -1
  255. package/dist/assets/crypto.js +0 -4
  256. package/dist/assets/file-type-icon.d.ts +0 -7
  257. package/dist/assets/file-type-icon.d.ts.map +0 -1
  258. package/dist/assets/file-type-icon.js +0 -36
  259. package/dist/assets/file.d.ts +0 -5
  260. package/dist/assets/file.d.ts.map +0 -1
  261. package/dist/assets/file.js +0 -29
  262. package/dist/assets/general.d.ts +0 -220
  263. package/dist/assets/general.d.ts.map +0 -1
  264. package/dist/assets/general.js +0 -136
  265. package/dist/assets/hanzo-logo.d.ts +0 -4
  266. package/dist/assets/hanzo-logo.d.ts.map +0 -1
  267. package/dist/assets/hanzo-logo.js +0 -3
  268. package/dist/assets/index.d.ts +0 -7
  269. package/dist/assets/index.d.ts.map +0 -1
  270. package/dist/assets/index.js +0 -23
  271. package/dist/assets/llm-provider.d.ts +0 -64
  272. package/dist/assets/llm-provider.d.ts.map +0 -1
  273. package/dist/assets/llm-provider.js +0 -90
  274. package/dist/components/cal-embed.d.ts +0 -11
  275. package/dist/components/cal-embed.d.ts.map +0 -1
  276. package/dist/components/cal-embed.js +0 -38
  277. package/dist/components/index.d.ts +0 -3
  278. package/dist/components/index.d.ts.map +0 -1
  279. package/dist/components/index.js +0 -7
  280. package/dist/frameworks/core/index.d.ts +0 -4
  281. package/dist/frameworks/core/index.d.ts.map +0 -1
  282. package/dist/frameworks/core/index.js +0 -5
  283. package/dist/frameworks/core/styles.d.ts +0 -12
  284. package/dist/frameworks/core/styles.d.ts.map +0 -1
  285. package/dist/frameworks/core/styles.js +0 -11
  286. package/dist/frameworks/core/types.d.ts +0 -17
  287. package/dist/frameworks/core/types.d.ts.map +0 -1
  288. package/dist/frameworks/core/types.js +0 -11
  289. package/dist/frameworks/core/utils/index.d.ts +0 -19
  290. package/dist/frameworks/core/utils/index.d.ts.map +0 -1
  291. package/dist/frameworks/core/utils/index.js +0 -49
  292. package/dist/frameworks/react/components/button.d.ts +0 -8
  293. package/dist/frameworks/react/components/button.d.ts.map +0 -1
  294. package/dist/frameworks/react/components/button.js +0 -8
  295. package/dist/frameworks/react/components/index.d.ts +0 -2
  296. package/dist/frameworks/react/components/index.d.ts.map +0 -1
  297. package/dist/frameworks/react/components/index.js +0 -4
  298. package/dist/frameworks/react/hooks/index.d.ts +0 -2
  299. package/dist/frameworks/react/hooks/index.d.ts.map +0 -1
  300. package/dist/frameworks/react/hooks/index.js +0 -5
  301. package/dist/frameworks/react/index.d.ts +0 -5
  302. package/dist/frameworks/react/index.d.ts.map +0 -1
  303. package/dist/frameworks/react/index.js +0 -7
  304. package/dist/frameworks/react/utils/index.d.ts +0 -2
  305. package/dist/frameworks/react/utils/index.d.ts.map +0 -1
  306. package/dist/frameworks/react/utils/index.js +0 -2
  307. package/dist/frameworks/react-native/components.d.ts +0 -17
  308. package/dist/frameworks/react-native/components.d.ts.map +0 -1
  309. package/dist/frameworks/react-native/components.js +0 -17
  310. package/dist/frameworks/react-native/hooks.d.ts +0 -10
  311. package/dist/frameworks/react-native/hooks.d.ts.map +0 -1
  312. package/dist/frameworks/react-native/hooks.js +0 -9
  313. package/dist/frameworks/react-native/index.d.ts +0 -5
  314. package/dist/frameworks/react-native/index.d.ts.map +0 -1
  315. package/dist/frameworks/react-native/index.js +0 -7
  316. package/dist/frameworks/react-native/utils.d.ts +0 -7
  317. package/dist/frameworks/react-native/utils.d.ts.map +0 -1
  318. package/dist/frameworks/react-native/utils.js +0 -9
  319. package/dist/frameworks/svelte/components.d.ts +0 -15
  320. package/dist/frameworks/svelte/components.d.ts.map +0 -1
  321. package/dist/frameworks/svelte/components.js +0 -16
  322. package/dist/frameworks/svelte/index.d.ts +0 -5
  323. package/dist/frameworks/svelte/index.d.ts.map +0 -1
  324. package/dist/frameworks/svelte/index.js +0 -7
  325. package/dist/frameworks/svelte/stores.d.ts +0 -13
  326. package/dist/frameworks/svelte/stores.d.ts.map +0 -1
  327. package/dist/frameworks/svelte/stores.js +0 -9
  328. package/dist/frameworks/svelte/utils.d.ts +0 -7
  329. package/dist/frameworks/svelte/utils.d.ts.map +0 -1
  330. package/dist/frameworks/svelte/utils.js +0 -8
  331. package/dist/frameworks/vue/components.d.ts +0 -15
  332. package/dist/frameworks/vue/components.d.ts.map +0 -1
  333. package/dist/frameworks/vue/components.js +0 -16
  334. package/dist/frameworks/vue/composables.d.ts +0 -16
  335. package/dist/frameworks/vue/composables.d.ts.map +0 -1
  336. package/dist/frameworks/vue/composables.js +0 -14
  337. package/dist/frameworks/vue/index.d.ts +0 -5
  338. package/dist/frameworks/vue/index.d.ts.map +0 -1
  339. package/dist/frameworks/vue/index.js +0 -7
  340. package/dist/frameworks/vue/utils.d.ts +0 -7
  341. package/dist/frameworks/vue/utils.d.ts.map +0 -1
  342. package/dist/frameworks/vue/utils.js +0 -8
  343. package/dist/helpers/file.d.ts +0 -7
  344. package/dist/helpers/file.d.ts.map +0 -1
  345. package/dist/helpers/file.js +0 -30
  346. package/dist/helpers/memoization.d.ts +0 -9
  347. package/dist/helpers/memoization.d.ts.map +0 -1
  348. package/dist/helpers/memoization.js +0 -24
  349. package/dist/primitives/accordion.d.ts +0 -27
  350. package/dist/primitives/accordion.d.ts.map +0 -1
  351. package/dist/primitives/accordion.js +0 -12
  352. package/dist/primitives/action-button.d.ts +0 -10
  353. package/dist/primitives/action-button.d.ts.map +0 -1
  354. package/dist/primitives/action-button.js +0 -14
  355. package/dist/primitives/alert-dialog.d.ts +0 -57
  356. package/dist/primitives/alert-dialog.d.ts.map +0 -1
  357. package/dist/primitives/alert-dialog.js +0 -25
  358. package/dist/primitives/alert.d.ts +0 -11
  359. package/dist/primitives/alert.d.ts.map +0 -1
  360. package/dist/primitives/alert.js +0 -32
  361. package/dist/primitives/apply-typography.d.ts +0 -8
  362. package/dist/primitives/apply-typography.d.ts.map +0 -1
  363. package/dist/primitives/apply-typography.js +0 -36
  364. package/dist/primitives/aspect-ratio.d.ts +0 -4
  365. package/dist/primitives/aspect-ratio.d.ts.map +0 -1
  366. package/dist/primitives/aspect-ratio.js +0 -4
  367. package/dist/primitives/avatar.d.ts +0 -25
  368. package/dist/primitives/avatar.d.ts.map +0 -1
  369. package/dist/primitives/avatar.js +0 -10
  370. package/dist/primitives/badge.d.ts +0 -11
  371. package/dist/primitives/badge.d.ts.map +0 -1
  372. package/dist/primitives/badge.js +0 -28
  373. package/dist/primitives/breadcrumb.d.ts +0 -51
  374. package/dist/primitives/breadcrumb.d.ts.map +0 -1
  375. package/dist/primitives/breadcrumb.js +0 -22
  376. package/dist/primitives/breakpoint-indicator.d.ts +0 -4
  377. package/dist/primitives/breakpoint-indicator.d.ts.map +0 -1
  378. package/dist/primitives/breakpoint-indicator.js +0 -7
  379. package/dist/primitives/button-group.d.ts +0 -12
  380. package/dist/primitives/button-group.d.ts.map +0 -1
  381. package/dist/primitives/button-group.js +0 -28
  382. package/dist/primitives/button.d.ts +0 -14
  383. package/dist/primitives/button.d.ts.map +0 -1
  384. package/dist/primitives/button.js +0 -41
  385. package/dist/primitives/cal-embed.d.ts +0 -11
  386. package/dist/primitives/cal-embed.d.ts.map +0 -1
  387. package/dist/primitives/cal-embed.js +0 -38
  388. package/dist/primitives/calendar.d.ts +0 -11
  389. package/dist/primitives/calendar.d.ts.map +0 -1
  390. package/dist/primitives/calendar.js +0 -58
  391. package/dist/primitives/card.d.ts +0 -10
  392. package/dist/primitives/card.d.ts.map +0 -1
  393. package/dist/primitives/card.js +0 -24
  394. package/dist/primitives/carousel.d.ts +0 -19
  395. package/dist/primitives/carousel.d.ts.map +0 -1
  396. package/dist/primitives/carousel.js +0 -95
  397. package/dist/primitives/chart.d.ts +0 -41
  398. package/dist/primitives/chart.d.ts.map +0 -1
  399. package/dist/primitives/chart.js +0 -128
  400. package/dist/primitives/charts/area/chart-area-axes.d.ts +0 -3
  401. package/dist/primitives/charts/area/chart-area-axes.d.ts.map +0 -1
  402. package/dist/primitives/charts/area/chart-area-axes.js +0 -31
  403. package/dist/primitives/charts/area/chart-area-default.d.ts +0 -3
  404. package/dist/primitives/charts/area/chart-area-default.d.ts.map +0 -1
  405. package/dist/primitives/charts/area/chart-area-default.js +0 -27
  406. package/dist/primitives/charts/area/chart-area-gradient.d.ts +0 -3
  407. package/dist/primitives/charts/area/chart-area-gradient.d.ts.map +0 -1
  408. package/dist/primitives/charts/area/chart-area-gradient.js +0 -31
  409. package/dist/primitives/charts/area/chart-area-icons.d.ts +0 -3
  410. package/dist/primitives/charts/area/chart-area-icons.d.ts.map +0 -1
  411. package/dist/primitives/charts/area/chart-area-icons.js +0 -33
  412. package/dist/primitives/charts/area/chart-area-interactive.d.ts +0 -3
  413. package/dist/primitives/charts/area/chart-area-interactive.d.ts.map +0 -1
  414. package/dist/primitives/charts/area/chart-area-interactive.js +0 -143
  415. package/dist/primitives/charts/area/chart-area-legend.d.ts +0 -3
  416. package/dist/primitives/charts/area/chart-area-legend.d.ts.map +0 -1
  417. package/dist/primitives/charts/area/chart-area-legend.js +0 -31
  418. package/dist/primitives/charts/area/chart-area-linear.d.ts +0 -3
  419. package/dist/primitives/charts/area/chart-area-linear.d.ts.map +0 -1
  420. package/dist/primitives/charts/area/chart-area-linear.js +0 -27
  421. package/dist/primitives/charts/area/chart-area-stacked-expand.d.ts +0 -3
  422. package/dist/primitives/charts/area/chart-area-stacked-expand.d.ts.map +0 -1
  423. package/dist/primitives/charts/area/chart-area-stacked-expand.js +0 -36
  424. package/dist/primitives/charts/area/chart-area-stacked.d.ts +0 -3
  425. package/dist/primitives/charts/area/chart-area-stacked.d.ts.map +0 -1
  426. package/dist/primitives/charts/area/chart-area-stacked.js +0 -31
  427. package/dist/primitives/charts/area/chart-area-step.d.ts +0 -3
  428. package/dist/primitives/charts/area/chart-area-step.d.ts.map +0 -1
  429. package/dist/primitives/charts/area/chart-area-step.js +0 -28
  430. package/dist/primitives/charts/area/index.d.ts +0 -11
  431. package/dist/primitives/charts/area/index.d.ts.map +0 -1
  432. package/dist/primitives/charts/area/index.js +0 -11
  433. package/dist/primitives/charts/bar/chart-bar-active.d.ts +0 -3
  434. package/dist/primitives/charts/bar/chart-bar-active.d.ts.map +0 -1
  435. package/dist/primitives/charts/bar/chart-bar-active.js +0 -44
  436. package/dist/primitives/charts/bar/chart-bar-default.d.ts +0 -3
  437. package/dist/primitives/charts/bar/chart-bar-default.d.ts.map +0 -1
  438. package/dist/primitives/charts/bar/chart-bar-default.js +0 -24
  439. package/dist/primitives/charts/bar/chart-bar-horizontal.d.ts +0 -3
  440. package/dist/primitives/charts/bar/chart-bar-horizontal.d.ts.map +0 -1
  441. package/dist/primitives/charts/bar/chart-bar-horizontal.js +0 -26
  442. package/dist/primitives/charts/bar/chart-bar-interactive.d.ts +0 -3
  443. package/dist/primitives/charts/bar/chart-bar-interactive.d.ts.map +0 -1
  444. package/dist/primitives/charts/bar/chart-bar-interactive.js +0 -139
  445. package/dist/primitives/charts/bar/chart-bar-label-custom.d.ts +0 -3
  446. package/dist/primitives/charts/bar/chart-bar-label-custom.d.ts.map +0 -1
  447. package/dist/primitives/charts/bar/chart-bar-label-custom.js +0 -33
  448. package/dist/primitives/charts/bar/chart-bar-label.d.ts +0 -3
  449. package/dist/primitives/charts/bar/chart-bar-label.d.ts.map +0 -1
  450. package/dist/primitives/charts/bar/chart-bar-label.js +0 -26
  451. package/dist/primitives/charts/bar/chart-bar-mixed.d.ts +0 -3
  452. package/dist/primitives/charts/bar/chart-bar-mixed.d.ts.map +0 -1
  453. package/dist/primitives/charts/bar/chart-bar-mixed.js +0 -44
  454. package/dist/primitives/charts/bar/chart-bar-multiple.d.ts +0 -3
  455. package/dist/primitives/charts/bar/chart-bar-multiple.d.ts.map +0 -1
  456. package/dist/primitives/charts/bar/chart-bar-multiple.js +0 -28
  457. package/dist/primitives/charts/bar/chart-bar-negative.d.ts +0 -3
  458. package/dist/primitives/charts/bar/chart-bar-negative.d.ts.map +0 -1
  459. package/dist/primitives/charts/bar/chart-bar-negative.js +0 -25
  460. package/dist/primitives/charts/bar/chart-bar-stacked.d.ts +0 -3
  461. package/dist/primitives/charts/bar/chart-bar-stacked.d.ts.map +0 -1
  462. package/dist/primitives/charts/bar/chart-bar-stacked.js +0 -28
  463. package/dist/primitives/charts/bar/index.d.ts +0 -11
  464. package/dist/primitives/charts/bar/index.d.ts.map +0 -1
  465. package/dist/primitives/charts/bar/index.js +0 -11
  466. package/dist/primitives/charts/index.d.ts +0 -8
  467. package/dist/primitives/charts/index.d.ts.map +0 -1
  468. package/dist/primitives/charts/index.js +0 -11
  469. package/dist/primitives/charts/line/chart-line-default.d.ts +0 -3
  470. package/dist/primitives/charts/line/chart-line-default.d.ts.map +0 -1
  471. package/dist/primitives/charts/line/chart-line-default.js +0 -27
  472. package/dist/primitives/charts/line/chart-line-dots-colors.d.ts +0 -3
  473. package/dist/primitives/charts/line/chart-line-dots-colors.d.ts.map +0 -1
  474. package/dist/primitives/charts/line/chart-line-dots-colors.js +0 -49
  475. package/dist/primitives/charts/line/chart-line-dots-custom.d.ts +0 -3
  476. package/dist/primitives/charts/line/chart-line-dots-custom.d.ts.map +0 -1
  477. package/dist/primitives/charts/line/chart-line-dots-custom.js +0 -34
  478. package/dist/primitives/charts/line/chart-line-dots.d.ts +0 -3
  479. package/dist/primitives/charts/line/chart-line-dots.d.ts.map +0 -1
  480. package/dist/primitives/charts/line/chart-line-dots.js +0 -35
  481. package/dist/primitives/charts/line/chart-line-interactive.d.ts +0 -3
  482. package/dist/primitives/charts/line/chart-line-interactive.d.ts.map +0 -1
  483. package/dist/primitives/charts/line/chart-line-interactive.js +0 -139
  484. package/dist/primitives/charts/line/chart-line-label-custom.d.ts +0 -3
  485. package/dist/primitives/charts/line/chart-line-label-custom.d.ts.map +0 -1
  486. package/dist/primitives/charts/line/chart-line-label-custom.js +0 -51
  487. package/dist/primitives/charts/line/chart-line-label.d.ts +0 -3
  488. package/dist/primitives/charts/line/chart-line-label.d.ts.map +0 -1
  489. package/dist/primitives/charts/line/chart-line-label.js +0 -36
  490. package/dist/primitives/charts/line/chart-line-linear.d.ts +0 -3
  491. package/dist/primitives/charts/line/chart-line-linear.d.ts.map +0 -1
  492. package/dist/primitives/charts/line/chart-line-linear.js +0 -27
  493. package/dist/primitives/charts/line/chart-line-multiple.d.ts +0 -3
  494. package/dist/primitives/charts/line/chart-line-multiple.d.ts.map +0 -1
  495. package/dist/primitives/charts/line/chart-line-multiple.js +0 -31
  496. package/dist/primitives/charts/line/chart-line-step.d.ts +0 -3
  497. package/dist/primitives/charts/line/chart-line-step.d.ts.map +0 -1
  498. package/dist/primitives/charts/line/chart-line-step.js +0 -27
  499. package/dist/primitives/charts/line/index.d.ts +0 -11
  500. package/dist/primitives/charts/line/index.d.ts.map +0 -1
  501. package/dist/primitives/charts/line/index.js +0 -11
  502. package/dist/primitives/charts/pie/chart-pie-donut-active.d.ts +0 -3
  503. package/dist/primitives/charts/pie/chart-pie-donut-active.d.ts.map +0 -1
  504. package/dist/primitives/charts/pie/chart-pie-donut-active.js +0 -42
  505. package/dist/primitives/charts/pie/chart-pie-donut-text.d.ts +0 -3
  506. package/dist/primitives/charts/pie/chart-pie-donut-text.d.ts.map +0 -1
  507. package/dist/primitives/charts/pie/chart-pie-donut-text.js +0 -50
  508. package/dist/primitives/charts/pie/chart-pie-donut.d.ts +0 -3
  509. package/dist/primitives/charts/pie/chart-pie-donut.d.ts.map +0 -1
  510. package/dist/primitives/charts/pie/chart-pie-donut.js +0 -42
  511. package/dist/primitives/charts/pie/chart-pie-interactive.d.ts +0 -3
  512. package/dist/primitives/charts/pie/chart-pie-interactive.d.ts.map +0 -1
  513. package/dist/primitives/charts/pie/chart-pie-interactive.js +0 -65
  514. package/dist/primitives/charts/pie/chart-pie-label-custom.d.ts +0 -3
  515. package/dist/primitives/charts/pie/chart-pie-label-custom.d.ts.map +0 -1
  516. package/dist/primitives/charts/pie/chart-pie-label-custom.js +0 -44
  517. package/dist/primitives/charts/pie/chart-pie-label-list.d.ts +0 -3
  518. package/dist/primitives/charts/pie/chart-pie-label-list.d.ts.map +0 -1
  519. package/dist/primitives/charts/pie/chart-pie-label-list.js +0 -42
  520. package/dist/primitives/charts/pie/chart-pie-label.d.ts +0 -3
  521. package/dist/primitives/charts/pie/chart-pie-label.d.ts.map +0 -1
  522. package/dist/primitives/charts/pie/chart-pie-label.js +0 -42
  523. package/dist/primitives/charts/pie/chart-pie-legend.d.ts +0 -3
  524. package/dist/primitives/charts/pie/chart-pie-legend.d.ts.map +0 -1
  525. package/dist/primitives/charts/pie/chart-pie-legend.js +0 -41
  526. package/dist/primitives/charts/pie/chart-pie-separator-none.d.ts +0 -3
  527. package/dist/primitives/charts/pie/chart-pie-separator-none.d.ts.map +0 -1
  528. package/dist/primitives/charts/pie/chart-pie-separator-none.js +0 -42
  529. package/dist/primitives/charts/pie/index.d.ts +0 -10
  530. package/dist/primitives/charts/pie/index.d.ts.map +0 -1
  531. package/dist/primitives/charts/pie/index.js +0 -10
  532. package/dist/primitives/charts/radar/chart-radar-default.d.ts +0 -3
  533. package/dist/primitives/charts/radar/chart-radar-default.d.ts.map +0 -1
  534. package/dist/primitives/charts/radar/chart-radar-default.js +0 -24
  535. package/dist/primitives/charts/radar/chart-radar-dots.d.ts +0 -3
  536. package/dist/primitives/charts/radar/chart-radar-dots.d.ts.map +0 -1
  537. package/dist/primitives/charts/radar/chart-radar-dots.js +0 -27
  538. package/dist/primitives/charts/radar/chart-radar-grid-circle-fill.d.ts +0 -3
  539. package/dist/primitives/charts/radar/chart-radar-grid-circle-fill.d.ts.map +0 -1
  540. package/dist/primitives/charts/radar/chart-radar-grid-circle-fill.js +0 -24
  541. package/dist/primitives/charts/radar/chart-radar-grid-circle-no-lines.d.ts +0 -3
  542. package/dist/primitives/charts/radar/chart-radar-grid-circle-no-lines.d.ts.map +0 -1
  543. package/dist/primitives/charts/radar/chart-radar-grid-circle-no-lines.js +0 -27
  544. package/dist/primitives/charts/radar/chart-radar-grid-circle.d.ts +0 -3
  545. package/dist/primitives/charts/radar/chart-radar-grid-circle.d.ts.map +0 -1
  546. package/dist/primitives/charts/radar/chart-radar-grid-circle.js +0 -27
  547. package/dist/primitives/charts/radar/chart-radar-grid-custom.d.ts +0 -3
  548. package/dist/primitives/charts/radar/chart-radar-grid-custom.d.ts.map +0 -1
  549. package/dist/primitives/charts/radar/chart-radar-grid-custom.js +0 -24
  550. package/dist/primitives/charts/radar/chart-radar-grid-fill.d.ts +0 -3
  551. package/dist/primitives/charts/radar/chart-radar-grid-fill.d.ts.map +0 -1
  552. package/dist/primitives/charts/radar/chart-radar-grid-fill.js +0 -24
  553. package/dist/primitives/charts/radar/chart-radar-grid-none.d.ts +0 -3
  554. package/dist/primitives/charts/radar/chart-radar-grid-none.d.ts.map +0 -1
  555. package/dist/primitives/charts/radar/chart-radar-grid-none.js +0 -27
  556. package/dist/primitives/charts/radar/chart-radar-icons.d.ts +0 -3
  557. package/dist/primitives/charts/radar/chart-radar-icons.d.ts.map +0 -1
  558. package/dist/primitives/charts/radar/chart-radar-icons.js +0 -33
  559. package/dist/primitives/charts/radar/index.d.ts +0 -10
  560. package/dist/primitives/charts/radar/index.d.ts.map +0 -1
  561. package/dist/primitives/charts/radar/index.js +0 -10
  562. package/dist/primitives/charts/radial/chart-radial-grid.d.ts +0 -3
  563. package/dist/primitives/charts/radial/chart-radial-grid.d.ts.map +0 -1
  564. package/dist/primitives/charts/radial/chart-radial-grid.js +0 -42
  565. package/dist/primitives/charts/radial/chart-radial-label.d.ts +0 -3
  566. package/dist/primitives/charts/radial/chart-radial-label.d.ts.map +0 -1
  567. package/dist/primitives/charts/radial/chart-radial-label.js +0 -42
  568. package/dist/primitives/charts/radial/chart-radial-shape.d.ts +0 -3
  569. package/dist/primitives/charts/radial/chart-radial-shape.d.ts.map +0 -1
  570. package/dist/primitives/charts/radial/chart-radial-shape.js +0 -26
  571. package/dist/primitives/charts/radial/chart-radial-simple.d.ts +0 -3
  572. package/dist/primitives/charts/radial/chart-radial-simple.d.ts.map +0 -1
  573. package/dist/primitives/charts/radial/chart-radial-simple.js +0 -42
  574. package/dist/primitives/charts/radial/chart-radial-stacked.d.ts +0 -3
  575. package/dist/primitives/charts/radial/chart-radial-stacked.d.ts.map +0 -1
  576. package/dist/primitives/charts/radial/chart-radial-stacked.js +0 -26
  577. package/dist/primitives/charts/radial/chart-radial-text.d.ts +0 -3
  578. package/dist/primitives/charts/radial/chart-radial-text.d.ts.map +0 -1
  579. package/dist/primitives/charts/radial/chart-radial-text.js +0 -26
  580. package/dist/primitives/charts/radial/index.d.ts +0 -7
  581. package/dist/primitives/charts/radial/index.d.ts.map +0 -1
  582. package/dist/primitives/charts/radial/index.js +0 -7
  583. package/dist/primitives/charts/tooltip/chart-tooltip-advanced.d.ts +0 -3
  584. package/dist/primitives/charts/tooltip/chart-tooltip-advanced.d.ts.map +0 -1
  585. package/dist/primitives/charts/tooltip/chart-tooltip-advanced.js +0 -34
  586. package/dist/primitives/charts/tooltip/chart-tooltip-default.d.ts +0 -5
  587. package/dist/primitives/charts/tooltip/chart-tooltip-default.d.ts.map +0 -1
  588. package/dist/primitives/charts/tooltip/chart-tooltip-default.js +0 -33
  589. package/dist/primitives/charts/tooltip/chart-tooltip-formatter.d.ts +0 -3
  590. package/dist/primitives/charts/tooltip/chart-tooltip-formatter.d.ts.map +0 -1
  591. package/dist/primitives/charts/tooltip/chart-tooltip-formatter.js +0 -32
  592. package/dist/primitives/charts/tooltip/chart-tooltip-icons.d.ts +0 -3
  593. package/dist/primitives/charts/tooltip/chart-tooltip-icons.d.ts.map +0 -1
  594. package/dist/primitives/charts/tooltip/chart-tooltip-icons.js +0 -34
  595. package/dist/primitives/charts/tooltip/chart-tooltip-indicator-line.d.ts +0 -5
  596. package/dist/primitives/charts/tooltip/chart-tooltip-indicator-line.d.ts.map +0 -1
  597. package/dist/primitives/charts/tooltip/chart-tooltip-indicator-line.js +0 -33
  598. package/dist/primitives/charts/tooltip/chart-tooltip-indicator-none.d.ts +0 -3
  599. package/dist/primitives/charts/tooltip/chart-tooltip-indicator-none.d.ts.map +0 -1
  600. package/dist/primitives/charts/tooltip/chart-tooltip-indicator-none.js +0 -31
  601. package/dist/primitives/charts/tooltip/chart-tooltip-label-custom.d.ts +0 -3
  602. package/dist/primitives/charts/tooltip/chart-tooltip-label-custom.d.ts.map +0 -1
  603. package/dist/primitives/charts/tooltip/chart-tooltip-label-custom.js +0 -34
  604. package/dist/primitives/charts/tooltip/chart-tooltip-label-formatter.d.ts +0 -3
  605. package/dist/primitives/charts/tooltip/chart-tooltip-label-formatter.d.ts.map +0 -1
  606. package/dist/primitives/charts/tooltip/chart-tooltip-label-formatter.js +0 -37
  607. package/dist/primitives/charts/tooltip/chart-tooltip-label-none.d.ts +0 -3
  608. package/dist/primitives/charts/tooltip/chart-tooltip-label-none.d.ts.map +0 -1
  609. package/dist/primitives/charts/tooltip/chart-tooltip-label-none.js +0 -31
  610. package/dist/primitives/charts/tooltip/index.d.ts +0 -10
  611. package/dist/primitives/charts/tooltip/index.d.ts.map +0 -1
  612. package/dist/primitives/charts/tooltip/index.js +0 -10
  613. package/dist/primitives/chat/chat-input-area.d.ts +0 -24
  614. package/dist/primitives/chat/chat-input-area.d.ts.map +0 -1
  615. package/dist/primitives/chat/chat-input-area.js +0 -23
  616. package/dist/primitives/chat/chat-input.d.ts +0 -13
  617. package/dist/primitives/chat/chat-input.d.ts.map +0 -1
  618. package/dist/primitives/chat/chat-input.js +0 -33
  619. package/dist/primitives/chat/json-form.d.ts +0 -4
  620. package/dist/primitives/chat/json-form.d.ts.map +0 -1
  621. package/dist/primitives/chat/json-form.js +0 -6
  622. package/dist/primitives/checkbox.d.ts +0 -12
  623. package/dist/primitives/checkbox.d.ts.map +0 -1
  624. package/dist/primitives/checkbox.js +0 -8
  625. package/dist/primitives/collapsible.d.ts +0 -6
  626. package/dist/primitives/collapsible.d.ts.map +0 -1
  627. package/dist/primitives/collapsible.js +0 -5
  628. package/dist/primitives/combobox.d.ts +0 -42
  629. package/dist/primitives/combobox.d.ts.map +0 -1
  630. package/dist/primitives/combobox.js +0 -49
  631. package/dist/primitives/command.d.ts +0 -39
  632. package/dist/primitives/command.d.ts.map +0 -1
  633. package/dist/primitives/command.js +0 -28
  634. package/dist/primitives/context-menu.d.ts +0 -54
  635. package/dist/primitives/context-menu.d.ts.map +0 -1
  636. package/dist/primitives/context-menu.js +0 -32
  637. package/dist/primitives/copy-to-clipboard-icon.d.ts +0 -15
  638. package/dist/primitives/copy-to-clipboard-icon.d.ts.map +0 -1
  639. package/dist/primitives/copy-to-clipboard-icon.js +0 -21
  640. package/dist/primitives/dialog-video-controller.d.ts +0 -4
  641. package/dist/primitives/dialog-video-controller.d.ts.map +0 -1
  642. package/dist/primitives/dialog-video-controller.js +0 -23
  643. package/dist/primitives/dialog.d.ts +0 -18
  644. package/dist/primitives/dialog.d.ts.map +0 -1
  645. package/dist/primitives/dialog.js +0 -37
  646. package/dist/primitives/dot-pattern.d.ts +0 -14
  647. package/dist/primitives/dot-pattern.d.ts.map +0 -1
  648. package/dist/primitives/dot-pattern.js +0 -8
  649. package/dist/primitives/dots-loader.d.ts +0 -5
  650. package/dist/primitives/dots-loader.d.ts.map +0 -1
  651. package/dist/primitives/dots-loader.js +0 -5
  652. package/dist/primitives/drawer.d.ts +0 -38
  653. package/dist/primitives/drawer.d.ts.map +0 -1
  654. package/dist/primitives/drawer.js +0 -22
  655. package/dist/primitives/dropdown-menu.d.ts +0 -52
  656. package/dist/primitives/dropdown-menu.d.ts.map +0 -1
  657. package/dist/primitives/dropdown-menu.js +0 -34
  658. package/dist/primitives/empty.d.ts +0 -12
  659. package/dist/primitives/empty.d.ts.map +0 -1
  660. package/dist/primitives/empty.js +0 -33
  661. package/dist/primitives/error-message.d.ts +0 -7
  662. package/dist/primitives/error-message.d.ts.map +0 -1
  663. package/dist/primitives/error-message.js +0 -5
  664. package/dist/primitives/field.d.ts +0 -10
  665. package/dist/primitives/field.d.ts.map +0 -1
  666. package/dist/primitives/field.js +0 -16
  667. package/dist/primitives/file-uploader.d.ts +0 -20
  668. package/dist/primitives/file-uploader.d.ts.map +0 -1
  669. package/dist/primitives/file-uploader.js +0 -68
  670. package/dist/primitives/form.d.ts +0 -40
  671. package/dist/primitives/form.d.ts.map +0 -1
  672. package/dist/primitives/form.js +0 -67
  673. package/dist/primitives/hover-card.d.ts +0 -10
  674. package/dist/primitives/hover-card.d.ts.map +0 -1
  675. package/dist/primitives/hover-card.js +0 -8
  676. package/dist/primitives/icons/github.d.ts +0 -5
  677. package/dist/primitives/icons/github.d.ts.map +0 -1
  678. package/dist/primitives/icons/github.js +0 -3
  679. package/dist/primitives/icons/index.d.ts +0 -5
  680. package/dist/primitives/icons/index.d.ts.map +0 -1
  681. package/dist/primitives/icons/index.js +0 -4
  682. package/dist/primitives/icons/youtube-logo.d.ts +0 -5
  683. package/dist/primitives/icons/youtube-logo.d.ts.map +0 -1
  684. package/dist/primitives/icons/youtube-logo.js +0 -33
  685. package/dist/primitives/index-blocks.d.ts +0 -5
  686. package/dist/primitives/index-blocks.d.ts.map +0 -1
  687. package/dist/primitives/index-blocks.js +0 -6
  688. package/dist/primitives/index-common.d.ts +0 -75
  689. package/dist/primitives/index-common.d.ts.map +0 -1
  690. package/dist/primitives/index-common.js +0 -82
  691. package/dist/primitives/index-core.d.ts +0 -29
  692. package/dist/primitives/index-core.d.ts.map +0 -1
  693. package/dist/primitives/index-core.js +0 -30
  694. package/dist/primitives/index-next.d.ts +0 -3
  695. package/dist/primitives/index-next.d.ts.map +0 -1
  696. package/dist/primitives/index-next.js +0 -4
  697. package/dist/primitives/index-standard.d.ts +0 -79
  698. package/dist/primitives/index-standard.d.ts.map +0 -1
  699. package/dist/primitives/index-standard.js +0 -98
  700. package/dist/primitives/index.js +0 -9619
  701. package/dist/primitives/index.mjs +0 -9203
  702. package/dist/primitives/input-group.d.ts +0 -17
  703. package/dist/primitives/input-group.d.ts.map +0 -1
  704. package/dist/primitives/input-group.js +0 -61
  705. package/dist/primitives/input-otp.d.ts +0 -35
  706. package/dist/primitives/input-otp.d.ts.map +0 -1
  707. package/dist/primitives/input-otp.js +0 -19
  708. package/dist/primitives/input.d.ts +0 -15
  709. package/dist/primitives/input.d.ts.map +0 -1
  710. package/dist/primitives/input.js +0 -43
  711. package/dist/primitives/item.d.ts +0 -24
  712. package/dist/primitives/item.d.ts.map +0 -1
  713. package/dist/primitives/item.js +0 -67
  714. package/dist/primitives/kbd.d.ts +0 -5
  715. package/dist/primitives/kbd.d.ts.map +0 -1
  716. package/dist/primitives/kbd.js +0 -9
  717. package/dist/primitives/label.d.ts +0 -11
  718. package/dist/primitives/label.d.ts.map +0 -1
  719. package/dist/primitives/label.js +0 -9
  720. package/dist/primitives/list-adaptor.d.ts +0 -10
  721. package/dist/primitives/list-adaptor.d.ts.map +0 -1
  722. package/dist/primitives/list-adaptor.js +0 -1
  723. package/dist/primitives/list-box.d.ts +0 -12
  724. package/dist/primitives/list-box.d.ts.map +0 -1
  725. package/dist/primitives/list-box.js +0 -10
  726. package/dist/primitives/loading-spinner.d.ts +0 -6
  727. package/dist/primitives/loading-spinner.d.ts.map +0 -1
  728. package/dist/primitives/loading-spinner.js +0 -7
  729. package/dist/primitives/markdown-preview.d.ts +0 -129
  730. package/dist/primitives/markdown-preview.d.ts.map +0 -1
  731. package/dist/primitives/markdown-preview.js +0 -165
  732. package/dist/primitives/menubar.d.ts +0 -29
  733. package/dist/primitives/menubar.d.ts.map +0 -1
  734. package/dist/primitives/menubar.js +0 -46
  735. package/dist/primitives/mermaid.d.ts +0 -8
  736. package/dist/primitives/mermaid.d.ts.map +0 -1
  737. package/dist/primitives/mermaid.js +0 -112
  738. package/dist/primitives/native-select.d.ts +0 -9
  739. package/dist/primitives/native-select.d.ts.map +0 -1
  740. package/dist/primitives/native-select.js +0 -14
  741. package/dist/primitives/navigation-menu.d.ts +0 -13
  742. package/dist/primitives/navigation-menu.d.ts.map +0 -1
  743. package/dist/primitives/navigation-menu.js +0 -29
  744. package/dist/primitives/next/image.d.ts +0 -12
  745. package/dist/primitives/next/image.d.ts.map +0 -1
  746. package/dist/primitives/next/image.js +0 -40
  747. package/dist/primitives/next/index.d.ts +0 -8
  748. package/dist/primitives/next/index.d.ts.map +0 -1
  749. package/dist/primitives/next/index.js +0 -7
  750. package/dist/primitives/next/inline-icon.d.ts +0 -14
  751. package/dist/primitives/next/inline-icon.d.ts.map +0 -1
  752. package/dist/primitives/next/inline-icon.js +0 -13
  753. package/dist/primitives/next/link-element.d.ts +0 -24
  754. package/dist/primitives/next/link-element.d.ts.map +0 -1
  755. package/dist/primitives/next/link-element.js +0 -47
  756. package/dist/primitives/next/mdx-link.d.ts +0 -4
  757. package/dist/primitives/next/mdx-link.d.ts.map +0 -1
  758. package/dist/primitives/next/mdx-link.js +0 -10
  759. package/dist/primitives/next/media-stack.d.ts +0 -9
  760. package/dist/primitives/next/media-stack.d.ts.map +0 -1
  761. package/dist/primitives/next/media-stack.js +0 -20
  762. package/dist/primitives/next/nav-items.d.ts +0 -11
  763. package/dist/primitives/next/nav-items.d.ts.map +0 -1
  764. package/dist/primitives/next/nav-items.js +0 -22
  765. package/dist/primitives/next/youtube-embed.d.ts +0 -12
  766. package/dist/primitives/next/youtube-embed.d.ts.map +0 -1
  767. package/dist/primitives/next/youtube-embed.js +0 -16
  768. package/dist/primitives/popover.d.ts +0 -12
  769. package/dist/primitives/popover.d.ts.map +0 -1
  770. package/dist/primitives/popover.js +0 -10
  771. package/dist/primitives/pretty-json-print.d.ts +0 -5
  772. package/dist/primitives/pretty-json-print.d.ts.map +0 -1
  773. package/dist/primitives/pretty-json-print.js +0 -22
  774. package/dist/primitives/progress.d.ts +0 -9
  775. package/dist/primitives/progress.d.ts.map +0 -1
  776. package/dist/primitives/progress.js +0 -7
  777. package/dist/primitives/prompt-textarea.d.ts +0 -19
  778. package/dist/primitives/prompt-textarea.d.ts.map +0 -1
  779. package/dist/primitives/prompt-textarea.js +0 -30
  780. package/dist/primitives/radio-group.d.ts +0 -12
  781. package/dist/primitives/radio-group.d.ts.map +0 -1
  782. package/dist/primitives/radio-group.js +0 -14
  783. package/dist/primitives/resizable.d.ts +0 -24
  784. package/dist/primitives/resizable.d.ts.map +0 -1
  785. package/dist/primitives/resizable.js +0 -8
  786. package/dist/primitives/scroll-area.d.ts +0 -14
  787. package/dist/primitives/scroll-area.d.ts.map +0 -1
  788. package/dist/primitives/scroll-area.js +0 -10
  789. package/dist/primitives/search-input.d.ts +0 -14
  790. package/dist/primitives/search-input.d.ts.map +0 -1
  791. package/dist/primitives/search-input.js +0 -16
  792. package/dist/primitives/select.d.ts +0 -27
  793. package/dist/primitives/select.d.ts.map +0 -1
  794. package/dist/primitives/select.js +0 -21
  795. package/dist/primitives/separator.d.ts +0 -9
  796. package/dist/primitives/separator.d.ts.map +0 -1
  797. package/dist/primitives/separator.js +0 -7
  798. package/dist/primitives/sheet.d.ts +0 -41
  799. package/dist/primitives/sheet.d.ts.map +0 -1
  800. package/dist/primitives/sheet.js +0 -35
  801. package/dist/primitives/skeleton.d.ts +0 -5
  802. package/dist/primitives/skeleton.d.ts.map +0 -1
  803. package/dist/primitives/skeleton.js +0 -7
  804. package/dist/primitives/slider.d.ts +0 -6
  805. package/dist/primitives/slider.d.ts.map +0 -1
  806. package/dist/primitives/slider.js +0 -15
  807. package/dist/primitives/sonner.d.ts +0 -6
  808. package/dist/primitives/sonner.d.ts.map +0 -1
  809. package/dist/primitives/sonner.js +0 -17
  810. package/dist/primitives/spinner.d.ts +0 -3
  811. package/dist/primitives/spinner.d.ts.map +0 -1
  812. package/dist/primitives/spinner.js +0 -7
  813. package/dist/primitives/step-indicator.d.ts +0 -10
  814. package/dist/primitives/step-indicator.d.ts.map +0 -1
  815. package/dist/primitives/step-indicator.js +0 -13
  816. package/dist/primitives/stepper.d.ts +0 -49
  817. package/dist/primitives/stepper.d.ts.map +0 -1
  818. package/dist/primitives/stepper.js +0 -75
  819. package/dist/primitives/switch.d.ts +0 -9
  820. package/dist/primitives/switch.d.ts.map +0 -1
  821. package/dist/primitives/switch.js +0 -7
  822. package/dist/primitives/table.d.ts +0 -35
  823. package/dist/primitives/table.d.ts.map +0 -1
  824. package/dist/primitives/table.js +0 -19
  825. package/dist/primitives/tabs.d.ts +0 -12
  826. package/dist/primitives/tabs.d.ts.map +0 -1
  827. package/dist/primitives/tabs.js +0 -35
  828. package/dist/primitives/text-area.d.ts +0 -6
  829. package/dist/primitives/text-area.d.ts.map +0 -1
  830. package/dist/primitives/text-area.js +0 -10
  831. package/dist/primitives/text-link.d.ts +0 -6
  832. package/dist/primitives/text-link.d.ts.map +0 -1
  833. package/dist/primitives/text-link.js +0 -5
  834. package/dist/primitives/textarea.d.ts +0 -13
  835. package/dist/primitives/textarea.d.ts.map +0 -1
  836. package/dist/primitives/textarea.js +0 -28
  837. package/dist/primitives/textfield.d.ts +0 -33
  838. package/dist/primitives/textfield.d.ts.map +0 -1
  839. package/dist/primitives/textfield.js +0 -9
  840. package/dist/primitives/toast.d.ts +0 -6
  841. package/dist/primitives/toast.d.ts.map +0 -1
  842. package/dist/primitives/toast.js +0 -13
  843. package/dist/primitives/toggle-group.d.ts +0 -14
  844. package/dist/primitives/toggle-group.d.ts.map +0 -1
  845. package/dist/primitives/toggle-group.js +0 -20
  846. package/dist/primitives/toggle.d.ts +0 -13
  847. package/dist/primitives/toggle.d.ts.map +0 -1
  848. package/dist/primitives/toggle.js +0 -24
  849. package/dist/primitives/tooltip.d.ts +0 -15
  850. package/dist/primitives/tooltip.d.ts.map +0 -1
  851. package/dist/primitives/tooltip.js +0 -11
  852. package/dist/primitives/video-player.d.ts +0 -7
  853. package/dist/primitives/video-player.d.ts.map +0 -1
  854. package/dist/primitives/video-player.js +0 -7
  855. package/dist/primitives/youtube-pip-player.d.ts +0 -33
  856. package/dist/primitives/youtube-pip-player.d.ts.map +0 -1
  857. package/dist/primitives/youtube-pip-player.js +0 -253
  858. package/dist/primitives-export.js +0 -9619
  859. package/dist/primitives-export.mjs +0 -9203
  860. package/dist/src/3d/button.d.ts +0 -27
  861. package/dist/src/3d/button.d.ts.map +0 -1
  862. package/dist/src/3d/button.js +0 -181
  863. package/dist/src/3d/card.d.ts +0 -29
  864. package/dist/src/3d/card.d.ts.map +0 -1
  865. package/dist/src/3d/card.js +0 -117
  866. package/dist/src/3d/carousel.d.ts +0 -26
  867. package/dist/src/3d/carousel.d.ts.map +0 -1
  868. package/dist/src/3d/carousel.js +0 -171
  869. package/dist/src/3d/grid.d.ts +0 -49
  870. package/dist/src/3d/grid.d.ts.map +0 -1
  871. package/dist/src/3d/grid.js +0 -126
  872. package/dist/src/3d/index.d.ts +0 -7
  873. package/dist/src/3d/index.d.ts.map +0 -1
  874. package/dist/src/3d/index.js +0 -7
  875. package/dist/src/3d/marquee.d.ts +0 -37
  876. package/dist/src/3d/marquee.d.ts.map +0 -1
  877. package/dist/src/3d/marquee.js +0 -208
  878. package/dist/src/3d/pin.d.ts +0 -8
  879. package/dist/src/3d/pin.d.ts.map +0 -1
  880. package/dist/src/3d/pin.js +0 -9
  881. package/dist/src/avatar.d.ts +0 -2
  882. package/dist/src/avatar.d.ts.map +0 -1
  883. package/dist/src/avatar.js +0 -1
  884. package/dist/src/badge.d.ts +0 -2
  885. package/dist/src/badge.d.ts.map +0 -1
  886. package/dist/src/badge.js +0 -1
  887. package/dist/src/billing/components/billing-workspace.d.ts +0 -28
  888. package/dist/src/billing/components/billing-workspace.d.ts.map +0 -1
  889. package/dist/src/billing/components/billing-workspace.js +0 -22
  890. package/dist/src/billing/components/business-profile-panel.d.ts +0 -7
  891. package/dist/src/billing/components/business-profile-panel.d.ts.map +0 -1
  892. package/dist/src/billing/components/business-profile-panel.js +0 -44
  893. package/dist/src/billing/components/index.d.ts +0 -13
  894. package/dist/src/billing/components/index.d.ts.map +0 -1
  895. package/dist/src/billing/components/index.js +0 -6
  896. package/dist/src/billing/components/invoice-manager.d.ts +0 -10
  897. package/dist/src/billing/components/invoice-manager.d.ts.map +0 -1
  898. package/dist/src/billing/components/invoice-manager.js +0 -131
  899. package/dist/src/billing/components/payment-manager.d.ts +0 -13
  900. package/dist/src/billing/components/payment-manager.d.ts.map +0 -1
  901. package/dist/src/billing/components/payment-manager.js +0 -146
  902. package/dist/src/billing/components/subscription-portal.d.ts +0 -16
  903. package/dist/src/billing/components/subscription-portal.d.ts.map +0 -1
  904. package/dist/src/billing/components/subscription-portal.js +0 -88
  905. package/dist/src/billing/components/tax-compliance-panel.d.ts +0 -8
  906. package/dist/src/billing/components/tax-compliance-panel.d.ts.map +0 -1
  907. package/dist/src/billing/components/tax-compliance-panel.js +0 -41
  908. package/dist/src/billing/index.d.ts +0 -7
  909. package/dist/src/billing/index.d.ts.map +0 -1
  910. package/dist/src/billing/index.js +0 -8
  911. package/dist/src/billing/types/index.d.ts +0 -177
  912. package/dist/src/billing/types/index.d.ts.map +0 -1
  913. package/dist/src/billing/types/index.js +0 -1
  914. package/dist/src/button.d.ts +0 -2
  915. package/dist/src/button.d.ts.map +0 -1
  916. package/dist/src/button.js +0 -1
  917. package/dist/src/calendar-ext/index.d.ts +0 -4
  918. package/dist/src/calendar-ext/index.d.ts.map +0 -1
  919. package/dist/src/calendar-ext/index.js +0 -7
  920. package/dist/src/charts/index.d.ts +0 -65
  921. package/dist/src/charts/index.d.ts.map +0 -1
  922. package/dist/src/charts/index.js +0 -76
  923. package/dist/src/desktop/hooks.d.ts +0 -75
  924. package/dist/src/desktop/hooks.d.ts.map +0 -1
  925. package/dist/src/desktop/hooks.js +0 -194
  926. package/dist/src/desktop/index.d.ts +0 -7
  927. package/dist/src/desktop/index.d.ts.map +0 -1
  928. package/dist/src/desktop/index.js +0 -8
  929. package/dist/src/desktop/spotlight.d.ts +0 -24
  930. package/dist/src/desktop/spotlight.d.ts.map +0 -1
  931. package/dist/src/desktop/spotlight.js +0 -126
  932. package/dist/src/desktop/window.d.ts +0 -34
  933. package/dist/src/desktop/window.d.ts.map +0 -1
  934. package/dist/src/desktop/window.js +0 -114
  935. package/dist/src/device/index.d.ts +0 -2
  936. package/dist/src/device/index.d.ts.map +0 -1
  937. package/dist/src/device/index.js +0 -1
  938. package/dist/src/dock/basic.d.ts +0 -20
  939. package/dist/src/dock/basic.d.ts.map +0 -1
  940. package/dist/src/dock/basic.js +0 -50
  941. package/dist/src/dock/index.d.ts +0 -6
  942. package/dist/src/dock/index.d.ts.map +0 -1
  943. package/dist/src/dock/index.js +0 -6
  944. package/dist/src/dock/limelight-nav.d.ts +0 -10
  945. package/dist/src/dock/limelight-nav.d.ts.map +0 -1
  946. package/dist/src/dock/limelight-nav.js +0 -25
  947. package/dist/src/dock/macos.d.ts +0 -17
  948. package/dist/src/dock/macos.d.ts.map +0 -1
  949. package/dist/src/dock/macos.js +0 -38
  950. package/dist/src/dock/menu.d.ts +0 -14
  951. package/dist/src/dock/menu.d.ts.map +0 -1
  952. package/dist/src/dock/menu.js +0 -10
  953. package/dist/src/dock/message.d.ts +0 -15
  954. package/dist/src/dock/message.d.ts.map +0 -1
  955. package/dist/src/dock/message.js +0 -21
  956. package/dist/src/form/form.d.ts +0 -24
  957. package/dist/src/form/form.d.ts.map +0 -1
  958. package/dist/src/form/form.js +0 -66
  959. package/dist/src/form/index.d.ts +0 -2
  960. package/dist/src/form/index.d.ts.map +0 -1
  961. package/dist/src/form/index.js +0 -2
  962. package/dist/src/hooks/index.d.ts +0 -8
  963. package/dist/src/hooks/index.d.ts.map +0 -1
  964. package/dist/src/hooks/index.js +0 -7
  965. package/dist/src/hooks/use-click-away.d.ts +0 -3
  966. package/dist/src/hooks/use-click-away.d.ts.map +0 -1
  967. package/dist/src/hooks/use-click-away.js +0 -23
  968. package/dist/src/hooks/use-combined-refs.d.ts +0 -4
  969. package/dist/src/hooks/use-combined-refs.d.ts.map +0 -1
  970. package/dist/src/hooks/use-combined-refs.js +0 -18
  971. package/dist/src/hooks/use-copy-clipboard.d.ts +0 -10
  972. package/dist/src/hooks/use-copy-clipboard.d.ts.map +0 -1
  973. package/dist/src/hooks/use-copy-clipboard.js +0 -21
  974. package/dist/src/hooks/use-debounce.d.ts +0 -2
  975. package/dist/src/hooks/use-debounce.d.ts.map +0 -1
  976. package/dist/src/hooks/use-debounce.js +0 -13
  977. package/dist/src/hooks/use-fill-ids.d.ts +0 -9
  978. package/dist/src/hooks/use-fill-ids.d.ts.map +0 -1
  979. package/dist/src/hooks/use-fill-ids.js +0 -20
  980. package/dist/src/hooks/use-map.d.ts +0 -2
  981. package/dist/src/hooks/use-map.d.ts.map +0 -1
  982. package/dist/src/hooks/use-map.js +0 -20
  983. package/dist/src/hooks/use-measure.d.ts +0 -9
  984. package/dist/src/hooks/use-measure.d.ts.map +0 -1
  985. package/dist/src/hooks/use-measure.js +0 -25
  986. package/dist/src/hooks/use-reverse-video-playback.d.ts +0 -2
  987. package/dist/src/hooks/use-reverse-video-playback.d.ts.map +0 -1
  988. package/dist/src/hooks/use-reverse-video-playback.js +0 -41
  989. package/dist/src/hooks/use-scroll-restoration.d.ts +0 -9
  990. package/dist/src/hooks/use-scroll-restoration.d.ts.map +0 -1
  991. package/dist/src/hooks/use-scroll-restoration.js +0 -36
  992. package/dist/src/kanban/index.d.ts +0 -3
  993. package/dist/src/kanban/index.d.ts.map +0 -1
  994. package/dist/src/kanban/index.js +0 -4
  995. package/dist/src/mcp/enhanced-server.d.ts +0 -41
  996. package/dist/src/mcp/enhanced-server.d.ts.map +0 -1
  997. package/dist/src/mcp/enhanced-server.js +0 -1128
  998. package/dist/src/mcp/index.d.ts +0 -40
  999. package/dist/src/mcp/index.d.ts.map +0 -1
  1000. package/dist/src/mcp/index.js +0 -436
  1001. package/dist/src/mermaid/index.d.ts +0 -3
  1002. package/dist/src/mermaid/index.d.ts.map +0 -1
  1003. package/dist/src/mermaid/index.js +0 -3
  1004. package/dist/src/navigation/advanced-navigation-bar.d.ts +0 -2
  1005. package/dist/src/navigation/advanced-navigation-bar.d.ts.map +0 -1
  1006. package/dist/src/navigation/advanced-navigation-bar.js +0 -4
  1007. package/dist/src/navigation/ai-model-selector-navigation-bar.d.ts +0 -2
  1008. package/dist/src/navigation/ai-model-selector-navigation-bar.d.ts.map +0 -1
  1009. package/dist/src/navigation/ai-model-selector-navigation-bar.js +0 -4
  1010. package/dist/src/navigation/app-switcher-navigation-bar.d.ts +0 -2
  1011. package/dist/src/navigation/app-switcher-navigation-bar.d.ts.map +0 -1
  1012. package/dist/src/navigation/app-switcher-navigation-bar.js +0 -4
  1013. package/dist/src/navigation/breadcrumb-and-filters-navigation-bar.d.ts +0 -2
  1014. package/dist/src/navigation/breadcrumb-and-filters-navigation-bar.d.ts.map +0 -1
  1015. package/dist/src/navigation/breadcrumb-and-filters-navigation-bar.js +0 -4
  1016. package/dist/src/navigation/breadcrumb-navigation-bar.d.ts +0 -2
  1017. package/dist/src/navigation/breadcrumb-navigation-bar.d.ts.map +0 -1
  1018. package/dist/src/navigation/breadcrumb-navigation-bar.js +0 -4
  1019. package/dist/src/navigation/centered-logo-navigation-bar.d.ts +0 -2
  1020. package/dist/src/navigation/centered-logo-navigation-bar.d.ts.map +0 -1
  1021. package/dist/src/navigation/centered-logo-navigation-bar.js +0 -4
  1022. package/dist/src/navigation/collaboration-navigation-bar.d.ts +0 -2
  1023. package/dist/src/navigation/collaboration-navigation-bar.d.ts.map +0 -1
  1024. package/dist/src/navigation/collaboration-navigation-bar.js +0 -4
  1025. package/dist/src/navigation/communication-navigation-bar.d.ts +0 -2
  1026. package/dist/src/navigation/communication-navigation-bar.d.ts.map +0 -1
  1027. package/dist/src/navigation/communication-navigation-bar.js +0 -4
  1028. package/dist/src/navigation/context-switcher-navigation-bar.d.ts +0 -2
  1029. package/dist/src/navigation/context-switcher-navigation-bar.d.ts.map +0 -1
  1030. package/dist/src/navigation/context-switcher-navigation-bar.js +0 -4
  1031. package/dist/src/navigation/dashboard-navigation-bar.d.ts +0 -2
  1032. package/dist/src/navigation/dashboard-navigation-bar.d.ts.map +0 -1
  1033. package/dist/src/navigation/dashboard-navigation-bar.js +0 -4
  1034. package/dist/src/navigation/e-commerce-navigation-bar.d.ts +0 -2
  1035. package/dist/src/navigation/e-commerce-navigation-bar.d.ts.map +0 -1
  1036. package/dist/src/navigation/e-commerce-navigation-bar.js +0 -4
  1037. package/dist/src/navigation/icon-navigation-bar.d.ts +0 -2
  1038. package/dist/src/navigation/icon-navigation-bar.d.ts.map +0 -1
  1039. package/dist/src/navigation/icon-navigation-bar.js +0 -4
  1040. package/dist/src/navigation/index.d.ts +0 -19
  1041. package/dist/src/navigation/index.d.ts.map +0 -1
  1042. package/dist/src/navigation/index.js +0 -19
  1043. package/dist/src/navigation/search-and-toggle-navigation-bar.d.ts +0 -2
  1044. package/dist/src/navigation/search-and-toggle-navigation-bar.d.ts.map +0 -1
  1045. package/dist/src/navigation/search-and-toggle-navigation-bar.js +0 -4
  1046. package/dist/src/navigation/simple-navigation-bar.d.ts +0 -2
  1047. package/dist/src/navigation/simple-navigation-bar.d.ts.map +0 -1
  1048. package/dist/src/navigation/simple-navigation-bar.js +0 -4
  1049. package/dist/src/navigation/status-dashboard-navigation-bar.d.ts +0 -2
  1050. package/dist/src/navigation/status-dashboard-navigation-bar.d.ts.map +0 -1
  1051. package/dist/src/navigation/status-dashboard-navigation-bar.js +0 -4
  1052. package/dist/src/navigation/team-switcher-navigation-bar.d.ts +0 -2
  1053. package/dist/src/navigation/team-switcher-navigation-bar.d.ts.map +0 -1
  1054. package/dist/src/navigation/team-switcher-navigation-bar.js +0 -4
  1055. package/dist/src/navigation/two-tier-navigation-bar.d.ts +0 -2
  1056. package/dist/src/navigation/two-tier-navigation-bar.d.ts.map +0 -1
  1057. package/dist/src/navigation/two-tier-navigation-bar.js +0 -4
  1058. package/dist/src/navigation/underline-navigation-bar.d.ts +0 -2
  1059. package/dist/src/navigation/underline-navigation-bar.d.ts.map +0 -1
  1060. package/dist/src/navigation/underline-navigation-bar.js +0 -4
  1061. package/dist/src/pattern/grid.d.ts +0 -111
  1062. package/dist/src/pattern/grid.d.ts.map +0 -1
  1063. package/dist/src/pattern/grid.js +0 -126
  1064. package/dist/src/pattern/index.d.ts +0 -3
  1065. package/dist/src/pattern/index.d.ts.map +0 -1
  1066. package/dist/src/pattern/index.js +0 -2
  1067. package/dist/src/project/gantt.d.ts +0 -13
  1068. package/dist/src/project/gantt.d.ts.map +0 -1
  1069. package/dist/src/project/gantt.js +0 -9
  1070. package/dist/src/project/index.d.ts +0 -4
  1071. package/dist/src/project/index.d.ts.map +0 -1
  1072. package/dist/src/project/index.js +0 -7
  1073. package/dist/src/project/kanban.d.ts +0 -36
  1074. package/dist/src/project/kanban.d.ts.map +0 -1
  1075. package/dist/src/project/kanban.js +0 -259
  1076. package/dist/src/project/list.d.ts +0 -5
  1077. package/dist/src/project/list.d.ts.map +0 -1
  1078. package/dist/src/project/list.js +0 -8
  1079. package/dist/src/registry/api.d.ts +0 -38
  1080. package/dist/src/registry/api.d.ts.map +0 -1
  1081. package/dist/src/registry/api.js +0 -129
  1082. package/dist/src/registry/index.d.ts +0 -354
  1083. package/dist/src/registry/index.d.ts.map +0 -1
  1084. package/dist/src/registry/index.js +0 -45
  1085. package/dist/src/spline/index.d.ts +0 -3
  1086. package/dist/src/spline/index.d.ts.map +0 -1
  1087. package/dist/src/spline/index.js +0 -4
  1088. package/dist/src/spline/media-stack.d.ts +0 -15
  1089. package/dist/src/spline/media-stack.d.ts.map +0 -1
  1090. package/dist/src/spline/media-stack.js +0 -33
  1091. package/dist/src/spline/player.d.ts +0 -15
  1092. package/dist/src/spline/player.d.ts.map +0 -1
  1093. package/dist/src/spline/player.js +0 -12
  1094. package/dist/src/ui/announcement.d.ts +0 -9
  1095. package/dist/src/ui/announcement.d.ts.map +0 -1
  1096. package/dist/src/ui/announcement.js +0 -18
  1097. package/dist/src/ui/avatar-group.d.ts +0 -12
  1098. package/dist/src/ui/avatar-group.d.ts.map +0 -1
  1099. package/dist/src/ui/avatar-group.js +0 -12
  1100. package/dist/src/ui/banner.d.ts +0 -11
  1101. package/dist/src/ui/banner.d.ts.map +0 -1
  1102. package/dist/src/ui/banner.js +0 -25
  1103. package/dist/src/ui/cursor.d.ts +0 -9
  1104. package/dist/src/ui/cursor.d.ts.map +0 -1
  1105. package/dist/src/ui/cursor.js +0 -24
  1106. package/dist/src/ui/index.d.ts +0 -18
  1107. package/dist/src/ui/index.d.ts.map +0 -1
  1108. package/dist/src/ui/index.js +0 -10
  1109. package/dist/src/ui/marquee.d.ts +0 -10
  1110. package/dist/src/ui/marquee.d.ts.map +0 -1
  1111. package/dist/src/ui/marquee.js +0 -14
  1112. package/dist/src/ui/pill.d.ts +0 -11
  1113. package/dist/src/ui/pill.d.ts.map +0 -1
  1114. package/dist/src/ui/pill.js +0 -25
  1115. package/dist/src/ui/spinner.d.ts +0 -3
  1116. package/dist/src/ui/spinner.d.ts.map +0 -1
  1117. package/dist/src/ui/spinner.js +0 -7
  1118. package/dist/src/ui/tags.d.ts +0 -13
  1119. package/dist/src/ui/tags.d.ts.map +0 -1
  1120. package/dist/src/ui/tags.js +0 -11
  1121. package/dist/src/ui/ticker.d.ts +0 -10
  1122. package/dist/src/ui/ticker.d.ts.map +0 -1
  1123. package/dist/src/ui/ticker.js +0 -12
  1124. package/dist/src/utils.d.ts +0 -5
  1125. package/dist/src/utils.d.ts.map +0 -1
  1126. package/dist/src/utils.js +0 -16
  1127. package/dist/style/theme-provider.d.ts +0 -5
  1128. package/dist/style/theme-provider.d.ts.map +0 -1
  1129. package/dist/style/theme-provider.js +0 -8
  1130. package/dist/tailwind/colors.tailwind.d.ts +0 -53
  1131. package/dist/tailwind/colors.tailwind.d.ts.map +0 -1
  1132. package/dist/tailwind/colors.tailwind.js +0 -52
  1133. package/dist/tailwind/fontFamily.tailwind.d.ts +0 -9
  1134. package/dist/tailwind/fontFamily.tailwind.d.ts.map +0 -1
  1135. package/dist/tailwind/fontFamily.tailwind.js +0 -7
  1136. package/dist/tailwind/fontSize.tailwind.d.ts +0 -37
  1137. package/dist/tailwind/fontSize.tailwind.d.ts.map +0 -1
  1138. package/dist/tailwind/fontSize.tailwind.js +0 -13
  1139. package/dist/tailwind/index.d.ts +0 -4
  1140. package/dist/tailwind/index.d.ts.map +0 -1
  1141. package/dist/tailwind/safelist.tailwind.d.ts +0 -9
  1142. package/dist/tailwind/safelist.tailwind.d.ts.map +0 -1
  1143. package/dist/tailwind/safelist.tailwind.js +0 -25
  1144. package/dist/tailwind/screens.tailwind.d.ts +0 -10
  1145. package/dist/tailwind/screens.tailwind.d.ts.map +0 -1
  1146. package/dist/tailwind/screens.tailwind.js +0 -8
  1147. package/dist/tailwind/spacing.tailwind.d.ts +0 -59
  1148. package/dist/tailwind/spacing.tailwind.d.ts.map +0 -1
  1149. package/dist/tailwind/spacing.tailwind.js +0 -62
  1150. package/dist/tailwind/tailwind.config.hanzo-preset.d.ts +0 -1299
  1151. package/dist/tailwind/tailwind.config.hanzo-preset.d.ts.map +0 -1
  1152. package/dist/tailwind/tailwind.config.hanzo-preset.js +0 -911
  1153. package/dist/tailwind/tw-font-desc.d.ts +0 -7
  1154. package/dist/tailwind/tw-font-desc.d.ts.map +0 -1
  1155. package/dist/tailwind/tw-font-desc.js +0 -6
  1156. package/dist/tailwind/typo-plugin/get-plugin-styles.d.ts +0 -595
  1157. package/dist/tailwind/typo-plugin/get-plugin-styles.d.ts.map +0 -1
  1158. package/dist/tailwind/typo-plugin/get-plugin-styles.js +0 -661
  1159. package/dist/tailwind/typo-plugin/index.d.ts +0 -3
  1160. package/dist/tailwind/typo-plugin/index.d.ts.map +0 -1
  1161. package/dist/tailwind/typo-plugin/index.js +0 -102
  1162. package/dist/tailwind/typo-plugin/utils.d.ts +0 -6
  1163. package/dist/tailwind/typo-plugin/utils.d.ts.map +0 -1
  1164. package/dist/tailwind/typo-plugin/utils.js +0 -47
  1165. package/dist/tailwind/z-index.tailwind.d.ts +0 -51
  1166. package/dist/tailwind/z-index.tailwind.d.ts.map +0 -1
  1167. package/dist/tailwind/z-index.tailwind.js +0 -67
  1168. package/dist/types/animation-def.d.ts +0 -3
  1169. package/dist/types/animation-def.d.ts.map +0 -1
  1170. package/dist/types/animation-def.js +0 -1
  1171. package/dist/types/breakpoints.d.ts +0 -5
  1172. package/dist/types/breakpoints.d.ts.map +0 -1
  1173. package/dist/types/breakpoints.js +0 -4
  1174. package/dist/types/bullet-item.d.ts +0 -7
  1175. package/dist/types/bullet-item.d.ts.map +0 -1
  1176. package/dist/types/bullet-item.js +0 -1
  1177. package/dist/types/button-def.d.ts +0 -30
  1178. package/dist/types/button-def.d.ts.map +0 -1
  1179. package/dist/types/button-def.js +0 -1
  1180. package/dist/types/dimensions.d.ts +0 -6
  1181. package/dist/types/dimensions.d.ts.map +0 -1
  1182. package/dist/types/dimensions.js +0 -1
  1183. package/dist/types/grid-def.d.ts +0 -37
  1184. package/dist/types/grid-def.d.ts.map +0 -1
  1185. package/dist/types/grid-def.js +0 -33
  1186. package/dist/types/image-def.d.ts +0 -28
  1187. package/dist/types/image-def.d.ts.map +0 -1
  1188. package/dist/types/image-def.js +0 -1
  1189. package/dist/types/index.d.ts +0 -15
  1190. package/dist/types/index.d.ts.map +0 -1
  1191. package/dist/types/link-def.d.ts +0 -45
  1192. package/dist/types/link-def.d.ts.map +0 -1
  1193. package/dist/types/link-def.js +0 -1
  1194. package/dist/types/media-stack-def.d.ts +0 -26
  1195. package/dist/types/media-stack-def.d.ts.map +0 -1
  1196. package/dist/types/media-stack-def.js +0 -1
  1197. package/dist/types/t-shirt-size.d.ts +0 -3
  1198. package/dist/types/t-shirt-size.d.ts.map +0 -1
  1199. package/dist/types/t-shirt-size.js +0 -1
  1200. package/dist/types/tshirt-dimensions.d.ts +0 -13
  1201. package/dist/types/tshirt-dimensions.d.ts.map +0 -1
  1202. package/dist/types/tshirt-dimensions.js +0 -1
  1203. package/dist/types/video-def.d.ts +0 -10
  1204. package/dist/types/video-def.d.ts.map +0 -1
  1205. package/dist/types/video-def.js +0 -1
  1206. package/dist/util/blob.d.ts +0 -3
  1207. package/dist/util/blob.d.ts.map +0 -1
  1208. package/dist/util/blob.js +0 -23
  1209. package/dist/util/copy-to-clipboard.d.ts +0 -2
  1210. package/dist/util/copy-to-clipboard.d.ts.map +0 -1
  1211. package/dist/util/copy-to-clipboard.js +0 -18
  1212. package/dist/util/create-shadow-root.d.ts +0 -8
  1213. package/dist/util/create-shadow-root.d.ts.map +0 -1
  1214. package/dist/util/create-shadow-root.js +0 -18
  1215. package/dist/util/date.d.ts +0 -29
  1216. package/dist/util/date.d.ts.map +0 -1
  1217. package/dist/util/date.js +0 -60
  1218. package/dist/util/debounce.d.ts +0 -2
  1219. package/dist/util/debounce.d.ts.map +0 -1
  1220. package/dist/util/debounce.js +0 -11
  1221. package/dist/util/file.d.ts +0 -4
  1222. package/dist/util/file.d.ts.map +0 -1
  1223. package/dist/util/file.js +0 -13
  1224. package/dist/util/format-and-abbreviate-as-currency.d.ts +0 -12
  1225. package/dist/util/format-and-abbreviate-as-currency.d.ts.map +0 -1
  1226. package/dist/util/format-and-abbreviate-as-currency.js +0 -91
  1227. package/dist/util/format-text.d.ts +0 -8
  1228. package/dist/util/format-text.d.ts.map +0 -1
  1229. package/dist/util/format-text.js +0 -26
  1230. package/dist/util/format-to-max-char.d.ts +0 -6
  1231. package/dist/util/format-to-max-char.d.ts.map +0 -1
  1232. package/dist/util/format-to-max-char.js +0 -57
  1233. package/dist/util/index-client.d.ts +0 -3
  1234. package/dist/util/index-client.d.ts.map +0 -1
  1235. package/dist/util/index-client.js +0 -3
  1236. package/dist/util/index.d.ts +0 -37
  1237. package/dist/util/index.d.ts.map +0 -1
  1238. package/dist/util/number-abbreviate.d.ts +0 -10
  1239. package/dist/util/number-abbreviate.d.ts.map +0 -1
  1240. package/dist/util/number-abbreviate.js +0 -30
  1241. package/dist/util/specifier.d.ts +0 -8
  1242. package/dist/util/specifier.d.ts.map +0 -1
  1243. package/dist/util/specifier.js +0 -31
  1244. package/dist/util/spread-to-transform.d.ts +0 -8
  1245. package/dist/util/spread-to-transform.d.ts.map +0 -1
  1246. package/dist/util/spread-to-transform.js +0 -19
  1247. package/dist/util/step-animation.d.ts +0 -6
  1248. package/dist/util/step-animation.d.ts.map +0 -1
  1249. package/dist/util/step-animation.js +0 -60
  1250. package/dist/util/timing.d.ts +0 -2
  1251. package/dist/util/timing.d.ts.map +0 -1
  1252. package/dist/util/timing.js +0 -3
  1253. package/dist/util/toasts.d.ts +0 -3
  1254. package/dist/util/toasts.d.ts.map +0 -1
  1255. package/dist/util/toasts.js +0 -10
  1256. package/dist/util/two-way-map.d.ts +0 -9
  1257. package/dist/util/two-way-map.d.ts.map +0 -1
  1258. package/dist/util/two-way-map.js +0 -16
  1259. package/dist/util/use-mobile.d.ts +0 -2
  1260. package/dist/util/use-mobile.d.ts.map +0 -1
  1261. package/dist/util/use-mobile.js +0 -15
  1262. package/dist/utils.d.ts +0 -4
  1263. package/dist/utils.d.ts.map +0 -1
  1264. package/dist/utils.js +0 -7
@@ -1,1529 +1,26 @@
1
1
  "use client";
2
- 'use strict';
3
-
4
- var React6 = require('react');
5
- var classVarianceAuthority = require('class-variance-authority');
6
- var lucideReact = require('lucide-react');
7
- var shiki = require('shiki');
8
- var utils = require('@hanzo/ui/lib/utils');
9
- var badge = require('@hanzo/ui/badge');
10
- var button = require('@hanzo/ui/button');
11
- var skeleton = require('@hanzo/ui/skeleton');
12
- var jsxRuntime = require('react/jsx-runtime');
13
- var diff = require('@hanzo/ui/code/diff');
14
- var snippet = require('@hanzo/ui/code/snippet');
15
- var dropdownMenu = require('@hanzo/ui/dropdown-menu');
16
- var scrollArea = require('@hanzo/ui/scroll-area');
17
- var tabs = require('@hanzo/ui/tabs');
18
- var toggleGroup = require('@hanzo/ui/toggle-group');
19
- var Editor = require('@monaco-editor/react');
20
- var nextThemes = require('next-themes');
21
- var input = require('@hanzo/ui/input');
22
- var separator = require('@hanzo/ui/separator');
23
- var toggle = require('@hanzo/ui/toggle');
24
-
25
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
-
27
- function _interopNamespace(e) {
28
- if (e && e.__esModule) return e;
29
- var n = Object.create(null);
30
- if (e) {
31
- Object.keys(e).forEach(function (k) {
32
- if (k !== 'default') {
33
- var d = Object.getOwnPropertyDescriptor(e, k);
34
- Object.defineProperty(n, k, d.get ? d : {
35
- enumerable: true,
36
- get: function () { return e[k]; }
37
- });
38
- }
39
- });
40
- }
41
- n.default = e;
42
- return Object.freeze(n);
43
- }
44
-
45
- var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
46
- var Editor__default = /*#__PURE__*/_interopDefault(Editor);
47
-
48
- var __defProp = Object.defineProperty;
49
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
50
- var codeBlockVariants = classVarianceAuthority.cva(
51
- "relative overflow-hidden rounded-lg border bg-muted/50",
52
- {
53
- variants: {
54
- theme: {
55
- dark: "bg-slate-950 border-slate-800",
56
- light: "bg-slate-50 border-slate-200",
57
- github: "bg-white border-slate-200",
58
- "github-dark": "bg-slate-900 border-slate-700",
59
- "vs-dark": "bg-slate-950 border-slate-800",
60
- monokai: "bg-slate-900 border-slate-700",
61
- dracula: "bg-slate-900 border-purple-800/30",
62
- nord: "bg-slate-800 border-slate-600"
63
- },
64
- size: {
65
- sm: "text-xs",
66
- default: "text-sm",
67
- lg: "text-base"
68
- }
69
- },
70
- defaultVariants: {
71
- theme: "dark",
72
- size: "default"
73
- }
74
- }
75
- );
76
- var CodeLine = React6__namespace.memo(
77
- ({
78
- line,
79
- lineNumber,
80
- showLineNumbers,
81
- isHighlighted = false,
82
- isDiffAdded = false,
83
- isDiffRemoved = false
84
- }) => {
85
- return /* @__PURE__ */ jsxRuntime.jsxs(
86
- "div",
87
- {
88
- className: utils.cn(
89
- "group relative flex min-h-[1.5rem] items-center px-4 py-0.5",
90
- isHighlighted && "bg-blue-500/10 border-l-2 border-l-blue-500",
91
- isDiffAdded && "bg-green-500/10 border-l-2 border-l-green-500",
92
- isDiffRemoved && "bg-red-500/10 border-l-2 border-l-red-500"
93
- ),
94
- children: [
95
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-4 inline-block w-8 select-none text-right text-xs text-muted-foreground", children: lineNumber }),
96
- (isDiffAdded || isDiffRemoved) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-2 select-none text-xs", children: isDiffAdded ? "+" : isDiffRemoved ? "-" : " " }),
97
- /* @__PURE__ */ jsxRuntime.jsx(
98
- "div",
99
- {
100
- className: "flex-1 overflow-x-auto",
101
- dangerouslySetInnerHTML: { __html: line }
102
- }
103
- )
104
- ]
105
- }
106
- );
107
- }
108
- );
109
- CodeLine.displayName = "CodeLine";
110
- var CodeBlock = React6__namespace.forwardRef(
111
- ({
112
- className,
113
- theme,
114
- size,
115
- code,
116
- language = "text",
117
- filename,
118
- showLineNumbers = true,
119
- highlightLines = [],
120
- showCopyButton = true,
121
- maxHeight = "400px",
122
- diff,
123
- ...props
124
- }, ref) => {
125
- const [highlightedCode, setHighlightedCode] = React6__namespace.useState("");
126
- const [copied, setCopied] = React6__namespace.useState(false);
127
- const [isLoading, setIsLoading] = React6__namespace.useState(true);
128
- const themeMap = {
129
- dark: "github-dark",
130
- light: "github-light",
131
- github: "github-light",
132
- "github-dark": "github-dark",
133
- "vs-dark": "dark-plus",
134
- monokai: "monokai",
135
- dracula: "dracula",
136
- nord: "nord"
137
- };
138
- React6__namespace.useEffect(() => {
139
- const highlightCode = /* @__PURE__ */ __name(async () => {
140
- setIsLoading(true);
141
- try {
142
- const highlighted = await shiki.codeToHtml(code, {
143
- lang: language,
144
- theme: themeMap[theme || "dark"],
145
- transformers: [
146
- {
147
- code(node) {
148
- const codeElement2 = node.children.find(
149
- (child) => child.type === "element" && child.tagName === "code"
150
- );
151
- if (codeElement2 && "children" in codeElement2 && codeElement2.children) {
152
- node.children = codeElement2.children;
153
- }
154
- }
155
- }
156
- ]
157
- });
158
- const tempDiv = document.createElement("div");
159
- tempDiv.innerHTML = highlighted;
160
- const codeElement = tempDiv.querySelector("code");
161
- setHighlightedCode(codeElement?.innerHTML || highlighted);
162
- } catch (error) {
163
- console.error("Failed to highlight code:", error);
164
- setHighlightedCode(code);
165
- } finally {
166
- setIsLoading(false);
167
- }
168
- }, "highlightCode");
169
- highlightCode();
170
- }, [code, language, theme]);
171
- const copyToClipboard = React6__namespace.useCallback(async () => {
172
- try {
173
- await navigator.clipboard.writeText(code);
174
- setCopied(true);
175
- setTimeout(() => setCopied(false), 2e3);
176
- } catch (error) {
177
- console.error("Failed to copy code:", error);
178
- }
179
- }, [code]);
180
- const lines = highlightedCode.split("\n");
181
- return /* @__PURE__ */ jsxRuntime.jsxs(
182
- "div",
183
- {
184
- ref,
185
- "data-testid": "code-block",
186
- className: utils.cn(codeBlockVariants({ theme, size, className })),
187
- ...props,
188
- children: [
189
- (filename || language || showCopyButton) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
190
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
191
- filename && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
192
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-3.5 w-3.5 text-muted-foreground" }),
193
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: filename })
194
- ] }),
195
- language && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: language })
196
- ] }),
197
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsxs(
198
- button.Button,
199
- {
200
- variant: "ghost",
201
- size: "sm",
202
- onClick: copyToClipboard,
203
- className: "h-8 w-8 p-0",
204
- children: [
205
- copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5" }),
206
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: copied ? "Copied" : "Copy code" })
207
- ]
208
- }
209
- )
210
- ] }),
211
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-auto", style: { maxHeight }, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 space-y-2", children: Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
212
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { "data-testid": "skeleton", className: "h-4 w-8" }),
213
- /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { "data-testid": "skeleton", className: "h-4 flex-1" })
214
- ] }, i)) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono", children: lines.map((line, index) => {
215
- const lineNumber = index + 1;
216
- const isHighlighted = highlightLines.includes(lineNumber);
217
- const isDiffAdded = diff?.added?.includes(lineNumber);
218
- const isDiffRemoved = diff?.removed?.includes(lineNumber);
219
- return /* @__PURE__ */ jsxRuntime.jsx(
220
- CodeLine,
221
- {
222
- line,
223
- lineNumber,
224
- showLineNumbers,
225
- isHighlighted,
226
- isDiffAdded,
227
- isDiffRemoved
228
- },
229
- index
230
- );
231
- }) }) })
232
- ]
233
- }
234
- );
235
- }
236
- );
237
- CodeBlock.displayName = "CodeBlock";
238
- var codeCompareVariants = classVarianceAuthority.cva(
239
- "relative flex flex-col overflow-hidden rounded-lg border bg-background",
240
- {
241
- variants: {
242
- layout: {
243
- horizontal: "flex-col",
244
- vertical: "flex-row"
245
- },
246
- size: {
247
- sm: "text-xs",
248
- default: "text-sm",
249
- lg: "text-base"
250
- }
251
- },
252
- defaultVariants: {
253
- layout: "horizontal",
254
- size: "default"
255
- }
256
- }
257
- );
258
- var CodeCompare = React6__namespace.forwardRef(
259
- ({
260
- className,
261
- layout,
262
- size,
263
- files,
264
- defaultView = "side-by-side",
265
- showLineNumbers = true,
266
- showCopyButton = true,
267
- allowMerge = false,
268
- conflictMarkers = [],
269
- onMergeConflict,
270
- onFileSelect,
271
- height = "600px",
272
- syncScroll = true,
273
- ...props
274
- }, ref) => {
275
- const [view, setView] = React6__namespace.useState(defaultView);
276
- const [selectedFiles, setSelectedFiles] = React6__namespace.useState(() => {
277
- if (files.length >= 2) {
278
- return [files[0].id, files[1].id];
279
- }
280
- return files.length > 0 ? [files[0].id] : [];
281
- });
282
- const [mergeState, setMergeState] = React6__namespace.useState({
283
- resolved: {},
284
- conflicts: conflictMarkers
285
- });
286
- const [copied, setCopied] = React6__namespace.useState(false);
287
- const scrollRefs = React6__namespace.useRef({});
288
- const handleScroll = React6__namespace.useCallback(
289
- (sourceId, scrollTop) => {
290
- if (!syncScroll) return;
291
- Object.entries(scrollRefs.current).forEach(([id, ref2]) => {
292
- if (id !== sourceId && ref2) {
293
- ref2.scrollTop = scrollTop;
294
- }
295
- });
296
- },
297
- [syncScroll]
298
- );
299
- const copyComparison = React6__namespace.useCallback(async () => {
300
- const comparison = selectedFiles.map((fileId) => {
301
- const file = files.find((f) => f.id === fileId);
302
- return file ? `=== ${file.filename} ===
303
- ${file.content}` : "";
304
- }).join("\n\n");
305
- try {
306
- await navigator.clipboard.writeText(comparison);
307
- setCopied(true);
308
- setTimeout(() => setCopied(false), 2e3);
309
- } catch (error) {
310
- console.error("Failed to copy comparison:", error);
311
- }
312
- }, [files, selectedFiles]);
313
- const resolveConflict = React6__namespace.useCallback(
314
- (conflictIndex, resolution) => {
315
- setMergeState((prev) => ({
316
- ...prev,
317
- resolved: {
318
- ...prev.resolved,
319
- [conflictIndex]: resolution
320
- }
321
- }));
322
- onMergeConflict?.(resolution);
323
- },
324
- [onMergeConflict]
325
- );
326
- const getFileStats = React6__namespace.useCallback(
327
- (file1, file2) => {
328
- const lines1 = file1.content.split("\n");
329
- const lines2 = file2.content.split("\n");
330
- let added = 0;
331
- let removed = 0;
332
- let modified = 0;
333
- const maxLines = Math.max(lines1.length, lines2.length);
334
- for (let i = 0; i < maxLines; i++) {
335
- const line1 = lines1[i];
336
- const line2 = lines2[i];
337
- if (line1 === void 0) {
338
- added++;
339
- } else if (line2 === void 0) {
340
- removed++;
341
- } else if (line1 !== line2) {
342
- modified++;
343
- }
344
- }
345
- return { added, removed, modified };
346
- },
347
- []
348
- );
349
- const renderFileSelector = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 flex-wrap", children: files.map((file, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
350
- /* @__PURE__ */ jsxRuntime.jsxs(
351
- button.Button,
352
- {
353
- variant: selectedFiles.includes(file.id) ? "default" : "outline",
354
- size: "sm",
355
- onClick: () => {
356
- if (view === "three-way") {
357
- setSelectedFiles((prev) => {
358
- if (prev.includes(file.id)) {
359
- return prev.filter((id) => id !== file.id);
360
- }
361
- return prev.length < 3 ? [...prev, file.id] : [prev[1], prev[2], file.id];
362
- });
363
- } else {
364
- setSelectedFiles((prev) => {
365
- if (prev.includes(file.id)) {
366
- return prev.filter((id) => id !== file.id);
367
- }
368
- return prev.length < 2 ? [...prev, file.id] : [prev[1], file.id];
369
- });
370
- }
371
- onFileSelect?.(file.id);
372
- },
373
- className: "gap-2",
374
- children: [
375
- file.label || file.filename,
376
- file.version && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: file.version })
377
- ]
378
- }
379
- ),
380
- index < files.length - 1 && view !== "three-way" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "vs" })
381
- ] }, file.id)) }), "renderFileSelector");
382
- const renderSideBySide = /* @__PURE__ */ __name(() => {
383
- const [file1, file2] = selectedFiles.map((id) => files.find((f) => f.id === id)).filter(Boolean);
384
- if (!file1 || !file2) {
385
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-32 text-muted-foreground", children: "Select two files to compare" });
386
- }
387
- const stats = getFileStats(file1, file2);
388
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
389
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between border-b px-4 py-2 bg-muted/30", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
390
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Comparison" }),
391
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 text-xs", children: [
392
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-green-600", children: [
393
- "+",
394
- stats.added
395
- ] }),
396
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-red-600", children: [
397
- "-",
398
- stats.removed
399
- ] }),
400
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-yellow-600", children: [
401
- "~",
402
- stats.modified
403
- ] })
404
- ] })
405
- ] }) }),
406
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntime.jsx(
407
- diff.CodeDiff,
408
- {
409
- oldCode: file1.content,
410
- newCode: file2.content,
411
- language: file1.language,
412
- oldFilename: file1.filename,
413
- newFilename: file2.filename,
414
- showLineNumbers,
415
- showCopyButton: false,
416
- maxHeight: "100%",
417
- defaultView: "split",
418
- className: "border-0 rounded-none h-full"
419
- }
420
- ) })
421
- ] });
422
- }, "renderSideBySide");
423
- const renderUnified = /* @__PURE__ */ __name(() => {
424
- const [file1, file2] = selectedFiles.map((id) => files.find((f) => f.id === id)).filter(Boolean);
425
- if (!file1 || !file2) {
426
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-32 text-muted-foreground", children: "Select two files to compare" });
427
- }
428
- return /* @__PURE__ */ jsxRuntime.jsx(
429
- diff.CodeDiff,
430
- {
431
- oldCode: file1.content,
432
- newCode: file2.content,
433
- language: file1.language,
434
- filename: `${file1.filename} \u2192 ${file2.filename}`,
435
- showLineNumbers,
436
- showCopyButton: false,
437
- maxHeight: "100%",
438
- defaultView: "unified",
439
- className: "border-0 rounded-none"
440
- }
441
- );
442
- }, "renderUnified");
443
- const renderThreeWay = /* @__PURE__ */ __name(() => {
444
- const [base, current, incoming] = selectedFiles.map((id) => files.find((f) => f.id === id)).filter(Boolean);
445
- if (!base || !current || !incoming) {
446
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-32 text-muted-foreground", children: "Select three files for three-way merge (base, current, incoming)" });
447
- }
448
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-0 h-full", children: [
449
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-r", children: [
450
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b px-4 py-2 bg-muted/30", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium", children: [
451
- "Base (",
452
- base.filename,
453
- ")"
454
- ] }) }),
455
- /* @__PURE__ */ jsxRuntime.jsx(
456
- scrollArea.ScrollArea,
457
- {
458
- className: "h-full",
459
- ref: (ref2) => {
460
- scrollRefs.current["base"] = ref2;
461
- },
462
- onScrollCapture: (e) => {
463
- const target = e.target;
464
- handleScroll("base", target.scrollTop);
465
- },
466
- children: /* @__PURE__ */ jsxRuntime.jsx(
467
- snippet.CodeSnippet,
468
- {
469
- code: base.content,
470
- language: base.language,
471
- showLineNumbers,
472
- showCopyButton: false,
473
- showHeader: false,
474
- className: "border-0 rounded-none"
475
- }
476
- )
477
- }
478
- )
479
- ] }),
480
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-r", children: [
481
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b px-4 py-2 bg-blue-500/10", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-blue-600 dark:text-blue-400", children: [
482
- "Current (",
483
- current.filename,
484
- ")"
485
- ] }) }),
486
- /* @__PURE__ */ jsxRuntime.jsx(
487
- scrollArea.ScrollArea,
488
- {
489
- className: "h-full",
490
- ref: (ref2) => {
491
- scrollRefs.current["current"] = ref2;
492
- },
493
- onScrollCapture: (e) => {
494
- const target = e.target;
495
- handleScroll("current", target.scrollTop);
496
- },
497
- children: /* @__PURE__ */ jsxRuntime.jsx(
498
- snippet.CodeSnippet,
499
- {
500
- code: current.content,
501
- language: current.language,
502
- showLineNumbers,
503
- showCopyButton: false,
504
- showHeader: false,
505
- className: "border-0 rounded-none"
506
- }
507
- )
508
- }
509
- )
510
- ] }),
511
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
512
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b px-4 py-2 bg-green-500/10", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-green-600 dark:text-green-400", children: [
513
- "Incoming (",
514
- incoming.filename,
515
- ")"
516
- ] }) }),
517
- /* @__PURE__ */ jsxRuntime.jsx(
518
- scrollArea.ScrollArea,
519
- {
520
- className: "h-full",
521
- ref: (ref2) => {
522
- scrollRefs.current["incoming"] = ref2;
523
- },
524
- onScrollCapture: (e) => {
525
- const target = e.target;
526
- handleScroll("incoming", target.scrollTop);
527
- },
528
- children: /* @__PURE__ */ jsxRuntime.jsx(
529
- snippet.CodeSnippet,
530
- {
531
- code: incoming.content,
532
- language: incoming.language,
533
- showLineNumbers,
534
- showCopyButton: false,
535
- showHeader: false,
536
- className: "border-0 rounded-none"
537
- }
538
- )
539
- }
540
- )
541
- ] })
542
- ] });
543
- }, "renderThreeWay");
544
- const renderMergeConflicts = /* @__PURE__ */ __name(() => {
545
- if (!allowMerge || mergeState.conflicts.length === 0) return null;
546
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t bg-muted/30", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-2", children: [
547
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
548
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Merge Conflicts" }),
549
- /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "destructive", className: "text-xs", children: mergeState.conflicts.length })
550
- ] }),
551
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 space-y-2", children: mergeState.conflicts.map((conflict, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs", children: [
552
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
553
- "Lines ",
554
- conflict.startLine,
555
- "-",
556
- conflict.endLine
557
- ] }),
558
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
559
- /* @__PURE__ */ jsxRuntime.jsx(
560
- button.Button,
561
- {
562
- variant: "outline",
563
- size: "sm",
564
- onClick: () => resolveConflict(index, "current"),
565
- className: "h-6 text-xs",
566
- children: "Keep Current"
567
- }
568
- ),
569
- /* @__PURE__ */ jsxRuntime.jsx(
570
- button.Button,
571
- {
572
- variant: "outline",
573
- size: "sm",
574
- onClick: () => resolveConflict(index, "incoming"),
575
- className: "h-6 text-xs",
576
- children: "Accept Incoming"
577
- }
578
- )
579
- ] })
580
- ] }, index)) })
581
- ] }) });
582
- }, "renderMergeConflicts");
583
- return /* @__PURE__ */ jsxRuntime.jsxs(
584
- "div",
585
- {
586
- ref,
587
- className: utils.cn(codeCompareVariants({ layout, size }), className),
588
- style: { height },
589
- ...props,
590
- children: [
591
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
592
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4", children: renderFileSelector() }),
593
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
594
- /* @__PURE__ */ jsxRuntime.jsx(tabs.Tabs, { value: view, onValueChange: (value) => setView(value), children: /* @__PURE__ */ jsxRuntime.jsxs(tabs.TabsList, { className: "grid w-full grid-cols-3", children: [
595
- /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsTrigger, { value: "side-by-side", className: "text-xs", children: "Side by Side" }),
596
- /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsTrigger, { value: "unified", className: "text-xs", children: "Unified" }),
597
- /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsTrigger, { value: "three-way", className: "text-xs", children: "Three-way" })
598
- ] }) }),
599
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsx(
600
- button.Button,
601
- {
602
- variant: "ghost",
603
- size: "sm",
604
- onClick: copyComparison,
605
- className: "h-8 w-8 p-0",
606
- children: copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5" })
607
- }
608
- ),
609
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu, { children: [
610
- /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(button.Button, { variant: "ghost", size: "sm", className: "h-8 w-8 p-0", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { className: "h-3.5 w-3.5" }) }) }),
611
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenuContent, { align: "end", children: [
612
- /* @__PURE__ */ jsxRuntime.jsxs(
613
- dropdownMenu.DropdownMenuItem,
614
- {
615
- onClick: () => setSelectedFiles([]),
616
- className: "gap-2",
617
- children: [
618
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "h-4 w-4" }),
619
- "Reset Selection"
620
- ]
621
- }
622
- ),
623
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenuItem, { className: "gap-2", children: [
624
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings, { className: "h-4 w-4" }),
625
- "Settings"
626
- ] })
627
- ] })
628
- ] })
629
- ] })
630
- ] }),
631
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-h-0", children: [
632
- view === "side-by-side" && renderSideBySide(),
633
- view === "unified" && renderUnified(),
634
- view === "three-way" && renderThreeWay()
635
- ] }),
636
- renderMergeConflicts()
637
- ]
638
- }
639
- );
640
- }
641
- );
642
- CodeCompare.displayName = "CodeCompare";
643
- var codeDiffVariants = classVarianceAuthority.cva(
644
- "relative overflow-hidden rounded-lg border bg-muted/50",
645
- {
646
- variants: {
647
- theme: {
648
- dark: "bg-slate-950 border-slate-800",
649
- light: "bg-slate-50 border-slate-200",
650
- github: "bg-white border-slate-200",
651
- "github-dark": "bg-slate-900 border-slate-700"
652
- },
653
- size: {
654
- sm: "text-xs",
655
- default: "text-sm",
656
- lg: "text-base"
657
- }
658
- },
659
- defaultVariants: {
660
- theme: "dark",
661
- size: "default"
662
- }
663
- }
664
- );
665
- var DiffLine = React6__namespace.memo(
666
- ({
667
- change,
668
- showLineNumbers,
669
- isUnified = false,
670
- highlightedContent
671
- }) => {
672
- const getLineClasses = /* @__PURE__ */ __name(() => {
673
- const base = "group relative flex min-h-[1.5rem] items-center py-0.5";
674
- if (isUnified) {
675
- switch (change.type) {
676
- case "add":
677
- return utils.cn(base, "bg-green-500/10 border-l-2 border-l-green-500");
678
- case "remove":
679
- return utils.cn(base, "bg-red-500/10 border-l-2 border-l-red-500");
680
- default:
681
- return utils.cn(base, "hover:bg-muted/50");
682
- }
683
- }
684
- return utils.cn(base, "hover:bg-muted/50");
685
- }, "getLineClasses");
686
- const getLinePrefix = /* @__PURE__ */ __name(() => {
687
- if (!isUnified) return null;
688
- switch (change.type) {
689
- case "add":
690
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-3 w-3 text-green-500 mr-2 flex-shrink-0" });
691
- case "remove":
692
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "h-3 w-3 text-red-500 mr-2 flex-shrink-0" });
693
- default:
694
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-3 mr-2 flex-shrink-0" });
695
- }
696
- }, "getLinePrefix");
697
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: getLineClasses(), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center px-4 w-full", children: [
698
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 mr-4", children: !isUnified ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
699
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block w-8 select-none text-right text-xs text-muted-foreground", children: change.oldLineNumber || "" }),
700
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block w-8 select-none text-right text-xs text-muted-foreground", children: change.newLineNumber || "" })
701
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block w-8 select-none text-right text-xs text-muted-foreground", children: change.lineNumber }) }),
702
- getLinePrefix(),
703
- /* @__PURE__ */ jsxRuntime.jsx(
704
- "div",
705
- {
706
- className: "flex-1 overflow-x-auto font-mono",
707
- dangerouslySetInnerHTML: {
708
- __html: highlightedContent || change.content
709
- }
710
- }
711
- )
712
- ] }) });
713
- }
714
- );
715
- DiffLine.displayName = "DiffLine";
716
- function generateDiff(oldCode, newCode) {
717
- const oldLines = oldCode.split("\n");
718
- const newLines = newCode.split("\n");
719
- const changes = [];
720
- let oldIndex = 0;
721
- let newIndex = 0;
722
- let lineNumber = 1;
723
- while (oldIndex < oldLines.length || newIndex < newLines.length) {
724
- const oldLine = oldLines[oldIndex];
725
- const newLine = newLines[newIndex];
726
- if (oldIndex >= oldLines.length) {
727
- changes.push({
728
- type: "add",
729
- lineNumber: lineNumber++,
730
- content: newLine,
731
- newLineNumber: newIndex + 1
732
- });
733
- newIndex++;
734
- } else if (newIndex >= newLines.length) {
735
- changes.push({
736
- type: "remove",
737
- lineNumber: lineNumber++,
738
- content: oldLine,
739
- oldLineNumber: oldIndex + 1
740
- });
741
- oldIndex++;
742
- } else if (oldLine === newLine) {
743
- changes.push({
744
- type: "unchanged",
745
- lineNumber: lineNumber++,
746
- content: oldLine,
747
- oldLineNumber: oldIndex + 1,
748
- newLineNumber: newIndex + 1
749
- });
750
- oldIndex++;
751
- newIndex++;
752
- } else {
753
- changes.push({
754
- type: "remove",
755
- lineNumber: lineNumber++,
756
- content: oldLine,
757
- oldLineNumber: oldIndex + 1
758
- });
759
- changes.push({
760
- type: "add",
761
- lineNumber: lineNumber++,
762
- content: newLine,
763
- newLineNumber: newIndex + 1
764
- });
765
- oldIndex++;
766
- newIndex++;
767
- }
768
- }
769
- return changes;
770
- }
771
- __name(generateDiff, "generateDiff");
772
- var CodeDiff2 = React6__namespace.forwardRef(
773
- ({
774
- className,
775
- theme,
776
- size,
777
- oldCode,
778
- newCode,
779
- language = "text",
780
- filename,
781
- oldFilename,
782
- newFilename,
783
- showLineNumbers = true,
784
- showCopyButton = true,
785
- maxHeight = "500px",
786
- defaultView = "unified",
787
- collapseUnchanged = false,
788
- contextLines = 3,
789
- ...props
790
- }, ref) => {
791
- const [view, setView] = React6__namespace.useState(defaultView);
792
- const [copied, setCopied] = React6__namespace.useState(false);
793
- const [isLoading, setIsLoading] = React6__namespace.useState(true);
794
- const [highlightedOldCode, setHighlightedOldCode] = React6__namespace.useState("");
795
- const [highlightedNewCode, setHighlightedNewCode] = React6__namespace.useState("");
796
- const [changes, setChanges] = React6__namespace.useState([]);
797
- const themeMap = {
798
- dark: "github-dark",
799
- light: "github-light",
800
- github: "github-light",
801
- "github-dark": "github-dark"
802
- };
803
- React6__namespace.useEffect(() => {
804
- const highlightCode = /* @__PURE__ */ __name(async () => {
805
- setIsLoading(true);
806
- try {
807
- const [oldHighlighted, newHighlighted] = await Promise.all([
808
- shiki.codeToHtml(oldCode, {
809
- lang: language,
810
- theme: themeMap[theme || "dark"]
811
- }),
812
- shiki.codeToHtml(newCode, {
813
- lang: language,
814
- theme: themeMap[theme || "dark"]
815
- })
816
- ]);
817
- const extractContent = /* @__PURE__ */ __name((html) => {
818
- const tempDiv = document.createElement("div");
819
- tempDiv.innerHTML = html;
820
- const codeElement = tempDiv.querySelector("code");
821
- return codeElement?.innerHTML || html;
822
- }, "extractContent");
823
- setHighlightedOldCode(extractContent(oldHighlighted));
824
- setHighlightedNewCode(extractContent(newHighlighted));
825
- const diffChanges = generateDiff(oldCode, newCode);
826
- setChanges(diffChanges);
827
- } catch (error) {
828
- console.error("Failed to highlight code:", error);
829
- setHighlightedOldCode(oldCode);
830
- setHighlightedNewCode(newCode);
831
- setChanges(generateDiff(oldCode, newCode));
832
- } finally {
833
- setIsLoading(false);
834
- }
835
- }, "highlightCode");
836
- highlightCode();
837
- }, [oldCode, newCode, language, theme]);
838
- const copyToClipboard = React6__namespace.useCallback(async () => {
839
- try {
840
- const diffText = view === "unified" ? changes.map((change) => {
841
- const prefix = change.type === "add" ? "+" : change.type === "remove" ? "-" : " ";
842
- return `${prefix}${change.content}`;
843
- }).join("\n") : `--- ${oldFilename || "old"}
844
- +++ ${newFilename || "new"}
845
- ${oldCode}
846
-
847
- ${newCode}`;
848
- await navigator.clipboard.writeText(diffText);
849
- setCopied(true);
850
- setTimeout(() => setCopied(false), 2e3);
851
- } catch (error) {
852
- console.error("Failed to copy diff:", error);
853
- }
854
- }, [changes, view, oldCode, newCode, oldFilename, newFilename]);
855
- const filteredChanges = React6__namespace.useMemo(() => {
856
- if (!collapseUnchanged) return changes;
857
- const result = [];
858
- let i = 0;
859
- while (i < changes.length) {
860
- const change = changes[i];
861
- if (change.type !== "unchanged") {
862
- result.push(change);
863
- i++;
864
- continue;
865
- }
866
- const unchangedStart = i;
867
- while (i < changes.length && changes[i].type === "unchanged") {
868
- i++;
869
- }
870
- const unchangedCount = i - unchangedStart;
871
- if (unchangedCount <= contextLines * 2) {
872
- for (let j = unchangedStart; j < i; j++) {
873
- result.push(changes[j]);
874
- }
875
- } else {
876
- for (let j = unchangedStart; j < unchangedStart + contextLines; j++) {
877
- result.push(changes[j]);
878
- }
879
- result.push({
880
- type: "unchanged",
881
- lineNumber: -1,
882
- content: `... ${unchangedCount - contextLines * 2} unchanged lines ...`
883
- });
884
- for (let j = i - contextLines; j < i; j++) {
885
- result.push(changes[j]);
886
- }
887
- }
888
- }
889
- return result;
890
- }, [changes, collapseUnchanged, contextLines]);
891
- const stats = React6__namespace.useMemo(() => {
892
- const additions = changes.filter((c) => c.type === "add").length;
893
- const deletions = changes.filter((c) => c.type === "remove").length;
894
- return { additions, deletions };
895
- }, [changes]);
896
- const renderUnifiedView = /* @__PURE__ */ __name(() => {
897
- const oldLines = highlightedOldCode.split("\n");
898
- const newLines = highlightedNewCode.split("\n");
899
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono", children: filteredChanges.map((change, index) => {
900
- if (change.lineNumber === -1) {
901
- return /* @__PURE__ */ jsxRuntime.jsx(
902
- "div",
903
- {
904
- className: "flex items-center justify-center py-2 text-muted-foreground bg-muted/30",
905
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: change.content })
906
- },
907
- index
908
- );
909
- }
910
- let highlightedContent = change.content;
911
- if (change.type === "add" && change.newLineNumber) {
912
- highlightedContent = newLines[change.newLineNumber - 1] || change.content;
913
- } else if (change.type === "remove" && change.oldLineNumber) {
914
- highlightedContent = oldLines[change.oldLineNumber - 1] || change.content;
915
- } else if (change.type === "unchanged" && change.oldLineNumber) {
916
- highlightedContent = oldLines[change.oldLineNumber - 1] || change.content;
917
- }
918
- return /* @__PURE__ */ jsxRuntime.jsx(
919
- DiffLine,
920
- {
921
- change,
922
- showLineNumbers,
923
- isUnified: true,
924
- highlightedContent
925
- },
926
- index
927
- );
928
- }) });
929
- }, "renderUnifiedView");
930
- const renderSplitView = /* @__PURE__ */ __name(() => {
931
- const oldLines = highlightedOldCode.split("\n");
932
- const newLines = highlightedNewCode.split("\n");
933
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-0", children: [
934
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-r", children: [
935
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b px-4 py-2 bg-red-500/10", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-red-600 dark:text-red-400", children: oldFilename || filename || "Old" }) }),
936
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono", children: oldLines.map((line, index) => /* @__PURE__ */ jsxRuntime.jsx(
937
- DiffLine,
938
- {
939
- change: {
940
- type: "remove",
941
- lineNumber: index + 1,
942
- content: line,
943
- oldLineNumber: index + 1
944
- },
945
- showLineNumbers,
946
- highlightedContent: line
947
- },
948
- `old-${index}`
949
- )) })
950
- ] }),
951
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
952
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b px-4 py-2 bg-green-500/10", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-green-600 dark:text-green-400", children: newFilename || filename || "New" }) }),
953
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono", children: newLines.map((line, index) => /* @__PURE__ */ jsxRuntime.jsx(
954
- DiffLine,
955
- {
956
- change: {
957
- type: "add",
958
- lineNumber: index + 1,
959
- content: line,
960
- newLineNumber: index + 1
961
- },
962
- showLineNumbers,
963
- highlightedContent: line
964
- },
965
- `new-${index}`
966
- )) })
967
- ] })
968
- ] });
969
- }, "renderSplitView");
970
- return /* @__PURE__ */ jsxRuntime.jsxs(
971
- "div",
972
- {
973
- ref,
974
- className: utils.cn(codeDiffVariants({ theme, size, className })),
975
- ...props,
976
- children: [
977
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
978
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
979
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
980
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { className: "h-4 w-4 text-muted-foreground" }),
981
- filename && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: filename }),
982
- language && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: language })
983
- ] }),
984
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
985
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
986
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-3 w-3 text-green-500" }),
987
- stats.additions
988
- ] }),
989
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
990
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "h-3 w-3 text-red-500" }),
991
- stats.deletions
992
- ] })
993
- ] })
994
- ] }),
995
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
996
- /* @__PURE__ */ jsxRuntime.jsxs(
997
- toggleGroup.ToggleGroup,
998
- {
999
- type: "single",
1000
- value: view,
1001
- onValueChange: (value) => value && setView(value),
1002
- size: "sm",
1003
- children: [
1004
- /* @__PURE__ */ jsxRuntime.jsx(toggleGroup.ToggleGroupItem, { value: "unified", "aria-label": "Unified view", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "h-3 w-3" }) }),
1005
- /* @__PURE__ */ jsxRuntime.jsx(toggleGroup.ToggleGroupItem, { value: "split", "aria-label": "Split view", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SplitSquareHorizontal, { className: "h-3 w-3" }) })
1006
- ]
1007
- }
1008
- ),
1009
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsxs(
1010
- button.Button,
1011
- {
1012
- variant: "ghost",
1013
- size: "sm",
1014
- onClick: copyToClipboard,
1015
- className: "h-8 w-8 p-0",
1016
- children: [
1017
- copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5" }),
1018
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: copied ? "Copied" : "Copy diff" })
1019
- ]
1020
- }
1021
- )
1022
- ] })
1023
- ] }),
1024
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-auto", style: { maxHeight }, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 space-y-2", children: Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
1025
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-4 w-8" }),
1026
- /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-4 flex-1" })
1027
- ] }, i)) }) : view === "unified" ? renderUnifiedView() : renderSplitView() })
1028
- ]
1029
- }
1030
- );
1031
- }
1032
- );
1033
- CodeDiff2.displayName = "CodeDiff";
1034
- var defaultLanguages = [
1035
- "javascript",
1036
- "typescript",
1037
- "python",
1038
- "java",
1039
- "csharp",
1040
- "cpp",
1041
- "c",
1042
- "go",
1043
- "rust",
1044
- "ruby",
1045
- "php",
1046
- "swift",
1047
- "kotlin",
1048
- "dart",
1049
- "html",
1050
- "css",
1051
- "scss",
1052
- "json",
1053
- "xml",
1054
- "yaml",
1055
- "sql",
1056
- "markdown",
1057
- "shell",
1058
- "plaintext"
1059
- ];
1060
- var languageDisplayNames = {
1061
- javascript: "JavaScript",
1062
- typescript: "TypeScript",
1063
- python: "Python",
1064
- java: "Java",
1065
- csharp: "C#",
1066
- cpp: "C++",
1067
- c: "C",
1068
- go: "Go",
1069
- rust: "Rust",
1070
- ruby: "Ruby",
1071
- php: "PHP",
1072
- swift: "Swift",
1073
- kotlin: "Kotlin",
1074
- dart: "Dart",
1075
- html: "HTML",
1076
- css: "CSS",
1077
- scss: "SCSS",
1078
- json: "JSON",
1079
- xml: "XML",
1080
- yaml: "YAML",
1081
- sql: "SQL",
1082
- markdown: "Markdown",
1083
- shell: "Shell",
1084
- plaintext: "Plain Text"
1085
- };
1086
- var CodeEditor = React6__namespace.forwardRef(
1087
- ({
1088
- value,
1089
- defaultValue = "",
1090
- language = "javascript",
1091
- height = "400px",
1092
- theme: themeProp = "auto",
1093
- onChange,
1094
- onMount,
1095
- readOnly = false,
1096
- lineNumbers = true,
1097
- minimap = false,
1098
- wordWrap = "on",
1099
- fontSize = 14,
1100
- className,
1101
- showCopyButton = true,
1102
- showLanguageSelector = true,
1103
- availableLanguages = defaultLanguages
1104
- }, ref) => {
1105
- const { theme: systemTheme } = nextThemes.useTheme();
1106
- const [selectedLanguage, setSelectedLanguage] = React6__namespace.useState(language);
1107
- const [copied, setCopied] = React6__namespace.useState(false);
1108
- const [editorValue, setEditorValue] = React6__namespace.useState(value || defaultValue);
1109
- React6__namespace.useEffect(() => {
1110
- if (value !== void 0) {
1111
- setEditorValue(value);
1112
- }
1113
- }, [value]);
1114
- const handleCopy = React6__namespace.useCallback(async () => {
1115
- try {
1116
- await navigator.clipboard.writeText(editorValue);
1117
- setCopied(true);
1118
- setTimeout(() => setCopied(false), 2e3);
1119
- } catch (err) {
1120
- console.error("Failed to copy:", err);
1121
- }
1122
- }, [editorValue]);
1123
- const handleChange = React6__namespace.useCallback(
1124
- (newValue, ev) => {
1125
- setEditorValue(newValue || "");
1126
- if (onChange) {
1127
- onChange(newValue, ev);
1128
- }
1129
- },
1130
- [onChange]
1131
- );
1132
- const resolveTheme = React6__namespace.useMemo(() => {
1133
- if (themeProp === "auto") {
1134
- return systemTheme === "dark" ? "vs-dark" : "light";
1135
- }
1136
- return themeProp === "dark" ? "vs-dark" : "light";
1137
- }, [themeProp, systemTheme]);
1138
- return /* @__PURE__ */ jsxRuntime.jsxs(
1139
- "div",
1140
- {
1141
- ref,
1142
- className: utils.cn(
1143
- "relative overflow-hidden rounded-md border bg-background",
1144
- className
1145
- ),
1146
- children: [
1147
- (showLanguageSelector || showCopyButton) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b bg-muted/50 px-3 py-2", children: [
1148
- showLanguageSelector && /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu, { children: [
1149
- /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
1150
- button.Button,
1151
- {
1152
- variant: "ghost",
1153
- size: "sm",
1154
- className: "h-8 gap-1 px-2 text-xs font-mono",
1155
- children: [
1156
- languageDisplayNames[selectedLanguage] || selectedLanguage,
1157
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-3 w-3" })
1158
- ]
1159
- }
1160
- ) }),
1161
- /* @__PURE__ */ jsxRuntime.jsx(
1162
- dropdownMenu.DropdownMenuContent,
1163
- {
1164
- align: "start",
1165
- className: "max-h-80 overflow-auto",
1166
- children: availableLanguages.map((lang) => /* @__PURE__ */ jsxRuntime.jsx(
1167
- dropdownMenu.DropdownMenuItem,
1168
- {
1169
- onClick: () => setSelectedLanguage(lang),
1170
- className: "font-mono text-xs",
1171
- children: languageDisplayNames[lang] || lang
1172
- },
1173
- lang
1174
- ))
1175
- }
1176
- )
1177
- ] }),
1178
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsx(
1179
- button.Button,
1180
- {
1181
- variant: "ghost",
1182
- size: "sm",
1183
- className: "h-8 gap-1.5 px-2 text-xs",
1184
- onClick: handleCopy,
1185
- disabled: !editorValue,
1186
- children: copied ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1187
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3" }),
1188
- "Copied!"
1189
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1190
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3 w-3" }),
1191
- "Copy"
1192
- ] })
1193
- }
1194
- )
1195
- ] }),
1196
- /* @__PURE__ */ jsxRuntime.jsx(
1197
- Editor__default.default,
1198
- {
1199
- height,
1200
- defaultLanguage: language,
1201
- language: selectedLanguage,
1202
- value: editorValue,
1203
- defaultValue,
1204
- theme: resolveTheme,
1205
- onChange: handleChange,
1206
- onMount,
1207
- options: {
1208
- readOnly,
1209
- lineNumbers: lineNumbers ? "on" : "off",
1210
- minimap: {
1211
- enabled: minimap
1212
- },
1213
- wordWrap,
1214
- fontSize,
1215
- scrollBeyondLastLine: false,
1216
- automaticLayout: true,
1217
- tabSize: 2,
1218
- insertSpaces: true,
1219
- formatOnPaste: true,
1220
- formatOnType: true,
1221
- scrollbar: {
1222
- vertical: "auto",
1223
- horizontal: "auto",
1224
- verticalScrollbarSize: 10,
1225
- horizontalScrollbarSize: 10
1226
- },
1227
- padding: {
1228
- top: 16,
1229
- bottom: 16
1230
- }
1231
- }
1232
- }
1233
- )
1234
- ]
1235
- }
1236
- );
1237
- }
1238
- );
1239
- CodeEditor.displayName = "CodeEditor";
1240
- var codeExplorerVariants = classVarianceAuthority.cva(
1241
- "relative flex flex-col overflow-hidden rounded-lg border bg-background",
1242
- {
1243
- variants: {
1244
- size: {
1245
- sm: "text-xs",
1246
- default: "text-sm",
1247
- lg: "text-base"
1248
- }
1249
- },
1250
- defaultVariants: {
1251
- size: "default"
1252
- }
1253
- }
1254
- );
1255
- var getFileIcon = /* @__PURE__ */ __name((fileName, isFolder = false) => {
1256
- if (isFolder) return lucideReact.Folder;
1257
- const ext = fileName.split(".").pop()?.toLowerCase();
1258
- switch (ext) {
1259
- case "js":
1260
- case "jsx":
1261
- case "ts":
1262
- case "tsx":
1263
- case "vue":
1264
- case "svelte":
1265
- return lucideReact.FileCode;
1266
- case "json":
1267
- case "xml":
1268
- case "yaml":
1269
- case "yml":
1270
- case "toml":
1271
- case "ini":
1272
- return lucideReact.FileText;
1273
- case "png":
1274
- case "jpg":
1275
- case "jpeg":
1276
- case "gif":
1277
- case "svg":
1278
- case "webp":
1279
- case "ico":
1280
- return lucideReact.FileImage;
1281
- default:
1282
- return lucideReact.File;
1283
- }
1284
- }, "getFileIcon");
1285
- var formatFileSize = /* @__PURE__ */ __name((bytes) => {
1286
- if (!bytes) return "";
1287
- const units = ["B", "KB", "MB", "GB"];
1288
- let size = bytes;
1289
- let unitIndex = 0;
1290
- while (size >= 1024 && unitIndex < units.length - 1) {
1291
- size /= 1024;
1292
- unitIndex++;
1293
- }
1294
- return `${size.toFixed(1)} ${units[unitIndex]}`;
1295
- }, "formatFileSize");
1296
- var formatModifiedDate = /* @__PURE__ */ __name((date) => {
1297
- if (!date) return "";
1298
- const now = /* @__PURE__ */ new Date();
1299
- const diff = now.getTime() - date.getTime();
1300
- const days = Math.floor(diff / (1e3 * 60 * 60 * 24));
1301
- if (days === 0) return "Today";
1302
- if (days === 1) return "Yesterday";
1303
- if (days < 7) return `${days} days ago`;
1304
- if (days < 30) return `${Math.floor(days / 7)} weeks ago`;
1305
- if (days < 365) return `${Math.floor(days / 30)} months ago`;
1306
- return `${Math.floor(days / 365)} years ago`;
1307
- }, "formatModifiedDate");
1308
- var CodeExplorer = React6__namespace.forwardRef(
1309
- ({
1310
- className,
1311
- size,
1312
- files,
1313
- onFileSelect,
1314
- onFolderToggle,
1315
- selectedFile,
1316
- showSearch = true,
1317
- showFileIcons = true,
1318
- showFileSize = false,
1319
- showModifiedDate = false,
1320
- height = "400px",
1321
- defaultExpanded = [],
1322
- searchPlaceholder = "Search files...",
1323
- emptyMessage = "No files found",
1324
- ...props
1325
- }, ref) => {
1326
- const [searchTerm, setSearchTerm] = React6__namespace.useState("");
1327
- const [expandedFolders, setExpandedFolders] = React6__namespace.useState(
1328
- new Set(defaultExpanded)
1329
- );
1330
- const buildFileTree = React6__namespace.useCallback(
1331
- (nodes) => {
1332
- return nodes.map((node) => ({
1333
- ...node,
1334
- isExpanded: expandedFolders.has(node.id),
1335
- children: node.children ? buildFileTree(node.children) : void 0
1336
- }));
1337
- },
1338
- [expandedFolders]
1339
- );
1340
- const filterFiles = React6__namespace.useCallback(
1341
- (nodes, term) => {
1342
- if (!term) return nodes;
1343
- const filtered = [];
1344
- for (const node of nodes) {
1345
- if (node.name.toLowerCase().includes(term.toLowerCase())) {
1346
- filtered.push(node);
1347
- } else if (node.type === "folder" && node.children) {
1348
- const filteredChildren = filterFiles(node.children, term);
1349
- if (filteredChildren.length > 0) {
1350
- filtered.push({
1351
- ...node,
1352
- children: filteredChildren,
1353
- isExpanded: true
1354
- // Auto-expand folders with matches
1355
- });
1356
- }
1357
- }
1358
- }
1359
- return filtered;
1360
- },
1361
- []
1362
- );
1363
- const processedFiles = React6__namespace.useMemo(() => {
1364
- const withExpansion = buildFileTree(files);
1365
- return searchTerm ? filterFiles(withExpansion, searchTerm) : withExpansion;
1366
- }, [files, searchTerm, buildFileTree, filterFiles]);
1367
- const toggleFolder = React6__namespace.useCallback(
1368
- (folder) => {
1369
- setExpandedFolders((prev) => {
1370
- const newSet = new Set(prev);
1371
- if (newSet.has(folder.id)) {
1372
- newSet.delete(folder.id);
1373
- } else {
1374
- newSet.add(folder.id);
1375
- }
1376
- return newSet;
1377
- });
1378
- onFolderToggle?.(folder);
1379
- },
1380
- [onFolderToggle]
1381
- );
1382
- const renderFileNode = React6__namespace.useCallback(
1383
- (node, depth = 0) => {
1384
- const Icon = showFileIcons ? getFileIcon(node.name, node.type === "folder") : null;
1385
- const FolderIcon = node.type === "folder" && node.isExpanded ? lucideReact.FolderOpen : lucideReact.Folder;
1386
- const isSelected = selectedFile === node.id || selectedFile === node.path;
1387
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1388
- /* @__PURE__ */ jsxRuntime.jsxs(
1389
- "div",
1390
- {
1391
- className: utils.cn(
1392
- "flex items-center gap-2 px-2 py-1 hover:bg-muted/50 cursor-pointer transition-colors",
1393
- isSelected && "bg-muted",
1394
- "rounded-sm"
1395
- ),
1396
- style: { paddingLeft: `${depth * 16 + 8}px` },
1397
- onClick: () => {
1398
- if (node.type === "folder") {
1399
- toggleFolder(node);
1400
- } else {
1401
- onFileSelect?.(node);
1402
- }
1403
- },
1404
- children: [
1405
- node.type === "folder" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-4 h-4 flex items-center justify-center", children: node.isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-3 w-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-3 w-3" }) }),
1406
- showFileIcons && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-4 h-4 flex items-center justify-center flex-shrink-0", children: node.type === "folder" ? /* @__PURE__ */ jsxRuntime.jsx(FolderIcon, { className: "h-4 w-4 text-blue-500" }) : Icon ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4 text-muted-foreground" }) : null }),
1407
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 truncate", children: node.name }),
1408
- showFileSize && node.type === "file" && node.size && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground flex-shrink-0", children: formatFileSize(node.size) }),
1409
- showModifiedDate && node.modified && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground flex-shrink-0", children: formatModifiedDate(node.modified) })
1410
- ]
1411
- }
1412
- ),
1413
- node.type === "folder" && node.isExpanded && node.children && /* @__PURE__ */ jsxRuntime.jsx("div", { children: node.children.map((child) => renderFileNode(child, depth + 1)) })
1414
- ] }, node.id);
1415
- },
1416
- [
1417
- showFileIcons,
1418
- showFileSize,
1419
- showModifiedDate,
1420
- selectedFile,
1421
- toggleFolder,
1422
- onFileSelect
1423
- ]
1424
- );
1425
- const clearSearch = /* @__PURE__ */ __name(() => {
1426
- setSearchTerm("");
1427
- }, "clearSearch");
1428
- return /* @__PURE__ */ jsxRuntime.jsxs(
1429
- "div",
1430
- {
1431
- ref,
1432
- className: utils.cn(codeExplorerVariants({ size }), className),
1433
- style: { height },
1434
- ...props,
1435
- children: [
1436
- showSearch && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 border-b px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1", children: [
1437
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-2 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
1438
- /* @__PURE__ */ jsxRuntime.jsx(
1439
- input.Input,
1440
- {
1441
- value: searchTerm,
1442
- onChange: (e) => setSearchTerm(e.target.value),
1443
- placeholder: searchPlaceholder,
1444
- className: "pl-8 pr-8 h-8"
1445
- }
1446
- ),
1447
- searchTerm && /* @__PURE__ */ jsxRuntime.jsx(
1448
- button.Button,
1449
- {
1450
- variant: "ghost",
1451
- size: "sm",
1452
- onClick: clearSearch,
1453
- className: "absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0",
1454
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3 w-3" })
1455
- }
1456
- )
1457
- ] }) }),
1458
- /* @__PURE__ */ jsxRuntime.jsx(scrollArea.ScrollArea, { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2", children: processedFiles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-24 text-muted-foreground", children: searchTerm ? `No files match "${searchTerm}"` : emptyMessage }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: processedFiles.map((node) => renderFileNode(node, 0)) }) }) }),
1459
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t px-4 py-2 text-xs text-muted-foreground", children: [
1460
- (() => {
1461
- const countFiles = /* @__PURE__ */ __name((nodes) => {
1462
- let files2 = 0;
1463
- let folders = 0;
1464
- for (const node of nodes) {
1465
- if (node.type === "file") {
1466
- files2++;
1467
- } else {
1468
- folders++;
1469
- if (node.children) {
1470
- const childCounts = countFiles(node.children);
1471
- files2 += childCounts.files;
1472
- folders += childCounts.folders;
1473
- }
1474
- }
1475
- }
1476
- return { files: files2, folders };
1477
- }, "countFiles");
1478
- const { files: fileCount, folders: folderCount } = countFiles(processedFiles);
1479
- const parts = [];
1480
- if (fileCount > 0)
1481
- parts.push(`${fileCount} file${fileCount === 1 ? "" : "s"}`);
1482
- if (folderCount > 0)
1483
- parts.push(`${folderCount} folder${folderCount === 1 ? "" : "s"}`);
1484
- return parts.join(", ") || "Empty";
1485
- })(),
1486
- searchTerm && /* @__PURE__ */ jsxRuntime.jsx("span", { children: " (filtered)" })
1487
- ] })
1488
- ]
1489
- }
1490
- );
1491
- }
1492
- );
1493
- CodeExplorer.displayName = "CodeExplorer";
1494
- var codePreviewVariants = classVarianceAuthority.cva(
1495
- "relative overflow-hidden rounded-lg border bg-background",
1496
- {
1497
- variants: {
1498
- size: {
1499
- sm: "text-xs",
1500
- default: "text-sm",
1501
- lg: "text-base"
1502
- }
1503
- },
1504
- defaultVariants: {
1505
- size: "default"
1506
- }
1507
- }
1508
- );
1509
- var runHTMLCode = /* @__PURE__ */ __name((files) => {
1510
- const htmlFile = files.find((f) => f.type === "html");
1511
- const cssFiles = files.filter((f) => f.type === "css");
1512
- const jsFiles = files.filter((f) => f.type === "js");
1513
- let html = htmlFile?.content || "<div>No HTML file provided</div>";
1514
- if (cssFiles.length > 0) {
1515
- const cssContent = cssFiles.map((f) => f.content).join("\n");
1516
- html = `<style>${cssContent}</style>
1517
- ${html}`;
1518
- }
1519
- if (jsFiles.length > 0) {
1520
- const jsContent = jsFiles.map((f) => f.content).join("\n");
1521
- html = `${html}
1522
- <script>${jsContent}</script>`;
1523
- }
1524
- return html;
1525
- }, "runHTMLCode");
1526
- var consoleScript = `
2
+ 'use strict';var U=require('react'),classVarianceAuthority=require('class-variance-authority'),lucideReact=require('lucide-react'),shiki=require('shiki'),utils=require('@hanzo/ui/lib/utils'),badge=require('@hanzo/ui/badge'),button=require('@hanzo/ui/button'),skeleton=require('@hanzo/ui/skeleton'),jsxRuntime=require('react/jsx-runtime'),diff=require('@hanzo/ui/code/diff'),snippet=require('@hanzo/ui/code/snippet'),dropdownMenu=require('@hanzo/ui/dropdown-menu'),scrollArea=require('@hanzo/ui/scroll-area'),tabs=require('@hanzo/ui/tabs'),toggleGroup=require('@hanzo/ui/toggle-group'),Xt=require('@monaco-editor/react'),nextThemes=require('next-themes'),input=require('@hanzo/ui/input'),separator=require('@hanzo/ui/separator'),toggle=require('@hanzo/ui/toggle');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var U__namespace=/*#__PURE__*/_interopNamespace(U);var Xt__default=/*#__PURE__*/_interopDefault(Xt);var yt=Object.defineProperty;var x=(d,u)=>yt(d,"name",{value:u,configurable:true});var Be=classVarianceAuthority.cva("relative overflow-hidden rounded-lg border bg-muted/50",{variants:{theme:{dark:"bg-slate-950 border-slate-800",light:"bg-slate-50 border-slate-200",github:"bg-white border-slate-200","github-dark":"bg-slate-900 border-slate-700","vs-dark":"bg-slate-950 border-slate-800",monokai:"bg-slate-900 border-slate-700",dracula:"bg-slate-900 border-purple-800/30",nord:"bg-slate-800 border-slate-600"},size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{theme:"dark",size:"default"}}),Ve=U__namespace.memo(({line:d,lineNumber:u,showLineNumbers:l,isHighlighted:a=false,isDiffAdded:t=false,isDiffRemoved:s=false})=>jsxRuntime.jsxs("div",{className:utils.cn("group relative flex min-h-[1.5rem] items-center px-4 py-0.5",a&&"bg-blue-500/10 border-l-2 border-l-blue-500",t&&"bg-green-500/10 border-l-2 border-l-green-500",s&&"bg-red-500/10 border-l-2 border-l-red-500"),children:[l&&jsxRuntime.jsx("span",{className:"mr-4 inline-block w-8 select-none text-right text-xs text-muted-foreground",children:u}),(t||s)&&jsxRuntime.jsx("span",{className:"mr-2 select-none text-xs",children:t?"+":s?"-":" "}),jsxRuntime.jsx("div",{className:"flex-1 overflow-x-auto",dangerouslySetInnerHTML:{__html:d}})]}));Ve.displayName="CodeLine";var ze=U__namespace.forwardRef(({className:d,theme:u,size:l,code:a,language:t="text",filename:s,showLineNumbers:g=true,highlightLines:w=[],showCopyButton:L=true,maxHeight:E="400px",diff:X,...J},Y)=>{let[O,j]=U__namespace.useState(""),[H,M]=U__namespace.useState(false),[P,$]=U__namespace.useState(true),_={dark:"github-dark",light:"github-light",github:"github-light","github-dark":"github-dark","vs-dark":"dark-plus",monokai:"monokai",dracula:"dracula",nord:"nord"};U__namespace.useEffect(()=>{x(async()=>{$(true);try{let N=await shiki.codeToHtml(a,{lang:t,theme:_[u||"dark"],transformers:[{code(r){let c=r.children.find(b=>b.type==="element"&&b.tagName==="code");c&&"children"in c&&c.children&&(r.children=c.children);}}]}),k=document.createElement("div");k.innerHTML=N;let B=k.querySelector("code");j(B?.innerHTML||N);}catch(N){console.error("Failed to highlight code:",N),j(a);}finally{$(false);}},"highlightCode")();},[a,t,u]);let R=U__namespace.useCallback(async()=>{try{await navigator.clipboard.writeText(a),M(!0),setTimeout(()=>M(!1),2e3);}catch(C){console.error("Failed to copy code:",C);}},[a]),F=O.split(`
3
+ `);return jsxRuntime.jsxs("div",{ref:Y,"data-testid":"code-block",className:utils.cn(Be({theme:u,size:l,className:d})),...J,children:[(s||t||L)&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[s&&jsxRuntime.jsxs("div",{className:"flex items-center gap-1.5",children:[jsxRuntime.jsx(lucideReact.FileText,{className:"h-3.5 w-3.5 text-muted-foreground"}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:s})]}),t&&jsxRuntime.jsx(badge.Badge,{variant:"secondary",className:"text-xs",children:t})]}),L&&jsxRuntime.jsxs(button.Button,{variant:"ghost",size:"sm",onClick:R,className:"h-8 w-8 p-0",children:[H?jsxRuntime.jsx(lucideReact.Check,{className:"h-3.5 w-3.5 text-green-500"}):jsxRuntime.jsx(lucideReact.Copy,{className:"h-3.5 w-3.5"}),jsxRuntime.jsx("span",{className:"sr-only",children:H?"Copied":"Copy code"})]})]}),jsxRuntime.jsx("div",{className:"overflow-auto",style:{maxHeight:E},children:P?jsxRuntime.jsx("div",{className:"p-4 space-y-2",children:Array.from({length:10}).map((C,N)=>jsxRuntime.jsxs("div",{className:"flex items-center gap-4",children:[g&&jsxRuntime.jsx(skeleton.Skeleton,{"data-testid":"skeleton",className:"h-4 w-8"}),jsxRuntime.jsx(skeleton.Skeleton,{"data-testid":"skeleton",className:"h-4 flex-1"})]},N))}):jsxRuntime.jsx("div",{className:"font-mono",children:F.map((C,N)=>{let k=N+1,B=w.includes(k),r=X?.added?.includes(k),c=X?.removed?.includes(k);return jsxRuntime.jsx(Ve,{line:C,lineNumber:k,showLineNumbers:g,isHighlighted:B,isDiffAdded:r,isDiffRemoved:c},N)})})})]})});ze.displayName="CodeBlock";var Ae=classVarianceAuthority.cva("relative flex flex-col overflow-hidden rounded-lg border bg-background",{variants:{layout:{horizontal:"flex-col",vertical:"flex-row"},size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{layout:"horizontal",size:"default"}}),Oe=U__namespace.forwardRef(({className:d,layout:u,size:l,files:a,defaultView:t="side-by-side",showLineNumbers:s=true,showCopyButton:g=true,allowMerge:w=false,conflictMarkers:L=[],onMergeConflict:E,onFileSelect:X,height:J="600px",syncScroll:Y=true,...O},j)=>{let[H,M]=U__namespace.useState(t),[P,$]=U__namespace.useState(()=>a.length>=2?[a[0].id,a[1].id]:a.length>0?[a[0].id]:[]),[_,R]=U__namespace.useState({resolved:{},conflicts:L}),[F,C]=U__namespace.useState(false),N=U__namespace.useRef({}),k=U__namespace.useCallback((o,p)=>{Y&&Object.entries(N.current).forEach(([n,i])=>{n!==o&&i&&(i.scrollTop=p);});},[Y]),B=U__namespace.useCallback(async()=>{let o=P.map(p=>{let n=a.find(i=>i.id===p);return n?`=== ${n.filename} ===
4
+ ${n.content}`:""}).join(`
5
+
6
+ `);try{await navigator.clipboard.writeText(o),C(!0),setTimeout(()=>C(!1),2e3);}catch(p){console.error("Failed to copy comparison:",p);}},[a,P]),r=U__namespace.useCallback((o,p)=>{R(n=>({...n,resolved:{...n.resolved,[o]:p}})),E?.(p);},[E]),c=U__namespace.useCallback((o,p)=>{let n=o.content.split(`
7
+ `),i=p.content.split(`
8
+ `),e=0,f=0,z=0,m=Math.max(n.length,i.length);for(let T=0;T<m;T++){let ce=n[T],ne=i[T];ce===void 0?e++:ne===void 0?f++:ce!==ne&&z++;}return {added:e,removed:f,modified:z}},[]),b=x(()=>jsxRuntime.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:a.map((o,p)=>jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsxs(button.Button,{variant:P.includes(o.id)?"default":"outline",size:"sm",onClick:()=>{$(H==="three-way"?n=>n.includes(o.id)?n.filter(i=>i!==o.id):n.length<3?[...n,o.id]:[n[1],n[2],o.id]:n=>n.includes(o.id)?n.filter(i=>i!==o.id):n.length<2?[...n,o.id]:[n[1],o.id]),X?.(o.id);},className:"gap-2",children:[o.label||o.filename,o.version&&jsxRuntime.jsx(badge.Badge,{variant:"secondary",className:"text-xs",children:o.version})]}),p<a.length-1&&H!=="three-way"&&jsxRuntime.jsx("span",{className:"text-muted-foreground",children:"vs"})]},o.id))}),"renderFileSelector"),V=x(()=>{let[o,p]=P.map(i=>a.find(e=>e.id===i)).filter(Boolean);if(!o||!p)return jsxRuntime.jsx("div",{className:"flex items-center justify-center h-32 text-muted-foreground",children:"Select two files to compare"});let n=c(o,p);return jsxRuntime.jsxs("div",{className:"flex flex-col h-full",children:[jsxRuntime.jsx("div",{className:"flex items-center justify-between border-b px-4 py-2 bg-muted/30",children:jsxRuntime.jsxs("div",{className:"flex items-center gap-4",children:[jsxRuntime.jsx("span",{className:"text-sm font-medium",children:"Comparison"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-3 text-xs",children:[jsxRuntime.jsxs("span",{className:"text-green-600",children:["+",n.added]}),jsxRuntime.jsxs("span",{className:"text-red-600",children:["-",n.removed]}),jsxRuntime.jsxs("span",{className:"text-yellow-600",children:["~",n.modified]})]})]})}),jsxRuntime.jsx("div",{className:"flex-1 min-h-0",children:jsxRuntime.jsx(diff.CodeDiff,{oldCode:o.content,newCode:p.content,language:o.language,oldFilename:o.filename,newFilename:p.filename,showLineNumbers:s,showCopyButton:false,maxHeight:"100%",defaultView:"split",className:"border-0 rounded-none h-full"})})]})},"renderSideBySide"),G=x(()=>{let[o,p]=P.map(n=>a.find(i=>i.id===n)).filter(Boolean);return !o||!p?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-32 text-muted-foreground",children:"Select two files to compare"}):jsxRuntime.jsx(diff.CodeDiff,{oldCode:o.content,newCode:p.content,language:o.language,filename:`${o.filename} \u2192 ${p.filename}`,showLineNumbers:s,showCopyButton:false,maxHeight:"100%",defaultView:"unified",className:"border-0 rounded-none"})},"renderUnified"),Q=x(()=>{let[o,p,n]=P.map(i=>a.find(e=>e.id===i)).filter(Boolean);return !o||!p||!n?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-32 text-muted-foreground",children:"Select three files for three-way merge (base, current, incoming)"}):jsxRuntime.jsxs("div",{className:"grid grid-cols-3 gap-0 h-full",children:[jsxRuntime.jsxs("div",{className:"border-r",children:[jsxRuntime.jsx("div",{className:"border-b px-4 py-2 bg-muted/30",children:jsxRuntime.jsxs("span",{className:"text-sm font-medium",children:["Base (",o.filename,")"]})}),jsxRuntime.jsx(scrollArea.ScrollArea,{className:"h-full",ref:i=>{N.current.base=i;},onScrollCapture:i=>{let e=i.target;k("base",e.scrollTop);},children:jsxRuntime.jsx(snippet.CodeSnippet,{code:o.content,language:o.language,showLineNumbers:s,showCopyButton:false,showHeader:false,className:"border-0 rounded-none"})})]}),jsxRuntime.jsxs("div",{className:"border-r",children:[jsxRuntime.jsx("div",{className:"border-b px-4 py-2 bg-blue-500/10",children:jsxRuntime.jsxs("span",{className:"text-sm font-medium text-blue-600 dark:text-blue-400",children:["Current (",p.filename,")"]})}),jsxRuntime.jsx(scrollArea.ScrollArea,{className:"h-full",ref:i=>{N.current.current=i;},onScrollCapture:i=>{let e=i.target;k("current",e.scrollTop);},children:jsxRuntime.jsx(snippet.CodeSnippet,{code:p.content,language:p.language,showLineNumbers:s,showCopyButton:false,showHeader:false,className:"border-0 rounded-none"})})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"border-b px-4 py-2 bg-green-500/10",children:jsxRuntime.jsxs("span",{className:"text-sm font-medium text-green-600 dark:text-green-400",children:["Incoming (",n.filename,")"]})}),jsxRuntime.jsx(scrollArea.ScrollArea,{className:"h-full",ref:i=>{N.current.incoming=i;},onScrollCapture:i=>{let e=i.target;k("incoming",e.scrollTop);},children:jsxRuntime.jsx(snippet.CodeSnippet,{code:n.content,language:n.language,showLineNumbers:s,showCopyButton:false,showHeader:false,className:"border-0 rounded-none"})})]})]})},"renderThreeWay"),D=x(()=>!w||_.conflicts.length===0?null:jsxRuntime.jsx("div",{className:"border-t bg-muted/30",children:jsxRuntime.jsxs("div",{className:"px-4 py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsx("span",{className:"text-sm font-medium",children:"Merge Conflicts"}),jsxRuntime.jsx(badge.Badge,{variant:"destructive",className:"text-xs",children:_.conflicts.length})]}),jsxRuntime.jsx("div",{className:"mt-2 space-y-2",children:_.conflicts.map((o,p)=>jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[jsxRuntime.jsxs("span",{children:["Lines ",o.startLine,"-",o.endLine]}),jsxRuntime.jsxs("div",{className:"flex gap-1",children:[jsxRuntime.jsx(button.Button,{variant:"outline",size:"sm",onClick:()=>r(p,"current"),className:"h-6 text-xs",children:"Keep Current"}),jsxRuntime.jsx(button.Button,{variant:"outline",size:"sm",onClick:()=>r(p,"incoming"),className:"h-6 text-xs",children:"Accept Incoming"})]})]},p))})]})}),"renderMergeConflicts");return jsxRuntime.jsxs("div",{ref:j,className:utils.cn(Ae({layout:u,size:l}),d),style:{height:J},...O,children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2",children:[jsxRuntime.jsx("div",{className:"flex items-center gap-4",children:b()}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(tabs.Tabs,{value:H,onValueChange:o=>M(o),children:jsxRuntime.jsxs(tabs.TabsList,{className:"grid w-full grid-cols-3",children:[jsxRuntime.jsx(tabs.TabsTrigger,{value:"side-by-side",className:"text-xs",children:"Side by Side"}),jsxRuntime.jsx(tabs.TabsTrigger,{value:"unified",className:"text-xs",children:"Unified"}),jsxRuntime.jsx(tabs.TabsTrigger,{value:"three-way",className:"text-xs",children:"Three-way"})]})}),g&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:B,className:"h-8 w-8 p-0",children:F?jsxRuntime.jsx(lucideReact.Check,{className:"h-3.5 w-3.5 text-green-500"}):jsxRuntime.jsx(lucideReact.Copy,{className:"h-3.5 w-3.5"})}),jsxRuntime.jsxs(dropdownMenu.DropdownMenu,{children:[jsxRuntime.jsx(dropdownMenu.DropdownMenuTrigger,{asChild:true,children:jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",children:jsxRuntime.jsx(lucideReact.MoreHorizontal,{className:"h-3.5 w-3.5"})})}),jsxRuntime.jsxs(dropdownMenu.DropdownMenuContent,{align:"end",children:[jsxRuntime.jsxs(dropdownMenu.DropdownMenuItem,{onClick:()=>$([]),className:"gap-2",children:[jsxRuntime.jsx(lucideReact.RotateCcw,{className:"h-4 w-4"}),"Reset Selection"]}),jsxRuntime.jsxs(dropdownMenu.DropdownMenuItem,{className:"gap-2",children:[jsxRuntime.jsx(lucideReact.Settings,{className:"h-4 w-4"}),"Settings"]})]})]})]})]}),jsxRuntime.jsxs("div",{className:"flex-1 min-h-0",children:[H==="side-by-side"&&V(),H==="unified"&&G(),H==="three-way"&&Q()]}),D()]})});Oe.displayName="CodeCompare";var Je=classVarianceAuthority.cva("relative overflow-hidden rounded-lg border bg-muted/50",{variants:{theme:{dark:"bg-slate-950 border-slate-800",light:"bg-slate-50 border-slate-200",github:"bg-white border-slate-200","github-dark":"bg-slate-900 border-slate-700"},size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{theme:"dark",size:"default"}}),ye=U__namespace.memo(({change:d,showLineNumbers:u,isUnified:l=false,highlightedContent:a})=>{let t=x(()=>{let g="group relative flex min-h-[1.5rem] items-center py-0.5";if(l)switch(d.type){case "add":return utils.cn(g,"bg-green-500/10 border-l-2 border-l-green-500");case "remove":return utils.cn(g,"bg-red-500/10 border-l-2 border-l-red-500");default:return utils.cn(g,"hover:bg-muted/50")}return utils.cn(g,"hover:bg-muted/50")},"getLineClasses"),s=x(()=>{if(!l)return null;switch(d.type){case "add":return jsxRuntime.jsx(lucideReact.Plus,{className:"h-3 w-3 text-green-500 mr-2 flex-shrink-0"});case "remove":return jsxRuntime.jsx(lucideReact.Minus,{className:"h-3 w-3 text-red-500 mr-2 flex-shrink-0"});default:return jsxRuntime.jsx("span",{className:"w-3 mr-2 flex-shrink-0"})}},"getLinePrefix");return jsxRuntime.jsx("div",{className:t(),children:jsxRuntime.jsxs("div",{className:"flex items-center px-4 w-full",children:[u&&jsxRuntime.jsx("div",{className:"flex items-center gap-2 mr-4",children:l?jsxRuntime.jsx("span",{className:"inline-block w-8 select-none text-right text-xs text-muted-foreground",children:d.lineNumber}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{className:"inline-block w-8 select-none text-right text-xs text-muted-foreground",children:d.oldLineNumber||""}),jsxRuntime.jsx("span",{className:"inline-block w-8 select-none text-right text-xs text-muted-foreground",children:d.newLineNumber||""})]})}),s(),jsxRuntime.jsx("div",{className:"flex-1 overflow-x-auto font-mono",dangerouslySetInnerHTML:{__html:a||d.content}})]})})});ye.displayName="DiffLine";function Ue(d,u){let l=d.split(`
9
+ `),a=u.split(`
10
+ `),t=[],s=0,g=0,w=1;for(;s<l.length||g<a.length;){let L=l[s],E=a[g];s>=l.length?(t.push({type:"add",lineNumber:w++,content:E,newLineNumber:g+1}),g++):g>=a.length?(t.push({type:"remove",lineNumber:w++,content:L,oldLineNumber:s+1}),s++):L===E?(t.push({type:"unchanged",lineNumber:w++,content:L,oldLineNumber:s+1,newLineNumber:g+1}),s++,g++):(t.push({type:"remove",lineNumber:w++,content:L,oldLineNumber:s+1}),t.push({type:"add",lineNumber:w++,content:E,newLineNumber:g+1}),s++,g++);}return t}x(Ue,"generateDiff");var Xe=U__namespace.forwardRef(({className:d,theme:u,size:l,oldCode:a,newCode:t,language:s="text",filename:g,oldFilename:w,newFilename:L,showLineNumbers:E=true,showCopyButton:X=true,maxHeight:J="500px",defaultView:Y="unified",collapseUnchanged:O=false,contextLines:j=3,...H},M)=>{let[P,$]=U__namespace.useState(Y),[_,R]=U__namespace.useState(false),[F,C]=U__namespace.useState(true),[N,k]=U__namespace.useState(""),[B,r]=U__namespace.useState(""),[c,b]=U__namespace.useState([]),V={dark:"github-dark",light:"github-light",github:"github-light","github-dark":"github-dark"};U__namespace.useEffect(()=>{x(async()=>{C(true);try{let[i,e]=await Promise.all([shiki.codeToHtml(a,{lang:s,theme:V[u||"dark"]}),shiki.codeToHtml(t,{lang:s,theme:V[u||"dark"]})]),f=x(m=>{let T=document.createElement("div");return T.innerHTML=m,T.querySelector("code")?.innerHTML||m},"extractContent");k(f(i)),r(f(e));let z=Ue(a,t);b(z);}catch(i){console.error("Failed to highlight code:",i),k(a),r(t),b(Ue(a,t));}finally{C(false);}},"highlightCode")();},[a,t,s,u]);let G=U__namespace.useCallback(async()=>{try{let n=P==="unified"?c.map(i=>`${i.type==="add"?"+":i.type==="remove"?"-":" "}${i.content}`).join(`
11
+ `):`--- ${w||"old"}
12
+ +++ ${L||"new"}
13
+ ${a}
14
+
15
+ ${t}`;await navigator.clipboard.writeText(n),R(!0),setTimeout(()=>R(!1),2e3);}catch(n){console.error("Failed to copy diff:",n);}},[c,P,a,t,w,L]),Q=U__namespace.useMemo(()=>{if(!O)return c;let n=[],i=0;for(;i<c.length;){let e=c[i];if(e.type!=="unchanged"){n.push(e),i++;continue}let f=i;for(;i<c.length&&c[i].type==="unchanged";)i++;let z=i-f;if(z<=j*2)for(let m=f;m<i;m++)n.push(c[m]);else {for(let m=f;m<f+j;m++)n.push(c[m]);n.push({type:"unchanged",lineNumber:-1,content:`... ${z-j*2} unchanged lines ...`});for(let m=i-j;m<i;m++)n.push(c[m]);}}return n},[c,O,j]),D=U__namespace.useMemo(()=>{let n=c.filter(e=>e.type==="add").length,i=c.filter(e=>e.type==="remove").length;return {additions:n,deletions:i}},[c]),o=x(()=>{let n=N.split(`
16
+ `),i=B.split(`
17
+ `);return jsxRuntime.jsx("div",{className:"font-mono",children:Q.map((e,f)=>{if(e.lineNumber===-1)return jsxRuntime.jsx("div",{className:"flex items-center justify-center py-2 text-muted-foreground bg-muted/30",children:jsxRuntime.jsx("span",{className:"text-xs",children:e.content})},f);let z=e.content;return e.type==="add"&&e.newLineNumber?z=i[e.newLineNumber-1]||e.content:(e.type==="remove"&&e.oldLineNumber||e.type==="unchanged"&&e.oldLineNumber)&&(z=n[e.oldLineNumber-1]||e.content),jsxRuntime.jsx(ye,{change:e,showLineNumbers:E,isUnified:true,highlightedContent:z},f)})})},"renderUnifiedView"),p=x(()=>{let n=N.split(`
18
+ `),i=B.split(`
19
+ `);return jsxRuntime.jsxs("div",{className:"grid grid-cols-2 gap-0",children:[jsxRuntime.jsxs("div",{className:"border-r",children:[jsxRuntime.jsx("div",{className:"border-b px-4 py-2 bg-red-500/10",children:jsxRuntime.jsx("span",{className:"text-sm font-medium text-red-600 dark:text-red-400",children:w||g||"Old"})}),jsxRuntime.jsx("div",{className:"font-mono",children:n.map((e,f)=>jsxRuntime.jsx(ye,{change:{type:"remove",lineNumber:f+1,content:e,oldLineNumber:f+1},showLineNumbers:E,highlightedContent:e},`old-${f}`))})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"border-b px-4 py-2 bg-green-500/10",children:jsxRuntime.jsx("span",{className:"text-sm font-medium text-green-600 dark:text-green-400",children:L||g||"New"})}),jsxRuntime.jsx("div",{className:"font-mono",children:i.map((e,f)=>jsxRuntime.jsx(ye,{change:{type:"add",lineNumber:f+1,content:e,newLineNumber:f+1},showLineNumbers:E,highlightedContent:e},`new-${f}`))})]})]})},"renderSplitView");return jsxRuntime.jsxs("div",{ref:M,className:utils.cn(Je({theme:u,size:l,className:d})),...H,children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-4",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(lucideReact.GitCompare,{className:"h-4 w-4 text-muted-foreground"}),g&&jsxRuntime.jsx("span",{className:"text-sm font-medium",children:g}),s&&jsxRuntime.jsx(badge.Badge,{variant:"secondary",className:"text-xs",children:s})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[jsxRuntime.jsxs("span",{className:"flex items-center gap-1",children:[jsxRuntime.jsx(lucideReact.Plus,{className:"h-3 w-3 text-green-500"}),D.additions]}),jsxRuntime.jsxs("span",{className:"flex items-center gap-1",children:[jsxRuntime.jsx(lucideReact.Minus,{className:"h-3 w-3 text-red-500"}),D.deletions]})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsxs(toggleGroup.ToggleGroup,{type:"single",value:P,onValueChange:n=>n&&$(n),size:"sm",children:[jsxRuntime.jsx(toggleGroup.ToggleGroupItem,{value:"unified","aria-label":"Unified view",children:jsxRuntime.jsx(lucideReact.Square,{className:"h-3 w-3"})}),jsxRuntime.jsx(toggleGroup.ToggleGroupItem,{value:"split","aria-label":"Split view",children:jsxRuntime.jsx(lucideReact.SplitSquareHorizontal,{className:"h-3 w-3"})})]}),X&&jsxRuntime.jsxs(button.Button,{variant:"ghost",size:"sm",onClick:G,className:"h-8 w-8 p-0",children:[_?jsxRuntime.jsx(lucideReact.Check,{className:"h-3.5 w-3.5 text-green-500"}):jsxRuntime.jsx(lucideReact.Copy,{className:"h-3.5 w-3.5"}),jsxRuntime.jsx("span",{className:"sr-only",children:_?"Copied":"Copy diff"})]})]})]}),jsxRuntime.jsx("div",{className:"overflow-auto",style:{maxHeight:J},children:F?jsxRuntime.jsx("div",{className:"p-4 space-y-2",children:Array.from({length:10}).map((n,i)=>jsxRuntime.jsxs("div",{className:"flex items-center gap-4",children:[E&&jsxRuntime.jsx(skeleton.Skeleton,{className:"h-4 w-8"}),jsxRuntime.jsx(skeleton.Skeleton,{className:"h-4 flex-1"})]},i))}):P==="unified"?o():p()})]})});Xe.displayName="CodeDiff";var oa=["javascript","typescript","python","java","csharp","cpp","c","go","rust","ruby","php","swift","kotlin","dart","html","css","scss","json","xml","yaml","sql","markdown","shell","plaintext"],Qe={javascript:"JavaScript",typescript:"TypeScript",python:"Python",java:"Java",csharp:"C#",cpp:"C++",c:"C",go:"Go",rust:"Rust",ruby:"Ruby",php:"PHP",swift:"Swift",kotlin:"Kotlin",dart:"Dart",html:"HTML",css:"CSS",scss:"SCSS",json:"JSON",xml:"XML",yaml:"YAML",sql:"SQL",markdown:"Markdown",shell:"Shell",plaintext:"Plain Text"},et=U__namespace.forwardRef(({value:d,defaultValue:u="",language:l="javascript",height:a="400px",theme:t="auto",onChange:s,onMount:g,readOnly:w=false,lineNumbers:L=true,minimap:E=false,wordWrap:X="on",fontSize:J=14,className:Y,showCopyButton:O=true,showLanguageSelector:j=true,availableLanguages:H=oa},M)=>{let{theme:P}=nextThemes.useTheme(),[$,_]=U__namespace.useState(l),[R,F]=U__namespace.useState(false),[C,N]=U__namespace.useState(d||u);U__namespace.useEffect(()=>{d!==void 0&&N(d);},[d]);let k=U__namespace.useCallback(async()=>{try{await navigator.clipboard.writeText(C),F(!0),setTimeout(()=>F(!1),2e3);}catch(c){console.error("Failed to copy:",c);}},[C]),B=U__namespace.useCallback((c,b)=>{N(c||""),s&&s(c,b);},[s]),r=U__namespace.useMemo(()=>t==="auto"?P==="dark"?"vs-dark":"light":t==="dark"?"vs-dark":"light",[t,P]);return jsxRuntime.jsxs("div",{ref:M,className:utils.cn("relative overflow-hidden rounded-md border bg-background",Y),children:[(j||O)&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b bg-muted/50 px-3 py-2",children:[j&&jsxRuntime.jsxs(dropdownMenu.DropdownMenu,{children:[jsxRuntime.jsx(dropdownMenu.DropdownMenuTrigger,{asChild:true,children:jsxRuntime.jsxs(button.Button,{variant:"ghost",size:"sm",className:"h-8 gap-1 px-2 text-xs font-mono",children:[Qe[$]||$,jsxRuntime.jsx(lucideReact.ChevronDown,{className:"h-3 w-3"})]})}),jsxRuntime.jsx(dropdownMenu.DropdownMenuContent,{align:"start",className:"max-h-80 overflow-auto",children:H.map(c=>jsxRuntime.jsx(dropdownMenu.DropdownMenuItem,{onClick:()=>_(c),className:"font-mono text-xs",children:Qe[c]||c},c))})]}),O&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",className:"h-8 gap-1.5 px-2 text-xs",onClick:k,disabled:!C,children:R?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Check,{className:"h-3 w-3"}),"Copied!"]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Copy,{className:"h-3 w-3"}),"Copy"]})})]}),jsxRuntime.jsx(Xt__default.default,{height:a,defaultLanguage:l,language:$,value:C,defaultValue:u,theme:r,onChange:B,onMount:g,options:{readOnly:w,lineNumbers:L?"on":"off",minimap:{enabled:E},wordWrap:X,fontSize:J,scrollBeyondLastLine:false,automaticLayout:true,tabSize:2,insertSpaces:true,formatOnPaste:true,formatOnType:true,scrollbar:{vertical:"auto",horizontal:"auto",verticalScrollbarSize:10,horizontalScrollbarSize:10},padding:{top:16,bottom:16}}})]})});et.displayName="CodeEditor";var st=classVarianceAuthority.cva("relative flex flex-col overflow-hidden rounded-lg border bg-background",{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),ya=x((d,u=false)=>{if(u)return lucideReact.Folder;switch(d.split(".").pop()?.toLowerCase()){case "js":case "jsx":case "ts":case "tsx":case "vue":case "svelte":return lucideReact.FileCode;case "json":case "xml":case "yaml":case "yml":case "toml":case "ini":return lucideReact.FileText;case "png":case "jpg":case "jpeg":case "gif":case "svg":case "webp":case "ico":return lucideReact.FileImage;default:return lucideReact.File}},"getFileIcon"),wa=x(d=>{if(!d)return "";let u=["B","KB","MB","GB"],l=d,a=0;for(;l>=1024&&a<u.length-1;)l/=1024,a++;return `${l.toFixed(1)} ${u[a]}`},"formatFileSize"),Na=x(d=>{if(!d)return "";let l=new Date().getTime()-d.getTime(),a=Math.floor(l/(1e3*60*60*24));return a===0?"Today":a===1?"Yesterday":a<7?`${a} days ago`:a<30?`${Math.floor(a/7)} weeks ago`:a<365?`${Math.floor(a/30)} months ago`:`${Math.floor(a/365)} years ago`},"formatModifiedDate"),rt=U__namespace.forwardRef(({className:d,size:u,files:l,onFileSelect:a,onFolderToggle:t,selectedFile:s,showSearch:g=true,showFileIcons:w=true,showFileSize:L=false,showModifiedDate:E=false,height:X="400px",defaultExpanded:J=[],searchPlaceholder:Y="Search files...",emptyMessage:O="No files found",...j},H)=>{let[M,P]=U__namespace.useState(""),[$,_]=U__namespace.useState(new Set(J)),R=U__namespace.useCallback(r=>r.map(c=>({...c,isExpanded:$.has(c.id),children:c.children?R(c.children):void 0})),[$]),F=U__namespace.useCallback((r,c)=>{if(!c)return r;let b=[];for(let V of r)if(V.name.toLowerCase().includes(c.toLowerCase()))b.push(V);else if(V.type==="folder"&&V.children){let G=F(V.children,c);G.length>0&&b.push({...V,children:G,isExpanded:true});}return b},[]),C=U__namespace.useMemo(()=>{let r=R(l);return M?F(r,M):r},[l,M,R,F]),N=U__namespace.useCallback(r=>{_(c=>{let b=new Set(c);return b.has(r.id)?b.delete(r.id):b.add(r.id),b}),t?.(r);},[t]),k=U__namespace.useCallback((r,c=0)=>{let b=w?ya(r.name,r.type==="folder"):null,V=r.type==="folder"&&r.isExpanded?lucideReact.FolderOpen:lucideReact.Folder,G=s===r.id||s===r.path;return jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("div",{className:utils.cn("flex items-center gap-2 px-2 py-1 hover:bg-muted/50 cursor-pointer transition-colors",G&&"bg-muted","rounded-sm"),style:{paddingLeft:`${c*16+8}px`},onClick:()=>{r.type==="folder"?N(r):a?.(r);},children:[r.type==="folder"&&jsxRuntime.jsx("div",{className:"w-4 h-4 flex items-center justify-center",children:r.isExpanded?jsxRuntime.jsx(lucideReact.ChevronDown,{className:"h-3 w-3"}):jsxRuntime.jsx(lucideReact.ChevronRight,{className:"h-3 w-3"})}),w&&jsxRuntime.jsx("div",{className:"w-4 h-4 flex items-center justify-center flex-shrink-0",children:r.type==="folder"?jsxRuntime.jsx(V,{className:"h-4 w-4 text-blue-500"}):b?jsxRuntime.jsx(b,{className:"h-4 w-4 text-muted-foreground"}):null}),jsxRuntime.jsx("span",{className:"flex-1 truncate",children:r.name}),L&&r.type==="file"&&r.size&&jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground flex-shrink-0",children:wa(r.size)}),E&&r.modified&&jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground flex-shrink-0",children:Na(r.modified)})]}),r.type==="folder"&&r.isExpanded&&r.children&&jsxRuntime.jsx("div",{children:r.children.map(Q=>k(Q,c+1))})]},r.id)},[w,L,E,s,N,a]),B=x(()=>{P("");},"clearSearch");return jsxRuntime.jsxs("div",{ref:H,className:utils.cn(st({size:u}),d),style:{height:X},...j,children:[g&&jsxRuntime.jsx("div",{className:"flex items-center gap-2 border-b px-4 py-2",children:jsxRuntime.jsxs("div",{className:"relative flex-1",children:[jsxRuntime.jsx(lucideReact.Search,{className:"absolute left-2 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground"}),jsxRuntime.jsx(input.Input,{value:M,onChange:r=>P(r.target.value),placeholder:Y,className:"pl-8 pr-8 h-8"}),M&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:B,className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3 w-3"})})]})}),jsxRuntime.jsx(scrollArea.ScrollArea,{className:"flex-1",children:jsxRuntime.jsx("div",{className:"p-2",children:C.length===0?jsxRuntime.jsx("div",{className:"flex items-center justify-center h-24 text-muted-foreground",children:M?`No files match "${M}"`:O}):jsxRuntime.jsx("div",{className:"space-y-0.5",children:C.map(r=>k(r,0))})})}),jsxRuntime.jsxs("div",{className:"border-t px-4 py-2 text-xs text-muted-foreground",children:[(()=>{let r=x(G=>{let Q=0,D=0;for(let o of G)if(o.type==="file")Q++;else if(D++,o.children){let p=r(o.children);Q+=p.files,D+=p.folders;}return {files:Q,folders:D}},"countFiles"),{files:c,folders:b}=r(C),V=[];return c>0&&V.push(`${c} file${c===1?"":"s"}`),b>0&&V.push(`${b} folder${b===1?"":"s"}`),V.join(", ")||"Empty"})(),M&&jsxRuntime.jsx("span",{children:" (filtered)"})]})]})});rt.displayName="CodeExplorer";var mt=classVarianceAuthority.cva("relative overflow-hidden rounded-lg border bg-background",{variants:{size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{size:"default"}}),Ia=x(d=>{let u=d.find(s=>s.type==="html"),l=d.filter(s=>s.type==="css"),a=d.filter(s=>s.type==="js"),t=u?.content||"<div>No HTML file provided</div>";if(l.length>0&&(t=`<style>${l.map(g=>g.content).join(`
20
+ `)}</style>
21
+ ${t}`),a.length>0){let s=a.map(g=>g.content).join(`
22
+ `);t=`${t}
23
+ <script>${s}</script>`;}return t},"runHTMLCode"),ja=`
1527
24
  <script>
1528
25
  const originalConsole = window.console;
1529
26
  const logs = [];
@@ -1560,992 +57,7 @@ var consoleScript = `
1560
57
  }, '*');
1561
58
  });
1562
59
  </script>
1563
- `;
1564
- var CodePreview = React6__namespace.forwardRef(
1565
- ({
1566
- className,
1567
- size,
1568
- files,
1569
- defaultFile,
1570
- showPreview = true,
1571
- showConsole = true,
1572
- autoRun = false,
1573
- maxHeight = "600px",
1574
- previewHeight = "300px",
1575
- consoleHeight = "150px",
1576
- allowFullscreen = true,
1577
- customRunner,
1578
- ...props
1579
- }, ref) => {
1580
- const [activeFile, setActiveFile] = React6__namespace.useState(
1581
- defaultFile || files[0]?.filename || ""
1582
- );
1583
- const [previewContent, setPreviewContent] = React6__namespace.useState("");
1584
- const [isRunning, setIsRunning] = React6__namespace.useState(false);
1585
- const [results, setResults] = React6__namespace.useState([]);
1586
- const [isPreviewVisible, setIsPreviewVisible] = React6__namespace.useState(showPreview);
1587
- const [isConsoleVisible, setIsConsoleVisible] = React6__namespace.useState(showConsole);
1588
- const [isFullscreen, setIsFullscreen] = React6__namespace.useState(false);
1589
- const [copied, setCopied] = React6__namespace.useState({});
1590
- const iframeRef = React6__namespace.useRef(null);
1591
- files.find((f) => f.filename === activeFile) || files[0];
1592
- React6__namespace.useEffect(() => {
1593
- const handleMessage = /* @__PURE__ */ __name((event) => {
1594
- if (event.data?.type === "console" || event.data?.type === "error") {
1595
- setResults((prev) => [...prev, event.data.data]);
1596
- }
1597
- }, "handleMessage");
1598
- window.addEventListener("message", handleMessage);
1599
- return () => window.removeEventListener("message", handleMessage);
1600
- }, []);
1601
- const runCode = React6__namespace.useCallback(async () => {
1602
- setIsRunning(true);
1603
- setResults([]);
1604
- try {
1605
- let output;
1606
- if (customRunner) {
1607
- output = await customRunner(files);
1608
- } else {
1609
- output = runHTMLCode(files);
1610
- }
1611
- output = consoleScript + output;
1612
- setPreviewContent(output);
1613
- if (iframeRef.current) {
1614
- const doc = iframeRef.current.contentDocument;
1615
- if (doc) {
1616
- doc.open();
1617
- doc.write(output);
1618
- doc.close();
1619
- }
1620
- }
1621
- } catch (error) {
1622
- setResults([
1623
- {
1624
- type: "error",
1625
- content: error instanceof Error ? error.message : String(error),
1626
- timestamp: Date.now()
1627
- }
1628
- ]);
1629
- } finally {
1630
- setIsRunning(false);
1631
- }
1632
- }, [files, customRunner]);
1633
- React6__namespace.useEffect(() => {
1634
- if (autoRun) {
1635
- const timer = setTimeout(runCode, 1e3);
1636
- return () => clearTimeout(timer);
1637
- }
1638
- }, [files, autoRun, runCode]);
1639
- const copyFileContent = React6__namespace.useCallback(
1640
- async (filename) => {
1641
- const file = files.find((f) => f.filename === filename);
1642
- if (!file) return;
1643
- try {
1644
- await navigator.clipboard.writeText(file.content);
1645
- setCopied((prev) => ({ ...prev, [filename]: true }));
1646
- setTimeout(() => {
1647
- setCopied((prev) => ({ ...prev, [filename]: false }));
1648
- }, 2e3);
1649
- } catch (error) {
1650
- console.error("Failed to copy code:", error);
1651
- }
1652
- },
1653
- [files]
1654
- );
1655
- const clearConsole = /* @__PURE__ */ __name(() => {
1656
- setResults([]);
1657
- }, "clearConsole");
1658
- const renderConsole = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
1659
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2 bg-muted/30", children: [
1660
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1661
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "h-4 w-4" }),
1662
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Console" }),
1663
- results.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: results.length })
1664
- ] }),
1665
- /* @__PURE__ */ jsxRuntime.jsx(
1666
- button.Button,
1667
- {
1668
- variant: "ghost",
1669
- size: "sm",
1670
- onClick: clearConsole,
1671
- className: "h-8 w-8 p-0",
1672
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3.5 w-3.5" })
1673
- }
1674
- )
1675
- ] }),
1676
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto p-2 space-y-1 font-mono text-xs", children: results.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: "No output" }) : results.map((result, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1677
- "div",
1678
- {
1679
- className: utils.cn(
1680
- "flex items-start gap-2 p-2 rounded",
1681
- result.type === "error" && "bg-red-500/10 text-red-600 dark:text-red-400",
1682
- result.type === "log" && "bg-blue-500/10 text-blue-600 dark:text-blue-400",
1683
- result.type === "output" && "bg-green-500/10 text-green-600 dark:text-green-400"
1684
- ),
1685
- children: [
1686
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: new Date(result.timestamp).toLocaleTimeString() }),
1687
- /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "flex-1 whitespace-pre-wrap break-words", children: result.content })
1688
- ]
1689
- },
1690
- index
1691
- )) })
1692
- ] }), "renderConsole");
1693
- const layout = isFullscreen ? "fixed inset-0 z-50 bg-background" : "";
1694
- return /* @__PURE__ */ jsxRuntime.jsxs(
1695
- "div",
1696
- {
1697
- ref,
1698
- className: utils.cn(codePreviewVariants({ size }), layout, className),
1699
- style: { maxHeight: isFullscreen ? "100vh" : maxHeight },
1700
- ...props,
1701
- children: [
1702
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
1703
- /* @__PURE__ */ jsxRuntime.jsx(
1704
- tabs.Tabs,
1705
- {
1706
- value: activeFile,
1707
- onValueChange: setActiveFile,
1708
- className: "flex-1",
1709
- children: /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsList, { className: "h-auto p-0 bg-transparent", children: files.map((file) => /* @__PURE__ */ jsxRuntime.jsxs(
1710
- tabs.TabsTrigger,
1711
- {
1712
- value: file.filename,
1713
- className: "relative flex items-center gap-2 data-[state=active]:bg-muted",
1714
- children: [
1715
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: file.filename }),
1716
- /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "outline", className: "text-xs", children: file.language }),
1717
- /* @__PURE__ */ jsxRuntime.jsx(
1718
- button.Button,
1719
- {
1720
- variant: "ghost",
1721
- size: "sm",
1722
- onClick: (e) => {
1723
- e.stopPropagation();
1724
- copyFileContent(file.filename);
1725
- },
1726
- className: "h-6 w-6 p-0 opacity-0 group-hover:opacity-100",
1727
- children: copied[file.filename] ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3 w-3" })
1728
- }
1729
- )
1730
- ]
1731
- },
1732
- file.filename
1733
- )) })
1734
- }
1735
- ),
1736
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1737
- /* @__PURE__ */ jsxRuntime.jsx(
1738
- toggle.Toggle,
1739
- {
1740
- pressed: isPreviewVisible,
1741
- onPressedChange: setIsPreviewVisible,
1742
- "aria-label": "Toggle preview",
1743
- size: "sm",
1744
- children: isPreviewVisible ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { className: "h-4 w-4" })
1745
- }
1746
- ),
1747
- /* @__PURE__ */ jsxRuntime.jsx(
1748
- toggle.Toggle,
1749
- {
1750
- pressed: isConsoleVisible,
1751
- onPressedChange: setIsConsoleVisible,
1752
- "aria-label": "Toggle console",
1753
- size: "sm",
1754
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "h-4 w-4" })
1755
- }
1756
- ),
1757
- /* @__PURE__ */ jsxRuntime.jsxs(
1758
- button.Button,
1759
- {
1760
- variant: "outline",
1761
- size: "sm",
1762
- onClick: runCode,
1763
- disabled: isRunning,
1764
- className: "gap-2",
1765
- children: [
1766
- isRunning ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { className: "h-4 w-4" }),
1767
- "Run"
1768
- ]
1769
- }
1770
- ),
1771
- allowFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
1772
- button.Button,
1773
- {
1774
- variant: "ghost",
1775
- size: "sm",
1776
- onClick: () => setIsFullscreen(!isFullscreen),
1777
- className: "h-8 w-8 p-0",
1778
- children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings, { className: "h-4 w-4" })
1779
- }
1780
- )
1781
- ] })
1782
- ] }),
1783
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
1784
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntime.jsx(tabs.Tabs, { value: activeFile, onValueChange: setActiveFile, children: files.map((file) => /* @__PURE__ */ jsxRuntime.jsx(
1785
- tabs.TabsContent,
1786
- {
1787
- value: file.filename,
1788
- className: "m-0 h-full",
1789
- children: /* @__PURE__ */ jsxRuntime.jsx(
1790
- snippet.CodeSnippet,
1791
- {
1792
- code: file.content,
1793
- language: file.language,
1794
- showLineNumbers: true,
1795
- showCopyButton: false,
1796
- showHeader: false,
1797
- maxHeight: "100%",
1798
- className: "border-0 rounded-none"
1799
- }
1800
- )
1801
- },
1802
- file.filename
1803
- )) }) }),
1804
- (isPreviewVisible || isConsoleVisible) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1805
- /* @__PURE__ */ jsxRuntime.jsx(separator.Separator, {}),
1806
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col lg:flex-row min-h-0", children: [
1807
- isPreviewVisible && /* @__PURE__ */ jsxRuntime.jsxs(
1808
- "div",
1809
- {
1810
- className: "flex-1 min-h-0 border-r last:border-r-0",
1811
- style: { height: previewHeight },
1812
- children: [
1813
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 border-b px-4 py-2 bg-muted/30", children: [
1814
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-4 w-4" }),
1815
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Preview" }),
1816
- results.filter((r) => r.type === "error").length > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "h-4 w-4 text-red-500" })
1817
- ] }),
1818
- /* @__PURE__ */ jsxRuntime.jsx(
1819
- "iframe",
1820
- {
1821
- ref: iframeRef,
1822
- className: "w-full h-full bg-white",
1823
- sandbox: "allow-scripts allow-same-origin",
1824
- srcDoc: previewContent
1825
- }
1826
- )
1827
- ]
1828
- }
1829
- ),
1830
- isConsoleVisible && /* @__PURE__ */ jsxRuntime.jsx(
1831
- "div",
1832
- {
1833
- className: "flex-1 min-h-0",
1834
- style: { height: consoleHeight },
1835
- children: renderConsole()
1836
- }
1837
- )
1838
- ] })
1839
- ] })
1840
- ] }),
1841
- isFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
1842
- "div",
1843
- {
1844
- className: "absolute inset-0 bg-black/50",
1845
- onClick: () => setIsFullscreen(false)
1846
- }
1847
- )
1848
- ]
1849
- }
1850
- );
1851
- }
1852
- );
1853
- CodePreview.displayName = "CodePreview";
1854
- var codeSnippetVariants = classVarianceAuthority.cva("relative group", {
1855
- variants: {
1856
- variant: {
1857
- default: "rounded-lg border bg-muted/50",
1858
- inline: "inline-block rounded-md bg-muted px-2 py-1",
1859
- minimal: "bg-transparent"
1860
- },
1861
- theme: {
1862
- dark: "bg-slate-950 border-slate-800",
1863
- light: "bg-slate-50 border-slate-200",
1864
- github: "bg-white border-slate-200",
1865
- "github-dark": "bg-slate-900 border-slate-700",
1866
- terminal: "bg-black border-green-500/30 text-green-400",
1867
- retro: "bg-amber-50 border-amber-200 text-amber-900"
1868
- },
1869
- size: {
1870
- xs: "text-xs",
1871
- sm: "text-sm",
1872
- default: "text-sm",
1873
- lg: "text-base"
1874
- }
1875
- },
1876
- defaultVariants: {
1877
- variant: "default",
1878
- theme: "dark",
1879
- size: "default"
1880
- }
1881
- });
1882
- var CodeSnippet3 = React6__namespace.forwardRef(
1883
- ({
1884
- className,
1885
- variant,
1886
- theme,
1887
- size,
1888
- code,
1889
- language = "text",
1890
- filename,
1891
- showLineNumbers = false,
1892
- highlightLines = [],
1893
- showCopyButton = true,
1894
- showLanguageBadge = true,
1895
- showHeader = true,
1896
- maxHeight,
1897
- expandable = false,
1898
- collapsedHeight = "200px",
1899
- wrapLines = false,
1900
- startLineNumber = 1,
1901
- ...props
1902
- }, ref) => {
1903
- const [highlightedCode, setHighlightedCode] = React6__namespace.useState("");
1904
- const [copied, setCopied] = React6__namespace.useState(false);
1905
- const [isLoading, setIsLoading] = React6__namespace.useState(true);
1906
- const [isExpanded, setIsExpanded] = React6__namespace.useState(!expandable);
1907
- const themeMap = {
1908
- dark: "github-dark",
1909
- light: "github-light",
1910
- github: "github-light",
1911
- "github-dark": "github-dark",
1912
- terminal: "github-dark",
1913
- retro: "github-light"
1914
- };
1915
- React6__namespace.useEffect(() => {
1916
- const highlightCode = /* @__PURE__ */ __name(async () => {
1917
- setIsLoading(true);
1918
- try {
1919
- const supportedLang = Object.keys(shiki.bundledLanguages).includes(language);
1920
- const highlighted = await shiki.codeToHtml(code, {
1921
- lang: supportedLang ? language : "text",
1922
- theme: themeMap[theme || "dark"]
1923
- });
1924
- const tempDiv = document.createElement("div");
1925
- tempDiv.innerHTML = highlighted;
1926
- const codeElement = tempDiv.querySelector("code");
1927
- setHighlightedCode(codeElement?.innerHTML || highlighted);
1928
- } catch (error) {
1929
- console.error("Failed to highlight code:", error);
1930
- const escaped = code.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1931
- setHighlightedCode(escaped);
1932
- } finally {
1933
- setIsLoading(false);
1934
- }
1935
- }, "highlightCode");
1936
- highlightCode();
1937
- }, [code, language, theme]);
1938
- const copyToClipboard = React6__namespace.useCallback(async () => {
1939
- try {
1940
- await navigator.clipboard.writeText(code);
1941
- setCopied(true);
1942
- setTimeout(() => setCopied(false), 2e3);
1943
- } catch (error) {
1944
- console.error("Failed to copy code:", error);
1945
- }
1946
- }, [code]);
1947
- const lines = highlightedCode.split("\n").filter((line, index, array) => {
1948
- return line.trim() !== "" || index < array.length - 1;
1949
- });
1950
- const renderInline = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsxRuntime.jsx(
1951
- "code",
1952
- {
1953
- className: utils.cn(
1954
- codeSnippetVariants({ variant, theme, size }),
1955
- "font-mono",
1956
- className
1957
- ),
1958
- dangerouslySetInnerHTML: { __html: highlightedCode }
1959
- }
1960
- ), "renderInline");
1961
- const renderBlock = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsxRuntime.jsxs(
1962
- "div",
1963
- {
1964
- ref,
1965
- className: utils.cn(
1966
- codeSnippetVariants({ variant, theme, size }),
1967
- "overflow-hidden",
1968
- className
1969
- ),
1970
- ...props,
1971
- children: [
1972
- showHeader && (filename || language || showCopyButton || expandable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2 bg-muted/30", children: [
1973
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1974
- filename && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
1975
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-3.5 w-3.5 text-muted-foreground" }),
1976
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: filename })
1977
- ] }),
1978
- showLanguageBadge && language && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: language })
1979
- ] }),
1980
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
1981
- expandable && /* @__PURE__ */ jsxRuntime.jsxs(
1982
- button.Button,
1983
- {
1984
- variant: "ghost",
1985
- size: "sm",
1986
- onClick: () => setIsExpanded(!isExpanded),
1987
- className: "h-8 w-8 p-0",
1988
- children: [
1989
- isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minimize2, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize2, { className: "h-3.5 w-3.5" }),
1990
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: isExpanded ? "Collapse" : "Expand" })
1991
- ]
1992
- }
1993
- ),
1994
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsxs(
1995
- button.Button,
1996
- {
1997
- variant: "ghost",
1998
- size: "sm",
1999
- onClick: copyToClipboard,
2000
- className: "h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity",
2001
- children: [
2002
- copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5" }),
2003
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: copied ? "Copied" : "Copy code" })
2004
- ]
2005
- }
2006
- )
2007
- ] })
2008
- ] }),
2009
- /* @__PURE__ */ jsxRuntime.jsx(
2010
- "div",
2011
- {
2012
- className: utils.cn("overflow-auto", !wrapLines && "overflow-x-auto"),
2013
- style: {
2014
- maxHeight: isExpanded ? maxHeight : collapsedHeight
2015
- },
2016
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 space-y-2", children: Array.from({ length: Math.min(lines.length || 5, 10) }).map(
2017
- (_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
2018
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-4 w-8" }),
2019
- /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-4 flex-1" })
2020
- ] }, i)
2021
- ) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono", children: lines.map((line, index) => {
2022
- const lineNumber = index + startLineNumber;
2023
- const isHighlighted = highlightLines.includes(lineNumber);
2024
- return /* @__PURE__ */ jsxRuntime.jsxs(
2025
- "div",
2026
- {
2027
- className: utils.cn(
2028
- "group relative flex min-h-[1.5rem] items-center px-4 py-0.5",
2029
- isHighlighted && "bg-blue-500/10 border-l-2 border-l-blue-500",
2030
- !wrapLines && "whitespace-nowrap"
2031
- ),
2032
- children: [
2033
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-4 inline-block w-8 select-none text-right text-xs text-muted-foreground", children: lineNumber }),
2034
- /* @__PURE__ */ jsxRuntime.jsx(
2035
- "div",
2036
- {
2037
- className: utils.cn(
2038
- "flex-1",
2039
- wrapLines ? "whitespace-pre-wrap break-words" : "overflow-x-auto"
2040
- ),
2041
- dangerouslySetInnerHTML: { __html: line }
2042
- }
2043
- )
2044
- ]
2045
- },
2046
- index
2047
- );
2048
- }) })
2049
- }
2050
- ),
2051
- expandable && !isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-0 left-0 right-0 h-8 bg-gradient-to-t from-background to-transparent pointer-events-none" }),
2052
- variant === "minimal" && showCopyButton && /* @__PURE__ */ jsxRuntime.jsx(
2053
- button.Button,
2054
- {
2055
- variant: "ghost",
2056
- size: "sm",
2057
- onClick: copyToClipboard,
2058
- className: "absolute top-2 right-2 h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity",
2059
- children: copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5" })
2060
- }
2061
- )
2062
- ]
2063
- }
2064
- ), "renderBlock");
2065
- if (variant === "inline") {
2066
- return renderInline();
2067
- }
2068
- return renderBlock();
2069
- }
2070
- );
2071
- CodeSnippet3.displayName = "CodeSnippet";
2072
- var InlineCode = React6__namespace.forwardRef(({ children, language, className, ...props }, ref) => {
2073
- return /* @__PURE__ */ jsxRuntime.jsx(
2074
- CodeSnippet3,
2075
- {
2076
- ref,
2077
- code: children,
2078
- language,
2079
- variant: "inline",
2080
- showCopyButton: false,
2081
- showLanguageBadge: false,
2082
- showHeader: false,
2083
- className,
2084
- ...props
2085
- }
2086
- );
2087
- });
2088
- InlineCode.displayName = "InlineCode";
2089
- var CodeTabs = React6__namespace.forwardRef(
2090
- ({ className, tabs = [], defaultTab = 0, ...props }, ref) => {
2091
- const [activeTab, setActiveTab] = React6__namespace.useState(defaultTab);
2092
- if (tabs.length === 0) {
2093
- return /* @__PURE__ */ jsxRuntime.jsx(
2094
- "div",
2095
- {
2096
- ref,
2097
- className: utils.cn(
2098
- "rounded-lg border bg-card p-6 text-card-foreground shadow-sm",
2099
- className
2100
- ),
2101
- ...props,
2102
- children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No code tabs available. Add tabs to display code snippets." })
2103
- }
2104
- );
2105
- }
2106
- return /* @__PURE__ */ jsxRuntime.jsxs(
2107
- "div",
2108
- {
2109
- ref,
2110
- className: utils.cn(
2111
- "rounded-lg border bg-card text-card-foreground shadow-sm",
2112
- className
2113
- ),
2114
- ...props,
2115
- children: [
2116
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1 p-2", children: tabs.map((tab, index) => /* @__PURE__ */ jsxRuntime.jsx(
2117
- "button",
2118
- {
2119
- onClick: () => setActiveTab(index),
2120
- className: utils.cn(
2121
- "rounded-md px-4 py-2 text-sm font-medium transition-colors",
2122
- activeTab === index ? "bg-primary text-primary-foreground" : "hover:bg-muted"
2123
- ),
2124
- children: tab.label
2125
- },
2126
- index
2127
- )) }) }),
2128
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "overflow-x-auto rounded-md bg-muted p-4", children: /* @__PURE__ */ jsxRuntime.jsx("code", { className: "text-sm", children: tabs[activeTab]?.code }) }) })
2129
- ]
2130
- }
2131
- );
2132
- }
2133
- );
2134
- CodeTabs.displayName = "CodeTabs";
2135
- var codeTerminalVariants = classVarianceAuthority.cva(
2136
- "relative flex flex-col overflow-hidden rounded-lg border",
2137
- {
2138
- variants: {
2139
- theme: {
2140
- dark: "bg-black border-gray-700 text-green-400",
2141
- light: "bg-white border-gray-300 text-gray-900",
2142
- matrix: "bg-black border-green-500 text-green-400",
2143
- hacker: "bg-gray-900 border-yellow-500 text-yellow-400",
2144
- retro: "bg-amber-900 border-amber-600 text-amber-100",
2145
- modern: "bg-slate-900 border-slate-700 text-slate-100"
2146
- },
2147
- size: {
2148
- sm: "text-xs",
2149
- default: "text-sm",
2150
- lg: "text-base"
2151
- }
2152
- },
2153
- defaultVariants: {
2154
- theme: "dark",
2155
- size: "default"
2156
- }
2157
- }
2158
- );
2159
- var ansiColors = {
2160
- black: "text-black",
2161
- red: "text-red-500",
2162
- green: "text-green-500",
2163
- yellow: "text-yellow-500",
2164
- blue: "text-blue-500",
2165
- magenta: "text-magenta-500",
2166
- cyan: "text-cyan-500",
2167
- white: "text-white",
2168
- gray: "text-gray-500",
2169
- brightRed: "text-red-400",
2170
- brightGreen: "text-green-400",
2171
- brightYellow: "text-yellow-400",
2172
- brightBlue: "text-blue-400",
2173
- brightMagenta: "text-magenta-400",
2174
- brightCyan: "text-cyan-400",
2175
- brightWhite: "text-gray-100"
2176
- };
2177
- var parseAnsiContent = /* @__PURE__ */ __name((content) => {
2178
- const ansiRegex = /\x1b\[([0-9;]*)m/g;
2179
- const parts = [];
2180
- let lastIndex = 0;
2181
- let currentClasses = [];
2182
- let match;
2183
- while ((match = ansiRegex.exec(content)) !== null) {
2184
- if (match.index > lastIndex) {
2185
- parts.push({
2186
- text: content.slice(lastIndex, match.index),
2187
- classes: [...currentClasses]
2188
- });
2189
- }
2190
- const codes = match[1].split(";").map((code) => parseInt(code) || 0);
2191
- codes.forEach((code) => {
2192
- switch (code) {
2193
- case 0:
2194
- currentClasses = [];
2195
- break;
2196
- // reset
2197
- case 30:
2198
- currentClasses.push(ansiColors.black);
2199
- break;
2200
- case 31:
2201
- currentClasses.push(ansiColors.red);
2202
- break;
2203
- case 32:
2204
- currentClasses.push(ansiColors.green);
2205
- break;
2206
- case 33:
2207
- currentClasses.push(ansiColors.yellow);
2208
- break;
2209
- case 34:
2210
- currentClasses.push(ansiColors.blue);
2211
- break;
2212
- case 35:
2213
- currentClasses.push(ansiColors.magenta);
2214
- break;
2215
- case 36:
2216
- currentClasses.push(ansiColors.cyan);
2217
- break;
2218
- case 37:
2219
- currentClasses.push(ansiColors.white);
2220
- break;
2221
- case 90:
2222
- currentClasses.push(ansiColors.gray);
2223
- break;
2224
- case 91:
2225
- currentClasses.push(ansiColors.brightRed);
2226
- break;
2227
- case 92:
2228
- currentClasses.push(ansiColors.brightGreen);
2229
- break;
2230
- case 93:
2231
- currentClasses.push(ansiColors.brightYellow);
2232
- break;
2233
- case 94:
2234
- currentClasses.push(ansiColors.brightBlue);
2235
- break;
2236
- case 95:
2237
- currentClasses.push(ansiColors.brightMagenta);
2238
- break;
2239
- case 96:
2240
- currentClasses.push(ansiColors.brightCyan);
2241
- break;
2242
- case 97:
2243
- currentClasses.push(ansiColors.brightWhite);
2244
- break;
2245
- }
2246
- });
2247
- lastIndex = match.index + match[0].length;
2248
- }
2249
- if (lastIndex < content.length) {
2250
- parts.push({
2251
- text: content.slice(lastIndex),
2252
- classes: [...currentClasses]
2253
- });
2254
- }
2255
- return parts.map((part, index) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: utils.cn(part.classes), children: part.text }, index));
2256
- }, "parseAnsiContent");
2257
- var CodeTerminal = React6__namespace.forwardRef(
2258
- ({
2259
- className,
2260
- theme,
2261
- size,
2262
- title = "Terminal",
2263
- prompt = "$",
2264
- maxLines = 1e3,
2265
- showLineNumbers = false,
2266
- allowInput = true,
2267
- allowClear = true,
2268
- allowCopy = true,
2269
- allowDownload = false,
2270
- allowFullscreen = true,
2271
- height = "400px",
2272
- autoScroll = true,
2273
- history = [],
2274
- onCommand,
2275
- onClear,
2276
- initialLines = [],
2277
- ...props
2278
- }, ref) => {
2279
- const [lines, setLines] = React6__namespace.useState(initialLines);
2280
- const [input$1, setInput] = React6__namespace.useState("");
2281
- const [historyIndex, setHistoryIndex] = React6__namespace.useState(-1);
2282
- const [isFullscreen, setIsFullscreen] = React6__namespace.useState(false);
2283
- const [commandHistory, setCommandHistory] = React6__namespace.useState(history);
2284
- const scrollAreaRef = React6__namespace.useRef(null);
2285
- const inputRef = React6__namespace.useRef(null);
2286
- React6__namespace.useEffect(() => {
2287
- if (autoScroll && scrollAreaRef.current) {
2288
- scrollAreaRef.current.scrollTop = scrollAreaRef.current.scrollHeight;
2289
- }
2290
- }, [lines, autoScroll]);
2291
- const addLine = React6__namespace.useCallback(
2292
- (line) => {
2293
- const newLine = {
2294
- ...line,
2295
- id: `line-${Date.now()}-${Math.random()}`,
2296
- timestamp: Date.now()
2297
- };
2298
- setLines((prev) => {
2299
- const updated = [...prev, newLine];
2300
- return updated.length > maxLines ? updated.slice(-maxLines) : updated;
2301
- });
2302
- },
2303
- [maxLines]
2304
- );
2305
- const handleCommand = React6__namespace.useCallback(
2306
- async (command) => {
2307
- if (!command.trim()) return;
2308
- setCommandHistory((prev) => [...prev, command]);
2309
- setHistoryIndex(-1);
2310
- addLine({
2311
- type: "input",
2312
- content: `${prompt} ${command}`,
2313
- command
2314
- });
2315
- if (command === "clear") {
2316
- if (onClear) {
2317
- onClear();
2318
- } else {
2319
- setLines([]);
2320
- }
2321
- return;
2322
- }
2323
- if (command === "history") {
2324
- commandHistory.forEach((cmd, index) => {
2325
- addLine({
2326
- type: "output",
2327
- content: `${index + 1} ${cmd}`
2328
- });
2329
- });
2330
- return;
2331
- }
2332
- if (command.startsWith("echo ")) {
2333
- addLine({
2334
- type: "output",
2335
- content: command.slice(5)
2336
- });
2337
- return;
2338
- }
2339
- if (onCommand) {
2340
- try {
2341
- await onCommand(command);
2342
- } catch (error) {
2343
- addLine({
2344
- type: "error",
2345
- content: error instanceof Error ? error.message : String(error),
2346
- exitCode: 1
2347
- });
2348
- }
2349
- } else {
2350
- addLine({
2351
- type: "error",
2352
- content: `Command not found: ${command}`,
2353
- exitCode: 127
2354
- });
2355
- }
2356
- },
2357
- [prompt, addLine, onCommand, onClear, commandHistory]
2358
- );
2359
- const handleInputSubmit = /* @__PURE__ */ __name((e) => {
2360
- e.preventDefault();
2361
- if (input$1.trim()) {
2362
- handleCommand(input$1);
2363
- setInput("");
2364
- }
2365
- }, "handleInputSubmit");
2366
- const handleKeyDown = /* @__PURE__ */ __name((e) => {
2367
- if (e.key === "ArrowUp") {
2368
- e.preventDefault();
2369
- if (historyIndex < commandHistory.length - 1) {
2370
- const newIndex = historyIndex + 1;
2371
- setHistoryIndex(newIndex);
2372
- setInput(commandHistory[commandHistory.length - 1 - newIndex] || "");
2373
- }
2374
- } else if (e.key === "ArrowDown") {
2375
- e.preventDefault();
2376
- if (historyIndex > 0) {
2377
- const newIndex = historyIndex - 1;
2378
- setHistoryIndex(newIndex);
2379
- setInput(commandHistory[commandHistory.length - 1 - newIndex] || "");
2380
- } else if (historyIndex === 0) {
2381
- setHistoryIndex(-1);
2382
- setInput("");
2383
- }
2384
- }
2385
- }, "handleKeyDown");
2386
- const copyContent = React6__namespace.useCallback(async () => {
2387
- const content = lines.map((line) => line.content).join("\n");
2388
- try {
2389
- await navigator.clipboard.writeText(content);
2390
- } catch (error) {
2391
- console.error("Failed to copy terminal content:", error);
2392
- }
2393
- }, [lines]);
2394
- const downloadContent = React6__namespace.useCallback(() => {
2395
- const content = lines.map(
2396
- (line) => `[${new Date(line.timestamp).toISOString()}] ${line.content}`
2397
- ).join("\n");
2398
- const blob = new Blob([content], { type: "text/plain" });
2399
- const url = URL.createObjectURL(blob);
2400
- const a = document.createElement("a");
2401
- a.href = url;
2402
- a.download = `terminal-${Date.now()}.txt`;
2403
- document.body.appendChild(a);
2404
- a.click();
2405
- document.body.removeChild(a);
2406
- URL.revokeObjectURL(url);
2407
- }, [lines]);
2408
- const clearTerminal = /* @__PURE__ */ __name(() => {
2409
- if (onClear) {
2410
- onClear();
2411
- } else {
2412
- setLines([]);
2413
- }
2414
- }, "clearTerminal");
2415
- const handleTerminalClick = /* @__PURE__ */ __name(() => {
2416
- if (allowInput && inputRef.current) {
2417
- inputRef.current.focus();
2418
- }
2419
- }, "handleTerminalClick");
2420
- return /* @__PURE__ */ jsxRuntime.jsxs(
2421
- "div",
2422
- {
2423
- ref,
2424
- className: utils.cn(
2425
- codeTerminalVariants({ theme, size }),
2426
- isFullscreen && "fixed inset-0 z-50",
2427
- className
2428
- ),
2429
- style: { height: isFullscreen ? "100vh" : height },
2430
- onClick: handleTerminalClick,
2431
- ...props,
2432
- children: [
2433
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2 bg-muted/30", children: [
2434
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2435
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
2436
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-3 h-3 rounded-full bg-red-500" }),
2437
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-3 h-3 rounded-full bg-yellow-500" }),
2438
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-3 h-3 rounded-full bg-green-500" })
2439
- ] }),
2440
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "h-4 w-4" }),
2441
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: title }),
2442
- lines.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
2443
- lines.length,
2444
- " lines"
2445
- ] })
2446
- ] }),
2447
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
2448
- allowClear && /* @__PURE__ */ jsxRuntime.jsx(
2449
- button.Button,
2450
- {
2451
- variant: "ghost",
2452
- size: "sm",
2453
- onClick: clearTerminal,
2454
- className: "h-8 w-8 p-0",
2455
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-3.5 w-3.5" })
2456
- }
2457
- ),
2458
- allowCopy && /* @__PURE__ */ jsxRuntime.jsx(
2459
- button.Button,
2460
- {
2461
- variant: "ghost",
2462
- size: "sm",
2463
- onClick: copyContent,
2464
- className: "h-8 w-8 p-0",
2465
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5" })
2466
- }
2467
- ),
2468
- allowDownload && /* @__PURE__ */ jsxRuntime.jsx(
2469
- button.Button,
2470
- {
2471
- variant: "ghost",
2472
- size: "sm",
2473
- onClick: downloadContent,
2474
- className: "h-8 w-8 p-0",
2475
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "h-3.5 w-3.5" })
2476
- }
2477
- ),
2478
- allowFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
2479
- button.Button,
2480
- {
2481
- variant: "ghost",
2482
- size: "sm",
2483
- onClick: () => setIsFullscreen(!isFullscreen),
2484
- className: "h-8 w-8 p-0",
2485
- children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minimize2, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize2, { className: "h-3.5 w-3.5" })
2486
- }
2487
- )
2488
- ] })
2489
- ] }),
2490
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex flex-col min-h-0", children: [
2491
- /* @__PURE__ */ jsxRuntime.jsx(scrollArea.ScrollArea, { ref: scrollAreaRef, className: "flex-1 p-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1 font-mono", children: lines.map((line, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2", children: [
2492
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground w-12 text-right flex-shrink-0", children: index + 1 }),
2493
- /* @__PURE__ */ jsxRuntime.jsx(
2494
- "div",
2495
- {
2496
- className: utils.cn(
2497
- "flex-1 whitespace-pre-wrap break-words",
2498
- line.type === "input" && "text-inherit",
2499
- line.type === "output" && "text-muted-foreground",
2500
- line.type === "error" && "text-red-400",
2501
- line.type === "system" && "text-blue-400"
2502
- ),
2503
- children: typeof line.content === "string" && line.content.includes("\x1B[") ? parseAnsiContent(line.content) : line.content
2504
- }
2505
- )
2506
- ] }, line.id)) }) }),
2507
- allowInput && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2508
- /* @__PURE__ */ jsxRuntime.jsx(separator.Separator, {}),
2509
- /* @__PURE__ */ jsxRuntime.jsx("form", { onSubmit: handleInputSubmit, className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 font-mono", children: [
2510
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4 flex-shrink-0" }),
2511
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: prompt }),
2512
- /* @__PURE__ */ jsxRuntime.jsx(
2513
- input.Input,
2514
- {
2515
- ref: inputRef,
2516
- value: input$1,
2517
- onChange: (e) => setInput(e.target.value),
2518
- onKeyDown: handleKeyDown,
2519
- className: "flex-1 border-0 bg-transparent p-0 focus-visible:ring-0 font-mono",
2520
- placeholder: "Enter command...",
2521
- autoComplete: "off",
2522
- autoFocus: true
2523
- }
2524
- )
2525
- ] }) })
2526
- ] })
2527
- ] })
2528
- ]
2529
- }
2530
- );
2531
- }
2532
- );
2533
- CodeTerminal.displayName = "CodeTerminal";
2534
-
2535
- exports.CodeBlock = CodeBlock;
2536
- exports.CodeCompare = CodeCompare;
2537
- exports.CodeDiff = CodeDiff2;
2538
- exports.CodeEditor = CodeEditor;
2539
- exports.CodeExplorer = CodeExplorer;
2540
- exports.CodePreview = CodePreview;
2541
- exports.CodeSnippet = CodeSnippet3;
2542
- exports.CodeTabs = CodeTabs;
2543
- exports.CodeTerminal = CodeTerminal;
2544
- exports.InlineCode = InlineCode;
2545
- exports.codeBlockVariants = codeBlockVariants;
2546
- exports.codeCompareVariants = codeCompareVariants;
2547
- exports.codeDiffVariants = codeDiffVariants;
2548
- exports.codeExplorerVariants = codeExplorerVariants;
2549
- exports.codePreviewVariants = codePreviewVariants;
2550
- exports.codeSnippetVariants = codeSnippetVariants;
2551
- exports.codeTerminalVariants = codeTerminalVariants;
60
+ `,pt=U__namespace.forwardRef(({className:d,size:u,files:l,defaultFile:a,showPreview:t=true,showConsole:s=true,autoRun:g=false,maxHeight:w="600px",previewHeight:L="300px",consoleHeight:E="150px",allowFullscreen:X=true,customRunner:J,...Y},O)=>{let [j,H]=U__namespace.useState(a||l[0]?.filename||""),[M,P]=U__namespace.useState(""),[$,_]=U__namespace.useState(false),[R,F]=U__namespace.useState([]),[C,N]=U__namespace.useState(t),[k,B]=U__namespace.useState(s),[r,c]=U__namespace.useState(false),[b,V]=U__namespace.useState({}),G=U__namespace.useRef(null);l.find(e=>e.filename===j)||l[0];U__namespace.useEffect(()=>{let e=x(f=>{(f.data?.type==="console"||f.data?.type==="error")&&F(z=>[...z,f.data.data]);},"handleMessage");return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[]);let D=U__namespace.useCallback(async()=>{_(true),F([]);try{let e;if(J?e=await J(l):e=Ia(l),e=ja+e,P(e),G.current){let f=G.current.contentDocument;f&&(f.open(),f.write(e),f.close());}}catch(e){F([{type:"error",content:e instanceof Error?e.message:String(e),timestamp:Date.now()}]);}finally{_(false);}},[l,J]);U__namespace.useEffect(()=>{if(g){let e=setTimeout(D,1e3);return ()=>clearTimeout(e)}},[l,g,D]);let o=U__namespace.useCallback(async e=>{let f=l.find(z=>z.filename===e);if(f)try{await navigator.clipboard.writeText(f.content),V(z=>({...z,[e]:!0})),setTimeout(()=>{V(z=>({...z,[e]:!1}));},2e3);}catch(z){console.error("Failed to copy code:",z);}},[l]),p=x(()=>{F([]);},"clearConsole"),n=x(()=>jsxRuntime.jsxs("div",{className:"flex flex-col h-full",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2 bg-muted/30",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(lucideReact.Terminal,{className:"h-4 w-4"}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:"Console"}),R.length>0&&jsxRuntime.jsx(badge.Badge,{variant:"secondary",className:"text-xs",children:R.length})]}),jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:p,className:"h-8 w-8 p-0",children:jsxRuntime.jsx(lucideReact.X,{className:"h-3.5 w-3.5"})})]}),jsxRuntime.jsx("div",{className:"flex-1 overflow-auto p-2 space-y-1 font-mono text-xs",children:R.length===0?jsxRuntime.jsx("div",{className:"text-muted-foreground italic",children:"No output"}):R.map((e,f)=>jsxRuntime.jsxs("div",{className:utils.cn("flex items-start gap-2 p-2 rounded",e.type==="error"&&"bg-red-500/10 text-red-600 dark:text-red-400",e.type==="log"&&"bg-blue-500/10 text-blue-600 dark:text-blue-400",e.type==="output"&&"bg-green-500/10 text-green-600 dark:text-green-400"),children:[jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground",children:new Date(e.timestamp).toLocaleTimeString()}),jsxRuntime.jsx("pre",{className:"flex-1 whitespace-pre-wrap break-words",children:e.content})]},f))})]}),"renderConsole"),i=r?"fixed inset-0 z-50 bg-background":"";return jsxRuntime.jsxs("div",{ref:O,className:utils.cn(mt({size:u}),i,d),style:{maxHeight:r?"100vh":w},...Y,children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2",children:[jsxRuntime.jsx(tabs.Tabs,{value:j,onValueChange:H,className:"flex-1",children:jsxRuntime.jsx(tabs.TabsList,{className:"h-auto p-0 bg-transparent",children:l.map(e=>jsxRuntime.jsxs(tabs.TabsTrigger,{value:e.filename,className:"relative flex items-center gap-2 data-[state=active]:bg-muted",children:[jsxRuntime.jsx("span",{children:e.filename}),jsxRuntime.jsx(badge.Badge,{variant:"outline",className:"text-xs",children:e.language}),jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:f=>{f.stopPropagation(),o(e.filename);},className:"h-6 w-6 p-0 opacity-0 group-hover:opacity-100",children:b[e.filename]?jsxRuntime.jsx(lucideReact.Check,{className:"h-3 w-3 text-green-500"}):jsxRuntime.jsx(lucideReact.Copy,{className:"h-3 w-3"})})]},e.filename))})}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsx(toggle.Toggle,{pressed:C,onPressedChange:N,"aria-label":"Toggle preview",size:"sm",children:C?jsxRuntime.jsx(lucideReact.Eye,{className:"h-4 w-4"}):jsxRuntime.jsx(lucideReact.EyeOff,{className:"h-4 w-4"})}),jsxRuntime.jsx(toggle.Toggle,{pressed:k,onPressedChange:B,"aria-label":"Toggle console",size:"sm",children:jsxRuntime.jsx(lucideReact.Terminal,{className:"h-4 w-4"})}),jsxRuntime.jsxs(button.Button,{variant:"outline",size:"sm",onClick:D,disabled:$,className:"gap-2",children:[$?jsxRuntime.jsx(lucideReact.RefreshCw,{className:"h-4 w-4 animate-spin"}):jsxRuntime.jsx(lucideReact.Play,{className:"h-4 w-4"}),"Run"]}),X&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:()=>c(!r),className:"h-8 w-8 p-0",children:r?jsxRuntime.jsx(lucideReact.Square,{className:"h-4 w-4"}):jsxRuntime.jsx(lucideReact.Settings,{className:"h-4 w-4"})})]})]}),jsxRuntime.jsxs("div",{className:"flex flex-col h-full",children:[jsxRuntime.jsx("div",{className:"flex-1 min-h-0",children:jsxRuntime.jsx(tabs.Tabs,{value:j,onValueChange:H,children:l.map(e=>jsxRuntime.jsx(tabs.TabsContent,{value:e.filename,className:"m-0 h-full",children:jsxRuntime.jsx(snippet.CodeSnippet,{code:e.content,language:e.language,showLineNumbers:true,showCopyButton:false,showHeader:false,maxHeight:"100%",className:"border-0 rounded-none"})},e.filename))})}),(C||k)&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(separator.Separator,{}),jsxRuntime.jsxs("div",{className:"flex flex-col lg:flex-row min-h-0",children:[C&&jsxRuntime.jsxs("div",{className:"flex-1 min-h-0 border-r last:border-r-0",style:{height:L},children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2 border-b px-4 py-2 bg-muted/30",children:[jsxRuntime.jsx(lucideReact.Eye,{className:"h-4 w-4"}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:"Preview"}),R.filter(e=>e.type==="error").length>0&&jsxRuntime.jsx(lucideReact.AlertTriangle,{className:"h-4 w-4 text-red-500"})]}),jsxRuntime.jsx("iframe",{ref:G,className:"w-full h-full bg-white",sandbox:"allow-scripts allow-same-origin",srcDoc:M})]}),k&&jsxRuntime.jsx("div",{className:"flex-1 min-h-0",style:{height:E},children:n()})]})]})]}),r&&jsxRuntime.jsx("div",{className:"absolute inset-0 bg-black/50",onClick:()=>c(false)})]})});pt.displayName="CodePreview";var Le=classVarianceAuthority.cva("relative group",{variants:{variant:{default:"rounded-lg border bg-muted/50",inline:"inline-block rounded-md bg-muted px-2 py-1",minimal:"bg-transparent"},theme:{dark:"bg-slate-950 border-slate-800",light:"bg-slate-50 border-slate-200",github:"bg-white border-slate-200","github-dark":"bg-slate-900 border-slate-700",terminal:"bg-black border-green-500/30 text-green-400",retro:"bg-amber-50 border-amber-200 text-amber-900"},size:{xs:"text-xs",sm:"text-sm",default:"text-sm",lg:"text-base"}},defaultVariants:{variant:"default",theme:"dark",size:"default"}}),Me=U__namespace.forwardRef(({className:d,variant:u,theme:l,size:a,code:t,language:s="text",filename:g,showLineNumbers:w=false,highlightLines:L=[],showCopyButton:E=true,showLanguageBadge:X=true,showHeader:J=true,maxHeight:Y,expandable:O=false,collapsedHeight:j="200px",wrapLines:H=false,startLineNumber:M=1,...P},$)=>{let[_,R]=U__namespace.useState(""),[F,C]=U__namespace.useState(false),[N,k]=U__namespace.useState(true),[B,r]=U__namespace.useState(!O),c={dark:"github-dark",light:"github-light",github:"github-light","github-dark":"github-dark",terminal:"github-dark",retro:"github-light"};U__namespace.useEffect(()=>{x(async()=>{k(true);try{let o=Object.keys(shiki.bundledLanguages).includes(s),p=await shiki.codeToHtml(t,{lang:o?s:"text",theme:c[l||"dark"]}),n=document.createElement("div");n.innerHTML=p;let i=n.querySelector("code");R(i?.innerHTML||p);}catch(o){console.error("Failed to highlight code:",o);let p=t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");R(p);}finally{k(false);}},"highlightCode")();},[t,s,l]);let b=U__namespace.useCallback(async()=>{try{await navigator.clipboard.writeText(t),C(!0),setTimeout(()=>C(!1),2e3);}catch(D){console.error("Failed to copy code:",D);}},[t]),V=_.split(`
61
+ `).filter((D,o,p)=>D.trim()!==""||o<p.length-1),G=x(()=>jsxRuntime.jsx("code",{className:utils.cn(Le({variant:u,theme:l,size:a}),"font-mono",d),dangerouslySetInnerHTML:{__html:_}}),"renderInline"),Q=x(()=>jsxRuntime.jsxs("div",{ref:$,className:utils.cn(Le({variant:u,theme:l,size:a}),"overflow-hidden",d),...P,children:[J&&(g||s||E||O)&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2 bg-muted/30",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[g&&jsxRuntime.jsxs("div",{className:"flex items-center gap-1.5",children:[jsxRuntime.jsx(lucideReact.FileText,{className:"h-3.5 w-3.5 text-muted-foreground"}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:g})]}),X&&s&&jsxRuntime.jsx(badge.Badge,{variant:"secondary",className:"text-xs",children:s})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[O&&jsxRuntime.jsxs(button.Button,{variant:"ghost",size:"sm",onClick:()=>r(!B),className:"h-8 w-8 p-0",children:[B?jsxRuntime.jsx(lucideReact.Minimize2,{className:"h-3.5 w-3.5"}):jsxRuntime.jsx(lucideReact.Maximize2,{className:"h-3.5 w-3.5"}),jsxRuntime.jsx("span",{className:"sr-only",children:B?"Collapse":"Expand"})]}),E&&jsxRuntime.jsxs(button.Button,{variant:"ghost",size:"sm",onClick:b,className:"h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity",children:[F?jsxRuntime.jsx(lucideReact.Check,{className:"h-3.5 w-3.5 text-green-500"}):jsxRuntime.jsx(lucideReact.Copy,{className:"h-3.5 w-3.5"}),jsxRuntime.jsx("span",{className:"sr-only",children:F?"Copied":"Copy code"})]})]})]}),jsxRuntime.jsx("div",{className:utils.cn("overflow-auto",!H&&"overflow-x-auto"),style:{maxHeight:B?Y:j},children:N?jsxRuntime.jsx("div",{className:"p-4 space-y-2",children:Array.from({length:Math.min(V.length||5,10)}).map((D,o)=>jsxRuntime.jsxs("div",{className:"flex items-center gap-4",children:[w&&jsxRuntime.jsx(skeleton.Skeleton,{className:"h-4 w-8"}),jsxRuntime.jsx(skeleton.Skeleton,{className:"h-4 flex-1"})]},o))}):jsxRuntime.jsx("div",{className:"font-mono",children:V.map((D,o)=>{let p=o+M,n=L.includes(p);return jsxRuntime.jsxs("div",{className:utils.cn("group relative flex min-h-[1.5rem] items-center px-4 py-0.5",n&&"bg-blue-500/10 border-l-2 border-l-blue-500",!H&&"whitespace-nowrap"),children:[w&&jsxRuntime.jsx("span",{className:"mr-4 inline-block w-8 select-none text-right text-xs text-muted-foreground",children:p}),jsxRuntime.jsx("div",{className:utils.cn("flex-1",H?"whitespace-pre-wrap break-words":"overflow-x-auto"),dangerouslySetInnerHTML:{__html:D}})]},o)})})}),O&&!B&&jsxRuntime.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-8 bg-gradient-to-t from-background to-transparent pointer-events-none"}),u==="minimal"&&E&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:b,className:"absolute top-2 right-2 h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity",children:F?jsxRuntime.jsx(lucideReact.Check,{className:"h-3.5 w-3.5 text-green-500"}):jsxRuntime.jsx(lucideReact.Copy,{className:"h-3.5 w-3.5"})})]}),"renderBlock");return u==="inline"?G():Q()});Me.displayName="CodeSnippet";var ht=U__namespace.forwardRef(({children:d,language:u,className:l,...a},t)=>jsxRuntime.jsx(Me,{ref:t,code:d,language:u,variant:"inline",showCopyButton:false,showLanguageBadge:false,showHeader:false,className:l,...a}));ht.displayName="InlineCode";var bt=U__namespace.forwardRef(({className:d,tabs:u=[],defaultTab:l=0,...a},t)=>{let[s,g]=U__namespace.useState(l);return u.length===0?jsxRuntime.jsx("div",{ref:t,className:utils.cn("rounded-lg border bg-card p-6 text-card-foreground shadow-sm",d),...a,children:jsxRuntime.jsx("p",{className:"text-sm text-muted-foreground",children:"No code tabs available. Add tabs to display code snippets."})}):jsxRuntime.jsxs("div",{ref:t,className:utils.cn("rounded-lg border bg-card text-card-foreground shadow-sm",d),...a,children:[jsxRuntime.jsx("div",{className:"border-b",children:jsxRuntime.jsx("div",{className:"flex gap-1 p-2",children:u.map((w,L)=>jsxRuntime.jsx("button",{onClick:()=>g(L),className:utils.cn("rounded-md px-4 py-2 text-sm font-medium transition-colors",s===L?"bg-primary text-primary-foreground":"hover:bg-muted"),children:w.label},L))})}),jsxRuntime.jsx("div",{className:"p-4",children:jsxRuntime.jsx("pre",{className:"overflow-x-auto rounded-md bg-muted p-4",children:jsxRuntime.jsx("code",{className:"text-sm",children:u[s]?.code})})})]})});bt.displayName="CodeTabs";var xt=classVarianceAuthority.cva("relative flex flex-col overflow-hidden rounded-lg border",{variants:{theme:{dark:"bg-black border-gray-700 text-green-400",light:"bg-white border-gray-300 text-gray-900",matrix:"bg-black border-green-500 text-green-400",hacker:"bg-gray-900 border-yellow-500 text-yellow-400",retro:"bg-amber-900 border-amber-600 text-amber-100",modern:"bg-slate-900 border-slate-700 text-slate-100"},size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{theme:"dark",size:"default"}}),ee={black:"text-black",red:"text-red-500",green:"text-green-500",yellow:"text-yellow-500",blue:"text-blue-500",magenta:"text-magenta-500",cyan:"text-cyan-500",white:"text-white",gray:"text-gray-500",brightRed:"text-red-400",brightGreen:"text-green-400",brightYellow:"text-yellow-400",brightBlue:"text-blue-400",brightMagenta:"text-magenta-400",brightCyan:"text-cyan-400",brightWhite:"text-gray-100"},os=x(d=>{let u=/\x1b\[([0-9;]*)m/g,l=[],a=0,t=[],s;for(;(s=u.exec(d))!==null;)s.index>a&&l.push({text:d.slice(a,s.index),classes:[...t]}),s[1].split(";").map(w=>parseInt(w)||0).forEach(w=>{switch(w){case 0:t=[];break;case 30:t.push(ee.black);break;case 31:t.push(ee.red);break;case 32:t.push(ee.green);break;case 33:t.push(ee.yellow);break;case 34:t.push(ee.blue);break;case 35:t.push(ee.magenta);break;case 36:t.push(ee.cyan);break;case 37:t.push(ee.white);break;case 90:t.push(ee.gray);break;case 91:t.push(ee.brightRed);break;case 92:t.push(ee.brightGreen);break;case 93:t.push(ee.brightYellow);break;case 94:t.push(ee.brightBlue);break;case 95:t.push(ee.brightMagenta);break;case 96:t.push(ee.brightCyan);break;case 97:t.push(ee.brightWhite);break}}),a=s.index+s[0].length;return a<d.length&&l.push({text:d.slice(a),classes:[...t]}),l.map((g,w)=>jsxRuntime.jsx("span",{className:utils.cn(g.classes),children:g.text},w))},"parseAnsiContent"),vt=U__namespace.forwardRef(({className:d,theme:u,size:l,title:a="Terminal",prompt:t="$",maxLines:s=1e3,showLineNumbers:g=false,allowInput:w=true,allowClear:L=true,allowCopy:E=true,allowDownload:X=false,allowFullscreen:J=true,height:Y="400px",autoScroll:O=true,history:j=[],onCommand:H,onClear:M,initialLines:P=[],...$},_)=>{let[R,F]=U__namespace.useState(P),[C,N]=U__namespace.useState(""),[k,B]=U__namespace.useState(-1),[r,c]=U__namespace.useState(false),[b,V]=U__namespace.useState(j),G=U__namespace.useRef(null),Q=U__namespace.useRef(null);U__namespace.useEffect(()=>{O&&G.current&&(G.current.scrollTop=G.current.scrollHeight);},[R,O]);let D=U__namespace.useCallback(m=>{let T={...m,id:`line-${Date.now()}-${Math.random()}`,timestamp:Date.now()};F(ce=>{let ne=[...ce,T];return ne.length>s?ne.slice(-s):ne});},[s]),o=U__namespace.useCallback(async m=>{if(m.trim()){if(V(T=>[...T,m]),B(-1),D({type:"input",content:`${t} ${m}`,command:m}),m==="clear"){M?M():F([]);return}if(m==="history"){b.forEach((T,ce)=>{D({type:"output",content:`${ce+1} ${T}`});});return}if(m.startsWith("echo ")){D({type:"output",content:m.slice(5)});return}if(H)try{await H(m);}catch(T){D({type:"error",content:T instanceof Error?T.message:String(T),exitCode:1});}else D({type:"error",content:`Command not found: ${m}`,exitCode:127});}},[t,D,H,M,b]),p=x(m=>{m.preventDefault(),C.trim()&&(o(C),N(""));},"handleInputSubmit"),n=x(m=>{if(m.key==="ArrowUp"){if(m.preventDefault(),k<b.length-1){let T=k+1;B(T),N(b[b.length-1-T]||"");}}else if(m.key==="ArrowDown")if(m.preventDefault(),k>0){let T=k-1;B(T),N(b[b.length-1-T]||"");}else k===0&&(B(-1),N(""));},"handleKeyDown"),i=U__namespace.useCallback(async()=>{let m=R.map(T=>T.content).join(`
62
+ `);try{await navigator.clipboard.writeText(m);}catch(T){console.error("Failed to copy terminal content:",T);}},[R]),e=U__namespace.useCallback(()=>{let m=R.map(He=>`[${new Date(He.timestamp).toISOString()}] ${He.content}`).join(`
63
+ `),T=new Blob([m],{type:"text/plain"}),ce=URL.createObjectURL(T),ne=document.createElement("a");ne.href=ce,ne.download=`terminal-${Date.now()}.txt`,document.body.appendChild(ne),ne.click(),document.body.removeChild(ne),URL.revokeObjectURL(ce);},[R]),f=x(()=>{M?M():F([]);},"clearTerminal"),z=x(()=>{w&&Q.current&&Q.current.focus();},"handleTerminalClick");return jsxRuntime.jsxs("div",{ref:_,className:utils.cn(xt({theme:u,size:l}),r&&"fixed inset-0 z-50",d),style:{height:r?"100vh":Y},onClick:z,...$,children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-2 bg-muted/30",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[jsxRuntime.jsxs("div",{className:"flex gap-1",children:[jsxRuntime.jsx("div",{className:"w-3 h-3 rounded-full bg-red-500"}),jsxRuntime.jsx("div",{className:"w-3 h-3 rounded-full bg-yellow-500"}),jsxRuntime.jsx("div",{className:"w-3 h-3 rounded-full bg-green-500"})]}),jsxRuntime.jsx(lucideReact.Terminal,{className:"h-4 w-4"}),jsxRuntime.jsx("span",{className:"text-sm font-medium",children:a}),R.length>0&&jsxRuntime.jsxs("span",{className:"text-xs text-muted-foreground",children:[R.length," lines"]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[L&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:f,className:"h-8 w-8 p-0",children:jsxRuntime.jsx(lucideReact.RefreshCw,{className:"h-3.5 w-3.5"})}),E&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:i,className:"h-8 w-8 p-0",children:jsxRuntime.jsx(lucideReact.Copy,{className:"h-3.5 w-3.5"})}),X&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:e,className:"h-8 w-8 p-0",children:jsxRuntime.jsx(lucideReact.Download,{className:"h-3.5 w-3.5"})}),J&&jsxRuntime.jsx(button.Button,{variant:"ghost",size:"sm",onClick:()=>c(!r),className:"h-8 w-8 p-0",children:r?jsxRuntime.jsx(lucideReact.Minimize2,{className:"h-3.5 w-3.5"}):jsxRuntime.jsx(lucideReact.Maximize2,{className:"h-3.5 w-3.5"})})]})]}),jsxRuntime.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[jsxRuntime.jsx(scrollArea.ScrollArea,{ref:G,className:"flex-1 p-4",children:jsxRuntime.jsx("div",{className:"space-y-1 font-mono",children:R.map((m,T)=>jsxRuntime.jsxs("div",{className:"flex items-start gap-2",children:[g&&jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground w-12 text-right flex-shrink-0",children:T+1}),jsxRuntime.jsx("div",{className:utils.cn("flex-1 whitespace-pre-wrap break-words",m.type==="input"&&"text-inherit",m.type==="output"&&"text-muted-foreground",m.type==="error"&&"text-red-400",m.type==="system"&&"text-blue-400"),children:typeof m.content=="string"&&m.content.includes("\x1B[")?os(m.content):m.content})]},m.id))})}),w&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(separator.Separator,{}),jsxRuntime.jsx("form",{onSubmit:p,className:"p-4",children:jsxRuntime.jsxs("div",{className:"flex items-center gap-2 font-mono",children:[jsxRuntime.jsx(lucideReact.ChevronRight,{className:"h-4 w-4 flex-shrink-0"}),jsxRuntime.jsx("span",{className:"flex-shrink-0",children:t}),jsxRuntime.jsx(input.Input,{ref:Q,value:C,onChange:m=>N(m.target.value),onKeyDown:n,className:"flex-1 border-0 bg-transparent p-0 focus-visible:ring-0 font-mono",placeholder:"Enter command...",autoComplete:"off",autoFocus:true})]})})]})]})]})});vt.displayName="CodeTerminal";exports.CodeBlock=ze;exports.CodeCompare=Oe;exports.CodeDiff=Xe;exports.CodeEditor=et;exports.CodeExplorer=rt;exports.CodePreview=pt;exports.CodeSnippet=Me;exports.CodeTabs=bt;exports.CodeTerminal=vt;exports.InlineCode=ht;exports.codeBlockVariants=Be;exports.codeCompareVariants=Ae;exports.codeDiffVariants=Je;exports.codeExplorerVariants=st;exports.codePreviewVariants=mt;exports.codeSnippetVariants=Le;exports.codeTerminalVariants=xt;