@luxfi/ui 8.2.6 → 8.2.8

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 (568) hide show
  1. package/dist/3d-button.cjs +1 -1
  2. package/dist/3d-button.js +1 -1
  3. package/dist/3d-card.cjs +1 -1
  4. package/dist/3d-card.js +1 -1
  5. package/dist/3d-carousel.cjs +1 -1
  6. package/dist/3d-carousel.js +1 -1
  7. package/dist/3d-grid.cjs +1 -1
  8. package/dist/3d-grid.js +1 -1
  9. package/dist/3d-marquee.cjs +1 -1
  10. package/dist/3d-marquee.js +1 -1
  11. package/dist/3d-model-viewer.cjs +26 -422
  12. package/dist/3d-model-viewer.js +21 -417
  13. package/dist/3d-pin.cjs +1 -1
  14. package/dist/3d-pin.js +1 -1
  15. package/dist/3d-scene.cjs +1 -1
  16. package/dist/3d-scene.js +1 -1
  17. package/dist/3d-text.cjs +1 -1
  18. package/dist/3d-text.js +1 -1
  19. package/dist/accordion.cjs +4 -12
  20. package/dist/accordion.d.ts.map +1 -1
  21. package/dist/accordion.js +3 -12
  22. package/dist/advanced-chart.cjs +1 -1
  23. package/dist/advanced-chart.js +1 -1
  24. package/dist/advanced-navigation-bar.cjs +6 -402
  25. package/dist/advanced-navigation-bar.js +6 -402
  26. package/dist/ai-actions.cjs +1 -1
  27. package/dist/ai-actions.js +1 -1
  28. package/dist/ai-agents.cjs +46 -891
  29. package/dist/ai-agents.js +9 -835
  30. package/dist/ai-assistant.cjs +14 -741
  31. package/dist/ai-assistant.js +11 -739
  32. package/dist/ai-chat.cjs +25 -771
  33. package/dist/ai-chat.js +19 -766
  34. package/dist/ai-code.cjs +68 -924
  35. package/dist/ai-code.js +50 -906
  36. package/dist/ai-model-selector-navigation-bar.cjs +1 -1
  37. package/dist/ai-model-selector-navigation-bar.js +1 -1
  38. package/dist/ai-models.cjs +1 -1
  39. package/dist/ai-models.js +1 -1
  40. package/dist/ai-playground.cjs +26 -802
  41. package/dist/ai-playground.js +19 -796
  42. package/dist/ai-tools.cjs +23 -768
  43. package/dist/ai-tools.js +16 -762
  44. package/dist/ai-vision.cjs +42 -994
  45. package/dist/ai-vision.js +31 -984
  46. package/dist/ai-voice-settings.cjs +36 -1007
  47. package/dist/ai-voice-settings.js +33 -1005
  48. package/dist/ai-voice.cjs +52 -1025
  49. package/dist/ai-voice.js +10 -964
  50. package/dist/alert.cjs +12 -131
  51. package/dist/alert.d.ts.map +1 -1
  52. package/dist/alert.js +9 -129
  53. package/dist/android.cjs +0 -1
  54. package/dist/android.js +0 -1
  55. package/dist/animated-background.cjs +1 -1
  56. package/dist/animated-background.js +1 -1
  57. package/dist/animated-beam.cjs +1 -1
  58. package/dist/animated-beam.js +1 -1
  59. package/dist/animated-cursor.cjs +1 -1
  60. package/dist/animated-cursor.js +1 -1
  61. package/dist/animated-icon.cjs +1 -1
  62. package/dist/animated-icon.js +1 -1
  63. package/dist/animated-list.cjs +1 -1
  64. package/dist/animated-list.js +1 -1
  65. package/dist/animated-number.cjs +1 -1
  66. package/dist/animated-number.js +1 -1
  67. package/dist/animated-testimonials.cjs +1 -1
  68. package/dist/animated-testimonials.js +1 -1
  69. package/dist/animated-text.cjs +1 -1
  70. package/dist/animated-text.js +1 -1
  71. package/dist/animated-tooltip.cjs +1 -1
  72. package/dist/animated-tooltip.js +1 -1
  73. package/dist/announcement.cjs +7 -403
  74. package/dist/announcement.js +7 -403
  75. package/dist/app-switcher-navigation-bar.cjs +6 -402
  76. package/dist/app-switcher-navigation-bar.js +6 -402
  77. package/dist/apple-cards-carousel.cjs +85 -481
  78. package/dist/apple-cards-carousel.js +20 -416
  79. package/dist/apple-hello-effect.cjs +1 -1
  80. package/dist/apple-hello-effect.js +1 -1
  81. package/dist/auth.cjs +11 -388
  82. package/dist/auth.js +8 -386
  83. package/dist/avatar.cjs +3 -10
  84. package/dist/avatar.js +3 -11
  85. package/dist/badge.cjs +8 -229
  86. package/dist/badge.js +5 -211
  87. package/dist/bank.cjs +1 -1
  88. package/dist/bank.js +1 -1
  89. package/dist/banner.cjs +1 -1
  90. package/dist/banner.js +1 -1
  91. package/dist/breadcrumb-and-filters-navigation-bar.cjs +1 -1
  92. package/dist/breadcrumb-and-filters-navigation-bar.js +1 -1
  93. package/dist/breadcrumb-navigation-bar.cjs +1 -1
  94. package/dist/breadcrumb-navigation-bar.js +1 -1
  95. package/dist/button.cjs +15 -69
  96. package/dist/button.d.ts.map +1 -1
  97. package/dist/button.js +13 -67
  98. package/dist/calendar.cjs +1 -1
  99. package/dist/calendar.js +1 -1
  100. package/dist/centered-logo-navigation-bar.cjs +1 -1
  101. package/dist/centered-logo-navigation-bar.js +1 -1
  102. package/dist/chart.cjs +1 -1
  103. package/dist/chart.js +1 -1
  104. package/dist/checkbox.cjs +1 -2
  105. package/dist/checkbox.d.ts.map +1 -1
  106. package/dist/checkbox.js +1 -2
  107. package/dist/choicebox.cjs +1 -1
  108. package/dist/choicebox.js +1 -1
  109. package/dist/chrome.cjs +30 -494
  110. package/dist/chrome.js +10 -475
  111. package/dist/close-button.cjs +0 -1
  112. package/dist/close-button.js +0 -1
  113. package/dist/code-block.cjs +17 -665
  114. package/dist/code-block.js +14 -663
  115. package/dist/code-compare.cjs +29 -1303
  116. package/dist/code-compare.js +19 -1294
  117. package/dist/code-diff.cjs +22 -670
  118. package/dist/code-diff.js +18 -667
  119. package/dist/code-editor.cjs +14 -410
  120. package/dist/code-editor.js +13 -409
  121. package/dist/code-explorer.cjs +15 -457
  122. package/dist/code-explorer.js +14 -457
  123. package/dist/code-preview.cjs +32 -984
  124. package/dist/code-preview.js +24 -977
  125. package/dist/code-snippet.cjs +20 -668
  126. package/dist/code-snippet.js +15 -664
  127. package/dist/code-tabs.cjs +1 -1
  128. package/dist/code-tabs.js +1 -1
  129. package/dist/code-terminal.cjs +25 -486
  130. package/dist/code-terminal.js +20 -482
  131. package/dist/collaboration-navigation-bar.cjs +1 -1
  132. package/dist/collaboration-navigation-bar.js +1 -1
  133. package/dist/collapsible.cjs +14 -349
  134. package/dist/collapsible.d.ts.map +1 -1
  135. package/dist/collapsible.js +12 -332
  136. package/dist/color-mode.cjs +1 -1
  137. package/dist/color-mode.js +1 -1
  138. package/dist/color-picker.cjs +9 -451
  139. package/dist/color-picker.js +8 -451
  140. package/dist/combobox.cjs +7 -403
  141. package/dist/combobox.js +7 -403
  142. package/dist/communication-navigation-bar.cjs +8 -404
  143. package/dist/communication-navigation-bar.js +6 -402
  144. package/dist/company-profile.cjs +1 -1
  145. package/dist/company-profile.js +1 -1
  146. package/dist/comparison.cjs +1 -1
  147. package/dist/comparison.js +1 -1
  148. package/dist/context-switcher-navigation-bar.cjs +1 -1
  149. package/dist/context-switcher-navigation-bar.js +1 -1
  150. package/dist/credit-card.cjs +1 -1
  151. package/dist/credit-card.js +1 -1
  152. package/dist/crypto-screener.cjs +1 -1
  153. package/dist/crypto-screener.js +1 -1
  154. package/dist/cursor.cjs +1 -1
  155. package/dist/cursor.js +1 -1
  156. package/dist/dashboard-navigation-bar.cjs +7 -403
  157. package/dist/dashboard-navigation-bar.js +6 -402
  158. package/dist/dialog-stack.cjs +6 -402
  159. package/dist/dialog-stack.js +6 -402
  160. package/dist/dialog.cjs +14 -72
  161. package/dist/dialog.d.ts.map +1 -1
  162. package/dist/dialog.js +14 -72
  163. package/dist/direction.cjs +1 -1
  164. package/dist/direction.js +1 -1
  165. package/dist/dock.cjs +1 -1
  166. package/dist/dock.js +1 -1
  167. package/dist/drawer.cjs +24 -101
  168. package/dist/drawer.d.ts.map +1 -1
  169. package/dist/drawer.js +20 -98
  170. package/dist/dropzone.cjs +1 -1
  171. package/dist/dropzone.js +1 -1
  172. package/dist/e-commerce-navigation-bar.cjs +8 -404
  173. package/dist/e-commerce-navigation-bar.js +6 -402
  174. package/dist/editor.cjs +10 -406
  175. package/dist/editor.js +7 -403
  176. package/dist/empty-state.cjs +0 -1
  177. package/dist/empty-state.js +0 -1
  178. package/dist/empty.cjs +0 -1
  179. package/dist/empty.js +0 -1
  180. package/dist/engine.cjs +0 -1
  181. package/dist/engine.js +0 -1
  182. package/dist/expiration-selector.cjs +1 -1
  183. package/dist/expiration-selector.js +1 -1
  184. package/dist/field.cjs +0 -1
  185. package/dist/field.js +0 -1
  186. package/dist/financials.cjs +1 -1
  187. package/dist/financials.js +1 -1
  188. package/dist/forex-screener.cjs +1 -1
  189. package/dist/forex-screener.js +1 -1
  190. package/dist/gantt.cjs +1 -1
  191. package/dist/gantt.js +1 -1
  192. package/dist/greeks-display.cjs +1 -1
  193. package/dist/greeks-display.js +1 -1
  194. package/dist/grid-pattern.cjs +1 -1
  195. package/dist/grid-pattern.js +1 -1
  196. package/dist/gui.cjs +0 -1
  197. package/dist/gui.js +0 -1
  198. package/dist/heading.cjs +0 -1
  199. package/dist/heading.js +0 -1
  200. package/dist/hooks/use-mobile.cjs +1 -0
  201. package/dist/hooks/use-mobile.js +1 -0
  202. package/dist/iam.cjs +2 -123
  203. package/dist/iam.js +1 -122
  204. package/dist/icon-button.cjs +2 -57
  205. package/dist/icon-button.js +1 -56
  206. package/dist/icon-navigation-bar.cjs +1 -1
  207. package/dist/icon-navigation-bar.js +1 -1
  208. package/dist/identity.cjs +29 -243
  209. package/dist/identity.js +21 -236
  210. package/dist/image-crop.cjs +11 -407
  211. package/dist/image-crop.js +8 -404
  212. package/dist/image-zoom.cjs +1 -1
  213. package/dist/image-zoom.js +1 -1
  214. package/dist/image.cjs +15 -85
  215. package/dist/image.d.ts.map +1 -1
  216. package/dist/image.js +14 -69
  217. package/dist/index.cjs +1868 -38771
  218. package/dist/index.js +174 -38321
  219. package/dist/ink.cjs +0 -1
  220. package/dist/ink.js +0 -1
  221. package/dist/input-group.cjs +4 -12
  222. package/dist/input-group.d.ts.map +1 -1
  223. package/dist/input-group.js +3 -12
  224. package/dist/input-otp.cjs +1 -1
  225. package/dist/input-otp.js +1 -1
  226. package/dist/input.cjs +1 -2
  227. package/dist/input.d.ts.map +1 -1
  228. package/dist/input.js +1 -2
  229. package/dist/iphone-15-pro.cjs +1 -1
  230. package/dist/iphone-15-pro.js +1 -1
  231. package/dist/item.cjs +2 -28
  232. package/dist/item.js +1 -23
  233. package/dist/kanban.cjs +26 -752
  234. package/dist/kanban.js +16 -743
  235. package/dist/kbd.cjs +0 -1
  236. package/dist/kbd.js +0 -1
  237. package/dist/limelight-nav-navigation-bar.cjs +1 -1
  238. package/dist/limelight-nav-navigation-bar.js +1 -1
  239. package/dist/limelight-nav.cjs +11 -453
  240. package/dist/limelight-nav.js +10 -453
  241. package/dist/link.cjs +11 -81
  242. package/dist/link.js +6 -61
  243. package/dist/list.cjs +0 -1
  244. package/dist/list.js +0 -1
  245. package/dist/lux.config.cjs +15 -33
  246. package/dist/lux.config.js +4 -27
  247. package/dist/magnetic.cjs +1 -1
  248. package/dist/magnetic.js +1 -1
  249. package/dist/market-overview.cjs +1 -1
  250. package/dist/market-overview.js +1 -1
  251. package/dist/marquee.cjs +1 -1
  252. package/dist/marquee.js +1 -1
  253. package/dist/menu-dock.cjs +1 -1
  254. package/dist/menu-dock.js +1 -1
  255. package/dist/menu.cjs +6 -14
  256. package/dist/menu.js +2 -10
  257. package/dist/menubar.cjs +1 -1
  258. package/dist/menubar.js +1 -1
  259. package/dist/message-dock.cjs +6 -402
  260. package/dist/message-dock.js +6 -402
  261. package/dist/mini-calendar.cjs +8 -404
  262. package/dist/mini-calendar.js +7 -403
  263. package/dist/minimal-tiptap.cjs +1 -1
  264. package/dist/minimal-tiptap.js +1 -1
  265. package/dist/motion-highlight.cjs +1 -1
  266. package/dist/motion-highlight.js +1 -1
  267. package/dist/music-player.cjs +31 -529
  268. package/dist/music-player.js +23 -521
  269. package/dist/native-select.cjs +0 -1
  270. package/dist/native-select.js +0 -1
  271. package/dist/news-timeline.cjs +1 -1
  272. package/dist/news-timeline.js +1 -1
  273. package/dist/next.cjs +9 -91
  274. package/dist/next.d.ts.map +1 -1
  275. package/dist/next.js +4 -88
  276. package/dist/option-chain.cjs +1 -1
  277. package/dist/option-chain.js +1 -1
  278. package/dist/option-position.cjs +1 -1
  279. package/dist/option-position.js +1 -1
  280. package/dist/order-entry.cjs +1 -1
  281. package/dist/order-entry.js +1 -1
  282. package/dist/orders-history.cjs +1 -1
  283. package/dist/orders-history.js +1 -1
  284. package/dist/pagination.cjs +0 -1
  285. package/dist/pagination.js +0 -1
  286. package/dist/particles-background.cjs +1 -1
  287. package/dist/particles-background.js +1 -1
  288. package/dist/pill.cjs +0 -1
  289. package/dist/pill.js +0 -1
  290. package/dist/pin-input.cjs +1 -2
  291. package/dist/pin-input.d.ts.map +1 -1
  292. package/dist/pin-input.js +1 -2
  293. package/dist/pixel-image.cjs +1 -1
  294. package/dist/pixel-image.js +1 -1
  295. package/dist/pnl-diagram.cjs +1 -1
  296. package/dist/pnl-diagram.js +1 -1
  297. package/dist/popover.cjs +18 -76
  298. package/dist/popover.d.ts.map +1 -1
  299. package/dist/popover.js +17 -75
  300. package/dist/positions-list.cjs +1 -1
  301. package/dist/positions-list.js +1 -1
  302. package/dist/progress-circle.cjs +4 -12
  303. package/dist/progress-circle.d.ts.map +1 -1
  304. package/dist/progress-circle.js +3 -12
  305. package/dist/progress.cjs +0 -1
  306. package/dist/progress.js +0 -1
  307. package/dist/provider.cjs +8 -177
  308. package/dist/provider.js +5 -175
  309. package/dist/pulse-animation.cjs +1 -1
  310. package/dist/pulse-animation.js +1 -1
  311. package/dist/qr-code.cjs +1 -1
  312. package/dist/qr-code.js +1 -1
  313. package/dist/radio.cjs +1 -2
  314. package/dist/radio.d.ts.map +1 -1
  315. package/dist/radio.js +1 -2
  316. package/dist/rating.cjs +1 -2
  317. package/dist/rating.d.ts.map +1 -1
  318. package/dist/rating.js +1 -2
  319. package/dist/relative-time.cjs +1 -1
  320. package/dist/relative-time.js +1 -1
  321. package/dist/resizable.cjs +1 -1
  322. package/dist/resizable.js +1 -1
  323. package/dist/reveal-animation.cjs +1 -1
  324. package/dist/reveal-animation.js +1 -1
  325. package/dist/safari.cjs +1 -1
  326. package/dist/safari.js +1 -1
  327. package/dist/sandbox.cjs +1 -1
  328. package/dist/sandbox.js +1 -1
  329. package/dist/search-and-toggle-navigation-bar.cjs +1 -1
  330. package/dist/search-and-toggle-navigation-bar.js +1 -1
  331. package/dist/select.cjs +37 -90
  332. package/dist/select.js +36 -89
  333. package/dist/separator.cjs +0 -1
  334. package/dist/separator.js +0 -1
  335. package/dist/sidebar.cjs +23 -494
  336. package/dist/sidebar.js +18 -490
  337. package/dist/simple-navigation-bar.cjs +1 -1
  338. package/dist/simple-navigation-bar.js +1 -1
  339. package/dist/site/commerce/ui/context.cjs +10 -214
  340. package/dist/site/commerce/ui/context.js +7 -215
  341. package/dist/site/commerce/ui/store.cjs +1 -1
  342. package/dist/site/commerce/ui/store.d.ts.map +1 -1
  343. package/dist/site/commerce/ui/store.js +1 -1
  344. package/dist/site/components/access-code-input.cjs +1 -0
  345. package/dist/site/components/access-code-input.js +1 -0
  346. package/dist/site/components/analytics.cjs +3 -42
  347. package/dist/site/components/analytics.js +2 -37
  348. package/dist/site/components/auth/callback.cjs +3 -8
  349. package/dist/site/components/auth/callback.js +2 -7
  350. package/dist/site/components/auth/login-panel.cjs +16 -74
  351. package/dist/site/components/auth/login-panel.js +13 -73
  352. package/dist/site/components/auth/login.cjs +3 -6
  353. package/dist/site/components/auth/login.js +2 -5
  354. package/dist/site/components/auth/provider.cjs +1 -0
  355. package/dist/site/components/auth/provider.js +1 -0
  356. package/dist/site/components/auth/widget.cjs +3 -6
  357. package/dist/site/components/auth/widget.js +2 -5
  358. package/dist/site/components/back-button.cjs +1 -0
  359. package/dist/site/components/back-button.js +1 -0
  360. package/dist/site/components/chat-widget.cjs +1 -0
  361. package/dist/site/components/chat-widget.js +1 -0
  362. package/dist/site/components/commerce/bag-button.cjs +3 -3
  363. package/dist/site/components/commerce/bag-button.js +3 -3
  364. package/dist/site/components/commerce/buy-button.cjs +3 -11
  365. package/dist/site/components/commerce/buy-button.js +2 -10
  366. package/dist/site/components/commerce/checkout-button.cjs +3 -3
  367. package/dist/site/components/commerce/checkout-button.js +3 -3
  368. package/dist/site/components/commerce/checkout-panel/cart-accordian.cjs +1 -0
  369. package/dist/site/components/commerce/checkout-panel/cart-accordian.js +1 -0
  370. package/dist/site/components/commerce/checkout-panel/desktop-bag-carousel.cjs +1 -0
  371. package/dist/site/components/commerce/checkout-panel/desktop-bag-carousel.js +1 -0
  372. package/dist/site/components/commerce/checkout-panel/desktop-cp.cjs +16 -173
  373. package/dist/site/components/commerce/checkout-panel/desktop-cp.js +15 -174
  374. package/dist/site/components/commerce/checkout-panel/index.cjs +10 -400
  375. package/dist/site/components/commerce/checkout-panel/index.js +11 -403
  376. package/dist/site/components/commerce/checkout-panel/mobile-cp.cjs +16 -236
  377. package/dist/site/components/commerce/checkout-panel/mobile-cp.js +14 -237
  378. package/dist/site/components/commerce/desktop-bag-popup.cjs +8 -8
  379. package/dist/site/components/commerce/desktop-bag-popup.js +4 -8
  380. package/dist/site/components/commerce/drawer/index.cjs +16 -289
  381. package/dist/site/components/commerce/drawer/index.js +11 -290
  382. package/dist/site/components/commerce/drawer/micro.cjs +9 -115
  383. package/dist/site/components/commerce/drawer/micro.js +5 -115
  384. package/dist/site/components/commerce/drawer/shell.cjs +3 -10
  385. package/dist/site/components/commerce/drawer/shell.js +3 -10
  386. package/dist/site/components/contact-dialog/contact-form.cjs +1 -0
  387. package/dist/site/components/contact-dialog/contact-form.js +1 -0
  388. package/dist/site/components/contact-dialog/index.cjs +7 -69
  389. package/dist/site/components/contact-dialog/index.js +8 -71
  390. package/dist/site/components/drawer-margin.cjs +3 -10
  391. package/dist/site/components/drawer-margin.js +3 -10
  392. package/dist/site/components/footer-nav.cjs +1 -0
  393. package/dist/site/components/footer-nav.js +1 -0
  394. package/dist/site/components/footer.cjs +11 -81
  395. package/dist/site/components/footer.js +8 -80
  396. package/dist/site/components/header/desktop-nav-menu.cjs +1 -0
  397. package/dist/site/components/header/desktop-nav-menu.js +1 -0
  398. package/dist/site/components/header/desktop.cjs +19 -376
  399. package/dist/site/components/header/desktop.d.ts.map +1 -1
  400. package/dist/site/components/header/desktop.js +13 -357
  401. package/dist/site/components/header/index.cjs +10 -674
  402. package/dist/site/components/header/index.js +9 -657
  403. package/dist/site/components/header/mobile-bag-drawer.cjs +7 -71
  404. package/dist/site/components/header/mobile-bag-drawer.js +6 -74
  405. package/dist/site/components/header/mobile-menu-toggle-button.cjs +1 -0
  406. package/dist/site/components/header/mobile-menu-toggle-button.js +1 -0
  407. package/dist/site/components/header/mobile-nav-menu-ai.cjs +26 -28
  408. package/dist/site/components/header/mobile-nav-menu-ai.js +25 -27
  409. package/dist/site/components/header/mobile-nav-menu-item.cjs +7 -61
  410. package/dist/site/components/header/mobile-nav-menu-item.d.ts.map +1 -1
  411. package/dist/site/components/header/mobile-nav-menu-item.js +7 -62
  412. package/dist/site/components/header/mobile-nav-menu.cjs +8 -110
  413. package/dist/site/components/header/mobile-nav-menu.js +8 -112
  414. package/dist/site/components/header/mobile.cjs +49 -330
  415. package/dist/site/components/header/mobile.js +43 -330
  416. package/dist/site/components/header/theme-toggle.cjs +1 -0
  417. package/dist/site/components/header/theme-toggle.js +1 -0
  418. package/dist/site/components/icons/index.cjs +34 -35
  419. package/dist/site/components/icons/index.js +5 -33
  420. package/dist/site/components/index.cjs +118 -1961
  421. package/dist/site/components/index.js +23 -1951
  422. package/dist/site/components/mini-chart/index.cjs +7 -90
  423. package/dist/site/components/mini-chart/index.js +1 -92
  424. package/dist/site/components/mini-chart/mini-chart.cjs +1 -0
  425. package/dist/site/components/mini-chart/mini-chart.js +1 -0
  426. package/dist/site/components/mini-chart/wrapper.cjs +7 -76
  427. package/dist/site/components/mini-chart/wrapper.js +4 -77
  428. package/dist/site/components/not-found/index.cjs +10 -820
  429. package/dist/site/components/not-found/index.d.ts.map +1 -1
  430. package/dist/site/components/not-found/index.js +9 -803
  431. package/dist/site/components/security/index.cjs +10 -820
  432. package/dist/site/components/security/index.d.ts.map +1 -1
  433. package/dist/site/components/security/index.js +9 -803
  434. package/dist/site/components/tooltip.cjs +1 -0
  435. package/dist/site/components/tooltip.js +1 -0
  436. package/dist/site/next/analytics/index.cjs +16 -49
  437. package/dist/site/next/analytics/index.js +3 -49
  438. package/dist/site/next/analytics/pixel-analytics.cjs +24 -8
  439. package/dist/site/next/analytics/pixel-analytics.js +5 -8
  440. package/dist/site/next/index.cjs +13 -140
  441. package/dist/site/next/index.js +2 -140
  442. package/dist/site/root-layout/index.cjs +13 -1437
  443. package/dist/site/root-layout/index.css +0 -133
  444. package/dist/site/root-layout/index.d.ts.map +1 -1
  445. package/dist/site/root-layout/index.js +13 -1418
  446. package/dist/site/site-def/footer/community.cjs +11 -27
  447. package/dist/site/site-def/footer/community.js +2 -18
  448. package/dist/site/site-def/footer/index.cjs +38 -218
  449. package/dist/site/site-def/footer/index.js +14 -215
  450. package/dist/site/site-def/index.cjs +28 -620
  451. package/dist/site/site-def/index.js +3 -624
  452. package/dist/skeleton.cjs +0 -1
  453. package/dist/skeleton.js +0 -1
  454. package/dist/slider.cjs +1 -2
  455. package/dist/slider.d.ts.map +1 -1
  456. package/dist/slider.js +1 -2
  457. package/dist/status-dashboard-navigation-bar.cjs +1 -1
  458. package/dist/status-dashboard-navigation-bar.js +1 -1
  459. package/dist/status.cjs +0 -1
  460. package/dist/status.js +0 -1
  461. package/dist/stock-screener.cjs +1 -1
  462. package/dist/stock-screener.js +1 -1
  463. package/dist/strategy-builder.cjs +1 -1
  464. package/dist/strategy-builder.js +1 -1
  465. package/dist/switch.cjs +1 -2
  466. package/dist/switch.d.ts.map +1 -1
  467. package/dist/switch.js +1 -2
  468. package/dist/symbol-info.cjs +1 -1
  469. package/dist/symbol-info.js +1 -1
  470. package/dist/table.cjs +21 -340
  471. package/dist/table.d.ts.map +1 -1
  472. package/dist/table.js +20 -340
  473. package/dist/tabs.cjs +4 -12
  474. package/dist/tabs.d.ts.map +1 -1
  475. package/dist/tabs.js +2 -11
  476. package/dist/tag.cjs +9 -271
  477. package/dist/tag.js +6 -269
  478. package/dist/tags.cjs +7 -315
  479. package/dist/tags.js +6 -315
  480. package/dist/team-switcher-navigation-bar.cjs +1 -1
  481. package/dist/team-switcher-navigation-bar.js +1 -1
  482. package/dist/technical-analysis.cjs +1 -1
  483. package/dist/technical-analysis.js +1 -1
  484. package/dist/terminal.cjs +1 -1
  485. package/dist/terminal.js +1 -1
  486. package/dist/textarea.cjs +5 -52
  487. package/dist/textarea.d.ts.map +1 -1
  488. package/dist/textarea.js +4 -51
  489. package/dist/ticker-tape.cjs +1 -1
  490. package/dist/ticker-tape.js +1 -1
  491. package/dist/ticker.cjs +1 -1
  492. package/dist/ticker.js +1 -1
  493. package/dist/timeline.cjs +1 -1
  494. package/dist/timeline.js +1 -1
  495. package/dist/toaster.cjs +1 -1
  496. package/dist/toaster.js +1 -1
  497. package/dist/toggle.cjs +1 -1
  498. package/dist/toggle.js +1 -1
  499. package/dist/tooltip.cjs +16 -36
  500. package/dist/tooltip.d.ts.map +1 -1
  501. package/dist/tooltip.js +14 -35
  502. package/dist/trading-panel.cjs +1 -1
  503. package/dist/trading-panel.js +1 -1
  504. package/dist/two-tier-navigation-bar.cjs +1 -1
  505. package/dist/two-tier-navigation-bar.js +1 -1
  506. package/dist/underline-navigation-bar.cjs +1 -1
  507. package/dist/underline-navigation-bar.js +1 -1
  508. package/dist/use-narrow.cjs +1 -1
  509. package/dist/use-narrow.js +1 -1
  510. package/dist/vite.cjs +4 -82
  511. package/dist/vite.d.ts.map +1 -1
  512. package/dist/vite.js +2 -80
  513. package/dist/youtube-pip-player.cjs +1 -1
  514. package/dist/youtube-pip-player.js +1 -1
  515. package/package.json +2 -2
  516. package/src/accordion.tsx +1 -0
  517. package/src/alert.tsx +1 -0
  518. package/src/button.tsx +1 -0
  519. package/src/checkbox.tsx +1 -0
  520. package/src/collapsible.tsx +1 -0
  521. package/src/dialog.tsx +1 -0
  522. package/src/drawer.tsx +1 -0
  523. package/src/image.tsx +1 -0
  524. package/src/input-group.tsx +1 -0
  525. package/src/input.tsx +1 -0
  526. package/src/next.ts +1 -0
  527. package/src/pin-input.tsx +1 -0
  528. package/src/popover.tsx +1 -0
  529. package/src/progress-circle.tsx +1 -0
  530. package/src/radio.tsx +1 -0
  531. package/src/rating.tsx +1 -0
  532. package/src/site/commerce/ui/store.ts +1 -0
  533. package/src/site/components/header/desktop.tsx +1 -0
  534. package/src/site/components/header/mobile-nav-menu-item.tsx +1 -0
  535. package/src/site/components/not-found/index.tsx +1 -0
  536. package/src/site/components/security/index.tsx +1 -0
  537. package/src/site/root-layout/index.tsx +1 -0
  538. package/src/slider.tsx +1 -0
  539. package/src/switch.tsx +1 -0
  540. package/src/table.tsx +1 -0
  541. package/src/tabs.tsx +1 -0
  542. package/src/textarea.tsx +1 -0
  543. package/src/tooltip.tsx +1 -0
  544. package/src/vite.ts +1 -0
  545. package/dist/index.css +0 -132
  546. package/dist/site/components/auth/login-panel.css +0 -4
  547. package/dist/site/components/commerce/bag-button.css +0 -4
  548. package/dist/site/components/commerce/checkout-button.css +0 -4
  549. package/dist/site/components/commerce/checkout-panel/desktop-cp.css +0 -132
  550. package/dist/site/components/commerce/checkout-panel/index.css +0 -132
  551. package/dist/site/components/commerce/checkout-panel/mobile-cp.css +0 -132
  552. package/dist/site/components/commerce/desktop-bag-popup.css +0 -4
  553. package/dist/site/components/commerce/drawer/index.css +0 -132
  554. package/dist/site/components/commerce/drawer/micro.css +0 -4
  555. package/dist/site/components/header/desktop.css +0 -4
  556. package/dist/site/components/header/index.css +0 -132
  557. package/dist/site/components/header/mobile-bag-drawer.css +0 -4
  558. package/dist/site/components/header/mobile-nav-menu-ai.css +0 -132
  559. package/dist/site/components/header/mobile-nav-menu-item.css +0 -132
  560. package/dist/site/components/header/mobile-nav-menu.css +0 -132
  561. package/dist/site/components/header/mobile.css +0 -132
  562. package/dist/site/components/icons/index.css +0 -4
  563. package/dist/site/components/index.css +0 -132
  564. package/dist/site/components/not-found/index.css +0 -132
  565. package/dist/site/components/security/index.css +0 -132
  566. package/dist/site/site-def/footer/community.css +0 -4
  567. package/dist/site/site-def/footer/index.css +0 -4
  568. package/dist/site/site-def/index.css +0 -4
@@ -1,13 +1,14 @@
1
- "use client";
1
+ 'use client';
2
2
  'use strict';
3
3
 
4
4
  var ui = require('@hanzo/ui');
5
- var React6 = require('react');
5
+ var React = require('react');
6
6
  var lucideReact = require('lucide-react');
7
- var gui = require('@hanzo/gui');
7
+ var badge_js = require('./badge.js');
8
+ var button_js = require('./button.js');
9
+ var codeDiff_js = require('./code-diff.js');
10
+ var codeSnippet_js = require('./code-snippet.js');
8
11
  var jsxRuntime = require('react/jsx-runtime');
9
- var usehooks = require('@uidotdev/usehooks');
10
- var shiki = require('shiki');
11
12
 
12
13
  function _interopNamespace(e) {
13
14
  if (e && e.__esModule) return e;
@@ -27,1283 +28,8 @@ function _interopNamespace(e) {
27
28
  return Object.freeze(n);
28
29
  }
29
30
 
30
- var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
31
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
32
 
32
- var SKELETON_CLASSES = "lux-skeleton rounded-sm";
33
- var Skeleton = React6__namespace.forwardRef(
34
- function Skeleton2(props, ref) {
35
- const { loading = true, asChild, className, children, style, ...rest } = props;
36
- if (!loading) {
37
- if (asChild && React6__namespace.isValidElement(children)) return children;
38
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { ref, className, style, ...rest, children });
39
- }
40
- return /* @__PURE__ */ jsxRuntime.jsx(
41
- "div",
42
- {
43
- ref,
44
- "data-loading": true,
45
- ...ui.sx(
46
- SKELETON_CLASSES,
47
- asChild || children ? "[&_*]:invisible" : "min-h-5",
48
- className
49
- ),
50
- style,
51
- ...rest,
52
- children
53
- }
54
- );
55
- }
56
- );
57
- React6__namespace.forwardRef(
58
- function SkeletonCircle2(props, ref) {
59
- const { size = 40, loading = true, className, ...rest } = props;
60
- const dimension = typeof size === "number" ? `${size}px` : size;
61
- return /* @__PURE__ */ jsxRuntime.jsx(
62
- Skeleton,
63
- {
64
- ref,
65
- loading,
66
- ...ui.sx("rounded-full shrink-0", className),
67
- style: { width: dimension, height: dimension, ...rest.style },
68
- ...rest
69
- }
70
- );
71
- }
72
- );
73
- React6__namespace.forwardRef(
74
- function SkeletonText2(props, ref) {
75
- const { noOfLines = 3, loading = true, className, ...rest } = props;
76
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { ref, className: ui.cn("flex w-full flex-col gap-2", className), ...rest, children: Array.from({ length: noOfLines }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
77
- Skeleton,
78
- {
79
- loading,
80
- ...ui.sx(ui.cn("h-4", index === noOfLines - 1 && "max-w-[80%]"))
81
- },
82
- index
83
- )) });
84
- }
85
- );
86
- var ink = (children, Wrap = gui.Text, props = {}) => {
87
- let hasText = false;
88
- React6.Children.forEach(children, (child) => {
89
- if (typeof child === "string" || typeof child === "number") hasText = true;
90
- });
91
- if (!hasText) return children;
92
- return React6.Children.map(children, (child) => typeof child === "string" || typeof child === "number" ? React6.createElement(Wrap, props, child) : child);
93
- };
94
- var TOUCH_PX = 1024;
95
- function useBelow(px) {
96
- const [below, setBelow] = React6__namespace.useState(false);
97
- React6__namespace.useEffect(() => {
98
- const mql = window.matchMedia(`(max-width: ${px - 1}px)`);
99
- const apply = () => setBelow(mql.matches);
100
- apply();
101
- mql.addEventListener("change", apply);
102
- return () => mql.removeEventListener("change", apply);
103
- }, [px]);
104
- return below;
105
- }
106
- var useIsTouch = () => useBelow(TOUCH_PX);
107
- function mapPlacement(p) {
108
- if (!p) return void 0;
109
- return p;
110
- }
111
- var Tooltip = React6__namespace.forwardRef(
112
- function Tooltip2(props, ref) {
113
- const {
114
- showArrow: showArrowProp,
115
- onOpenChange,
116
- variant,
117
- selected,
118
- children,
119
- disabled,
120
- disableOnMobile,
121
- content,
122
- contentProps,
123
- defaultOpen = false,
124
- triggerProps,
125
- closeDelay = 100,
126
- openDelay = 100,
127
- interactive,
128
- positioning
129
- } = props;
130
- const [open, setOpen] = React6__namespace.useState(defaultOpen);
131
- const timeoutRef = React6__namespace.useRef(null);
132
- const isMobile = useIsTouch();
133
- const handleOpenChange = React6__namespace.useCallback((nextOpen) => {
134
- setOpen(nextOpen);
135
- onOpenChange?.({ open: nextOpen });
136
- }, [onOpenChange]);
137
- const handleOpenChangeManual = React6__namespace.useCallback((nextOpen) => {
138
- timeoutRef.current && window.clearTimeout(timeoutRef.current);
139
- timeoutRef.current = window.setTimeout(() => {
140
- setOpen(nextOpen);
141
- onOpenChange?.({ open: nextOpen });
142
- }, nextOpen ? openDelay : closeDelay);
143
- }, [closeDelay, openDelay, onOpenChange]);
144
- const handleClickAway = React6__namespace.useCallback(() => {
145
- if (open) handleOpenChangeManual(false);
146
- }, [open, handleOpenChangeManual]);
147
- const triggerRef = usehooks.useClickAway(handleClickAway);
148
- const handleTriggerClick = React6__namespace.useCallback(() => {
149
- handleOpenChangeManual(!open);
150
- }, [handleOpenChangeManual, open]);
151
- const handleContentClick = React6__namespace.useCallback((event) => {
152
- event.stopPropagation();
153
- if (interactive) {
154
- const closestLink = event.target?.closest("a");
155
- if (closestLink) {
156
- handleOpenChangeManual(false);
157
- }
158
- }
159
- }, [interactive, handleOpenChangeManual]);
160
- React6__namespace.useEffect(() => {
161
- return () => {
162
- if (timeoutRef.current) {
163
- clearTimeout(timeoutRef.current);
164
- }
165
- };
166
- }, []);
167
- if (disabled || disableOnMobile && isMobile) return children;
168
- const defaultShowArrow = variant === "popover" ? false : true;
169
- const showArrow = showArrowProp !== void 0 ? showArrowProp : defaultShowArrow;
170
- const isPopover = variant === "popover";
171
- const placement = mapPlacement(positioning?.placement) ?? "top";
172
- const offset = positioning?.offset?.mainAxis ?? 4;
173
- return /* @__PURE__ */ jsxRuntime.jsx(gui.TooltipGroup, { delay: openDelay, children: /* @__PURE__ */ jsxRuntime.jsxs(
174
- gui.Tooltip,
175
- {
176
- open,
177
- onOpenChange: handleOpenChange,
178
- delay: { open: openDelay, close: closeDelay },
179
- placement,
180
- offset,
181
- unstyled: true,
182
- children: [
183
- /* @__PURE__ */ jsxRuntime.jsx(
184
- gui.Tooltip.Trigger,
185
- {
186
- ref: triggerRef,
187
- asChild: true,
188
- ...isMobile ? { onClick: handleTriggerClick } : {},
189
- ...triggerProps,
190
- children
191
- }
192
- ),
193
- /* @__PURE__ */ jsxRuntime.jsxs(
194
- gui.Tooltip.Content,
195
- {
196
- ref,
197
- unstyled: true,
198
- zIndex: 9999,
199
- overflow: "hidden",
200
- borderRadius: 8,
201
- paddingHorizontal: 12,
202
- paddingVertical: 8,
203
- maxWidth: isPopover ? 384 : 320,
204
- backgroundColor: isPopover ? "var(--color-popover-bg)" : "var(--color-tooltip-bg)",
205
- transition: "quick",
206
- enterStyle: { opacity: 0, scale: 0.95 },
207
- exitStyle: { opacity: 0, scale: 0.95 },
208
- ...isPopover ? {
209
- borderWidth: 1,
210
- borderColor: "var(--color-border-divider)",
211
- shadowColor: "var(--shadow-popover)"
212
- } : {},
213
- onClick: interactive ? handleContentClick : void 0,
214
- ...selected ? { "data-selected": true } : {},
215
- ...contentProps,
216
- children: [
217
- showArrow && /* @__PURE__ */ jsxRuntime.jsx(
218
- gui.Tooltip.Arrow,
219
- {
220
- unstyled: true,
221
- backgroundColor: isPopover ? "var(--color-popover-bg)" : "var(--color-tooltip-bg)"
222
- }
223
- ),
224
- ink(content, void 0, {
225
- fontSize: 14,
226
- color: isPopover ? "var(--color-text-primary)" : "var(--color-tooltip-fg)"
227
- })
228
- ]
229
- }
230
- )
231
- ]
232
- }
233
- ) });
234
- }
235
- );
236
- function TruncatedTextTooltip({ label, children }) {
237
- return /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { content: label, positioning: { placement: "top" }, children });
238
- }
239
- var SIZE = {
240
- sm: { padding: 4, height: 18, minHeight: 18 },
241
- md: { paddingHorizontal: 4, paddingVertical: 2, minHeight: 24 },
242
- lg: { paddingHorizontal: 8, paddingVertical: 4, minHeight: 28 }
243
- };
244
- var SIZE_TEXT = {
245
- sm: { fontSize: 12, fontWeight: "500" },
246
- md: { fontSize: 14, fontWeight: "500" },
247
- lg: { fontSize: 14, fontWeight: "600" }
248
- };
249
- var COLOR_PALETTE = {
250
- gray: { bg: "var(--color-badge-gray-bg)", fg: "var(--color-badge-gray-fg)" },
251
- green: { bg: "var(--color-badge-green-bg)", fg: "var(--color-badge-green-fg)" },
252
- red: { bg: "var(--color-badge-red-bg)", fg: "var(--color-badge-red-fg)" },
253
- purple: { bg: "var(--color-badge-purple-bg)", fg: "var(--color-badge-purple-fg)" },
254
- orange: { bg: "var(--color-badge-orange-bg)", fg: "var(--color-badge-orange-fg)" },
255
- blue: { bg: "var(--color-badge-blue-bg)", fg: "var(--color-badge-blue-fg)" },
256
- yellow: { bg: "var(--color-badge-yellow-bg)", fg: "var(--color-badge-yellow-fg)" },
257
- teal: { bg: "var(--color-badge-teal-bg)", fg: "var(--color-badge-teal-fg)" },
258
- cyan: { bg: "var(--color-badge-cyan-bg)", fg: "var(--color-badge-cyan-fg)" },
259
- pink: { bg: "var(--color-badge-pink-bg)", fg: "var(--color-badge-pink-fg)" },
260
- purple_alt: { bg: "var(--color-badge-purple-alt-bg)", fg: "var(--color-badge-purple-alt-fg)" },
261
- blue_alt: { bg: "var(--color-badge-blue-alt-bg)", fg: "var(--color-badge-blue-alt-fg)" },
262
- bright_gray: { bg: "var(--color-badge-bright-gray-bg)", fg: "var(--color-badge-bright-gray-fg)" },
263
- bright_green: { bg: "var(--color-badge-bright-green-bg)", fg: "var(--color-badge-bright-green-fg)" },
264
- bright_red: { bg: "var(--color-badge-bright-red-bg)", fg: "var(--color-badge-bright-red-fg)" },
265
- bright_blue: { bg: "var(--color-badge-bright-blue-bg)", fg: "var(--color-badge-bright-blue-fg)" },
266
- bright_yellow: { bg: "var(--color-badge-bright-yellow-bg)", fg: "var(--color-badge-bright-yellow-fg)" },
267
- bright_teal: { bg: "var(--color-badge-bright-teal-bg)", fg: "var(--color-badge-bright-teal-fg)" },
268
- bright_cyan: { bg: "var(--color-badge-bright-cyan-bg)", fg: "var(--color-badge-bright-cyan-fg)" },
269
- bright_orange: { bg: "var(--color-badge-bright-orange-bg)", fg: "var(--color-badge-bright-orange-fg)" },
270
- bright_purple: { bg: "var(--color-badge-bright-purple-bg)", fg: "var(--color-badge-bright-purple-fg)" },
271
- bright_pink: { bg: "var(--color-badge-bright-pink-bg)", fg: "var(--color-badge-bright-pink-fg)" }
272
- };
273
- var TONE = {
274
- subtle: (p) => ({ backgroundColor: p.bg, color: p.fg, borderWidth: 0 }),
275
- solid: (p) => ({ backgroundColor: p.fg, color: p.bg, borderWidth: 0 }),
276
- outline: (p) => ({
277
- backgroundColor: "transparent",
278
- color: p.fg,
279
- borderWidth: 1,
280
- borderColor: p.fg
281
- })
282
- };
283
- var Badge = React6__namespace.default.forwardRef(
284
- function Badge2(props, ref) {
285
- const {
286
- loading,
287
- startElement,
288
- children,
289
- truncated = false,
290
- endElement,
291
- variant = "subtle",
292
- size = "md",
293
- colorPalette = "gray",
294
- className,
295
- style: badgeStyle,
296
- ...rest
297
- } = props;
298
- const palette = COLOR_PALETTE[colorPalette];
299
- const tone = TONE[variant](palette);
300
- const child = children ? (
301
- // `ellipsis` is gui Text's own built-in variant for single-line
302
- // truncation — it expands to the same overflow/text-overflow/
303
- // white-space/max-width rule Tailwind's `text-ellipsis` did, but
304
- // through the component's own variants (guaranteed to compile),
305
- // rather than naming each longhand as a separate style prop.
306
- /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { ellipsis: true, ...SIZE_TEXT[size], color: tone.color, children })
307
- ) : null;
308
- const childrenElement = truncated ? /* @__PURE__ */ jsxRuntime.jsx(TruncatedTextTooltip, { label: children, children: child }) : child;
309
- const badgeElement = /* @__PURE__ */ jsxRuntime.jsxs(
310
- gui.XStack,
311
- {
312
- ref,
313
- render: /* @__PURE__ */ jsxRuntime.jsx("span", {}),
314
- display: "inline-flex",
315
- alignItems: "center",
316
- alignSelf: "flex-start",
317
- borderRadius: 2,
318
- gap: 4,
319
- maxWidth: "100%",
320
- userSelect: "text",
321
- ...SIZE[size],
322
- ...tone,
323
- className,
324
- style: badgeStyle,
325
- ...rest,
326
- children: [
327
- startElement,
328
- childrenElement,
329
- endElement
330
- ]
331
- }
332
- );
333
- if (loading) {
334
- return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading, asChild: true, children: badgeElement });
335
- }
336
- return badgeElement;
337
- }
338
- );
339
- var SpinnerFrame = gui.styled(gui.View, {
340
- name: "ButtonSpinner",
341
- render: /* @__PURE__ */ jsxRuntime.jsx("span", {}),
342
- width: 16,
343
- height: 16,
344
- borderRadius: 1e3,
345
- borderWidth: 2,
346
- borderColor: "currentColor",
347
- borderBottomColor: "transparent",
348
- borderLeftColor: "transparent"
349
- });
350
- function Spinner({ className }) {
351
- return /* @__PURE__ */ jsxRuntime.jsx(
352
- SpinnerFrame,
353
- {
354
- role: "status",
355
- "aria-label": "Loading",
356
- className: [
357
- "animate-spin",
358
- className
359
- ].filter(Boolean).join(" ")
360
- }
361
- );
362
- }
363
- var ButtonFrame = gui.styled(gui.View, {
364
- name: "LuxButton",
365
- render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
366
- role: "button",
367
- tabIndex: 0,
368
- cursor: "pointer",
369
- userSelect: "none",
370
- display: "inline-flex",
371
- alignItems: "center",
372
- justifyContent: "center",
373
- gap: 0,
374
- overflow: "hidden",
375
- borderRadius: 6,
376
- // Whitespace nowrap via className since hanzogui doesn't have a direct token
377
- // Transition via className
378
- variants: {
379
- size: {
380
- "2xs": { paddingHorizontal: 8, height: 20, minWidth: 20, fontSize: 12, borderRadius: 4, gap: 4 },
381
- xs: { paddingHorizontal: 8, height: 24, minWidth: 24, fontSize: 14, borderRadius: 4, gap: 4 },
382
- sm: { paddingHorizontal: 12, height: 32, minWidth: 32, fontSize: 14, borderRadius: 6, gap: 4 },
383
- md: { paddingHorizontal: 12, height: 40, minWidth: 40, fontSize: 16, borderRadius: 6, gap: 8 }
384
- },
385
- disabled: {
386
- true: {
387
- opacity: 0.2,
388
- cursor: "not-allowed",
389
- pointerEvents: "none"
390
- }
391
- }
392
- },
393
- defaultVariants: {
394
- size: "md"
395
- }
396
- });
397
- var VARIANT_CLASSES = {
398
- solid: [
399
- "bg-[var(--color-button-solid-bg)] text-[var(--color-button-solid-text)]",
400
- "hover:bg-[var(--color-hover)]",
401
- "data-[expanded]:bg-[var(--color-hover)]"
402
- ].join(" "),
403
- solid_danger: [
404
- "bg-[var(--color-button-danger-bg)] text-[var(--color-button-danger-fg)]",
405
- "hover:bg-[var(--color-button-danger-bg-hover)]",
406
- "data-[expanded]:bg-[var(--color-button-danger-bg-hover)]"
407
- ].join(" "),
408
- outline: [
409
- "border-2 border-solid bg-transparent",
410
- "text-[var(--color-button-outline-fg)] border-[var(--color-button-outline-fg)]",
411
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]"
412
- ].join(" "),
413
- outline_danger: [
414
- "border-2 border-solid bg-transparent",
415
- "text-[var(--color-button-danger-bg)] border-[var(--color-button-danger-bg)]",
416
- "hover:bg-transparent hover:text-[var(--color-button-danger-bg-hover)] hover:border-[var(--color-button-danger-bg-hover)]"
417
- ].join(" "),
418
- dropdown: [
419
- "border-2 border-solid bg-transparent",
420
- "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
421
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
422
- "data-[expanded]:bg-transparent data-[expanded]:text-[var(--color-hover)] data-[expanded]:border-[var(--color-hover)]",
423
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
424
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
425
- "data-[selected]:hover:text-[var(--color-hover)] data-[selected]:hover:border-transparent",
426
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
427
- ].join(" "),
428
- header: [
429
- "bg-transparent border-2 border-solid",
430
- "text-[var(--color-button-header-fg)] border-[var(--color-button-header-border)]",
431
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
432
- "data-[selected]:bg-[var(--color-button-header-bg-selected)]",
433
- "data-[selected]:text-[var(--color-button-header-fg-selected)] data-[selected]:border-transparent data-[selected]:border-0",
434
- "data-[selected]:hover:bg-[var(--color-button-header-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
435
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
436
- "data-[selected]:data-[highlighted]:bg-[var(--color-button-header-bg-highlighted)]",
437
- "data-[selected]:data-[highlighted]:text-[var(--color-button-header-fg-highlighted)]",
438
- "data-[selected]:data-[highlighted]:border-transparent data-[selected]:data-[highlighted]:border-0",
439
- "data-[selected]:data-[highlighted]:hover:bg-[var(--color-button-header-bg-highlighted)]",
440
- "data-[selected]:data-[highlighted]:hover:text-[var(--color-hover)]",
441
- "data-[selected]:data-[highlighted]:data-[expanded]:text-[var(--color-hover)]"
442
- ].join(" "),
443
- hero: [
444
- "bg-[var(--color-button-hero-bg)] text-[var(--color-button-hero-fg)]",
445
- "hover:bg-[var(--color-button-hero-bg-hover)] hover:text-[var(--color-button-hero-fg-hover)]",
446
- "data-[selected]:bg-[var(--color-button-hero-bg-selected)] data-[selected]:text-[var(--color-button-hero-fg-selected)]",
447
- "data-[selected]:hover:bg-[var(--color-button-hero-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
448
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
449
- ].join(" "),
450
- segmented: [
451
- "bg-transparent border-2 border-solid rounded-none",
452
- "text-[var(--color-button-segmented-fg)] border-[var(--color-selected-control-bg)]",
453
- "hover:text-[var(--color-hover)]",
454
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
455
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-selected-control-text)]",
456
- "[&:not(:last-child)]:border-r-0 data-[selected]:[&:not(:last-child)]:border-r-2",
457
- "data-[selected]+*:border-l-0",
458
- "first:rounded-l-md last:rounded-r-md"
459
- ].join(" "),
460
- plain: "bg-transparent text-inherit border-none hover:bg-transparent",
461
- subtle: [
462
- "bg-[var(--color-button-subtle-bg)] text-[var(--color-button-subtle-fg)]",
463
- "hover:bg-[var(--color-button-subtle-bg)] hover:text-[var(--color-hover)]",
464
- "disabled:bg-[var(--color-button-subtle-bg)] disabled:text-[var(--color-button-subtle-fg)]"
465
- ].join(" "),
466
- link: [
467
- "bg-transparent text-[var(--color-link-primary)] border-none font-normal",
468
- "px-0 h-auto",
469
- "hover:bg-transparent hover:text-[var(--color-link-primary-hover)]",
470
- "disabled:text-[var(--color-text-secondary)]"
471
- ].join(" "),
472
- icon_secondary: [
473
- "bg-transparent text-[var(--color-icon-secondary)] border-none",
474
- "hover:text-[var(--color-hover)]",
475
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
476
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
477
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
478
- "data-[expanded]:text-[var(--color-hover)]"
479
- ].join(" "),
480
- icon_background: [
481
- "bg-[var(--color-button-icon-background-bg)] text-[var(--color-icon-secondary)] border-none",
482
- "hover:text-[var(--color-hover)]",
483
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
484
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
485
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
486
- "data-[expanded]:text-[var(--color-hover)]"
487
- ].join(" "),
488
- pagination: [
489
- "border-2 border-solid bg-transparent",
490
- "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
491
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
492
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
493
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
494
- "data-[selected]:hover:text-[var(--color-selected-control-text)] data-[selected]:hover:border-transparent"
495
- ].join(" ")
496
- };
497
- var BASE_CLASSES = "font-semibold whitespace-nowrap transition-colors duration-150";
498
- var SP = 4;
499
- function buildShimStyle(props) {
500
- const s = { ...props.style };
501
- if (props.mt !== void 0) s.marginTop = typeof props.mt === "number" ? `${props.mt * SP}px` : props.mt;
502
- if (props.ml !== void 0) s.marginLeft = typeof props.ml === "number" ? `${props.ml * SP}px` : props.ml;
503
- if (props.mr !== void 0) s.marginRight = typeof props.mr === "number" ? `${props.mr * SP}px` : props.mr;
504
- if (props.px !== void 0) {
505
- const v = typeof props.px === "number" ? `${props.px * SP}px` : props.px;
506
- s.paddingLeft = v;
507
- s.paddingRight = v;
508
- }
509
- if (props.py !== void 0) {
510
- const v = typeof props.py === "number" ? `${props.py * SP}px` : props.py;
511
- s.paddingTop = v;
512
- s.paddingBottom = v;
513
- }
514
- if (props.fontWeight !== void 0) s.fontWeight = props.fontWeight;
515
- if (props.gap !== void 0) s.gap = typeof props.gap === "number" ? `${props.gap * SP}px` : props.gap;
516
- if (props.flexShrink !== void 0) s.flexShrink = props.flexShrink;
517
- if (props.columnGap !== void 0) s.columnGap = typeof props.columnGap === "number" ? `${props.columnGap * SP}px` : props.columnGap;
518
- if (props.gridColumn !== void 0) s.gridColumn = typeof props.gridColumn === "number" ? String(props.gridColumn) : props.gridColumn;
519
- if (props.gridRow) s.gridRow = props.gridRow;
520
- if (props.justifySelf) s.justifySelf = props.justifySelf;
521
- if (props.alignSelf) s.alignSelf = props.alignSelf;
522
- if (props.h) s.height = props.h;
523
- if (props.w) s.width = props.w;
524
- if (props.display) s.display = props.display;
525
- if (props.borderBottomRightRadius !== void 0) s.borderBottomRightRadius = typeof props.borderBottomRightRadius === "number" ? `${props.borderBottomRightRadius}px` : props.borderBottomRightRadius;
526
- if (props.borderTopRightRadius !== void 0) s.borderTopRightRadius = typeof props.borderTopRightRadius === "number" ? `${props.borderTopRightRadius}px` : props.borderTopRightRadius;
527
- return Object.keys(s).length > 0 ? s : void 0;
528
- }
529
- var Button = React6__namespace.forwardRef(
530
- function Button2(props, ref) {
531
- const {
532
- className,
533
- variant = "solid",
534
- size = "md",
535
- asChild = false,
536
- loading = false,
537
- loadingText,
538
- loadingSkeleton = false,
539
- expanded,
540
- selected,
541
- highlighted,
542
- disabled,
543
- children,
544
- style: styleProp,
545
- // Strip Chakra style props
546
- mt,
547
- ml,
548
- mr,
549
- px,
550
- py,
551
- fontWeight,
552
- gap,
553
- flexShrink,
554
- columnGap,
555
- gridColumn,
556
- gridRow,
557
- justifySelf,
558
- alignSelf,
559
- textStyle: _textStyle,
560
- h,
561
- w,
562
- display,
563
- borderBottomRightRadius,
564
- borderTopRightRadius,
565
- ...rest
566
- } = props;
567
- const mergedStyle = buildShimStyle({
568
- style: styleProp,
569
- mt,
570
- ml,
571
- mr,
572
- px,
573
- py,
574
- fontWeight,
575
- gap,
576
- flexShrink,
577
- columnGap,
578
- gridColumn,
579
- gridRow,
580
- justifySelf,
581
- alignSelf,
582
- h,
583
- w,
584
- display,
585
- borderBottomRightRadius,
586
- borderTopRightRadius
587
- });
588
- const dataAttrs = {};
589
- if (expanded) dataAttrs["data-expanded"] = true;
590
- if (selected) dataAttrs["data-selected"] = true;
591
- if (highlighted) dataAttrs["data-highlighted"] = true;
592
- if (loadingSkeleton) dataAttrs["data-loading-skeleton"] = true;
593
- const isDisabled = !loadingSkeleton && (loading || disabled);
594
- const inner = loading ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
595
- /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}),
596
- loadingText != null && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { marginLeft: 8 }, children: loadingText })
597
- ] }) : children;
598
- const variantClass = VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.solid;
599
- const combinedClassName = [BASE_CLASSES, variantClass, className].filter(Boolean).join(" ");
600
- const button = /* @__PURE__ */ jsxRuntime.jsx(
601
- ButtonFrame,
602
- {
603
- ref,
604
- size,
605
- disabled: isDisabled || void 0,
606
- asChild: asChild || void 0,
607
- className: combinedClassName,
608
- style: mergedStyle,
609
- ...dataAttrs,
610
- ...rest,
611
- children: inner
612
- }
613
- );
614
- if (loadingSkeleton) {
615
- return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading: loadingSkeleton, asChild: true, ref, children: button });
616
- }
617
- return button;
618
- }
619
- );
620
- React6__namespace.forwardRef(
621
- function ButtonGroup2(props, ref) {
622
- const { className, ...rest } = props;
623
- return /* @__PURE__ */ jsxRuntime.jsx(
624
- ui.Box,
625
- {
626
- ref,
627
- className: ["inline-flex", className].filter(Boolean).join(" "),
628
- role: "group",
629
- ...rest
630
- }
631
- );
632
- }
633
- );
634
- React6__namespace.forwardRef(
635
- function ButtonGroupRadio2(props, ref) {
636
- const {
637
- children,
638
- onChange,
639
- variant = "segmented",
640
- defaultValue,
641
- loading = false,
642
- equalWidth = false,
643
- className,
644
- ...rest
645
- } = props;
646
- const firstChildValue = React6__namespace.useMemo(() => {
647
- const firstChild = Array.isArray(children) ? children[0] : void 0;
648
- return typeof firstChild?.props.value === "string" ? firstChild.props.value : void 0;
649
- }, [children]);
650
- const [value, setValue] = React6__namespace.useState(defaultValue ?? firstChildValue);
651
- const handleItemClick = React6__namespace.useCallback((event) => {
652
- const v = event.currentTarget.value;
653
- setValue(v);
654
- onChange?.(v);
655
- }, [onChange]);
656
- const clonedChildren = React6__namespace.Children.map(children, (child) => {
657
- return React6__namespace.cloneElement(child, {
658
- onClick: handleItemClick,
659
- selected: value === child.props.value,
660
- variant
661
- });
662
- });
663
- const childrenLength = React6__namespace.Children.count(children);
664
- return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading, children: /* @__PURE__ */ jsxRuntime.jsx(
665
- ui.Box,
666
- {
667
- ref,
668
- className: [
669
- "inline-flex gap-0",
670
- equalWidth ? "grid" : "",
671
- className
672
- ].filter(Boolean).join(" "),
673
- style: equalWidth ? { gridTemplateColumns: `repeat(${childrenLength}, 1fr)` } : void 0,
674
- role: "group",
675
- ...rest,
676
- children: clonedChildren
677
- }
678
- ) });
679
- }
680
- );
681
- var codeDiffVariants = ui.variants(
682
- "relative overflow-hidden rounded-lg border bg-muted/50",
683
- {
684
- variants: {
685
- theme: {
686
- dark: "bg-[var(--color-bg-primary)] border-[var(--color-border-divider)]",
687
- light: "bg-[var(--color-bg-body)] border-[var(--color-border-divider)]",
688
- github: "bg-white border-[var(--color-border-divider)]",
689
- "github-dark": "bg-[var(--color-bg-primary)] border-[var(--color-border-divider)]"
690
- },
691
- size: {
692
- sm: "text-xs",
693
- default: "text-sm",
694
- lg: "text-base"
695
- }
696
- },
697
- defaultVariants: {
698
- theme: "dark",
699
- size: "default"
700
- }
701
- }
702
- );
703
- var DiffLine = React6__namespace.memo(
704
- ({
705
- change,
706
- showLineNumbers,
707
- isUnified = false,
708
- highlightedContent
709
- }) => {
710
- const getLineClasses = () => {
711
- const base = "group relative flex min-h-[1.5rem] items-center py-0.5";
712
- if (isUnified) {
713
- switch (change.type) {
714
- case "add":
715
- return ui.cn(base, "bg-[var(--lux-state-success)]/10 border-l-2 border-l-green-500");
716
- case "remove":
717
- return ui.cn(base, "bg-[var(--lux-state-error)]/10 border-l-2 border-l-red-500");
718
- default:
719
- return ui.cn(base, "hover:bg-muted/50");
720
- }
721
- }
722
- return ui.cn(base, "hover:bg-muted/50");
723
- };
724
- const getLinePrefix = () => {
725
- if (!isUnified) return null;
726
- switch (change.type) {
727
- case "add":
728
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { style: ui.css("h-3 w-3 text-[var(--lux-state-success)] mr-2 flex-shrink-0") });
729
- case "remove":
730
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { style: ui.css("h-3 w-3 text-[var(--lux-state-error)] mr-2 flex-shrink-0") });
731
- default:
732
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "w-3 mr-2 flex-shrink-0" });
733
- }
734
- };
735
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: getLineClasses(), children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center px-4 w-full", children: [
736
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "flex items-center gap-2 mr-4", children: !isUnified ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
737
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "inline-block w-8 select-none text-right text-xs text-muted-foreground", children: change.oldLineNumber || "" }),
738
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "inline-block w-8 select-none text-right text-xs text-muted-foreground", children: change.newLineNumber || "" })
739
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "inline-block w-8 select-none text-right text-xs text-muted-foreground", children: change.lineNumber }) }),
740
- getLinePrefix(),
741
- /* @__PURE__ */ jsxRuntime.jsx(
742
- ui.Box,
743
- {
744
- className: "flex-1 overflow-x-auto font-mono",
745
- dangerouslySetInnerHTML: {
746
- __html: highlightedContent || change.content
747
- }
748
- }
749
- )
750
- ] }) });
751
- }
752
- );
753
- DiffLine.displayName = "DiffLine";
754
- function generateDiff(oldCode, newCode) {
755
- const oldLines = oldCode.split("\n");
756
- const newLines = newCode.split("\n");
757
- const changes = [];
758
- let oldIndex = 0;
759
- let newIndex = 0;
760
- let lineNumber = 1;
761
- while (oldIndex < oldLines.length || newIndex < newLines.length) {
762
- const oldLine = oldLines[oldIndex];
763
- const newLine = newLines[newIndex];
764
- if (oldIndex >= oldLines.length) {
765
- changes.push({
766
- type: "add",
767
- lineNumber: lineNumber++,
768
- content: newLine,
769
- newLineNumber: newIndex + 1
770
- });
771
- newIndex++;
772
- } else if (newIndex >= newLines.length) {
773
- changes.push({
774
- type: "remove",
775
- lineNumber: lineNumber++,
776
- content: oldLine,
777
- oldLineNumber: oldIndex + 1
778
- });
779
- oldIndex++;
780
- } else if (oldLine === newLine) {
781
- changes.push({
782
- type: "unchanged",
783
- lineNumber: lineNumber++,
784
- content: oldLine,
785
- oldLineNumber: oldIndex + 1,
786
- newLineNumber: newIndex + 1
787
- });
788
- oldIndex++;
789
- newIndex++;
790
- } else {
791
- changes.push({
792
- type: "remove",
793
- lineNumber: lineNumber++,
794
- content: oldLine,
795
- oldLineNumber: oldIndex + 1
796
- });
797
- changes.push({
798
- type: "add",
799
- lineNumber: lineNumber++,
800
- content: newLine,
801
- newLineNumber: newIndex + 1
802
- });
803
- oldIndex++;
804
- newIndex++;
805
- }
806
- }
807
- return changes;
808
- }
809
- var CodeDiff = React6__namespace.forwardRef(
810
- ({
811
- className,
812
- theme,
813
- size,
814
- oldCode,
815
- newCode,
816
- language = "text",
817
- filename,
818
- oldFilename,
819
- newFilename,
820
- showLineNumbers = true,
821
- showCopyButton = true,
822
- maxHeight = "500px",
823
- defaultView = "unified",
824
- collapseUnchanged = false,
825
- contextLines = 3,
826
- ...props
827
- }, ref) => {
828
- const [view, setView] = React6__namespace.useState(defaultView);
829
- const [copied, setCopied] = React6__namespace.useState(false);
830
- const [isLoading, setIsLoading] = React6__namespace.useState(true);
831
- const [highlightedOldCode, setHighlightedOldCode] = React6__namespace.useState("");
832
- const [highlightedNewCode, setHighlightedNewCode] = React6__namespace.useState("");
833
- const [changes, setChanges] = React6__namespace.useState([]);
834
- const themeMap = {
835
- dark: "github-dark",
836
- light: "github-light",
837
- github: "github-light",
838
- "github-dark": "github-dark"
839
- };
840
- React6__namespace.useEffect(() => {
841
- const highlightCode = async () => {
842
- setIsLoading(true);
843
- try {
844
- const [oldHighlighted, newHighlighted] = await Promise.all([
845
- shiki.codeToHtml(oldCode, {
846
- lang: language,
847
- theme: themeMap[theme || "dark"]
848
- }),
849
- shiki.codeToHtml(newCode, {
850
- lang: language,
851
- theme: themeMap[theme || "dark"]
852
- })
853
- ]);
854
- const extractContent = (html) => {
855
- const tempDiv = document.createElement("div");
856
- tempDiv.innerHTML = html;
857
- const codeElement = tempDiv.querySelector("code");
858
- return codeElement?.innerHTML || html;
859
- };
860
- setHighlightedOldCode(extractContent(oldHighlighted));
861
- setHighlightedNewCode(extractContent(newHighlighted));
862
- const diffChanges = generateDiff(oldCode, newCode);
863
- setChanges(diffChanges);
864
- } catch (error) {
865
- console.error("Failed to highlight code:", error);
866
- setHighlightedOldCode(oldCode);
867
- setHighlightedNewCode(newCode);
868
- setChanges(generateDiff(oldCode, newCode));
869
- } finally {
870
- setIsLoading(false);
871
- }
872
- };
873
- highlightCode();
874
- }, [oldCode, newCode, language, theme]);
875
- const copyToClipboard = React6__namespace.useCallback(async () => {
876
- try {
877
- const diffText = view === "unified" ? changes.map((change) => {
878
- const prefix = change.type === "add" ? "+" : change.type === "remove" ? "-" : " ";
879
- return `${prefix}${change.content}`;
880
- }).join("\n") : `--- ${oldFilename || "old"}
881
- +++ ${newFilename || "new"}
882
- ${oldCode}
883
-
884
- ${newCode}`;
885
- await navigator.clipboard.writeText(diffText);
886
- setCopied(true);
887
- setTimeout(() => setCopied(false), 2e3);
888
- } catch (error) {
889
- console.error("Failed to copy diff:", error);
890
- }
891
- }, [changes, view, oldCode, newCode, oldFilename, newFilename]);
892
- const filteredChanges = React6__namespace.useMemo(() => {
893
- if (!collapseUnchanged) return changes;
894
- const result = [];
895
- let i = 0;
896
- while (i < changes.length) {
897
- const change = changes[i];
898
- if (change.type !== "unchanged") {
899
- result.push(change);
900
- i++;
901
- continue;
902
- }
903
- const unchangedStart = i;
904
- while (i < changes.length && changes[i].type === "unchanged") {
905
- i++;
906
- }
907
- const unchangedCount = i - unchangedStart;
908
- if (unchangedCount <= contextLines * 2) {
909
- for (let j = unchangedStart; j < i; j++) {
910
- result.push(changes[j]);
911
- }
912
- } else {
913
- for (let j = unchangedStart; j < unchangedStart + contextLines; j++) {
914
- result.push(changes[j]);
915
- }
916
- result.push({
917
- type: "unchanged",
918
- lineNumber: -1,
919
- content: `... ${unchangedCount - contextLines * 2} unchanged lines ...`
920
- });
921
- for (let j = i - contextLines; j < i; j++) {
922
- result.push(changes[j]);
923
- }
924
- }
925
- }
926
- return result;
927
- }, [changes, collapseUnchanged, contextLines]);
928
- const stats = React6__namespace.useMemo(() => {
929
- const additions = changes.filter((c) => c.type === "add").length;
930
- const deletions = changes.filter((c) => c.type === "remove").length;
931
- return { additions, deletions };
932
- }, [changes]);
933
- const renderUnifiedView = () => {
934
- const oldLines = highlightedOldCode.split("\n");
935
- const newLines = highlightedNewCode.split("\n");
936
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "font-mono", children: filteredChanges.map((change, index) => {
937
- if (change.lineNumber === -1) {
938
- return /* @__PURE__ */ jsxRuntime.jsx(
939
- ui.Box,
940
- {
941
- className: "flex items-center justify-center py-2 text-muted-foreground bg-muted/30",
942
- children: /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "text-xs", children: change.content })
943
- },
944
- index
945
- );
946
- }
947
- let highlightedContent = change.content;
948
- if (change.type === "add" && change.newLineNumber) {
949
- highlightedContent = newLines[change.newLineNumber - 1] || change.content;
950
- } else if (change.type === "remove" && change.oldLineNumber) {
951
- highlightedContent = oldLines[change.oldLineNumber - 1] || change.content;
952
- } else if (change.type === "unchanged" && change.oldLineNumber) {
953
- highlightedContent = oldLines[change.oldLineNumber - 1] || change.content;
954
- }
955
- return /* @__PURE__ */ jsxRuntime.jsx(
956
- DiffLine,
957
- {
958
- change,
959
- showLineNumbers,
960
- isUnified: true,
961
- highlightedContent
962
- },
963
- index
964
- );
965
- }) });
966
- };
967
- const renderSplitView = () => {
968
- const oldLines = highlightedOldCode.split("\n");
969
- const newLines = highlightedNewCode.split("\n");
970
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "grid grid-cols-2 gap-0", children: [
971
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "border-r", children: [
972
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "border-b px-4 py-2 bg-[var(--lux-state-error)]/10", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "text-sm font-medium text-[var(--lux-state-error)] dark:text-[var(--lux-state-error)]", children: oldFilename || filename || "Old" }) }),
973
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "font-mono", children: oldLines.map((line, index) => /* @__PURE__ */ jsxRuntime.jsx(
974
- DiffLine,
975
- {
976
- change: {
977
- type: "remove",
978
- lineNumber: index + 1,
979
- content: line,
980
- oldLineNumber: index + 1
981
- },
982
- showLineNumbers,
983
- highlightedContent: line
984
- },
985
- `old-${index}`
986
- )) })
987
- ] }),
988
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
989
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "border-b px-4 py-2 bg-[var(--lux-state-success)]/10", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "text-sm font-medium text-[var(--lux-state-success)] dark:text-[var(--lux-state-success)]", children: newFilename || filename || "New" }) }),
990
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "font-mono", children: newLines.map((line, index) => /* @__PURE__ */ jsxRuntime.jsx(
991
- DiffLine,
992
- {
993
- change: {
994
- type: "add",
995
- lineNumber: index + 1,
996
- content: line,
997
- newLineNumber: index + 1
998
- },
999
- showLineNumbers,
1000
- highlightedContent: line
1001
- },
1002
- `new-${index}`
1003
- )) })
1004
- ] })
1005
- ] });
1006
- };
1007
- return /* @__PURE__ */ jsxRuntime.jsxs(
1008
- ui.Box,
1009
- {
1010
- ref,
1011
- className: ui.cn(codeDiffVariants({ theme, size, className })),
1012
- ...props,
1013
- children: [
1014
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center justify-between border-b px-4 py-2", children: [
1015
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-4", children: [
1016
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-2", children: [
1017
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { style: ui.css("h-4 w-4 text-muted-foreground") }),
1018
- filename && /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "text-sm font-medium", children: filename }),
1019
- language && /* @__PURE__ */ jsxRuntime.jsx(Badge, { colorPalette: "gray", ...ui.sx("text-xs"), children: language })
1020
- ] }),
1021
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
1022
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { tag: "span", className: "flex items-center gap-1", children: [
1023
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { style: ui.css("h-3 w-3 text-[var(--lux-state-success)]") }),
1024
- stats.additions
1025
- ] }),
1026
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { tag: "span", className: "flex items-center gap-1", children: [
1027
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { style: ui.css("h-3 w-3 text-[var(--lux-state-error)]") }),
1028
- stats.deletions
1029
- ] })
1030
- ] })
1031
- ] }),
1032
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-2", children: [
1033
- /* @__PURE__ */ jsxRuntime.jsxs(
1034
- ui.ToggleGroup,
1035
- {
1036
- type: "single",
1037
- value: view,
1038
- onValueChange: (value) => value && setView(value),
1039
- size: "sm",
1040
- children: [
1041
- /* @__PURE__ */ jsxRuntime.jsx(ui.ToggleGroupItem, { value: "unified", "aria-label": "Unified view", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { style: ui.css("h-3 w-3") }) }),
1042
- /* @__PURE__ */ jsxRuntime.jsx(ui.ToggleGroupItem, { value: "split", "aria-label": "Split view", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SplitSquareHorizontal, { style: ui.css("h-3 w-3") }) })
1043
- ]
1044
- }
1045
- ),
1046
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsxs(
1047
- Button,
1048
- {
1049
- variant: "ghost",
1050
- size: "sm",
1051
- onClick: copyToClipboard,
1052
- ...ui.sx("h-8 w-8 p-0"),
1053
- children: [
1054
- copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { style: ui.css("h-3.5 w-3.5 text-[var(--lux-state-success)]") }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { style: ui.css("h-3.5 w-3.5") }),
1055
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "sr-only", children: copied ? "Copied" : "Copy diff" })
1056
- ]
1057
- }
1058
- )
1059
- ] })
1060
- ] }),
1061
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "overflow-auto", style: { maxHeight }, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "p-4 space-y-2", children: Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-4", children: [
1062
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { ...ui.sx("h-4 w-8") }),
1063
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { ...ui.sx("h-4 flex-1") })
1064
- ] }, i)) }) : view === "unified" ? renderUnifiedView() : renderSplitView() })
1065
- ]
1066
- }
1067
- );
1068
- }
1069
- );
1070
- CodeDiff.displayName = "CodeDiff";
1071
- var codeSnippetVariants = ui.variants("relative group", {
1072
- variants: {
1073
- variant: {
1074
- default: "rounded-lg border bg-muted/50",
1075
- inline: "inline-block rounded-md bg-muted px-2 py-1",
1076
- minimal: "bg-transparent"
1077
- },
1078
- theme: {
1079
- dark: "bg-[var(--color-bg-primary)] border-[var(--color-border-divider)]",
1080
- light: "bg-[var(--color-bg-body)] border-[var(--color-border-divider)]",
1081
- github: "bg-white border-[var(--color-border-divider)]",
1082
- "github-dark": "bg-[var(--color-bg-primary)] border-[var(--color-border-divider)]",
1083
- terminal: "bg-black border-[var(--lux-state-success)]/30 text-[var(--lux-state-success)]",
1084
- retro: "bg-[var(--lux-state-notice)] border-[var(--lux-state-notice)] text-[var(--lux-state-notice)]"
1085
- },
1086
- size: {
1087
- xs: "text-xs",
1088
- sm: "text-sm",
1089
- default: "text-sm",
1090
- lg: "text-base"
1091
- }
1092
- },
1093
- defaultVariants: {
1094
- variant: "default",
1095
- theme: "dark",
1096
- size: "default"
1097
- }
1098
- });
1099
- var CodeSnippet = React6__namespace.forwardRef(
1100
- ({
1101
- className,
1102
- variant,
1103
- theme,
1104
- size,
1105
- code,
1106
- language = "text",
1107
- filename,
1108
- showLineNumbers = false,
1109
- highlightLines = [],
1110
- showCopyButton = true,
1111
- showLanguageBadge = true,
1112
- showHeader = true,
1113
- maxHeight,
1114
- expandable = false,
1115
- collapsedHeight = "200px",
1116
- wrapLines = false,
1117
- startLineNumber = 1,
1118
- ...props
1119
- }, ref) => {
1120
- const [highlightedCode, setHighlightedCode] = React6__namespace.useState("");
1121
- const [copied, setCopied] = React6__namespace.useState(false);
1122
- const [isLoading, setIsLoading] = React6__namespace.useState(true);
1123
- const [isExpanded, setIsExpanded] = React6__namespace.useState(!expandable);
1124
- const themeMap = {
1125
- dark: "github-dark",
1126
- light: "github-light",
1127
- github: "github-light",
1128
- "github-dark": "github-dark",
1129
- terminal: "github-dark",
1130
- retro: "github-light"
1131
- };
1132
- React6__namespace.useEffect(() => {
1133
- const highlightCode = async () => {
1134
- setIsLoading(true);
1135
- try {
1136
- const supportedLang = Object.keys(shiki.bundledLanguages).includes(language);
1137
- const highlighted = await shiki.codeToHtml(code, {
1138
- lang: supportedLang ? language : "text",
1139
- theme: themeMap[theme || "dark"]
1140
- });
1141
- const tempDiv = document.createElement("div");
1142
- tempDiv.innerHTML = highlighted;
1143
- const codeElement = tempDiv.querySelector("code");
1144
- setHighlightedCode(codeElement?.innerHTML || highlighted);
1145
- } catch (error) {
1146
- console.error("Failed to highlight code:", error);
1147
- const escaped = code.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1148
- setHighlightedCode(escaped);
1149
- } finally {
1150
- setIsLoading(false);
1151
- }
1152
- };
1153
- highlightCode();
1154
- }, [code, language, theme]);
1155
- const copyToClipboard = React6__namespace.useCallback(async () => {
1156
- try {
1157
- await navigator.clipboard.writeText(code);
1158
- setCopied(true);
1159
- setTimeout(() => setCopied(false), 2e3);
1160
- } catch (error) {
1161
- console.error("Failed to copy code:", error);
1162
- }
1163
- }, [code]);
1164
- const lines = highlightedCode.split("\n").filter((line, index, array) => {
1165
- return line.trim() !== "" || index < array.length - 1;
1166
- });
1167
- const renderInline = () => /* @__PURE__ */ jsxRuntime.jsx(
1168
- ui.Box,
1169
- {
1170
- tag: "code",
1171
- className: ui.cn(
1172
- codeSnippetVariants({ variant, theme, size }),
1173
- "font-mono",
1174
- className
1175
- ),
1176
- dangerouslySetInnerHTML: { __html: highlightedCode }
1177
- }
1178
- );
1179
- const renderBlock = () => /* @__PURE__ */ jsxRuntime.jsxs(
1180
- ui.Box,
1181
- {
1182
- ref,
1183
- className: ui.cn(
1184
- codeSnippetVariants({ variant, theme, size }),
1185
- "overflow-hidden",
1186
- className
1187
- ),
1188
- ...props,
1189
- children: [
1190
- showHeader && (filename || language || showCopyButton || expandable) && /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center justify-between border-b px-4 py-2 bg-muted/30", children: [
1191
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-2", children: [
1192
- filename && /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-1.5", children: [
1193
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { style: ui.css("h-3.5 w-3.5 text-muted-foreground") }),
1194
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "text-sm font-medium", children: filename })
1195
- ] }),
1196
- showLanguageBadge && language && /* @__PURE__ */ jsxRuntime.jsx(Badge, { colorPalette: "gray", ...ui.sx("text-xs"), children: language })
1197
- ] }),
1198
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-1", children: [
1199
- expandable && /* @__PURE__ */ jsxRuntime.jsxs(
1200
- Button,
1201
- {
1202
- variant: "ghost",
1203
- size: "sm",
1204
- onClick: () => setIsExpanded(!isExpanded),
1205
- ...ui.sx("h-8 w-8 p-0"),
1206
- children: [
1207
- isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minimize2, { style: ui.css("h-3.5 w-3.5") }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize2, { style: ui.css("h-3.5 w-3.5") }),
1208
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "sr-only", children: isExpanded ? "Collapse" : "Expand" })
1209
- ]
1210
- }
1211
- ),
1212
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsxs(
1213
- Button,
1214
- {
1215
- variant: "ghost",
1216
- size: "sm",
1217
- onClick: copyToClipboard,
1218
- ...ui.sx("h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity"),
1219
- children: [
1220
- copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { style: ui.css("h-3.5 w-3.5 text-[var(--lux-state-success)]") }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { style: ui.css("h-3.5 w-3.5") }),
1221
- /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "sr-only", children: copied ? "Copied" : "Copy code" })
1222
- ]
1223
- }
1224
- )
1225
- ] })
1226
- ] }),
1227
- /* @__PURE__ */ jsxRuntime.jsx(
1228
- ui.Box,
1229
- {
1230
- className: ui.cn("overflow-auto", !wrapLines && "overflow-x-auto"),
1231
- style: {
1232
- maxHeight: isExpanded ? maxHeight : collapsedHeight
1233
- },
1234
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "p-4 space-y-2", children: Array.from({ length: Math.min(lines.length || 5, 10) }).map(
1235
- (_, i) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-4", children: [
1236
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { ...ui.sx("h-4 w-8") }),
1237
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { ...ui.sx("h-4 flex-1") })
1238
- ] }, i)
1239
- ) }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "font-mono", children: lines.map((line, index) => {
1240
- const lineNumber = index + startLineNumber;
1241
- const isHighlighted = highlightLines.includes(lineNumber);
1242
- return /* @__PURE__ */ jsxRuntime.jsxs(
1243
- ui.Box,
1244
- {
1245
- className: ui.cn(
1246
- "group relative flex min-h-[1.5rem] items-center px-4 py-0.5",
1247
- isHighlighted && "bg-[var(--color-link-primary)]/10 border-l-2 border-l-blue-500",
1248
- !wrapLines && "whitespace-nowrap"
1249
- ),
1250
- children: [
1251
- showLineNumbers && /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "mr-4 inline-block w-8 select-none text-right text-xs text-muted-foreground", children: lineNumber }),
1252
- /* @__PURE__ */ jsxRuntime.jsx(
1253
- ui.Box,
1254
- {
1255
- className: ui.cn(
1256
- "flex-1",
1257
- wrapLines ? "whitespace-pre-wrap break-words" : "overflow-x-auto"
1258
- ),
1259
- dangerouslySetInnerHTML: { __html: line }
1260
- }
1261
- )
1262
- ]
1263
- },
1264
- index
1265
- );
1266
- }) })
1267
- }
1268
- ),
1269
- expandable && !isExpanded && /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "absolute bottom-0 left-0 right-0 h-8 bg-gradient-to-t from-background to-transparent pointer-events-none" }),
1270
- variant === "minimal" && showCopyButton && /* @__PURE__ */ jsxRuntime.jsx(
1271
- Button,
1272
- {
1273
- variant: "ghost",
1274
- size: "sm",
1275
- onClick: copyToClipboard,
1276
- ...ui.sx("absolute top-2 right-2 h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity"),
1277
- children: copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { style: ui.css("h-3.5 w-3.5 text-[var(--lux-state-success)]") }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { style: ui.css("h-3.5 w-3.5") })
1278
- }
1279
- )
1280
- ]
1281
- }
1282
- );
1283
- if (variant === "inline") {
1284
- return renderInline();
1285
- }
1286
- return renderBlock();
1287
- }
1288
- );
1289
- CodeSnippet.displayName = "CodeSnippet";
1290
- var InlineCode = React6__namespace.forwardRef(({ children, language, className, ...props }, ref) => {
1291
- return /* @__PURE__ */ jsxRuntime.jsx(
1292
- CodeSnippet,
1293
- {
1294
- ref,
1295
- code: children,
1296
- language,
1297
- variant: "inline",
1298
- showCopyButton: false,
1299
- showLanguageBadge: false,
1300
- showHeader: false,
1301
- className,
1302
- ...props
1303
- }
1304
- );
1305
- });
1306
- InlineCode.displayName = "InlineCode";
1307
33
  var codeCompareVariants = ui.variants(
1308
34
  "relative flex flex-col overflow-hidden rounded-lg border bg-background",
1309
35
  {
@@ -1324,7 +50,7 @@ var codeCompareVariants = ui.variants(
1324
50
  }
1325
51
  }
1326
52
  );
1327
- var CodeCompare = React6__namespace.forwardRef(
53
+ var CodeCompare = React__namespace.forwardRef(
1328
54
  ({
1329
55
  className,
1330
56
  layout,
@@ -1341,20 +67,20 @@ var CodeCompare = React6__namespace.forwardRef(
1341
67
  syncScroll = true,
1342
68
  ...props
1343
69
  }, ref) => {
1344
- const [view, setView] = React6__namespace.useState(defaultView);
1345
- const [selectedFiles, setSelectedFiles] = React6__namespace.useState(() => {
70
+ const [view, setView] = React__namespace.useState(defaultView);
71
+ const [selectedFiles, setSelectedFiles] = React__namespace.useState(() => {
1346
72
  if (files.length >= 2) {
1347
73
  return [files[0].id, files[1].id];
1348
74
  }
1349
75
  return files.length > 0 ? [files[0].id] : [];
1350
76
  });
1351
- const [mergeState, setMergeState] = React6__namespace.useState({
77
+ const [mergeState, setMergeState] = React__namespace.useState({
1352
78
  resolved: {},
1353
79
  conflicts: conflictMarkers
1354
80
  });
1355
- const [copied, setCopied] = React6__namespace.useState(false);
1356
- const scrollRefs = React6__namespace.useRef({});
1357
- const handleScroll = React6__namespace.useCallback(
81
+ const [copied, setCopied] = React__namespace.useState(false);
82
+ const scrollRefs = React__namespace.useRef({});
83
+ const handleScroll = React__namespace.useCallback(
1358
84
  (sourceId, scrollTop) => {
1359
85
  if (!syncScroll) return;
1360
86
  Object.entries(scrollRefs.current).forEach(([id, ref2]) => {
@@ -1365,7 +91,7 @@ var CodeCompare = React6__namespace.forwardRef(
1365
91
  },
1366
92
  [syncScroll]
1367
93
  );
1368
- const copyComparison = React6__namespace.useCallback(async () => {
94
+ const copyComparison = React__namespace.useCallback(async () => {
1369
95
  const comparison = selectedFiles.map((fileId) => {
1370
96
  const file = files.find((f) => f.id === fileId);
1371
97
  return file ? `=== ${file.filename} ===
@@ -1379,7 +105,7 @@ ${file.content}` : "";
1379
105
  console.error("Failed to copy comparison:", error);
1380
106
  }
1381
107
  }, [files, selectedFiles]);
1382
- const resolveConflict = React6__namespace.useCallback(
108
+ const resolveConflict = React__namespace.useCallback(
1383
109
  (conflictIndex, resolution) => {
1384
110
  setMergeState((prev) => ({
1385
111
  ...prev,
@@ -1392,7 +118,7 @@ ${file.content}` : "";
1392
118
  },
1393
119
  [onMergeConflict]
1394
120
  );
1395
- const getFileStats = React6__namespace.useCallback(
121
+ const getFileStats = React__namespace.useCallback(
1396
122
  (file1, file2) => {
1397
123
  const lines1 = file1.content.split("\n");
1398
124
  const lines2 = file2.content.split("\n");
@@ -1417,7 +143,7 @@ ${file.content}` : "";
1417
143
  );
1418
144
  const renderFileSelector = () => /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "flex items-center gap-2 flex-wrap", children: files.map((file, index) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-2", children: [
1419
145
  /* @__PURE__ */ jsxRuntime.jsxs(
1420
- Button,
146
+ button_js.Button,
1421
147
  {
1422
148
  variant: selectedFiles.includes(file.id) ? "default" : "outline",
1423
149
  size: "sm",
@@ -1442,7 +168,7 @@ ${file.content}` : "";
1442
168
  ...ui.sx("gap-2"),
1443
169
  children: [
1444
170
  file.label || file.filename,
1445
- file.version && /* @__PURE__ */ jsxRuntime.jsx(Badge, { colorPalette: "gray", ...ui.sx("text-xs"), children: file.version })
171
+ file.version && /* @__PURE__ */ jsxRuntime.jsx(badge_js.Badge, { colorPalette: "gray", ...ui.sx("text-xs"), children: file.version })
1446
172
  ]
1447
173
  }
1448
174
  ),
@@ -1473,7 +199,7 @@ ${file.content}` : "";
1473
199
  ] })
1474
200
  ] }) }),
1475
201
  /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntime.jsx(
1476
- CodeDiff,
202
+ codeDiff_js.CodeDiff,
1477
203
  {
1478
204
  oldCode: file1.content,
1479
205
  newCode: file2.content,
@@ -1495,7 +221,7 @@ ${file.content}` : "";
1495
221
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "flex items-center justify-center h-32 text-muted-foreground", children: "Select two files to compare" });
1496
222
  }
1497
223
  return /* @__PURE__ */ jsxRuntime.jsx(
1498
- CodeDiff,
224
+ codeDiff_js.CodeDiff,
1499
225
  {
1500
226
  oldCode: file1.content,
1501
227
  newCode: file2.content,
@@ -1533,7 +259,7 @@ ${file.content}` : "";
1533
259
  handleScroll("base", target.scrollTop);
1534
260
  },
1535
261
  children: /* @__PURE__ */ jsxRuntime.jsx(
1536
- CodeSnippet,
262
+ codeSnippet_js.CodeSnippet,
1537
263
  {
1538
264
  code: base.content,
1539
265
  language: base.language,
@@ -1564,7 +290,7 @@ ${file.content}` : "";
1564
290
  handleScroll("current", target.scrollTop);
1565
291
  },
1566
292
  children: /* @__PURE__ */ jsxRuntime.jsx(
1567
- CodeSnippet,
293
+ codeSnippet_js.CodeSnippet,
1568
294
  {
1569
295
  code: current.content,
1570
296
  language: current.language,
@@ -1595,7 +321,7 @@ ${file.content}` : "";
1595
321
  handleScroll("incoming", target.scrollTop);
1596
322
  },
1597
323
  children: /* @__PURE__ */ jsxRuntime.jsx(
1598
- CodeSnippet,
324
+ codeSnippet_js.CodeSnippet,
1599
325
  {
1600
326
  code: incoming.content,
1601
327
  language: incoming.language,
@@ -1615,7 +341,7 @@ ${file.content}` : "";
1615
341
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "border-t bg-muted/30", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "px-4 py-2", children: [
1616
342
  /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center justify-between", children: [
1617
343
  /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { tag: "span", className: "text-sm font-medium", children: "Merge Conflicts" }),
1618
- /* @__PURE__ */ jsxRuntime.jsx(Badge, { colorPalette: "red", ...ui.sx("text-xs"), children: mergeState.conflicts.length })
344
+ /* @__PURE__ */ jsxRuntime.jsx(badge_js.Badge, { colorPalette: "red", ...ui.sx("text-xs"), children: mergeState.conflicts.length })
1619
345
  ] }),
1620
346
  /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { className: "mt-2 space-y-2", children: mergeState.conflicts.map((conflict, index) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex items-center gap-2 text-xs", children: [
1621
347
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
@@ -1626,7 +352,7 @@ ${file.content}` : "";
1626
352
  ] }),
1627
353
  /* @__PURE__ */ jsxRuntime.jsxs(ui.Box, { className: "flex gap-1", children: [
1628
354
  /* @__PURE__ */ jsxRuntime.jsx(
1629
- Button,
355
+ button_js.Button,
1630
356
  {
1631
357
  variant: "outline",
1632
358
  size: "sm",
@@ -1636,7 +362,7 @@ ${file.content}` : "";
1636
362
  }
1637
363
  ),
1638
364
  /* @__PURE__ */ jsxRuntime.jsx(
1639
- Button,
365
+ button_js.Button,
1640
366
  {
1641
367
  variant: "outline",
1642
368
  size: "sm",
@@ -1666,7 +392,7 @@ ${file.content}` : "";
1666
392
  /* @__PURE__ */ jsxRuntime.jsx(ui.TabsTrigger, { value: "three-way", ...ui.sx("text-xs"), children: "Three-way" })
1667
393
  ] }) }),
1668
394
  showCopyButton && /* @__PURE__ */ jsxRuntime.jsx(
1669
- Button,
395
+ button_js.Button,
1670
396
  {
1671
397
  variant: "ghost",
1672
398
  size: "sm",
@@ -1676,7 +402,7 @@ ${file.content}` : "";
1676
402
  }
1677
403
  ),
1678
404
  /* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenu, { children: [
1679
- /* @__PURE__ */ jsxRuntime.jsx(ui.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", ...ui.sx("h-8 w-8 p-0"), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { style: ui.css("h-3.5 w-3.5") }) }) }),
405
+ /* @__PURE__ */ jsxRuntime.jsx(ui.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(button_js.Button, { variant: "ghost", size: "sm", ...ui.sx("h-8 w-8 p-0"), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { style: ui.css("h-3.5 w-3.5") }) }) }),
1680
406
  /* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenuContent, { align: "end", children: [
1681
407
  /* @__PURE__ */ jsxRuntime.jsxs(
1682
408
  ui.DropdownMenuItem,