@luxfi/ui 8.0.0 → 8.1.0

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 (744) hide show
  1. package/dist/3d-button.cjs +298 -0
  2. package/dist/3d-button.d.ts +52 -0
  3. package/dist/3d-button.d.ts.map +1 -0
  4. package/dist/3d-button.js +273 -0
  5. package/dist/3d-card.cjs +236 -0
  6. package/dist/3d-card.d.ts +29 -0
  7. package/dist/3d-card.d.ts.map +1 -0
  8. package/dist/3d-card.js +209 -0
  9. package/dist/3d-carousel.cjs +375 -0
  10. package/dist/3d-carousel.d.ts +26 -0
  11. package/dist/3d-carousel.d.ts.map +1 -0
  12. package/dist/3d-carousel.js +348 -0
  13. package/dist/3d-grid.cjs +360 -0
  14. package/dist/3d-grid.d.ts +49 -0
  15. package/dist/3d-grid.d.ts.map +1 -0
  16. package/dist/3d-grid.js +335 -0
  17. package/dist/3d-marquee.cjs +8669 -0
  18. package/dist/3d-marquee.d.ts +65 -0
  19. package/dist/3d-marquee.d.ts.map +1 -0
  20. package/dist/3d-marquee.js +8645 -0
  21. package/dist/3d-model-viewer.cjs +909 -0
  22. package/dist/3d-model-viewer.d.ts +45 -0
  23. package/dist/3d-model-viewer.d.ts.map +1 -0
  24. package/dist/3d-model-viewer.js +886 -0
  25. package/dist/3d-pin.cjs +46 -0
  26. package/dist/3d-pin.d.ts +8 -0
  27. package/dist/3d-pin.d.ts.map +1 -0
  28. package/dist/3d-pin.js +24 -0
  29. package/dist/3d-scene.cjs +439 -0
  30. package/dist/3d-scene.d.ts +76 -0
  31. package/dist/3d-scene.d.ts.map +1 -0
  32. package/dist/3d-scene.js +407 -0
  33. package/dist/3d-text.cjs +367 -0
  34. package/dist/3d-text.d.ts +62 -0
  35. package/dist/3d-text.d.ts.map +1 -0
  36. package/dist/3d-text.js +341 -0
  37. package/dist/advanced-chart.cjs +53 -0
  38. package/dist/advanced-chart.d.ts +6 -0
  39. package/dist/advanced-chart.d.ts.map +1 -0
  40. package/dist/advanced-chart.js +51 -0
  41. package/dist/advanced-navigation-bar.cjs +459 -0
  42. package/dist/advanced-navigation-bar.d.ts +14 -0
  43. package/dist/advanced-navigation-bar.d.ts.map +1 -0
  44. package/dist/advanced-navigation-bar.js +437 -0
  45. package/dist/ai-actions.cjs +57 -0
  46. package/dist/ai-actions.d.ts +14 -0
  47. package/dist/ai-actions.d.ts.map +1 -0
  48. package/dist/ai-actions.js +35 -0
  49. package/dist/ai-agents.cjs +1764 -0
  50. package/dist/ai-agents.d.ts +56 -0
  51. package/dist/ai-agents.d.ts.map +1 -0
  52. package/dist/ai-agents.js +1740 -0
  53. package/dist/ai-assistant.cjs +907 -0
  54. package/dist/ai-assistant.d.ts +28 -0
  55. package/dist/ai-assistant.d.ts.map +1 -0
  56. package/dist/ai-assistant.js +886 -0
  57. package/dist/ai-chat.cjs +1165 -0
  58. package/dist/ai-chat.d.ts +56 -0
  59. package/dist/ai-chat.d.ts.map +1 -0
  60. package/dist/ai-chat.js +1141 -0
  61. package/dist/ai-code.cjs +1866 -0
  62. package/dist/ai-code.d.ts +58 -0
  63. package/dist/ai-code.d.ts.map +1 -0
  64. package/dist/ai-code.js +1841 -0
  65. package/dist/ai-model-selector-navigation-bar.cjs +59 -0
  66. package/dist/ai-model-selector-navigation-bar.d.ts +15 -0
  67. package/dist/ai-model-selector-navigation-bar.d.ts.map +1 -0
  68. package/dist/ai-model-selector-navigation-bar.js +37 -0
  69. package/dist/ai-models.cjs +41 -0
  70. package/dist/ai-models.d.ts +15 -0
  71. package/dist/ai-models.d.ts.map +1 -0
  72. package/dist/ai-models.js +19 -0
  73. package/dist/ai-playground.cjs +1110 -0
  74. package/dist/ai-playground.d.ts +66 -0
  75. package/dist/ai-playground.d.ts.map +1 -0
  76. package/dist/ai-playground.js +1088 -0
  77. package/dist/ai-tools.cjs +1043 -0
  78. package/dist/ai-tools.d.ts +23 -0
  79. package/dist/ai-tools.d.ts.map +1 -0
  80. package/dist/ai-tools.js +1022 -0
  81. package/dist/ai-vision.cjs +1831 -0
  82. package/dist/ai-vision.d.ts +74 -0
  83. package/dist/ai-vision.d.ts.map +1 -0
  84. package/dist/ai-vision.js +1810 -0
  85. package/dist/ai-voice-settings.cjs +1511 -0
  86. package/dist/ai-voice-settings.d.ts +100 -0
  87. package/dist/ai-voice-settings.d.ts.map +1 -0
  88. package/dist/ai-voice-settings.js +1478 -0
  89. package/dist/ai-voice.cjs +1522 -0
  90. package/dist/ai-voice.d.ts +72 -0
  91. package/dist/ai-voice.d.ts.map +1 -0
  92. package/dist/ai-voice.js +1501 -0
  93. package/dist/alert.cjs +13 -142
  94. package/dist/alert.js +14 -143
  95. package/dist/android.cjs +127 -0
  96. package/dist/android.d.ts +19 -0
  97. package/dist/android.d.ts.map +1 -0
  98. package/dist/android.js +104 -0
  99. package/dist/animated-background.cjs +8830 -0
  100. package/dist/animated-background.d.ts +103 -0
  101. package/dist/animated-background.d.ts.map +1 -0
  102. package/dist/animated-background.js +8824 -0
  103. package/dist/animated-beam.cjs +8438 -0
  104. package/dist/animated-beam.d.ts +15 -0
  105. package/dist/animated-beam.d.ts.map +1 -0
  106. package/dist/animated-beam.js +8417 -0
  107. package/dist/animated-cursor.cjs +269 -0
  108. package/dist/animated-cursor.d.ts +70 -0
  109. package/dist/animated-cursor.d.ts.map +1 -0
  110. package/dist/animated-cursor.js +264 -0
  111. package/dist/animated-icon.cjs +8927 -0
  112. package/dist/animated-icon.d.ts +119 -0
  113. package/dist/animated-icon.d.ts.map +1 -0
  114. package/dist/animated-icon.js +8902 -0
  115. package/dist/animated-list.cjs +9226 -0
  116. package/dist/animated-list.d.ts +126 -0
  117. package/dist/animated-list.d.ts.map +1 -0
  118. package/dist/animated-list.js +9201 -0
  119. package/dist/animated-number.cjs +8773 -0
  120. package/dist/animated-number.d.ts +127 -0
  121. package/dist/animated-number.d.ts.map +1 -0
  122. package/dist/animated-number.js +8767 -0
  123. package/dist/animated-testimonials.cjs +8653 -0
  124. package/dist/animated-testimonials.d.ts +17 -0
  125. package/dist/animated-testimonials.d.ts.map +1 -0
  126. package/dist/animated-testimonials.js +8632 -0
  127. package/dist/animated-text.cjs +8914 -0
  128. package/dist/animated-text.d.ts +65 -0
  129. package/dist/animated-text.d.ts.map +1 -0
  130. package/dist/animated-text.js +8890 -0
  131. package/dist/animated-tooltip.cjs +8624 -0
  132. package/dist/animated-tooltip.d.ts +9 -0
  133. package/dist/animated-tooltip.d.ts.map +1 -0
  134. package/dist/animated-tooltip.js +8603 -0
  135. package/dist/announcement.cjs +465 -0
  136. package/dist/announcement.d.ts +9 -0
  137. package/dist/announcement.d.ts.map +1 -0
  138. package/dist/announcement.js +443 -0
  139. package/dist/app-switcher-navigation-bar.cjs +470 -0
  140. package/dist/app-switcher-navigation-bar.d.ts +15 -0
  141. package/dist/app-switcher-navigation-bar.d.ts.map +1 -0
  142. package/dist/app-switcher-navigation-bar.js +448 -0
  143. package/dist/apple-cards-carousel.cjs +9356 -0
  144. package/dist/apple-cards-carousel.d.ts +36 -0
  145. package/dist/apple-cards-carousel.d.ts.map +1 -0
  146. package/dist/apple-cards-carousel.js +9334 -0
  147. package/dist/apple-hello-effect.cjs +8380 -0
  148. package/dist/apple-hello-effect.d.ts +8 -0
  149. package/dist/apple-hello-effect.d.ts.map +1 -0
  150. package/dist/apple-hello-effect.js +8359 -0
  151. package/dist/auth.cjs +6 -5
  152. package/dist/auth.d.ts.map +1 -1
  153. package/dist/auth.js +6 -5
  154. package/dist/badge.cjs +28 -164
  155. package/dist/badge.d.ts +2 -5
  156. package/dist/badge.d.ts.map +1 -1
  157. package/dist/badge.js +29 -165
  158. package/dist/bank.d.ts +6 -6
  159. package/dist/banner.cjs +78 -0
  160. package/dist/banner.d.ts +20 -0
  161. package/dist/banner.d.ts.map +1 -0
  162. package/dist/banner.js +55 -0
  163. package/dist/breadcrumb-and-filters-navigation-bar.cjs +51 -0
  164. package/dist/breadcrumb-and-filters-navigation-bar.d.ts +10 -0
  165. package/dist/breadcrumb-and-filters-navigation-bar.d.ts.map +1 -0
  166. package/dist/breadcrumb-and-filters-navigation-bar.js +29 -0
  167. package/dist/breadcrumb-navigation-bar.cjs +37 -0
  168. package/dist/breadcrumb-navigation-bar.d.ts +10 -0
  169. package/dist/breadcrumb-navigation-bar.d.ts.map +1 -0
  170. package/dist/breadcrumb-navigation-bar.js +15 -0
  171. package/dist/button.cjs +21 -150
  172. package/dist/button.d.ts +1 -1
  173. package/dist/button.d.ts.map +1 -1
  174. package/dist/button.js +21 -150
  175. package/dist/calendar.cjs +55 -0
  176. package/dist/calendar.d.ts +9 -0
  177. package/dist/calendar.d.ts.map +1 -0
  178. package/dist/calendar.js +53 -0
  179. package/dist/centered-logo-navigation-bar.cjs +37 -0
  180. package/dist/centered-logo-navigation-bar.d.ts +15 -0
  181. package/dist/centered-logo-navigation-bar.d.ts.map +1 -0
  182. package/dist/centered-logo-navigation-bar.js +15 -0
  183. package/dist/chart.cjs +266 -0
  184. package/dist/chart.d.ts +52 -0
  185. package/dist/chart.d.ts.map +1 -0
  186. package/dist/chart.js +238 -0
  187. package/dist/choicebox.cjs +77 -0
  188. package/dist/choicebox.d.ts +15 -0
  189. package/dist/choicebox.d.ts.map +1 -0
  190. package/dist/choicebox.js +55 -0
  191. package/dist/chrome.cjs +36 -30
  192. package/dist/chrome.d.ts.map +1 -1
  193. package/dist/chrome.js +37 -31
  194. package/dist/code-block.cjs +871 -0
  195. package/dist/code-block.d.ts +38 -0
  196. package/dist/code-block.d.ts.map +1 -0
  197. package/dist/code-block.js +849 -0
  198. package/dist/code-compare.cjs +1714 -0
  199. package/dist/code-compare.d.ts +46 -0
  200. package/dist/code-compare.d.ts.map +1 -0
  201. package/dist/code-compare.js +1692 -0
  202. package/dist/code-diff.cjs +1073 -0
  203. package/dist/code-diff.d.ts +42 -0
  204. package/dist/code-diff.d.ts.map +1 -0
  205. package/dist/code-diff.js +1051 -0
  206. package/dist/code-editor.cjs +641 -0
  207. package/dist/code-editor.d.ts +23 -0
  208. package/dist/code-editor.d.ts.map +1 -0
  209. package/dist/code-editor.js +616 -0
  210. package/dist/code-explorer.cjs +729 -0
  211. package/dist/code-explorer.d.ts +41 -0
  212. package/dist/code-explorer.d.ts.map +1 -0
  213. package/dist/code-explorer.js +707 -0
  214. package/dist/code-preview.cjs +1349 -0
  215. package/dist/code-preview.d.ts +38 -0
  216. package/dist/code-preview.d.ts.map +1 -0
  217. package/dist/code-preview.js +1327 -0
  218. package/dist/code-snippet.cjs +920 -0
  219. package/dist/code-snippet.d.ts +48 -0
  220. package/dist/code-snippet.d.ts.map +1 -0
  221. package/dist/code-snippet.js +897 -0
  222. package/dist/code-tabs.cjs +76 -0
  223. package/dist/code-tabs.d.ts +12 -0
  224. package/dist/code-tabs.d.ts.map +1 -0
  225. package/dist/code-tabs.js +54 -0
  226. package/dist/code-terminal.cjs +894 -0
  227. package/dist/code-terminal.d.ts +48 -0
  228. package/dist/code-terminal.d.ts.map +1 -0
  229. package/dist/code-terminal.js +872 -0
  230. package/dist/collaboration-navigation-bar.cjs +49 -0
  231. package/dist/collaboration-navigation-bar.d.ts +11 -0
  232. package/dist/collaboration-navigation-bar.d.ts.map +1 -0
  233. package/dist/collaboration-navigation-bar.js +27 -0
  234. package/dist/collapsible.cjs +34 -155
  235. package/dist/collapsible.d.ts.map +1 -1
  236. package/dist/collapsible.js +34 -155
  237. package/dist/color-picker.cjs +516 -0
  238. package/dist/color-picker.d.ts +10 -0
  239. package/dist/color-picker.d.ts.map +1 -0
  240. package/dist/color-picker.js +495 -0
  241. package/dist/combobox.cjs +488 -0
  242. package/dist/combobox.d.ts +13 -0
  243. package/dist/combobox.d.ts.map +1 -0
  244. package/dist/combobox.js +466 -0
  245. package/dist/communication-navigation-bar.cjs +438 -0
  246. package/dist/communication-navigation-bar.d.ts +7 -0
  247. package/dist/communication-navigation-bar.d.ts.map +1 -0
  248. package/dist/communication-navigation-bar.js +416 -0
  249. package/dist/company-profile.cjs +46 -0
  250. package/dist/company-profile.d.ts +10 -0
  251. package/dist/company-profile.d.ts.map +1 -0
  252. package/dist/company-profile.js +44 -0
  253. package/dist/comparison.cjs +60 -0
  254. package/dist/comparison.d.ts +16 -0
  255. package/dist/comparison.d.ts.map +1 -0
  256. package/dist/comparison.js +38 -0
  257. package/dist/context-switcher-navigation-bar.cjs +51 -0
  258. package/dist/context-switcher-navigation-bar.d.ts +10 -0
  259. package/dist/context-switcher-navigation-bar.d.ts.map +1 -0
  260. package/dist/context-switcher-navigation-bar.js +29 -0
  261. package/dist/credit-card.cjs +77 -0
  262. package/dist/credit-card.d.ts +11 -0
  263. package/dist/credit-card.d.ts.map +1 -0
  264. package/dist/credit-card.js +55 -0
  265. package/dist/crypto-screener.cjs +43 -0
  266. package/dist/crypto-screener.d.ts +4 -0
  267. package/dist/crypto-screener.d.ts.map +1 -0
  268. package/dist/crypto-screener.js +41 -0
  269. package/dist/cursor.cjs +71 -0
  270. package/dist/cursor.d.ts +9 -0
  271. package/dist/cursor.d.ts.map +1 -0
  272. package/dist/cursor.js +49 -0
  273. package/dist/dashboard-navigation-bar.cjs +441 -0
  274. package/dist/dashboard-navigation-bar.d.ts +11 -0
  275. package/dist/dashboard-navigation-bar.d.ts.map +1 -0
  276. package/dist/dashboard-navigation-bar.js +419 -0
  277. package/dist/dialog-stack.cjs +460 -0
  278. package/dist/dialog-stack.d.ts +13 -0
  279. package/dist/dialog-stack.d.ts.map +1 -0
  280. package/dist/dialog-stack.js +438 -0
  281. package/dist/dialog.cjs +12 -11
  282. package/dist/dialog.d.ts +1 -1
  283. package/dist/dialog.d.ts.map +1 -1
  284. package/dist/dialog.js +12 -11
  285. package/dist/direction.cjs +26 -0
  286. package/dist/direction.d.ts +20 -0
  287. package/dist/direction.d.ts.map +1 -0
  288. package/dist/direction.js +23 -0
  289. package/dist/dock.cjs +8675 -0
  290. package/dist/dock.d.ts +20 -0
  291. package/dist/dock.d.ts.map +1 -0
  292. package/dist/dock.js +8653 -0
  293. package/dist/dropzone.cjs +116 -0
  294. package/dist/dropzone.d.ts +11 -0
  295. package/dist/dropzone.d.ts.map +1 -0
  296. package/dist/dropzone.js +94 -0
  297. package/dist/e-commerce-navigation-bar.cjs +442 -0
  298. package/dist/e-commerce-navigation-bar.d.ts +12 -0
  299. package/dist/e-commerce-navigation-bar.d.ts.map +1 -0
  300. package/dist/e-commerce-navigation-bar.js +420 -0
  301. package/dist/editor.cjs +497 -0
  302. package/dist/editor.d.ts +9 -0
  303. package/dist/editor.d.ts.map +1 -0
  304. package/dist/editor.js +475 -0
  305. package/dist/empty.cjs +117 -0
  306. package/dist/empty.d.ts +18 -0
  307. package/dist/empty.d.ts.map +1 -0
  308. package/dist/empty.js +110 -0
  309. package/dist/engine.cjs +91 -0
  310. package/dist/engine.js +86 -0
  311. package/dist/field.cjs +2 -1
  312. package/dist/field.d.ts.map +1 -1
  313. package/dist/field.js +3 -2
  314. package/dist/financials.cjs +66 -0
  315. package/dist/financials.d.ts +12 -0
  316. package/dist/financials.d.ts.map +1 -0
  317. package/dist/financials.js +64 -0
  318. package/dist/forex-screener.cjs +44 -0
  319. package/dist/forex-screener.d.ts +4 -0
  320. package/dist/forex-screener.d.ts.map +1 -0
  321. package/dist/forex-screener.js +42 -0
  322. package/dist/gantt.cjs +65 -0
  323. package/dist/gantt.d.ts +13 -0
  324. package/dist/gantt.d.ts.map +1 -0
  325. package/dist/gantt.js +43 -0
  326. package/dist/grid-pattern.cjs +327 -0
  327. package/dist/grid-pattern.d.ts +111 -0
  328. package/dist/grid-pattern.d.ts.map +1 -0
  329. package/dist/grid-pattern.js +304 -0
  330. package/dist/hooks/use-mobile.d.ts +3 -0
  331. package/dist/hooks/use-mobile.d.ts.map +1 -0
  332. package/dist/icon-button.cjs +13 -142
  333. package/dist/icon-button.js +14 -143
  334. package/dist/icon-navigation-bar.cjs +48 -0
  335. package/dist/icon-navigation-bar.d.ts +11 -0
  336. package/dist/icon-navigation-bar.d.ts.map +1 -0
  337. package/dist/icon-navigation-bar.js +26 -0
  338. package/dist/image-crop.cjs +482 -0
  339. package/dist/image-crop.d.ts +9 -0
  340. package/dist/image-crop.d.ts.map +1 -0
  341. package/dist/image-crop.js +460 -0
  342. package/dist/image-zoom.cjs +77 -0
  343. package/dist/image-zoom.d.ts +7 -0
  344. package/dist/image-zoom.d.ts.map +1 -0
  345. package/dist/image-zoom.js +55 -0
  346. package/dist/image.cjs +15 -143
  347. package/dist/image.d.ts.map +1 -1
  348. package/dist/image.js +16 -144
  349. package/dist/index.cjs +30274 -1201
  350. package/dist/index.d.ts +121 -0
  351. package/dist/index.d.ts.map +1 -1
  352. package/dist/index.js +30006 -1220
  353. package/dist/ink.cjs +17 -0
  354. package/dist/ink.js +15 -0
  355. package/dist/input-otp.cjs +72 -0
  356. package/dist/input-otp.d.ts +35 -0
  357. package/dist/input-otp.d.ts.map +1 -0
  358. package/dist/input-otp.js +47 -0
  359. package/dist/iphone-15-pro.cjs +61 -0
  360. package/dist/iphone-15-pro.d.ts +9 -0
  361. package/dist/iphone-15-pro.d.ts.map +1 -0
  362. package/dist/iphone-15-pro.js +39 -0
  363. package/dist/item.cjs +215 -0
  364. package/dist/item.d.ts +41 -0
  365. package/dist/item.d.ts.map +1 -0
  366. package/dist/item.js +200 -0
  367. package/dist/kanban.cjs +1354 -0
  368. package/dist/kanban.d.ts +36 -0
  369. package/dist/kanban.d.ts.map +1 -0
  370. package/dist/kanban.js +1330 -0
  371. package/dist/kbd.cjs +40 -0
  372. package/dist/kbd.d.ts +4 -0
  373. package/dist/kbd.d.ts.map +1 -0
  374. package/dist/kbd.js +37 -0
  375. package/dist/limelight-nav-navigation-bar.cjs +51 -0
  376. package/dist/limelight-nav-navigation-bar.d.ts +10 -0
  377. package/dist/limelight-nav-navigation-bar.d.ts.map +1 -0
  378. package/dist/limelight-nav-navigation-bar.js +29 -0
  379. package/dist/limelight-nav.cjs +570 -0
  380. package/dist/limelight-nav.d.ts +10 -0
  381. package/dist/limelight-nav.d.ts.map +1 -0
  382. package/dist/limelight-nav.js +549 -0
  383. package/dist/link.cjs +29 -152
  384. package/dist/link.js +30 -153
  385. package/dist/list.cjs +35 -0
  386. package/dist/list.d.ts +5 -0
  387. package/dist/list.d.ts.map +1 -0
  388. package/dist/list.js +12 -0
  389. package/dist/magnetic.cjs +63 -0
  390. package/dist/magnetic.d.ts +8 -0
  391. package/dist/magnetic.d.ts.map +1 -0
  392. package/dist/magnetic.js +41 -0
  393. package/dist/market-overview.cjs +102 -0
  394. package/dist/market-overview.d.ts +4 -0
  395. package/dist/market-overview.d.ts.map +1 -0
  396. package/dist/market-overview.js +100 -0
  397. package/dist/marquee.cjs +67 -0
  398. package/dist/marquee.d.ts +10 -0
  399. package/dist/marquee.d.ts.map +1 -0
  400. package/dist/marquee.js +45 -0
  401. package/dist/menu-dock.cjs +64 -0
  402. package/dist/menu-dock.d.ts +14 -0
  403. package/dist/menu-dock.d.ts.map +1 -0
  404. package/dist/menu-dock.js +42 -0
  405. package/dist/menubar.cjs +116 -0
  406. package/dist/menubar.d.ts +30 -0
  407. package/dist/menubar.d.ts.map +1 -0
  408. package/dist/menubar.js +61 -0
  409. package/dist/message-dock.cjs +480 -0
  410. package/dist/message-dock.d.ts +15 -0
  411. package/dist/message-dock.d.ts.map +1 -0
  412. package/dist/message-dock.js +458 -0
  413. package/dist/mini-calendar.cjs +505 -0
  414. package/dist/mini-calendar.d.ts +10 -0
  415. package/dist/mini-calendar.d.ts.map +1 -0
  416. package/dist/mini-calendar.js +483 -0
  417. package/dist/minimal-tiptap.cjs +48 -0
  418. package/dist/minimal-tiptap.d.ts +8 -0
  419. package/dist/minimal-tiptap.d.ts.map +1 -0
  420. package/dist/minimal-tiptap.js +26 -0
  421. package/dist/motion-highlight.cjs +71 -0
  422. package/dist/motion-highlight.d.ts +7 -0
  423. package/dist/motion-highlight.d.ts.map +1 -0
  424. package/dist/motion-highlight.js +49 -0
  425. package/dist/music-player.cjs +810 -0
  426. package/dist/music-player.d.ts +18 -0
  427. package/dist/music-player.d.ts.map +1 -0
  428. package/dist/music-player.js +788 -0
  429. package/dist/native-select.cjs +82 -0
  430. package/dist/native-select.d.ts +9 -0
  431. package/dist/native-select.d.ts.map +1 -0
  432. package/dist/native-select.js +58 -0
  433. package/dist/news-timeline.cjs +42 -0
  434. package/dist/news-timeline.d.ts +4 -0
  435. package/dist/news-timeline.d.ts.map +1 -0
  436. package/dist/news-timeline.js +40 -0
  437. package/dist/order-entry.cjs +141 -0
  438. package/dist/order-entry.d.ts +15 -0
  439. package/dist/order-entry.d.ts.map +1 -0
  440. package/dist/order-entry.js +136 -0
  441. package/dist/orders-history.cjs +83 -0
  442. package/dist/orders-history.d.ts +18 -0
  443. package/dist/orders-history.d.ts.map +1 -0
  444. package/dist/orders-history.js +78 -0
  445. package/dist/pagination.cjs +132 -0
  446. package/dist/pagination.d.ts +29 -0
  447. package/dist/pagination.d.ts.map +1 -0
  448. package/dist/pagination.js +104 -0
  449. package/dist/particles-background.cjs +159 -0
  450. package/dist/particles-background.d.ts +18 -0
  451. package/dist/particles-background.d.ts.map +1 -0
  452. package/dist/particles-background.js +157 -0
  453. package/dist/pill.cjs +80 -0
  454. package/dist/pill.d.ts +21 -0
  455. package/dist/pill.d.ts.map +1 -0
  456. package/dist/pill.js +57 -0
  457. package/dist/pixel-image.cjs +71 -0
  458. package/dist/pixel-image.d.ts +8 -0
  459. package/dist/pixel-image.d.ts.map +1 -0
  460. package/dist/pixel-image.js +49 -0
  461. package/dist/popover.cjs +11 -9
  462. package/dist/popover.d.ts.map +1 -1
  463. package/dist/popover.js +11 -9
  464. package/dist/positions-list.cjs +98 -0
  465. package/dist/positions-list.d.ts +13 -0
  466. package/dist/positions-list.d.ts.map +1 -0
  467. package/dist/positions-list.js +93 -0
  468. package/dist/progress-circle.cjs +2 -1
  469. package/dist/progress-circle.d.ts.map +1 -1
  470. package/dist/progress-circle.js +2 -1
  471. package/dist/pulse-animation.cjs +8741 -0
  472. package/dist/pulse-animation.d.ts +155 -0
  473. package/dist/pulse-animation.d.ts.map +1 -0
  474. package/dist/pulse-animation.js +8732 -0
  475. package/dist/qr-code.cjs +65 -0
  476. package/dist/qr-code.d.ts +21 -0
  477. package/dist/qr-code.d.ts.map +1 -0
  478. package/dist/qr-code.js +43 -0
  479. package/dist/relative-time.cjs +88 -0
  480. package/dist/relative-time.d.ts +9 -0
  481. package/dist/relative-time.d.ts.map +1 -0
  482. package/dist/relative-time.js +66 -0
  483. package/dist/resizable.cjs +61 -0
  484. package/dist/resizable.d.ts +24 -0
  485. package/dist/resizable.d.ts.map +1 -0
  486. package/dist/resizable.js +37 -0
  487. package/dist/reveal-animation.cjs +8791 -0
  488. package/dist/reveal-animation.d.ts +134 -0
  489. package/dist/reveal-animation.d.ts.map +1 -0
  490. package/dist/reveal-animation.js +8779 -0
  491. package/dist/safari.cjs +90 -0
  492. package/dist/safari.d.ts +9 -0
  493. package/dist/safari.d.ts.map +1 -0
  494. package/dist/safari.js +68 -0
  495. package/dist/sandbox.cjs +94 -0
  496. package/dist/sandbox.d.ts +9 -0
  497. package/dist/sandbox.d.ts.map +1 -0
  498. package/dist/sandbox.js +72 -0
  499. package/dist/search-and-toggle-navigation-bar.cjs +51 -0
  500. package/dist/search-and-toggle-navigation-bar.d.ts +10 -0
  501. package/dist/search-and-toggle-navigation-bar.d.ts.map +1 -0
  502. package/dist/search-and-toggle-navigation-bar.js +29 -0
  503. package/dist/select.cjs +34 -160
  504. package/dist/select.d.ts.map +1 -1
  505. package/dist/select.js +34 -160
  506. package/dist/sidebar.cjs +1134 -0
  507. package/dist/sidebar.d.ts +80 -0
  508. package/dist/sidebar.d.ts.map +1 -0
  509. package/dist/sidebar.js +1090 -0
  510. package/dist/simple-navigation-bar.cjs +45 -0
  511. package/dist/simple-navigation-bar.d.ts +11 -0
  512. package/dist/simple-navigation-bar.d.ts.map +1 -0
  513. package/dist/simple-navigation-bar.js +23 -0
  514. package/dist/skeleton.cjs +14 -143
  515. package/dist/skeleton.d.ts +2 -41
  516. package/dist/skeleton.d.ts.map +1 -1
  517. package/dist/skeleton.js +15 -144
  518. package/dist/slider.d.ts +1 -0
  519. package/dist/slider.d.ts.map +1 -1
  520. package/dist/status-dashboard-navigation-bar.cjs +51 -0
  521. package/dist/status-dashboard-navigation-bar.d.ts +10 -0
  522. package/dist/status-dashboard-navigation-bar.d.ts.map +1 -0
  523. package/dist/status-dashboard-navigation-bar.js +29 -0
  524. package/dist/status.cjs +85 -0
  525. package/dist/status.d.ts +23 -0
  526. package/dist/status.d.ts.map +1 -0
  527. package/dist/status.js +62 -0
  528. package/dist/stock-screener.cjs +44 -0
  529. package/dist/stock-screener.d.ts +4 -0
  530. package/dist/stock-screener.d.ts.map +1 -0
  531. package/dist/stock-screener.js +42 -0
  532. package/dist/switch.cjs +1 -1
  533. package/dist/switch.d.ts +1 -3
  534. package/dist/switch.d.ts.map +1 -1
  535. package/dist/switch.js +1 -1
  536. package/dist/symbol-info.cjs +44 -0
  537. package/dist/symbol-info.d.ts +9 -0
  538. package/dist/symbol-info.d.ts.map +1 -0
  539. package/dist/symbol-info.js +42 -0
  540. package/dist/table.cjs +53 -167
  541. package/dist/table.d.ts.map +1 -1
  542. package/dist/table.js +53 -167
  543. package/dist/tag.cjs +13 -142
  544. package/dist/tag.js +14 -143
  545. package/dist/tags.cjs +385 -0
  546. package/dist/tags.d.ts +13 -0
  547. package/dist/tags.d.ts.map +1 -0
  548. package/dist/tags.js +364 -0
  549. package/dist/team-switcher-navigation-bar.cjs +51 -0
  550. package/dist/team-switcher-navigation-bar.d.ts +10 -0
  551. package/dist/team-switcher-navigation-bar.d.ts.map +1 -0
  552. package/dist/team-switcher-navigation-bar.js +29 -0
  553. package/dist/technical-analysis.cjs +69 -0
  554. package/dist/technical-analysis.d.ts +13 -0
  555. package/dist/technical-analysis.d.ts.map +1 -0
  556. package/dist/technical-analysis.js +67 -0
  557. package/dist/terminal.cjs +372 -0
  558. package/dist/terminal.d.ts +21 -0
  559. package/dist/terminal.d.ts.map +1 -0
  560. package/dist/terminal.js +350 -0
  561. package/dist/ticker-tape.cjs +54 -0
  562. package/dist/ticker-tape.d.ts +4 -0
  563. package/dist/ticker-tape.d.ts.map +1 -0
  564. package/dist/ticker-tape.js +52 -0
  565. package/dist/ticker.cjs +66 -0
  566. package/dist/ticker.d.ts +10 -0
  567. package/dist/ticker.d.ts.map +1 -0
  568. package/dist/ticker.js +44 -0
  569. package/dist/timeline.cjs +317 -0
  570. package/dist/timeline.d.ts +20 -0
  571. package/dist/timeline.d.ts.map +1 -0
  572. package/dist/timeline.js +295 -0
  573. package/dist/toggle.cjs +62 -0
  574. package/dist/toggle.d.ts +26 -0
  575. package/dist/toggle.d.ts.map +1 -0
  576. package/dist/toggle.js +57 -0
  577. package/dist/trading-panel.cjs +212 -0
  578. package/dist/trading-panel.d.ts +7 -0
  579. package/dist/trading-panel.d.ts.map +1 -0
  580. package/dist/trading-panel.js +207 -0
  581. package/dist/two-tier-navigation-bar.cjs +51 -0
  582. package/dist/two-tier-navigation-bar.d.ts +10 -0
  583. package/dist/two-tier-navigation-bar.d.ts.map +1 -0
  584. package/dist/two-tier-navigation-bar.js +29 -0
  585. package/dist/underline-navigation-bar.cjs +51 -0
  586. package/dist/underline-navigation-bar.d.ts +10 -0
  587. package/dist/underline-navigation-bar.d.ts.map +1 -0
  588. package/dist/underline-navigation-bar.js +29 -0
  589. package/dist/youtube-pip-player.cjs +489 -0
  590. package/dist/youtube-pip-player.d.ts +41 -0
  591. package/dist/youtube-pip-player.d.ts.map +1 -0
  592. package/dist/youtube-pip-player.js +466 -0
  593. package/package.json +755 -54
  594. package/src/3d-button.tsx +346 -0
  595. package/src/3d-card.tsx +271 -0
  596. package/src/3d-carousel.tsx +444 -0
  597. package/src/3d-grid.tsx +448 -0
  598. package/src/3d-marquee.tsx +422 -0
  599. package/src/3d-model-viewer.tsx +659 -0
  600. package/src/3d-pin.tsx +37 -0
  601. package/src/3d-scene.tsx +629 -0
  602. package/src/3d-text.tsx +442 -0
  603. package/src/advanced-chart.tsx +63 -0
  604. package/src/advanced-navigation-bar.tsx +83 -0
  605. package/src/ai-actions.tsx +60 -0
  606. package/src/ai-agents.tsx +1174 -0
  607. package/src/ai-assistant.tsx +227 -0
  608. package/src/ai-chat.tsx +554 -0
  609. package/src/ai-code.tsx +1331 -0
  610. package/src/ai-model-selector-navigation-bar.tsx +78 -0
  611. package/src/ai-models.tsx +58 -0
  612. package/src/ai-playground.tsx +429 -0
  613. package/src/ai-tools.tsx +383 -0
  614. package/src/ai-vision.tsx +1220 -0
  615. package/src/ai-voice-settings.tsx +726 -0
  616. package/src/ai-voice.tsx +735 -0
  617. package/src/android.tsx +92 -0
  618. package/src/animated-background.tsx +625 -0
  619. package/src/animated-beam.tsx +110 -0
  620. package/src/animated-cursor.tsx +406 -0
  621. package/src/animated-icon.tsx +520 -0
  622. package/src/animated-list.tsx +508 -0
  623. package/src/animated-number.tsx +485 -0
  624. package/src/animated-testimonials.tsx +119 -0
  625. package/src/animated-text.tsx +481 -0
  626. package/src/animated-tooltip.tsx +54 -0
  627. package/src/announcement.tsx +55 -0
  628. package/src/app-switcher-navigation-bar.tsx +76 -0
  629. package/src/apple-cards-carousel.tsx +349 -0
  630. package/src/apple-hello-effect.tsx +50 -0
  631. package/src/auth.tsx +9 -8
  632. package/src/avatar.tsx +1 -1
  633. package/src/badge.tsx +27 -30
  634. package/src/banner.tsx +62 -0
  635. package/src/breadcrumb-and-filters-navigation-bar.tsx +40 -0
  636. package/src/breadcrumb-navigation-bar.tsx +43 -0
  637. package/src/button.tsx +10 -9
  638. package/src/calendar.tsx +62 -0
  639. package/src/centered-logo-navigation-bar.tsx +43 -0
  640. package/src/chart.tsx +372 -0
  641. package/src/choicebox.tsx +89 -0
  642. package/src/chrome.tsx +41 -40
  643. package/src/code-block.tsx +278 -0
  644. package/src/code-compare.tsx +551 -0
  645. package/src/code-diff.tsx +573 -0
  646. package/src/code-editor.tsx +250 -0
  647. package/src/code-explorer.tsx +403 -0
  648. package/src/code-preview.tsx +488 -0
  649. package/src/code-snippet.tsx +336 -0
  650. package/src/code-tabs.tsx +78 -0
  651. package/src/code-terminal.tsx +530 -0
  652. package/src/collaboration-navigation-bar.tsx +50 -0
  653. package/src/collapsible.tsx +3 -2
  654. package/src/color-picker.tsx +68 -0
  655. package/src/combobox.tsx +87 -0
  656. package/src/communication-navigation-bar.tsx +42 -0
  657. package/src/company-profile.tsx +67 -0
  658. package/src/comparison.tsx +68 -0
  659. package/src/context-switcher-navigation-bar.tsx +39 -0
  660. package/src/credit-card.tsx +72 -0
  661. package/src/crypto-screener.tsx +57 -0
  662. package/src/cursor.tsx +61 -0
  663. package/src/dashboard-navigation-bar.tsx +49 -0
  664. package/src/dialog-stack.tsx +55 -0
  665. package/src/dialog.tsx +16 -15
  666. package/src/direction.tsx +40 -0
  667. package/src/dock.tsx +172 -0
  668. package/src/dropzone.tsx +106 -0
  669. package/src/e-commerce-navigation-bar.tsx +54 -0
  670. package/src/editor.tsx +85 -0
  671. package/src/empty.tsx +117 -0
  672. package/src/field.tsx +2 -1
  673. package/src/financials.tsx +85 -0
  674. package/src/forex-screener.tsx +58 -0
  675. package/src/gantt.tsx +68 -0
  676. package/src/grid-pattern.tsx +353 -0
  677. package/src/hooks/use-mobile.ts +29 -0
  678. package/src/icon-navigation-bar.tsx +36 -0
  679. package/src/image-crop.tsx +67 -0
  680. package/src/image-zoom.tsx +64 -0
  681. package/src/image.tsx +2 -1
  682. package/src/index.ts +123 -0
  683. package/src/input-otp.tsx +72 -0
  684. package/src/iphone-15-pro.tsx +69 -0
  685. package/src/item.tsx +193 -0
  686. package/src/kanban.tsx +772 -0
  687. package/src/kbd.tsx +32 -0
  688. package/src/limelight-nav-navigation-bar.tsx +39 -0
  689. package/src/limelight-nav.tsx +101 -0
  690. package/src/link.tsx +18 -18
  691. package/src/list.tsx +22 -0
  692. package/src/magnetic.tsx +54 -0
  693. package/src/market-overview.tsx +116 -0
  694. package/src/marquee.tsx +62 -0
  695. package/src/menu-dock.tsx +56 -0
  696. package/src/menubar.tsx +149 -0
  697. package/src/message-dock.tsx +89 -0
  698. package/src/mini-calendar.tsx +121 -0
  699. package/src/minimal-tiptap.tsx +32 -0
  700. package/src/motion-highlight.tsx +55 -0
  701. package/src/music-player.tsx +413 -0
  702. package/src/native-select.tsx +63 -0
  703. package/src/news-timeline.tsx +56 -0
  704. package/src/order-entry.tsx +162 -0
  705. package/src/orders-history.tsx +115 -0
  706. package/src/pagination.tsx +118 -0
  707. package/src/particles-background.tsx +225 -0
  708. package/src/pill.tsx +61 -0
  709. package/src/pixel-image.tsx +64 -0
  710. package/src/popover.tsx +10 -9
  711. package/src/positions-list.tsx +108 -0
  712. package/src/progress-circle.tsx +2 -1
  713. package/src/pulse-animation.tsx +606 -0
  714. package/src/qr-code.tsx +64 -0
  715. package/src/relative-time.tsx +84 -0
  716. package/src/resizable.tsx +46 -0
  717. package/src/reveal-animation.tsx +532 -0
  718. package/src/safari.tsx +115 -0
  719. package/src/sandbox.tsx +83 -0
  720. package/src/search-and-toggle-navigation-bar.tsx +39 -0
  721. package/src/select.tsx +31 -30
  722. package/src/sidebar.tsx +723 -0
  723. package/src/simple-navigation-bar.tsx +39 -0
  724. package/src/skeleton.tsx +20 -168
  725. package/src/slider.tsx +1 -0
  726. package/src/status-dashboard-navigation-bar.tsx +39 -0
  727. package/src/status.tsx +63 -0
  728. package/src/stock-screener.tsx +58 -0
  729. package/src/switch.tsx +2 -2
  730. package/src/symbol-info.tsx +64 -0
  731. package/src/table.tsx +26 -25
  732. package/src/tags.tsx +62 -0
  733. package/src/team-switcher-navigation-bar.tsx +39 -0
  734. package/src/technical-analysis.tsx +99 -0
  735. package/src/terminal.tsx +399 -0
  736. package/src/ticker-tape.tsx +68 -0
  737. package/src/ticker.tsx +52 -0
  738. package/src/timeline.tsx +412 -0
  739. package/src/toggle.tsx +84 -0
  740. package/src/trading-panel.tsx +262 -0
  741. package/src/two-tier-navigation-bar.tsx +39 -0
  742. package/src/underline-navigation-bar.tsx +39 -0
  743. package/src/youtube-pip-player.tsx +606 -0
  744. package/tokens.css +11 -0
package/src/dialog.tsx CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Dialog as GuiDialog } from '@hanzo/gui';
2
+ import { Box, css, sx } from '@hanzo/ui'
2
3
  import * as React from 'react';
3
4
 
4
5
  import { cn } from './utils';
@@ -8,16 +9,16 @@ import { CloseButton } from './close-button';
8
9
  // Inline back button for dialog header
9
10
  function BackToButton({ onClick }: { readonly onClick?: () => void }) {
10
11
  return (
11
- <button
12
+ <Box tag="button"
12
13
  type="button"
13
14
  onClick={ onClick }
14
15
  className="inline-flex items-center justify-center size-8 rounded-md bg-transparent text-current hover:bg-[var(--color-button-subtle-bg)] cursor-pointer"
15
16
  aria-label="Go back"
16
17
  >
17
- <svg className="size-5" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
18
+ <svg style={css('size-5')} viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
18
19
  <path d="M12.5 15L7.5 10L12.5 5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
19
20
  </svg>
20
- </button>
21
+ </Box>
21
22
  );
22
23
  }
23
24
 
@@ -176,11 +177,11 @@ export const DialogContent = React.forwardRef<
176
177
  { backdrop && (
177
178
  <GuiDialog.Overlay
178
179
  unstyled
179
- className="fixed inset-0 z-[1400] bg-black/80"
180
+ {...sx('fixed inset-0 z-[1400] bg-black/80')}
180
181
  />
181
182
  ) }
182
183
  { /* Positioner -- centers the content panel */ }
183
- <div
184
+ <Box
184
185
  className={ cn(
185
186
  'fixed inset-0 z-[1400] flex w-screen h-dvh',
186
187
  'items-start lg:items-center justify-center',
@@ -190,7 +191,7 @@ export const DialogContent = React.forwardRef<
190
191
  <GuiDialog.Content
191
192
  ref={ ref }
192
193
  unstyled
193
- className={ cn(
194
+ {...sx(
194
195
  // Base content styles
195
196
  'relative flex flex-col w-full p-6 outline-none text-base',
196
197
  'bg-dialog-bg text-dialog-fg shadow-lg rounded-xl',
@@ -200,13 +201,13 @@ export const DialogContent = React.forwardRef<
200
201
  // Size variant
201
202
  sizeClasses(size),
202
203
  className,
203
- ) }
204
+ )}
204
205
  style={ Object.keys(contentInlineStyle).length > 0 ? contentInlineStyle : undefined }
205
206
  { ...rest as any }
206
207
  >
207
208
  { children }
208
209
  </GuiDialog.Content>
209
- </div>
210
+ </Box>
210
211
  </GuiDialog.Portal>
211
212
  );
212
213
  });
@@ -251,7 +252,7 @@ export const DialogHeader = React.forwardRef<
251
252
  startElementProp ?? (onBackToClick ? <BackToButton onClick={ onBackToClick }/> : undefined);
252
253
 
253
254
  return (
254
- <div
255
+ <Box
255
256
  ref={ ref }
256
257
  className={ cn(
257
258
  'flex-none p-0 mb-2 flex items-center gap-x-2 min-h-[40px]',
@@ -262,15 +263,15 @@ export const DialogHeader = React.forwardRef<
262
263
  { startElement }
263
264
  <GuiDialog.Title
264
265
  unstyled
265
- className={ cn(
266
+ {...sx(
266
267
  'text-base lg:text-lg font-medium',
267
268
  'whitespace-nowrap overflow-hidden text-ellipsis',
268
- ) }
269
+ )}
269
270
  >
270
271
  { children }
271
272
  </GuiDialog.Title>
272
- <DialogCloseTrigger className="ml-auto"/>
273
- </div>
273
+ <DialogCloseTrigger {...sx('ml-auto')}/>
274
+ </Box>
274
275
  );
275
276
  });
276
277
 
@@ -296,7 +297,7 @@ export const DialogBody = React.forwardRef<
296
297
  ...(flexDir ? { flexDirection: flexDir as React.CSSProperties['flexDirection'] } : {}),
297
298
  };
298
299
  return (
299
- <div
300
+ <Box
300
301
  ref={ ref }
301
302
  className={ cn('flex-1 p-0 overflow-auto', className) }
302
303
  style={ Object.keys(bodyStyle).length > 0 ? bodyStyle : undefined }
@@ -316,7 +317,7 @@ export const DialogFooter = React.forwardRef<
316
317
  DialogFooterProps
317
318
  >(function DialogFooter({ className, ...props }, ref) {
318
319
  return (
319
- <div
320
+ <Box
320
321
  ref={ ref }
321
322
  className={ cn('flex items-center justify-start gap-6 p-0 mt-6', className) }
322
323
  { ...props }
@@ -0,0 +1,40 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * Reading direction, for the components that have to know it.
5
+ *
6
+ * A menu opens toward the end of the line, a slider fills toward it, a carousel
7
+ * advances toward it. None of that can be read off CSS, so it travels as
8
+ * context — and `dir` on an ancestor element is what the DOM already uses, so a
9
+ * provider with nothing above it answers from there rather than guessing.
10
+ */
11
+ import { createContext, useContext, type ReactNode } from 'react'
12
+
13
+ export type Direction = 'ltr' | 'rtl'
14
+
15
+ const DirectionContext = createContext<Direction | undefined>(undefined)
16
+
17
+ export function DirectionProvider({
18
+ dir,
19
+ children,
20
+ }: {
21
+ dir: Direction
22
+ children?: ReactNode
23
+ }) {
24
+ return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>
25
+ }
26
+
27
+ /**
28
+ * The direction in force. Falls back to the document's own `dir`, so a page that
29
+ * sets it on `<html>` — which is where it belongs — needs no provider at all.
30
+ */
31
+ export function useDirection(local?: Direction): Direction {
32
+ const inherited = useContext(DirectionContext)
33
+ if (local) return local
34
+ if (inherited) return inherited
35
+ if (typeof document !== 'undefined') {
36
+ const d = document.documentElement.dir
37
+ if (d === 'rtl' || d === 'ltr') return d
38
+ }
39
+ return 'ltr'
40
+ }
package/src/dock.tsx ADDED
@@ -0,0 +1,172 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Box } from '@hanzo/ui'
5
+ import { motion, useMotionValue, useSpring, useTransform } from "motion/react"
6
+
7
+ import { cn } from "./utils"
8
+
9
+ interface DockProps {
10
+ className?: string
11
+ children?: React.ReactNode
12
+ position?: "bottom" | "left" | "right"
13
+ magnification?: number
14
+ distance?: number
15
+ }
16
+
17
+ interface DockItemProps {
18
+ className?: string
19
+ children?: React.ReactNode
20
+ onClick?: () => void
21
+ tooltip?: string
22
+ magnification?: number
23
+ distance?: number
24
+ }
25
+
26
+ const DockContext = React.createContext<{
27
+ magnification: number
28
+ distance: number
29
+ }>({
30
+ magnification: 60,
31
+ distance: 140,
32
+ })
33
+
34
+ const Dock = React.forwardRef<HTMLDivElement, DockProps>(
35
+ (
36
+ {
37
+ className,
38
+ children,
39
+ position = "bottom",
40
+ magnification = 60,
41
+ distance = 140,
42
+ },
43
+ ref
44
+ ) => {
45
+ const positionClasses = {
46
+ bottom: "bottom-0 left-1/2 -translate-x-1/2 flex-row",
47
+ left: "left-0 top-1/2 -translate-y-1/2 flex-col",
48
+ right: "right-0 top-1/2 -translate-y-1/2 flex-col",
49
+ }
50
+
51
+ return (
52
+ <DockContext.Provider value={{ magnification, distance }}>
53
+ <Box
54
+ ref={ref as never}
55
+ className={cn(
56
+ "fixed z-50 flex items-end gap-1 rounded-2xl border border-white/10 bg-black/10 p-2 backdrop-blur-xl",
57
+ "shadow-2xl shadow-black/20",
58
+ "before:absolute before:inset-0 before:rounded-2xl before:bg-gradient-to-b before:from-white/10 before:to-transparent before:opacity-50",
59
+ positionClasses[position],
60
+ className
61
+ )}
62
+ >
63
+ {children}
64
+ </Box>
65
+ </DockContext.Provider>
66
+ )
67
+ }
68
+ )
69
+ Dock.displayName = "Dock"
70
+
71
+ const DockItem = React.forwardRef<HTMLButtonElement, DockItemProps>(
72
+ (
73
+ {
74
+ className,
75
+ children,
76
+ onClick,
77
+ tooltip,
78
+ magnification: itemMagnification,
79
+ distance: itemDistance,
80
+ },
81
+ ref
82
+ ) => {
83
+ const buttonRef = React.useRef<HTMLButtonElement>(null)
84
+ const { magnification: contextMagnification, distance: contextDistance } =
85
+ React.useContext(DockContext)
86
+ const magnification = itemMagnification ?? contextMagnification
87
+ const distance = itemDistance ?? contextDistance
88
+
89
+ const [isHovered, setIsHovered] = React.useState(false)
90
+
91
+ const mouseX = useMotionValue(Infinity)
92
+
93
+ const springConfig = { mass: 0.1, stiffness: 150, damping: 12 }
94
+ const size = useSpring(
95
+ useTransform(
96
+ mouseX,
97
+ [-distance, 0, distance],
98
+ [48, 48 + magnification, 48]
99
+ ),
100
+ springConfig
101
+ )
102
+
103
+ const handleMouseMove = (e: React.MouseEvent) => {
104
+ if (!buttonRef.current) return
105
+ const rect = buttonRef.current.getBoundingClientRect()
106
+ const centerX = rect.left + rect.width / 2
107
+ mouseX.set(e.clientX - centerX)
108
+ }
109
+
110
+ const handleMouseLeave = () => {
111
+ mouseX.set(Infinity)
112
+ setIsHovered(false)
113
+ }
114
+
115
+ return (
116
+ <motion.div
117
+ className="relative"
118
+ onMouseMove={handleMouseMove}
119
+ onMouseLeave={handleMouseLeave}
120
+ onMouseEnter={() => setIsHovered(true)}
121
+ >
122
+ {tooltip && isHovered && (
123
+ <motion.div
124
+ initial={{ opacity: 0, y: 10, scale: 0.9 }}
125
+ animate={{ opacity: 1, y: 0, scale: 1 }}
126
+ exit={{ opacity: 0, y: 5, scale: 0.95 }}
127
+ transition={{ duration: 0.15 }}
128
+ className="absolute bottom-full left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap rounded-lg bg-black/80 px-2 py-1 text-xs text-white backdrop-blur-md"
129
+ >
130
+ {tooltip}
131
+ <Box className="absolute -bottom-1 left-1/2 h-2 w-2 -translate-x-1/2 rotate-45 bg-black/80" />
132
+ </motion.div>
133
+ )}
134
+ <motion.button
135
+ ref={buttonRef as never}
136
+ style={{
137
+ width: size,
138
+ height: size,
139
+ }}
140
+ whileTap={{ scale: 0.9 }}
141
+ onClick={onClick}
142
+ className={cn(
143
+ "relative flex items-center justify-center rounded-xl bg-white/10 backdrop-blur-md transition-colors",
144
+ "hover:bg-white/20",
145
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-white/50",
146
+ className
147
+ )}
148
+ >
149
+ <motion.div
150
+ style={{
151
+ width: size,
152
+ height: size,
153
+ }}
154
+ className="flex items-center justify-center"
155
+ >
156
+ {children}
157
+ </motion.div>
158
+ <motion.div
159
+ className="absolute inset-0 rounded-xl"
160
+ style={{
161
+ background:
162
+ "linear-gradient(135deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%)",
163
+ }}
164
+ />
165
+ </motion.button>
166
+ </motion.div>
167
+ )
168
+ }
169
+ )
170
+ DockItem.displayName = "DockItem"
171
+
172
+ export { Dock, DockItem }
@@ -0,0 +1,106 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Box, css } from '@hanzo/ui'
5
+ import { File, Upload, X } from "lucide-react"
6
+ import { useDropzone } from "react-dropzone"
7
+
8
+ import { cn } from "./utils"
9
+
10
+ interface DropzoneProps extends React.HTMLAttributes<HTMLDivElement> {
11
+ onFilesAccepted?: (files: File[]) => void
12
+ maxFiles?: number
13
+ maxSize?: number
14
+ accept?: Record<string, string[]>
15
+ disabled?: boolean
16
+ }
17
+
18
+ const Dropzone = React.forwardRef<HTMLDivElement, DropzoneProps>(
19
+ (
20
+ {
21
+ className,
22
+ onFilesAccepted,
23
+ maxFiles = 5,
24
+ maxSize = 5242880, // 5MB
25
+ accept = {
26
+ "image/*": [".png", ".jpg", ".jpeg", ".gif", ".webp"],
27
+ "application/pdf": [".pdf"],
28
+ },
29
+ disabled = false,
30
+ ...props
31
+ },
32
+ ref
33
+ ) => {
34
+ const [files, setFiles] = React.useState<File[]>([])
35
+
36
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
37
+ onDrop: (acceptedFiles) => {
38
+ setFiles((prev) => [...prev, ...acceptedFiles].slice(0, maxFiles))
39
+ onFilesAccepted?.(acceptedFiles)
40
+ },
41
+ maxFiles,
42
+ maxSize,
43
+ accept,
44
+ disabled,
45
+ })
46
+
47
+ const removeFile = (index: number) => {
48
+ setFiles((prev) => prev.filter((_, i) => i !== index))
49
+ }
50
+
51
+ return (
52
+ <Box ref={ref} className={cn("w-full", className)} {...props}>
53
+ <Box
54
+ {...getRootProps()}
55
+ className={cn(
56
+ "cursor-pointer rounded-lg border-2 border-dashed p-8 transition-colors",
57
+ isDragActive
58
+ ? "border-primary bg-primary/5"
59
+ : "border-muted-foreground/25 hover:border-muted-foreground/50",
60
+ disabled && "cursor-not-allowed opacity-50"
61
+ )}
62
+ >
63
+ <input {...getInputProps()} />
64
+ <Box className="flex flex-col items-center justify-center gap-2 text-center">
65
+ <Upload style={css('h-8 w-8 text-muted-foreground')} />
66
+ <div>
67
+ <Box tag="p" className="text-sm font-medium">
68
+ {isDragActive ? "Drop files here" : "Drag & drop files here"}
69
+ </Box>
70
+ <Box tag="p" className="text-xs text-muted-foreground">
71
+ or click to browse (max {maxFiles} files,{" "}
72
+ {Math.round(maxSize / 1024 / 1024)}MB each)
73
+ </Box>
74
+ </div>
75
+ </Box>
76
+ </Box>
77
+
78
+ {files.length > 0 && (
79
+ <Box className="mt-4 space-y-2">
80
+ {files.map((file, index) => (
81
+ <Box
82
+ key={index}
83
+ className="flex items-center gap-2 rounded-lg border p-2"
84
+ >
85
+ <File style={css('h-4 w-4 text-muted-foreground')} />
86
+ <Box tag="span" className="flex-1 truncate text-sm">{file.name}</Box>
87
+ <Box tag="span" className="text-xs text-muted-foreground">
88
+ {(file.size / 1024).toFixed(1)} KB
89
+ </Box>
90
+ <Box tag="button"
91
+ onClick={() => removeFile(index)}
92
+ className="rounded p-1 hover:bg-muted"
93
+ >
94
+ <X style={css('h-4 w-4')} />
95
+ </Box>
96
+ </Box>
97
+ ))}
98
+ </Box>
99
+ )}
100
+ </Box>
101
+ )
102
+ }
103
+ )
104
+ Dropzone.displayName = "Dropzone"
105
+
106
+ export { Dropzone }
@@ -0,0 +1,54 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Box, css, sx } from '@hanzo/ui'
5
+ import { Search, ShoppingCart, User } from "lucide-react"
6
+
7
+ import { cn } from "./utils"
8
+ import { Button } from "./button"
9
+
10
+ export interface ECommerceNavigationBarProps
11
+ extends React.HTMLAttributes<HTMLElement> {
12
+ logo?: React.ReactNode
13
+ categories?: Array<{ label: string; href: string }>
14
+ cartCount?: number
15
+ }
16
+
17
+ const ECommerceNavigationBar = React.forwardRef<
18
+ HTMLElement,
19
+ ECommerceNavigationBarProps
20
+ >(({ className, logo, categories = [], cartCount = 0, ...props }, ref) => {
21
+ return (
22
+ <Box tag="nav" ref={ref} className={cn("border-b", className)} {...props}>
23
+ <Box className="container flex h-16 items-center justify-between">
24
+ {logo && <Box className="font-bold">{logo}</Box>}
25
+ <Box className="flex gap-6">
26
+ {categories.map((cat) => (
27
+ <Box tag="a" key={cat.href} href={cat.href} className="text-sm font-medium">
28
+ {cat.label}
29
+ </Box>
30
+ ))}
31
+ </Box>
32
+ <Box className="flex items-center gap-2">
33
+ <Button variant="ghost" size="icon">
34
+ <Search style={css('h-5 w-5')} />
35
+ </Button>
36
+ <Button variant="ghost" size="icon">
37
+ <User style={css('h-5 w-5')} />
38
+ </Button>
39
+ <Button variant="ghost" size="icon" {...sx('relative')}>
40
+ <ShoppingCart style={css('h-5 w-5')} />
41
+ {cartCount > 0 && (
42
+ <Box tag="span" className="absolute -right-1 -top-1 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-xs text-primary-foreground">
43
+ {cartCount}
44
+ </Box>
45
+ )}
46
+ </Button>
47
+ </Box>
48
+ </Box>
49
+ </Box>
50
+ )
51
+ })
52
+ ECommerceNavigationBar.displayName = "ECommerceNavigationBar"
53
+
54
+ export { ECommerceNavigationBar }
package/src/editor.tsx ADDED
@@ -0,0 +1,85 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Box, css } from '@hanzo/ui'
5
+ import { Bold, Italic, List, ListOrdered } from "lucide-react"
6
+
7
+ import { cn } from "./utils"
8
+ import { Button } from "./button"
9
+
10
+ export interface EditorProps
11
+ extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
12
+ value?: string
13
+ onChange?: (value: string) => void
14
+ placeholder?: string
15
+ }
16
+
17
+ const Editor = React.forwardRef<HTMLDivElement, EditorProps>(
18
+ (
19
+ { className, value, onChange, placeholder = "Start typing...", ...props },
20
+ ref
21
+ ) => {
22
+ const editorRef = React.useRef<HTMLDivElement>(null)
23
+
24
+ const executeCommand = (command: string, value?: string) => {
25
+ document.execCommand(command, false, value)
26
+ editorRef.current?.focus()
27
+ }
28
+
29
+ const handleInput = () => {
30
+ if (editorRef.current) {
31
+ onChange?.(editorRef.current.innerHTML)
32
+ }
33
+ }
34
+
35
+ return (
36
+ <Box ref={ref} className={cn("space-y-2", className)} {...props}>
37
+ <Box className="flex gap-1 border-b pb-2">
38
+ <Button
39
+ variant="ghost"
40
+ size="sm"
41
+ onClick={() => executeCommand("bold")}
42
+ type="button"
43
+ >
44
+ <Bold style={css('h-4 w-4')} />
45
+ </Button>
46
+ <Button
47
+ variant="ghost"
48
+ size="sm"
49
+ onClick={() => executeCommand("italic")}
50
+ type="button"
51
+ >
52
+ <Italic style={css('h-4 w-4')} />
53
+ </Button>
54
+ <Button
55
+ variant="ghost"
56
+ size="sm"
57
+ onClick={() => executeCommand("insertUnorderedList")}
58
+ type="button"
59
+ >
60
+ <List style={css('h-4 w-4')} />
61
+ </Button>
62
+ <Button
63
+ variant="ghost"
64
+ size="sm"
65
+ onClick={() => executeCommand("insertOrderedList")}
66
+ type="button"
67
+ >
68
+ <ListOrdered style={css('h-4 w-4')} />
69
+ </Button>
70
+ </Box>
71
+ <Box
72
+ ref={editorRef}
73
+ contentEditable
74
+ className="min-h-[200px] rounded-lg border p-4 focus:outline-none focus:ring-2 focus:ring-ring"
75
+ onInput={handleInput}
76
+ dangerouslySetInnerHTML={{ __html: value || "" }}
77
+ data-placeholder={placeholder}
78
+ />
79
+ </Box>
80
+ )
81
+ }
82
+ )
83
+ Editor.displayName = "Editor"
84
+
85
+ export { Editor }
package/src/empty.tsx ADDED
@@ -0,0 +1,117 @@
1
+ import { Box, VariantProps, variants } from '@hanzo/ui'
2
+
3
+ import { cn } from "./utils"
4
+
5
+ function Empty({ className, ...props }: React.ComponentPropsWithoutRef<"div">) {
6
+ return (
7
+ <Box
8
+ data-slot="empty"
9
+ className={cn(
10
+ "flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance rounded-lg border-dashed p-6 text-center md:p-12",
11
+ className
12
+ )}
13
+ {...props}
14
+ />
15
+ )
16
+ }
17
+
18
+ function EmptyHeader({
19
+ className,
20
+ ...props
21
+ }: React.ComponentPropsWithoutRef<"div">) {
22
+ return (
23
+ <Box
24
+ data-slot="empty-header"
25
+ className={cn(
26
+ "flex max-w-sm flex-col items-center gap-2 text-center",
27
+ className
28
+ )}
29
+ {...props}
30
+ />
31
+ )
32
+ }
33
+
34
+ const emptyMediaVariants = variants(
35
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
36
+ {
37
+ variants: {
38
+ variant: {
39
+ default: "bg-transparent",
40
+ icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6",
41
+ },
42
+ },
43
+ defaultVariants: {
44
+ variant: "default",
45
+ },
46
+ }
47
+ )
48
+
49
+ function EmptyMedia({
50
+ className,
51
+ variant = "default",
52
+ ...props
53
+ }: React.ComponentPropsWithoutRef<"div"> &
54
+ VariantProps<typeof emptyMediaVariants>) {
55
+ return (
56
+ <Box
57
+ data-slot="empty-icon"
58
+ data-variant={variant}
59
+ className={cn(emptyMediaVariants({ variant, className }))}
60
+ {...props}
61
+ />
62
+ )
63
+ }
64
+
65
+ function EmptyTitle({
66
+ className,
67
+ ...props
68
+ }: React.ComponentPropsWithoutRef<"div">) {
69
+ return (
70
+ <Box
71
+ data-slot="empty-title"
72
+ className={cn("text-lg font-medium tracking-tight", className)}
73
+ {...props}
74
+ />
75
+ )
76
+ }
77
+
78
+ function EmptyDescription({
79
+ className,
80
+ ...props
81
+ }: React.ComponentPropsWithoutRef<"p">) {
82
+ return (
83
+ <Box
84
+ data-slot="empty-description"
85
+ className={cn(
86
+ "text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
87
+ className
88
+ )}
89
+ {...props}
90
+ />
91
+ )
92
+ }
93
+
94
+ function EmptyContent({
95
+ className,
96
+ ...props
97
+ }: React.ComponentPropsWithoutRef<"div">) {
98
+ return (
99
+ <Box
100
+ data-slot="empty-content"
101
+ className={cn(
102
+ "flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm",
103
+ className
104
+ )}
105
+ {...props}
106
+ />
107
+ )
108
+ }
109
+
110
+ export {
111
+ Empty,
112
+ EmptyHeader,
113
+ EmptyTitle,
114
+ EmptyDescription,
115
+ EmptyContent,
116
+ EmptyMedia,
117
+ }
package/src/field.tsx CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Label, Text, YStack } from '@hanzo/gui';
2
+ import { sx } from '@hanzo/ui'
2
3
  import * as React from 'react';
3
4
 
4
5
  import type { InputProps } from './input';
@@ -82,7 +83,7 @@ export const Field = React.forwardRef<HTMLDivElement, FieldProps>(
82
83
  color={ 'var(--color-input-placeholder)' as never }
83
84
  // The float itself stays in CSS: it keys off `:placeholder-shown` and
84
85
  // `:focus` of a SIBLING, which is a selector, not a prop.
85
- className="lux-field-float"
86
+ {...sx('lux-field-float')}
86
87
  >
87
88
  { label }
88
89
  <Marks required={ required } optionalText={ optionalText } errorText={ errorText }/>