@hanzo/ui 5.3.25 → 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 +8 -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,400 +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 snippet = require('@hanzo/ui/code/snippet');
11
- var separator = require('@hanzo/ui/separator');
12
- var tabs = require('@hanzo/ui/tabs');
13
- var toggle = require('@hanzo/ui/toggle');
14
- var jsxRuntime = require('react/jsx-runtime');
15
-
16
- function _interopNamespace(e) {
17
- if (e && e.__esModule) return e;
18
- var n = Object.create(null);
19
- if (e) {
20
- Object.keys(e).forEach(function (k) {
21
- if (k !== 'default') {
22
- var d = Object.getOwnPropertyDescriptor(e, k);
23
- Object.defineProperty(n, k, d.get ? d : {
24
- enumerable: true,
25
- get: function () { return e[k]; }
26
- });
27
- }
28
- });
29
- }
30
- n.default = e;
31
- return Object.freeze(n);
32
- }
33
-
34
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
35
-
36
- var __defProp = Object.defineProperty;
37
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
38
- var codePreviewVariants = classVarianceAuthority.cva(
39
- "relative overflow-hidden rounded-lg border bg-background",
40
- {
41
- variants: {
42
- size: {
43
- sm: "text-xs",
44
- default: "text-sm",
45
- lg: "text-base"
46
- }
47
- },
48
- defaultVariants: {
49
- size: "default"
50
- }
51
- }
52
- );
53
- var runHTMLCode = /* @__PURE__ */ __name((files) => {
54
- const htmlFile = files.find((f) => f.type === "html");
55
- const cssFiles = files.filter((f) => f.type === "css");
56
- const jsFiles = files.filter((f) => f.type === "js");
57
- let html = htmlFile?.content || "<div>No HTML file provided</div>";
58
- if (cssFiles.length > 0) {
59
- const cssContent = cssFiles.map((f) => f.content).join("\n");
60
- html = `<style>${cssContent}</style>
61
- ${html}`;
62
- }
63
- if (jsFiles.length > 0) {
64
- const jsContent = jsFiles.map((f) => f.content).join("\n");
65
- html = `${html}
66
- <script>${jsContent}</script>`;
67
- }
68
- return html;
69
- }, "runHTMLCode");
70
- var consoleScript = `
71
- <script>
72
- const originalConsole = window.console;
73
- const logs = [];
74
-
75
- ['log', 'warn', 'error', 'info'].forEach(method => {
76
- window.console[method] = function(...args) {
77
- logs.push({
78
- type: method,
79
- content: args.map(arg =>
80
- typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg)
81
- ).join(' '),
82
- timestamp: Date.now()
83
- });
84
-
85
- // Also call original console method
86
- originalConsole[method].apply(originalConsole, arguments);
87
-
88
- // Send to parent
89
- window.parent.postMessage({
90
- type: 'console',
91
- data: logs[logs.length - 1]
92
- }, '*');
93
- };
94
- });
95
-
96
- window.addEventListener('error', (e) => {
97
- window.parent.postMessage({
98
- type: 'error',
99
- data: {
100
- type: 'error',
101
- content: e.message + ' at ' + e.filename + ':' + e.lineno,
102
- timestamp: Date.now()
103
- }
104
- }, '*');
105
- });
106
- </script>
107
- `;
108
- var CodePreview = React__namespace.forwardRef(
109
- ({
110
- className,
111
- size,
112
- files,
113
- defaultFile,
114
- showPreview = true,
115
- showConsole = true,
116
- autoRun = false,
117
- maxHeight = "600px",
118
- previewHeight = "300px",
119
- consoleHeight = "150px",
120
- allowFullscreen = true,
121
- customRunner,
122
- ...props
123
- }, ref) => {
124
- const [activeFile, setActiveFile] = React__namespace.useState(
125
- defaultFile || files[0]?.filename || ""
126
- );
127
- const [previewContent, setPreviewContent] = React__namespace.useState("");
128
- const [isRunning, setIsRunning] = React__namespace.useState(false);
129
- const [results, setResults] = React__namespace.useState([]);
130
- const [isPreviewVisible, setIsPreviewVisible] = React__namespace.useState(showPreview);
131
- const [isConsoleVisible, setIsConsoleVisible] = React__namespace.useState(showConsole);
132
- const [isFullscreen, setIsFullscreen] = React__namespace.useState(false);
133
- const [copied, setCopied] = React__namespace.useState({});
134
- const iframeRef = React__namespace.useRef(null);
135
- files.find((f) => f.filename === activeFile) || files[0];
136
- React__namespace.useEffect(() => {
137
- const handleMessage = /* @__PURE__ */ __name((event) => {
138
- if (event.data?.type === "console" || event.data?.type === "error") {
139
- setResults((prev) => [...prev, event.data.data]);
140
- }
141
- }, "handleMessage");
142
- window.addEventListener("message", handleMessage);
143
- return () => window.removeEventListener("message", handleMessage);
144
- }, []);
145
- const runCode = React__namespace.useCallback(async () => {
146
- setIsRunning(true);
147
- setResults([]);
148
- try {
149
- let output;
150
- if (customRunner) {
151
- output = await customRunner(files);
152
- } else {
153
- output = runHTMLCode(files);
154
- }
155
- output = consoleScript + output;
156
- setPreviewContent(output);
157
- if (iframeRef.current) {
158
- const doc = iframeRef.current.contentDocument;
159
- if (doc) {
160
- doc.open();
161
- doc.write(output);
162
- doc.close();
163
- }
164
- }
165
- } catch (error) {
166
- setResults([
167
- {
168
- type: "error",
169
- content: error instanceof Error ? error.message : String(error),
170
- timestamp: Date.now()
171
- }
172
- ]);
173
- } finally {
174
- setIsRunning(false);
175
- }
176
- }, [files, customRunner]);
177
- React__namespace.useEffect(() => {
178
- if (autoRun) {
179
- const timer = setTimeout(runCode, 1e3);
180
- return () => clearTimeout(timer);
181
- }
182
- }, [files, autoRun, runCode]);
183
- const copyFileContent = React__namespace.useCallback(
184
- async (filename) => {
185
- const file = files.find((f) => f.filename === filename);
186
- if (!file) return;
187
- try {
188
- await navigator.clipboard.writeText(file.content);
189
- setCopied((prev) => ({ ...prev, [filename]: true }));
190
- setTimeout(() => {
191
- setCopied((prev) => ({ ...prev, [filename]: false }));
192
- }, 2e3);
193
- } catch (error) {
194
- console.error("Failed to copy code:", error);
195
- }
196
- },
197
- [files]
198
- );
199
- const clearConsole = /* @__PURE__ */ __name(() => {
200
- setResults([]);
201
- }, "clearConsole");
202
- const renderConsole = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
203
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2 bg-muted/30", children: [
204
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
205
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "h-4 w-4" }),
206
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Console" }),
207
- results.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "secondary", className: "text-xs", children: results.length })
208
- ] }),
209
- /* @__PURE__ */ jsxRuntime.jsx(
210
- button.Button,
211
- {
212
- variant: "ghost",
213
- size: "sm",
214
- onClick: clearConsole,
215
- className: "h-8 w-8 p-0",
216
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3.5 w-3.5" })
217
- }
218
- )
219
- ] }),
220
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto p-2 space-y-1 font-mono text-xs", children: results.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: "No output" }) : results.map((result, index) => /* @__PURE__ */ jsxRuntime.jsxs(
221
- "div",
222
- {
223
- className: utils.cn(
224
- "flex items-start gap-2 p-2 rounded",
225
- result.type === "error" && "bg-red-500/10 text-red-600 dark:text-red-400",
226
- result.type === "log" && "bg-blue-500/10 text-blue-600 dark:text-blue-400",
227
- result.type === "output" && "bg-green-500/10 text-green-600 dark:text-green-400"
228
- ),
229
- children: [
230
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: new Date(result.timestamp).toLocaleTimeString() }),
231
- /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "flex-1 whitespace-pre-wrap break-words", children: result.content })
232
- ]
233
- },
234
- index
235
- )) })
236
- ] }), "renderConsole");
237
- const layout = isFullscreen ? "fixed inset-0 z-50 bg-background" : "";
238
- return /* @__PURE__ */ jsxRuntime.jsxs(
239
- "div",
240
- {
241
- ref,
242
- className: utils.cn(codePreviewVariants({ size }), layout, className),
243
- style: { maxHeight: isFullscreen ? "100vh" : maxHeight },
244
- ...props,
245
- children: [
246
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b px-4 py-2", children: [
247
- /* @__PURE__ */ jsxRuntime.jsx(
248
- tabs.Tabs,
249
- {
250
- value: activeFile,
251
- onValueChange: setActiveFile,
252
- className: "flex-1",
253
- children: /* @__PURE__ */ jsxRuntime.jsx(tabs.TabsList, { className: "h-auto p-0 bg-transparent", children: files.map((file) => /* @__PURE__ */ jsxRuntime.jsxs(
254
- tabs.TabsTrigger,
255
- {
256
- value: file.filename,
257
- className: "relative flex items-center gap-2 data-[state=active]:bg-muted",
258
- children: [
259
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: file.filename }),
260
- /* @__PURE__ */ jsxRuntime.jsx(badge.Badge, { variant: "outline", className: "text-xs", children: file.language }),
261
- /* @__PURE__ */ jsxRuntime.jsx(
262
- button.Button,
263
- {
264
- variant: "ghost",
265
- size: "sm",
266
- onClick: (e) => {
267
- e.stopPropagation();
268
- copyFileContent(file.filename);
269
- },
270
- className: "h-6 w-6 p-0 opacity-0 group-hover:opacity-100",
271
- children: copied[file.filename] ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3 text-green-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3 w-3" })
272
- }
273
- )
274
- ]
275
- },
276
- file.filename
277
- )) })
278
- }
279
- ),
280
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
281
- /* @__PURE__ */ jsxRuntime.jsx(
282
- toggle.Toggle,
283
- {
284
- pressed: isPreviewVisible,
285
- onPressedChange: setIsPreviewVisible,
286
- "aria-label": "Toggle preview",
287
- size: "sm",
288
- children: isPreviewVisible ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { className: "h-4 w-4" })
289
- }
290
- ),
291
- /* @__PURE__ */ jsxRuntime.jsx(
292
- toggle.Toggle,
293
- {
294
- pressed: isConsoleVisible,
295
- onPressedChange: setIsConsoleVisible,
296
- "aria-label": "Toggle console",
297
- size: "sm",
298
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "h-4 w-4" })
299
- }
300
- ),
301
- /* @__PURE__ */ jsxRuntime.jsxs(
302
- button.Button,
303
- {
304
- variant: "outline",
305
- size: "sm",
306
- onClick: runCode,
307
- disabled: isRunning,
308
- className: "gap-2",
309
- children: [
310
- isRunning ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { className: "h-4 w-4" }),
311
- "Run"
312
- ]
313
- }
314
- ),
315
- allowFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
316
- button.Button,
317
- {
318
- variant: "ghost",
319
- size: "sm",
320
- onClick: () => setIsFullscreen(!isFullscreen),
321
- className: "h-8 w-8 p-0",
322
- children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings, { className: "h-4 w-4" })
323
- }
324
- )
325
- ] })
326
- ] }),
327
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
328
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-h-0", children: /* @__PURE__ */ jsxRuntime.jsx(tabs.Tabs, { value: activeFile, onValueChange: setActiveFile, children: files.map((file) => /* @__PURE__ */ jsxRuntime.jsx(
329
- tabs.TabsContent,
330
- {
331
- value: file.filename,
332
- className: "m-0 h-full",
333
- children: /* @__PURE__ */ jsxRuntime.jsx(
334
- snippet.CodeSnippet,
335
- {
336
- code: file.content,
337
- language: file.language,
338
- showLineNumbers: true,
339
- showCopyButton: false,
340
- showHeader: false,
341
- maxHeight: "100%",
342
- className: "border-0 rounded-none"
343
- }
344
- )
345
- },
346
- file.filename
347
- )) }) }),
348
- (isPreviewVisible || isConsoleVisible) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
349
- /* @__PURE__ */ jsxRuntime.jsx(separator.Separator, {}),
350
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col lg:flex-row min-h-0", children: [
351
- isPreviewVisible && /* @__PURE__ */ jsxRuntime.jsxs(
352
- "div",
353
- {
354
- className: "flex-1 min-h-0 border-r last:border-r-0",
355
- style: { height: previewHeight },
356
- children: [
357
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 border-b px-4 py-2 bg-muted/30", children: [
358
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-4 w-4" }),
359
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "Preview" }),
360
- results.filter((r) => r.type === "error").length > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "h-4 w-4 text-red-500" })
361
- ] }),
362
- /* @__PURE__ */ jsxRuntime.jsx(
363
- "iframe",
364
- {
365
- ref: iframeRef,
366
- className: "w-full h-full bg-white",
367
- sandbox: "allow-scripts allow-same-origin",
368
- srcDoc: previewContent
369
- }
370
- )
371
- ]
372
- }
373
- ),
374
- isConsoleVisible && /* @__PURE__ */ jsxRuntime.jsx(
375
- "div",
376
- {
377
- className: "flex-1 min-h-0",
378
- style: { height: consoleHeight },
379
- children: renderConsole()
380
- }
381
- )
382
- ] })
383
- ] })
384
- ] }),
385
- isFullscreen && /* @__PURE__ */ jsxRuntime.jsx(
386
- "div",
387
- {
388
- className: "absolute inset-0 bg-black/50",
389
- onClick: () => setIsFullscreen(false)
390
- }
391
- )
392
- ]
393
- }
394
- );
395
- }
396
- );
397
- CodePreview.displayName = "CodePreview";
398
-
399
- exports.CodePreview = CodePreview;
400
- exports.codePreviewVariants = codePreviewVariants;