@hanzo/ui 5.3.26 → 5.3.28

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 (326) hide show
  1. package/content/index.ts +26 -0
  2. package/docs/_registry/index.ts +426 -0
  3. package/docs/_registry/layout/docs-min.tsx +197 -0
  4. package/docs/_registry/layout/page-min.tsx +128 -0
  5. package/docs/components/accordion.tsx +118 -0
  6. package/docs/components/banner.tsx +144 -0
  7. package/docs/components/callout.tsx +112 -0
  8. package/docs/components/card.tsx +52 -0
  9. package/docs/components/codeblock.tsx +258 -0
  10. package/docs/components/dialog/search-algolia.tsx +132 -0
  11. package/docs/components/dialog/search-default.tsx +131 -0
  12. package/docs/components/dialog/search-orama.tsx +143 -0
  13. package/docs/components/dialog/search.tsx +529 -0
  14. package/docs/components/dynamic-codeblock.tsx +129 -0
  15. package/docs/components/files.tsx +81 -0
  16. package/docs/components/github-info.tsx +107 -0
  17. package/docs/components/heading.tsx +33 -0
  18. package/docs/components/image-zoom.css +77 -0
  19. package/docs/components/image-zoom.tsx +58 -0
  20. package/docs/components/index.ts +7 -0
  21. package/docs/components/inline-toc.tsx +48 -0
  22. package/docs/components/sidebar/base.tsx +451 -0
  23. package/docs/components/sidebar/link-item.tsx +65 -0
  24. package/docs/components/sidebar/page-tree.tsx +113 -0
  25. package/docs/components/sidebar/tabs/dropdown.tsx +109 -0
  26. package/docs/components/sidebar/tabs/index.tsx +89 -0
  27. package/docs/components/steps.tsx +9 -0
  28. package/docs/components/tabs.tsx +203 -0
  29. package/docs/components/toc/clerk.tsx +173 -0
  30. package/docs/components/toc/default.tsx +57 -0
  31. package/docs/components/toc/index.tsx +136 -0
  32. package/docs/components/type-table.tsx +174 -0
  33. package/docs/components/ui/accordion.tsx +88 -0
  34. package/docs/components/ui/button.tsx +28 -0
  35. package/docs/components/ui/collapsible.tsx +42 -0
  36. package/docs/components/ui/navigation-menu.tsx +83 -0
  37. package/docs/components/ui/popover.tsx +32 -0
  38. package/docs/components/ui/scroll-area.tsx +59 -0
  39. package/docs/components/ui/tabs.tsx +145 -0
  40. package/docs/contexts/i18n.tsx +56 -0
  41. package/docs/contexts/search.tsx +165 -0
  42. package/docs/contexts/tree.tsx +65 -0
  43. package/docs/css/black.css +39 -0
  44. package/docs/css/catppuccin.css +49 -0
  45. package/docs/css/colors/index.css +51 -0
  46. package/docs/css/dusk.css +47 -0
  47. package/docs/css/layouts/docs.css +1 -0
  48. package/docs/css/layouts/home.css +1 -0
  49. package/docs/css/layouts/notebook.css +1 -0
  50. package/docs/css/neutral.css +7 -0
  51. package/docs/css/ocean.css +48 -0
  52. package/docs/css/preset.css +305 -0
  53. package/docs/css/purple.css +39 -0
  54. package/docs/css/shadcn.css +36 -0
  55. package/docs/css/shiki.css +90 -0
  56. package/docs/css/solar.css +75 -0
  57. package/docs/css/style.css +9 -0
  58. package/docs/css/vitepress.css +77 -0
  59. package/docs/i18n.tsx +30 -0
  60. package/docs/icons.tsx +354 -0
  61. package/docs/layouts/docs/client.tsx +129 -0
  62. package/docs/layouts/docs/index.tsx +321 -0
  63. package/docs/layouts/docs/page/client.tsx +376 -0
  64. package/docs/layouts/docs/page/index.tsx +251 -0
  65. package/docs/layouts/docs/sidebar.tsx +265 -0
  66. package/docs/layouts/home/client.tsx +375 -0
  67. package/docs/layouts/home/index.tsx +51 -0
  68. package/docs/layouts/home/navbar.tsx +55 -0
  69. package/docs/layouts/notebook/client.tsx +281 -0
  70. package/docs/layouts/notebook/index.tsx +461 -0
  71. package/docs/layouts/notebook/page/client.tsx +375 -0
  72. package/docs/layouts/notebook/page/index.tsx +251 -0
  73. package/docs/layouts/notebook/sidebar.tsx +248 -0
  74. package/docs/layouts/shared/index.tsx +89 -0
  75. package/docs/layouts/shared/language-toggle.tsx +66 -0
  76. package/docs/layouts/shared/link-item.tsx +119 -0
  77. package/docs/layouts/shared/search-toggle.tsx +78 -0
  78. package/docs/layouts/shared/theme-toggle.tsx +86 -0
  79. package/docs/mdx.server.tsx +37 -0
  80. package/docs/mdx.tsx +97 -0
  81. package/docs/og.tsx +101 -0
  82. package/docs/page.tsx +85 -0
  83. package/docs/provider/base.tsx +173 -0
  84. package/docs/provider/next.tsx +23 -0
  85. package/docs/provider/react-router.tsx +23 -0
  86. package/docs/provider/tanstack.tsx +23 -0
  87. package/docs/provider/waku.tsx +23 -0
  88. package/docs/source.ts +3 -0
  89. package/docs/theme/typography/LICENSE +21 -0
  90. package/docs/theme/typography/index.ts +201 -0
  91. package/docs/theme/typography/styles.ts +449 -0
  92. package/docs/utils/cn.ts +1 -0
  93. package/docs/utils/is-active.ts +23 -0
  94. package/docs/utils/merge-refs.ts +15 -0
  95. package/docs/utils/use-copy-button.ts +39 -0
  96. package/docs/utils/use-footer-items.ts +27 -0
  97. package/docs/utils/use-is-scroll-top.ts +21 -0
  98. package/package.json +4 -2
  99. package/dist/3d/button.js +0 -298
  100. package/dist/3d/button.mjs +0 -273
  101. package/dist/3d/card.js +0 -234
  102. package/dist/3d/card.mjs +0 -207
  103. package/dist/3d/carousel.js +0 -371
  104. package/dist/3d/carousel.mjs +0 -344
  105. package/dist/3d/grid.js +0 -362
  106. package/dist/3d/grid.mjs +0 -337
  107. package/dist/3d/index.js +0 -1518
  108. package/dist/3d/index.mjs +0 -1472
  109. package/dist/3d/marquee.js +0 -352
  110. package/dist/3d/marquee.mjs +0 -327
  111. package/dist/3d/pin.js +0 -46
  112. package/dist/3d/pin.mjs +0 -24
  113. package/dist/accordion.js +0 -80
  114. package/dist/accordion.mjs +0 -55
  115. package/dist/alert-dialog.js +0 -220
  116. package/dist/alert-dialog.mjs +0 -187
  117. package/dist/alert.js +0 -68
  118. package/dist/alert.mjs +0 -64
  119. package/dist/animation/animated-background.js +0 -424
  120. package/dist/animation/animated-background.mjs +0 -418
  121. package/dist/animation/animated-beam.js +0 -119
  122. package/dist/animation/animated-beam.mjs +0 -97
  123. package/dist/animation/animated-cursor.js +0 -275
  124. package/dist/animation/animated-cursor.mjs +0 -270
  125. package/dist/animation/animated-icon.js +0 -357
  126. package/dist/animation/animated-icon.mjs +0 -351
  127. package/dist/animation/animated-list.js +0 -339
  128. package/dist/animation/animated-list.mjs +0 -333
  129. package/dist/animation/animated-number.js +0 -283
  130. package/dist/animation/animated-number.mjs +0 -277
  131. package/dist/animation/animated-testimonials.js +0 -97
  132. package/dist/animation/animated-testimonials.mjs +0 -75
  133. package/dist/animation/animated-tooltip.js +0 -67
  134. package/dist/animation/animated-tooltip.mjs +0 -45
  135. package/dist/animation/apple-cards-carousel.js +0 -308
  136. package/dist/animation/apple-cards-carousel.mjs +0 -285
  137. package/dist/animation/apple-hello-effect.js +0 -60
  138. package/dist/animation/apple-hello-effect.mjs +0 -38
  139. package/dist/animation/index.js +0 -1952
  140. package/dist/animation/index.mjs +0 -1921
  141. package/dist/avatar.js +0 -71
  142. package/dist/avatar.mjs +0 -47
  143. package/dist/badge.js +0 -66
  144. package/dist/badge.mjs +0 -40
  145. package/dist/blocks/index.js +0 -1665
  146. package/dist/blocks/index.mjs +0 -1626
  147. package/dist/breadcrumb.js +0 -107
  148. package/dist/breadcrumb.mjs +0 -99
  149. package/dist/calendar.js +0 -189
  150. package/dist/calendar.mjs +0 -164
  151. package/dist/carousel.js +0 -278
  152. package/dist/carousel.mjs +0 -249
  153. package/dist/checkbox.js +0 -60
  154. package/dist/checkbox.mjs +0 -35
  155. package/dist/code/block.js +0 -226
  156. package/dist/code/block.mjs +0 -203
  157. package/dist/code/compare.js +0 -446
  158. package/dist/code/compare.mjs +0 -423
  159. package/dist/code/diff.js +0 -430
  160. package/dist/code/diff.mjs +0 -407
  161. package/dist/code/editor.js +0 -243
  162. package/dist/code/editor.mjs +0 -218
  163. package/dist/code/explorer.js +0 -291
  164. package/dist/code/explorer.mjs +0 -268
  165. package/dist/code/index.js +0 -2551
  166. package/dist/code/index.mjs +0 -2510
  167. package/dist/code/preview.js +0 -400
  168. package/dist/code/preview.mjs +0 -377
  169. package/dist/code/snippet.js +0 -274
  170. package/dist/code/snippet.mjs +0 -250
  171. package/dist/code/tabs.js +0 -75
  172. package/dist/code/tabs.mjs +0 -53
  173. package/dist/code/terminal.js +0 -437
  174. package/dist/code/terminal.mjs +0 -414
  175. package/dist/collapsible.js +0 -33
  176. package/dist/collapsible.mjs +0 -9
  177. package/dist/command.js +0 -262
  178. package/dist/command.mjs +0 -232
  179. package/dist/context-menu.js +0 -207
  180. package/dist/context-menu.mjs +0 -171
  181. package/dist/device/index.js +0 -3
  182. package/dist/device/index.mjs +0 -2
  183. package/dist/dialog.js +0 -151
  184. package/dist/dialog.mjs +0 -121
  185. package/dist/dock/basic.js +0 -174
  186. package/dist/dock/basic.mjs +0 -151
  187. package/dist/dock/index.js +0 -628
  188. package/dist/dock/index.mjs +0 -601
  189. package/dist/dock/limelight-nav.js +0 -295
  190. package/dist/dock/limelight-nav.mjs +0 -274
  191. package/dist/dock/macos.js +0 -141
  192. package/dist/dock/macos.mjs +0 -118
  193. package/dist/dock/menu.js +0 -70
  194. package/dist/dock/menu.mjs +0 -48
  195. package/dist/dock/message.js +0 -144
  196. package/dist/dock/message.mjs +0 -122
  197. package/dist/drawer.js +0 -115
  198. package/dist/drawer.mjs +0 -103
  199. package/dist/dropdown-menu.js +0 -202
  200. package/dist/dropdown-menu.mjs +0 -166
  201. package/dist/finance/AdvancedChart.js +0 -48
  202. package/dist/finance/AdvancedChart.mjs +0 -46
  203. package/dist/finance/CompanyProfile.js +0 -48
  204. package/dist/finance/CompanyProfile.mjs +0 -46
  205. package/dist/finance/CryptoScreener.js +0 -45
  206. package/dist/finance/CryptoScreener.mjs +0 -43
  207. package/dist/finance/Financials.js +0 -52
  208. package/dist/finance/Financials.mjs +0 -50
  209. package/dist/finance/ForexScreener.js +0 -46
  210. package/dist/finance/ForexScreener.mjs +0 -44
  211. package/dist/finance/MarketOverview.js +0 -104
  212. package/dist/finance/MarketOverview.mjs +0 -102
  213. package/dist/finance/NewsTimeline.js +0 -44
  214. package/dist/finance/NewsTimeline.mjs +0 -42
  215. package/dist/finance/OrderEntry.js +0 -131
  216. package/dist/finance/OrderEntry.mjs +0 -129
  217. package/dist/finance/OrdersHistory.js +0 -64
  218. package/dist/finance/OrdersHistory.mjs +0 -62
  219. package/dist/finance/PositionsList.js +0 -80
  220. package/dist/finance/PositionsList.mjs +0 -78
  221. package/dist/finance/StockScreener.js +0 -46
  222. package/dist/finance/StockScreener.mjs +0 -44
  223. package/dist/finance/SymbolInfo.js +0 -46
  224. package/dist/finance/SymbolInfo.mjs +0 -44
  225. package/dist/finance/TechnicalAnalysis.js +0 -54
  226. package/dist/finance/TechnicalAnalysis.mjs +0 -52
  227. package/dist/finance/TickerTape.js +0 -56
  228. package/dist/finance/TickerTape.mjs +0 -54
  229. package/dist/finance/TradingPanel.js +0 -191
  230. package/dist/finance/TradingPanel.mjs +0 -189
  231. package/dist/finance/index.js +0 -930
  232. package/dist/finance/index.mjs +0 -914
  233. package/dist/form/index.js +0 -155
  234. package/dist/form/index.mjs +0 -125
  235. package/dist/form.js +0 -172
  236. package/dist/form.mjs +0 -142
  237. package/dist/hover-card.js +0 -58
  238. package/dist/hover-card.mjs +0 -34
  239. package/dist/index.js +0 -10179
  240. package/dist/index.mjs +0 -9785
  241. package/dist/input-otp.js +0 -79
  242. package/dist/input-otp.mjs +0 -54
  243. package/dist/lib/utils.js +0 -28
  244. package/dist/lib/utils.mjs +0 -24
  245. package/dist/navigation/index.js +0 -98
  246. package/dist/navigation/index.mjs +0 -79
  247. package/dist/navigation-menu.js +0 -149
  248. package/dist/navigation-menu.mjs +0 -116
  249. package/dist/pattern/grid-pattern.js +0 -333
  250. package/dist/pattern/grid-pattern.mjs +0 -310
  251. package/dist/pattern/index.js +0 -333
  252. package/dist/pattern/index.mjs +0 -310
  253. package/dist/popover.js +0 -63
  254. package/dist/popover.mjs +0 -37
  255. package/dist/primitives/index.js +0 -10179
  256. package/dist/primitives/index.mjs +0 -9785
  257. package/dist/primitives-export.js +0 -10179
  258. package/dist/primitives-export.mjs +0 -9785
  259. package/dist/progress.js +0 -62
  260. package/dist/progress.mjs +0 -37
  261. package/dist/project/gantt.js +0 -65
  262. package/dist/project/gantt.mjs +0 -43
  263. package/dist/project/index.js +0 -636
  264. package/dist/project/index.mjs +0 -611
  265. package/dist/project/kanban.js +0 -597
  266. package/dist/project/kanban.mjs +0 -572
  267. package/dist/project/list.js +0 -35
  268. package/dist/project/list.mjs +0 -12
  269. package/dist/radio-group.js +0 -68
  270. package/dist/radio-group.mjs +0 -45
  271. package/dist/resizable.js +0 -72
  272. package/dist/resizable.mjs +0 -48
  273. package/dist/scroll-area.js +0 -89
  274. package/dist/scroll-area.mjs +0 -66
  275. package/dist/select.js +0 -140
  276. package/dist/select.mjs +0 -111
  277. package/dist/separator.js +0 -59
  278. package/dist/separator.mjs +0 -34
  279. package/dist/sheet.js +0 -148
  280. package/dist/sheet.mjs +0 -117
  281. package/dist/skeleton.js +0 -32
  282. package/dist/skeleton.mjs +0 -27
  283. package/dist/slider.js +0 -99
  284. package/dist/slider.mjs +0 -73
  285. package/dist/sonner.js +0 -34
  286. package/dist/sonner.mjs +0 -29
  287. package/dist/switch.js +0 -62
  288. package/dist/switch.mjs +0 -37
  289. package/dist/table.js +0 -110
  290. package/dist/table.mjs +0 -101
  291. package/dist/tabs.js +0 -82
  292. package/dist/tabs.mjs +0 -57
  293. package/dist/tailwind/index.js +0 -2023
  294. package/dist/tailwind/index.mjs +0 -2011
  295. package/dist/textarea.js +0 -78
  296. package/dist/textarea.mjs +0 -56
  297. package/dist/toggle-group.js +0 -118
  298. package/dist/toggle-group.mjs +0 -93
  299. package/dist/toggle.js +0 -71
  300. package/dist/toggle.mjs +0 -48
  301. package/dist/tooltip.js +0 -67
  302. package/dist/tooltip.mjs +0 -40
  303. package/dist/types/index.js +0 -57
  304. package/dist/types/index.mjs +0 -51
  305. package/dist/ui/announcement.js +0 -129
  306. package/dist/ui/announcement.mjs +0 -107
  307. package/dist/ui/avatar-group.js +0 -88
  308. package/dist/ui/avatar-group.mjs +0 -65
  309. package/dist/ui/banner.js +0 -85
  310. package/dist/ui/banner.mjs +0 -62
  311. package/dist/ui/cursor.js +0 -78
  312. package/dist/ui/cursor.mjs +0 -56
  313. package/dist/ui/index.js +0 -475
  314. package/dist/ui/index.mjs +0 -442
  315. package/dist/ui/marquee.js +0 -74
  316. package/dist/ui/marquee.mjs +0 -52
  317. package/dist/ui/pill.js +0 -85
  318. package/dist/ui/pill.mjs +0 -62
  319. package/dist/ui/spinner.js +0 -28
  320. package/dist/ui/spinner.mjs +0 -26
  321. package/dist/ui/tags.js +0 -101
  322. package/dist/ui/tags.mjs +0 -79
  323. package/dist/ui/ticker.js +0 -73
  324. package/dist/ui/ticker.mjs +0 -51
  325. package/dist/util/index.js +0 -457
  326. package/dist/util/index.mjs +0 -399
@@ -1,446 +0,0 @@
1
- "use client";
2
- 'use strict';
3
-
4
- var React = require('react');
5
- var classVarianceAuthority = require('class-variance-authority');
6
- var lucideReact = require('lucide-react');
7
- var utils = require('@hanzo/ui/lib/utils');
8
- var badge = require('@hanzo/ui/badge');
9
- var button = require('@hanzo/ui/button');
10
- var diff = require('@hanzo/ui/code/diff');
11
- var snippet = require('@hanzo/ui/code/snippet');
12
- var dropdownMenu = require('@hanzo/ui/dropdown-menu');
13
- var scrollArea = require('@hanzo/ui/scroll-area');
14
- var tabs = require('@hanzo/ui/tabs');
15
- var jsxRuntime = require('react/jsx-runtime');
16
-
17
- function _interopNamespace(e) {
18
- if (e && e.__esModule) return e;
19
- var n = Object.create(null);
20
- if (e) {
21
- Object.keys(e).forEach(function (k) {
22
- if (k !== 'default') {
23
- var d = Object.getOwnPropertyDescriptor(e, k);
24
- Object.defineProperty(n, k, d.get ? d : {
25
- enumerable: true,
26
- get: function () { return e[k]; }
27
- });
28
- }
29
- });
30
- }
31
- n.default = e;
32
- return Object.freeze(n);
33
- }
34
-
35
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
36
-
37
- var __defProp = Object.defineProperty;
38
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
39
- var codeCompareVariants = classVarianceAuthority.cva(
40
- "relative flex flex-col overflow-hidden rounded-lg border bg-background",
41
- {
42
- variants: {
43
- layout: {
44
- horizontal: "flex-col",
45
- vertical: "flex-row"
46
- },
47
- size: {
48
- sm: "text-xs",
49
- default: "text-sm",
50
- lg: "text-base"
51
- }
52
- },
53
- defaultVariants: {
54
- layout: "horizontal",
55
- size: "default"
56
- }
57
- }
58
- );
59
- var CodeCompare = React__namespace.forwardRef(
60
- ({
61
- className,
62
- layout,
63
- size,
64
- files,
65
- defaultView = "side-by-side",
66
- showLineNumbers = true,
67
- showCopyButton = true,
68
- allowMerge = false,
69
- conflictMarkers = [],
70
- onMergeConflict,
71
- onFileSelect,
72
- height = "600px",
73
- syncScroll = true,
74
- ...props
75
- }, ref) => {
76
- const [view, setView] = React__namespace.useState(defaultView);
77
- const [selectedFiles, setSelectedFiles] = React__namespace.useState(() => {
78
- if (files.length >= 2) {
79
- return [files[0].id, files[1].id];
80
- }
81
- return files.length > 0 ? [files[0].id] : [];
82
- });
83
- const [mergeState, setMergeState] = React__namespace.useState({
84
- resolved: {},
85
- conflicts: conflictMarkers
86
- });
87
- const [copied, setCopied] = React__namespace.useState(false);
88
- const scrollRefs = React__namespace.useRef({});
89
- const handleScroll = React__namespace.useCallback(
90
- (sourceId, scrollTop) => {
91
- if (!syncScroll) return;
92
- Object.entries(scrollRefs.current).forEach(([id, ref2]) => {
93
- if (id !== sourceId && ref2) {
94
- ref2.scrollTop = scrollTop;
95
- }
96
- });
97
- },
98
- [syncScroll]
99
- );
100
- const copyComparison = React__namespace.useCallback(async () => {
101
- const comparison = selectedFiles.map((fileId) => {
102
- const file = files.find((f) => f.id === fileId);
103
- return file ? `=== ${file.filename} ===
104
- ${file.content}` : "";
105
- }).join("\n\n");
106
- try {
107
- await navigator.clipboard.writeText(comparison);
108
- setCopied(true);
109
- setTimeout(() => setCopied(false), 2e3);
110
- } catch (error) {
111
- console.error("Failed to copy comparison:", error);
112
- }
113
- }, [files, selectedFiles]);
114
- const resolveConflict = React__namespace.useCallback(
115
- (conflictIndex, resolution) => {
116
- setMergeState((prev) => ({
117
- ...prev,
118
- resolved: {
119
- ...prev.resolved,
120
- [conflictIndex]: resolution
121
- }
122
- }));
123
- onMergeConflict?.(resolution);
124
- },
125
- [onMergeConflict]
126
- );
127
- const getFileStats = React__namespace.useCallback(
128
- (file1, file2) => {
129
- const lines1 = file1.content.split("\n");
130
- const lines2 = file2.content.split("\n");
131
- let added = 0;
132
- let removed = 0;
133
- let modified = 0;
134
- const maxLines = Math.max(lines1.length, lines2.length);
135
- for (let i = 0; i < maxLines; i++) {
136
- const line1 = lines1[i];
137
- const line2 = lines2[i];
138
- if (line1 === void 0) {
139
- added++;
140
- } else if (line2 === void 0) {
141
- removed++;
142
- } else if (line1 !== line2) {
143
- modified++;
144
- }
145
- }
146
- return { added, removed, modified };
147
- },
148
- []
149
- );
150
- 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: [
151
- /* @__PURE__ */ jsxRuntime.jsxs(
152
- button.Button,
153
- {
154
- variant: selectedFiles.includes(file.id) ? "default" : "outline",
155
- size: "sm",
156
- onClick: () => {
157
- if (view === "three-way") {
158
- setSelectedFiles((prev) => {
159
- if (prev.includes(file.id)) {
160
- return prev.filter((id) => id !== file.id);
161
- }
162
- return prev.length < 3 ? [...prev, file.id] : [prev[1], prev[2], file.id];
163
- });
164
- } else {
165
- setSelectedFiles((prev) => {
166
- if (prev.includes(file.id)) {
167
- return prev.filter((id) => id !== file.id);
168
- }
169
- return prev.length < 2 ? [...prev, file.id] : [prev[1], file.id];
170
- });
171
- }
172
- onFileSelect?.(file.id);
173
- },
174
- className: "gap-2",
175
- children: [
176
- file.label || file.filename,
177
- file.version && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: file.version })
178
- ]
179
- }
180
- ),
181
- index < files.length - 1 && view !== "three-way" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "vs" })
182
- ] }, file.id)) }), "renderFileSelector");
183
- const renderSideBySide = /* @__PURE__ */ __name(() => {
184
- const [file1, file2] = selectedFiles.map((id) => files.find((f) => f.id === id)).filter(Boolean);
185
- if (!file1 || !file2) {
186
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-32 text-muted-foreground", children: "Select two files to compare" });
187
- }
188
- const stats = getFileStats(file1, file2);
189
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
190
- /* @__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: [
191
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Comparison" }),
192
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 text-xs", children: [
193
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-green-600", children: [
194
- "+",
195
- stats.added
196
- ] }),
197
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-red-600", children: [
198
- "-",
199
- stats.removed
200
- ] }),
201
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-yellow-600", children: [
202
- "~",
203
- stats.modified
204
- ] })
205
- ] })
206
- ] }) }),
207
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntime.jsx(
208
- diff.CodeDiff,
209
- {
210
- oldCode: file1.content,
211
- newCode: file2.content,
212
- language: file1.language,
213
- oldFilename: file1.filename,
214
- newFilename: file2.filename,
215
- showLineNumbers,
216
- showCopyButton: false,
217
- maxHeight: "100%",
218
- defaultView: "split",
219
- className: "border-0 rounded-none h-full"
220
- }
221
- ) })
222
- ] });
223
- }, "renderSideBySide");
224
- const renderUnified = /* @__PURE__ */ __name(() => {
225
- const [file1, file2] = selectedFiles.map((id) => files.find((f) => f.id === id)).filter(Boolean);
226
- if (!file1 || !file2) {
227
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center h-32 text-muted-foreground", children: "Select two files to compare" });
228
- }
229
- return /* @__PURE__ */ jsxRuntime.jsx(
230
- diff.CodeDiff,
231
- {
232
- oldCode: file1.content,
233
- newCode: file2.content,
234
- language: file1.language,
235
- filename: `${file1.filename} \u2192 ${file2.filename}`,
236
- showLineNumbers,
237
- showCopyButton: false,
238
- maxHeight: "100%",
239
- defaultView: "unified",
240
- className: "border-0 rounded-none"
241
- }
242
- );
243
- }, "renderUnified");
244
- const renderThreeWay = /* @__PURE__ */ __name(() => {
245
- const [base, current, incoming] = selectedFiles.map((id) => files.find((f) => f.id === id)).filter(Boolean);
246
- if (!base || !current || !incoming) {
247
- 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)" });
248
- }
249
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-0 h-full", children: [
250
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-r", children: [
251
- /* @__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: [
252
- "Base (",
253
- base.filename,
254
- ")"
255
- ] }) }),
256
- /* @__PURE__ */ jsxRuntime.jsx(
257
- scrollArea.ScrollArea,
258
- {
259
- className: "h-full",
260
- ref: (ref2) => {
261
- scrollRefs.current["base"] = ref2;
262
- },
263
- onScrollCapture: (e) => {
264
- const target = e.target;
265
- handleScroll("base", target.scrollTop);
266
- },
267
- children: /* @__PURE__ */ jsxRuntime.jsx(
268
- snippet.CodeSnippet,
269
- {
270
- code: base.content,
271
- language: base.language,
272
- showLineNumbers,
273
- showCopyButton: false,
274
- showHeader: false,
275
- className: "border-0 rounded-none"
276
- }
277
- )
278
- }
279
- )
280
- ] }),
281
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-r", children: [
282
- /* @__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: [
283
- "Current (",
284
- current.filename,
285
- ")"
286
- ] }) }),
287
- /* @__PURE__ */ jsxRuntime.jsx(
288
- scrollArea.ScrollArea,
289
- {
290
- className: "h-full",
291
- ref: (ref2) => {
292
- scrollRefs.current["current"] = ref2;
293
- },
294
- onScrollCapture: (e) => {
295
- const target = e.target;
296
- handleScroll("current", target.scrollTop);
297
- },
298
- children: /* @__PURE__ */ jsxRuntime.jsx(
299
- snippet.CodeSnippet,
300
- {
301
- code: current.content,
302
- language: current.language,
303
- showLineNumbers,
304
- showCopyButton: false,
305
- showHeader: false,
306
- className: "border-0 rounded-none"
307
- }
308
- )
309
- }
310
- )
311
- ] }),
312
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
313
- /* @__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: [
314
- "Incoming (",
315
- incoming.filename,
316
- ")"
317
- ] }) }),
318
- /* @__PURE__ */ jsxRuntime.jsx(
319
- scrollArea.ScrollArea,
320
- {
321
- className: "h-full",
322
- ref: (ref2) => {
323
- scrollRefs.current["incoming"] = ref2;
324
- },
325
- onScrollCapture: (e) => {
326
- const target = e.target;
327
- handleScroll("incoming", target.scrollTop);
328
- },
329
- children: /* @__PURE__ */ jsxRuntime.jsx(
330
- snippet.CodeSnippet,
331
- {
332
- code: incoming.content,
333
- language: incoming.language,
334
- showLineNumbers,
335
- showCopyButton: false,
336
- showHeader: false,
337
- className: "border-0 rounded-none"
338
- }
339
- )
340
- }
341
- )
342
- ] })
343
- ] });
344
- }, "renderThreeWay");
345
- const renderMergeConflicts = /* @__PURE__ */ __name(() => {
346
- if (!allowMerge || mergeState.conflicts.length === 0) return null;
347
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t bg-muted/30", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-2", children: [
348
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
349
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Merge Conflicts" }),
350
- /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "destructive", className: "text-xs", children: mergeState.conflicts.length })
351
- ] }),
352
- /* @__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: [
353
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
354
- "Lines ",
355
- conflict.startLine,
356
- "-",
357
- conflict.endLine
358
- ] }),
359
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
360
- /* @__PURE__ */ jsxRuntime.jsx(
361
- button.Button,
362
- {
363
- variant: "outline",
364
- size: "sm",
365
- onClick: () => resolveConflict(index, "current"),
366
- className: "h-6 text-xs",
367
- children: "Keep Current"
368
- }
369
- ),
370
- /* @__PURE__ */ jsxRuntime.jsx(
371
- button.Button,
372
- {
373
- variant: "outline",
374
- size: "sm",
375
- onClick: () => resolveConflict(index, "incoming"),
376
- className: "h-6 text-xs",
377
- children: "Accept Incoming"
378
- }
379
- )
380
- ] })
381
- ] }, index)) })
382
- ] }) });
383
- }, "renderMergeConflicts");
384
- return /* @__PURE__ */ jsxRuntime.jsxs(
385
- "div",
386
- {
387
- ref,
388
- className: utils.cn(codeCompareVariants({ layout, size }), className),
389
- style: { height },
390
- ...props,
391
- children: [
392
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
393
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4", children: renderFileSelector() }),
394
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
395
- /* @__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: [
396
- /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsTrigger, { value: "side-by-side", className: "text-xs", children: "Side by Side" }),
397
- /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsTrigger, { value: "unified", className: "text-xs", children: "Unified" }),
398
- /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsTrigger, { value: "three-way", className: "text-xs", children: "Three-way" })
399
- ] }) }),
400
- showCopyButton && /* @__PURE__ */ jsxRuntime.jsx(
401
- button.Button,
402
- {
403
- variant: "ghost",
404
- size: "sm",
405
- onClick: copyComparison,
406
- className: "h-8 w-8 p-0",
407
- 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" })
408
- }
409
- ),
410
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu, { children: [
411
- /* @__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" }) }) }),
412
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenuContent, { align: "end", children: [
413
- /* @__PURE__ */ jsxRuntime.jsxs(
414
- dropdownMenu.DropdownMenuItem,
415
- {
416
- onClick: () => setSelectedFiles([]),
417
- className: "gap-2",
418
- children: [
419
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "h-4 w-4" }),
420
- "Reset Selection"
421
- ]
422
- }
423
- ),
424
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenuItem, { className: "gap-2", children: [
425
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings, { className: "h-4 w-4" }),
426
- "Settings"
427
- ] })
428
- ] })
429
- ] })
430
- ] })
431
- ] }),
432
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-h-0", children: [
433
- view === "side-by-side" && renderSideBySide(),
434
- view === "unified" && renderUnified(),
435
- view === "three-way" && renderThreeWay()
436
- ] }),
437
- renderMergeConflicts()
438
- ]
439
- }
440
- );
441
- }
442
- );
443
- CodeCompare.displayName = "CodeCompare";
444
-
445
- exports.CodeCompare = CodeCompare;
446
- exports.codeCompareVariants = codeCompareVariants;