magnaui 0.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 (512) hide show
  1. package/LICENSE +38 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/Libraries.dev-MIT.txt +21 -0
  4. package/LICENSES/Tiptap-MIT.txt +21 -0
  5. package/LICENSES/metal-fx-NOTICE.txt +22 -0
  6. package/LICENSES/three-MIT.txt +21 -0
  7. package/README.md +73 -0
  8. package/THIRD_PARTY_NOTICES.md +72 -0
  9. package/dist/assets/agent-studio.png +0 -0
  10. package/dist/assets/api-studio.png +0 -0
  11. package/dist/assets/app-store.png +0 -0
  12. package/dist/assets/approvals.png +0 -0
  13. package/dist/assets/assistant.png +0 -0
  14. package/dist/assets/brain.png +0 -0
  15. package/dist/assets/browser.png +0 -0
  16. package/dist/assets/checkbox/check.svg +3 -0
  17. package/dist/assets/checkbox/indeterminate.svg +3 -0
  18. package/dist/assets/code.png +0 -0
  19. package/dist/assets/connect-ai.png +0 -0
  20. package/dist/assets/connections.png +0 -0
  21. package/dist/assets/database.png +0 -0
  22. package/dist/assets/display/06153.svg +5 -0
  23. package/dist/assets/display/106a6.svg +22 -0
  24. package/dist/assets/display/16525.svg +5 -0
  25. package/dist/assets/display/18a45.svg +5 -0
  26. package/dist/assets/display/1c133.svg +5 -0
  27. package/dist/assets/display/1c6fa.svg +5 -0
  28. package/dist/assets/display/1db47.svg +5 -0
  29. package/dist/assets/display/237a6.svg +5 -0
  30. package/dist/assets/display/27ca8.svg +5 -0
  31. package/dist/assets/display/347ef.svg +22 -0
  32. package/dist/assets/display/35edd.svg +5 -0
  33. package/dist/assets/display/38def.svg +5 -0
  34. package/dist/assets/display/3a834.svg +5 -0
  35. package/dist/assets/display/3e51d.svg +5 -0
  36. package/dist/assets/display/3f95e.svg +5 -0
  37. package/dist/assets/display/400d1.svg +5 -0
  38. package/dist/assets/display/4239a.svg +5 -0
  39. package/dist/assets/display/4477e.svg +22 -0
  40. package/dist/assets/display/46574.svg +5 -0
  41. package/dist/assets/display/469e4.svg +5 -0
  42. package/dist/assets/display/48559.svg +22 -0
  43. package/dist/assets/display/4e103.svg +22 -0
  44. package/dist/assets/display/4ef80.svg +5 -0
  45. package/dist/assets/display/51b32.svg +22 -0
  46. package/dist/assets/display/5320a.svg +5 -0
  47. package/dist/assets/display/56a7a.svg +22 -0
  48. package/dist/assets/display/56cab.svg +5 -0
  49. package/dist/assets/display/5fc70.svg +22 -0
  50. package/dist/assets/display/60ab5.svg +22 -0
  51. package/dist/assets/display/60c44.svg +5 -0
  52. package/dist/assets/display/61721.svg +5 -0
  53. package/dist/assets/display/648b1.svg +5 -0
  54. package/dist/assets/display/65aad.svg +5 -0
  55. package/dist/assets/display/665bc.svg +5 -0
  56. package/dist/assets/display/691ac.svg +22 -0
  57. package/dist/assets/display/6a48e.svg +5 -0
  58. package/dist/assets/display/6af80.svg +22 -0
  59. package/dist/assets/display/6c384.svg +5 -0
  60. package/dist/assets/display/6c7fb.svg +5 -0
  61. package/dist/assets/display/6ce08.svg +22 -0
  62. package/dist/assets/display/76be1.svg +5 -0
  63. package/dist/assets/display/79287.svg +5 -0
  64. package/dist/assets/display/7ea85.svg +5 -0
  65. package/dist/assets/display/7eeaf.svg +5 -0
  66. package/dist/assets/display/82602.svg +5 -0
  67. package/dist/assets/display/8a43e.svg +5 -0
  68. package/dist/assets/display/8bdb8.svg +22 -0
  69. package/dist/assets/display/8d235.svg +5 -0
  70. package/dist/assets/display/90498.svg +22 -0
  71. package/dist/assets/display/908e9.svg +5 -0
  72. package/dist/assets/display/90942.svg +5 -0
  73. package/dist/assets/display/943fb.svg +5 -0
  74. package/dist/assets/display/96ddd.svg +22 -0
  75. package/dist/assets/display/9e5a0.svg +22 -0
  76. package/dist/assets/display/9e9ac.svg +5 -0
  77. package/dist/assets/display/a35a7.svg +22 -0
  78. package/dist/assets/display/af15f.svg +5 -0
  79. package/dist/assets/display/b04fe.svg +5 -0
  80. package/dist/assets/display/b0925.svg +5 -0
  81. package/dist/assets/display/b464b.svg +5 -0
  82. package/dist/assets/display/b8efe.svg +5 -0
  83. package/dist/assets/display/bbddb.svg +5 -0
  84. package/dist/assets/display/bd61c.svg +5 -0
  85. package/dist/assets/display/be577.svg +5 -0
  86. package/dist/assets/display/bf02d.svg +5 -0
  87. package/dist/assets/display/bf1dc.svg +5 -0
  88. package/dist/assets/display/c70b6.svg +5 -0
  89. package/dist/assets/display/c8a01.svg +5 -0
  90. package/dist/assets/display/cb00b.svg +22 -0
  91. package/dist/assets/display/cecfd.svg +5 -0
  92. package/dist/assets/display/d2cc2.svg +5 -0
  93. package/dist/assets/display/d428d.svg +22 -0
  94. package/dist/assets/display/d71e2.svg +22 -0
  95. package/dist/assets/display/d8f1d.svg +22 -0
  96. package/dist/assets/display/d92e5.svg +5 -0
  97. package/dist/assets/display/d9698.svg +5 -0
  98. package/dist/assets/display/e542b.svg +5 -0
  99. package/dist/assets/display/e59af.svg +5 -0
  100. package/dist/assets/display/e5a41.svg +5 -0
  101. package/dist/assets/display/e894a.svg +5 -0
  102. package/dist/assets/display/ea9e5.svg +5 -0
  103. package/dist/assets/display/eac01.svg +5 -0
  104. package/dist/assets/display/ec734.svg +5 -0
  105. package/dist/assets/display/edb55.svg +5 -0
  106. package/dist/assets/display/ee164.svg +5 -0
  107. package/dist/assets/display/f01d5.svg +5 -0
  108. package/dist/assets/display/f479a.svg +22 -0
  109. package/dist/assets/display/f8ebb.svg +22 -0
  110. package/dist/assets/display/fb8ab.svg +5 -0
  111. package/dist/assets/display/fbdce.svg +5 -0
  112. package/dist/assets/docs.png +0 -0
  113. package/dist/assets/editor/align-left.svg +5 -0
  114. package/dist/assets/editor/arrow-down.svg +5 -0
  115. package/dist/assets/editor/arrow-up.svg +5 -0
  116. package/dist/assets/editor/at.svg +5 -0
  117. package/dist/assets/editor/bold-active.svg +5 -0
  118. package/dist/assets/editor/bold-strong.svg +5 -0
  119. package/dist/assets/editor/bold.svg +5 -0
  120. package/dist/assets/editor/comment.svg +5 -0
  121. package/dist/assets/editor/divider-more.svg +5 -0
  122. package/dist/assets/editor/divider.svg +5 -0
  123. package/dist/assets/editor/duration-check.svg +3 -0
  124. package/dist/assets/editor/italic.svg +5 -0
  125. package/dist/assets/editor/link.svg +5 -0
  126. package/dist/assets/editor/more.svg +5 -0
  127. package/dist/assets/editor/status-available.svg +5 -0
  128. package/dist/assets/editor/status-busy.svg +5 -0
  129. package/dist/assets/editor/status-disabled.svg +5 -0
  130. package/dist/assets/editor/status-in-meeting.svg +5 -0
  131. package/dist/assets/editor/status-offline.svg +5 -0
  132. package/dist/assets/editor/strike.svg +5 -0
  133. package/dist/assets/editor/time-check.svg +3 -0
  134. package/dist/assets/editor/underline.svg +5 -0
  135. package/dist/assets/expenses.png +0 -0
  136. package/dist/assets/feeds/activity-more.svg +5 -0
  137. package/dist/assets/feeds/activity-user.svg +5 -0
  138. package/dist/assets/feeds/attachment.svg +5 -0
  139. package/dist/assets/feeds/calendar.svg +5 -0
  140. package/dist/assets/feeds/comment.svg +5 -0
  141. package/dist/assets/feeds/download-hover.svg +5 -0
  142. package/dist/assets/feeds/download.svg +5 -0
  143. package/dist/assets/feeds/filter.svg +5 -0
  144. package/dist/assets/feeds/header-calendar.svg +5 -0
  145. package/dist/assets/feeds/notification-attachment.svg +5 -0
  146. package/dist/assets/feeds/notification-company.svg +17 -0
  147. package/dist/assets/feeds/notification-filter.svg +5 -0
  148. package/dist/assets/feeds/notification-more.svg +5 -0
  149. package/dist/assets/feeds/search.svg +5 -0
  150. package/dist/assets/feeds/selected-filter-active.svg +5 -0
  151. package/dist/assets/feeds/selected-filter.svg +5 -0
  152. package/dist/assets/feeds/settings.svg +5 -0
  153. package/dist/assets/feeds/sort.svg +5 -0
  154. package/dist/assets/feeds/status-error.svg +5 -0
  155. package/dist/assets/feeds/status-pending.svg +5 -0
  156. package/dist/assets/feeds/status-success.svg +5 -0
  157. package/dist/assets/feeds/status-warning.svg +5 -0
  158. package/dist/assets/feeds/upload-avatar-empty56.svg +13 -0
  159. package/dist/assets/feeds/upload-avatar-empty64.svg +13 -0
  160. package/dist/assets/feeds/upload-cancel.svg +5 -0
  161. package/dist/assets/feeds/upload-company-empty.svg +42 -0
  162. package/dist/assets/feeds/upload-company.svg +17 -0
  163. package/dist/assets/feeds/upload-delete-error.svg +5 -0
  164. package/dist/assets/feeds/upload-delete.svg +5 -0
  165. package/dist/assets/feeds/upload-error.svg +5 -0
  166. package/dist/assets/feeds/upload-loading.svg +5 -0
  167. package/dist/assets/feeds/upload-success.svg +5 -0
  168. package/dist/assets/feeds/vertical-arrow.svg +5 -0
  169. package/dist/assets/feeds/vertical-calendar-active.svg +5 -0
  170. package/dist/assets/feeds/vertical-calendar-hover.svg +5 -0
  171. package/dist/assets/feeds/vertical-calendar.svg +5 -0
  172. package/dist/assets/file.png +0 -0
  173. package/dist/assets/folder.png +0 -0
  174. package/dist/assets/forms/07b3a.png +0 -0
  175. package/dist/assets/forms/09fe0.svg +5 -0
  176. package/dist/assets/forms/11a76.svg +5 -0
  177. package/dist/assets/forms/185ae.svg +5 -0
  178. package/dist/assets/forms/1f174.svg +5 -0
  179. package/dist/assets/forms/29541.svg +5 -0
  180. package/dist/assets/forms/2b6f8.svg +5 -0
  181. package/dist/assets/forms/36c22.svg +5 -0
  182. package/dist/assets/forms/4cb9a.svg +5 -0
  183. package/dist/assets/forms/4ff30.png +0 -0
  184. package/dist/assets/forms/537d2.svg +5 -0
  185. package/dist/assets/forms/60456.svg +5 -0
  186. package/dist/assets/forms/657e1.svg +5 -0
  187. package/dist/assets/forms/73539.svg +5 -0
  188. package/dist/assets/forms/76214.svg +5 -0
  189. package/dist/assets/forms/7bd9a.svg +5 -0
  190. package/dist/assets/forms/7c034.svg +5 -0
  191. package/dist/assets/forms/86e36.svg +5 -0
  192. package/dist/assets/forms/8d97b.svg +5 -0
  193. package/dist/assets/forms/90a18.svg +5 -0
  194. package/dist/assets/forms/939c2.png +0 -0
  195. package/dist/assets/forms/95ae4.svg +5 -0
  196. package/dist/assets/forms/970af.svg +5 -0
  197. package/dist/assets/forms/a119e.svg +5 -0
  198. package/dist/assets/forms/a521c.svg +5 -0
  199. package/dist/assets/forms/a74b0.svg +5 -0
  200. package/dist/assets/forms/baff4.svg +5 -0
  201. package/dist/assets/forms/c64ff.svg +5 -0
  202. package/dist/assets/forms/ca66f.svg +5 -0
  203. package/dist/assets/forms/e0344.svg +5 -0
  204. package/dist/assets/forms/e5b24.png +0 -0
  205. package/dist/assets/forms/e687f.svg +5 -0
  206. package/dist/assets/forms/eceaf.svg +5 -0
  207. package/dist/assets/forms/eed5c.png +0 -0
  208. package/dist/assets/forms/f26ce.svg +5 -0
  209. package/dist/assets/forms/f79d5.svg +5 -0
  210. package/dist/assets/habits.png +0 -0
  211. package/dist/assets/hackify.png +0 -0
  212. package/dist/assets/icons/add.svg +5 -0
  213. package/dist/assets/icons/apps.svg +5 -0
  214. package/dist/assets/icons/book.svg +5 -0
  215. package/dist/assets/icons/chat.svg +5 -0
  216. package/dist/assets/icons/folder.svg +5 -0
  217. package/dist/assets/icons/mic.svg +5 -0
  218. package/dist/assets/icons/notifications.svg +5 -0
  219. package/dist/assets/icons/shield.svg +5 -0
  220. package/dist/assets/icons/store.svg +5 -0
  221. package/dist/assets/icons/voice.svg +5 -0
  222. package/dist/assets/ledger.png +0 -0
  223. package/dist/assets/logos/glyph-black.svg +3 -0
  224. package/dist/assets/logos/glyph-color.svg +26 -0
  225. package/dist/assets/logos/glyph-white.svg +3 -0
  226. package/dist/assets/logos/horizontal-black.svg +5 -0
  227. package/dist/assets/logos/horizontal-color-black.svg +28 -0
  228. package/dist/assets/logos/horizontal-color-white.svg +28 -0
  229. package/dist/assets/logos/horizontal-white.svg +5 -0
  230. package/dist/assets/logos/stacked-black.svg +5 -0
  231. package/dist/assets/logos/stacked-color-black.svg +28 -0
  232. package/dist/assets/logos/stacked-color-white.svg +28 -0
  233. package/dist/assets/logos/stacked-white.svg +5 -0
  234. package/dist/assets/logos/tagline-horizontal-black.svg +6 -0
  235. package/dist/assets/logos/tagline-horizontal-color-black.svg +29 -0
  236. package/dist/assets/logos/tagline-horizontal-color-white.svg +29 -0
  237. package/dist/assets/logos/tagline-horizontal-white.svg +6 -0
  238. package/dist/assets/logos/tagline-inline-black.svg +7 -0
  239. package/dist/assets/logos/tagline-inline-color-black.svg +30 -0
  240. package/dist/assets/logos/tagline-inline-color-white-alt.svg +30 -0
  241. package/dist/assets/logos/tagline-inline-color-white.svg +30 -0
  242. package/dist/assets/logos/tagline-inline-white.svg +7 -0
  243. package/dist/assets/logos/tagline-stacked-black.svg +6 -0
  244. package/dist/assets/logos/tagline-stacked-color-black.svg +29 -0
  245. package/dist/assets/logos/tagline-stacked-color-white.svg +29 -0
  246. package/dist/assets/logos/tagline-stacked-white.svg +6 -0
  247. package/dist/assets/magna-brief.png +0 -0
  248. package/dist/assets/magna-ide.png +0 -0
  249. package/dist/assets/magna-logo-dark.svg +5 -0
  250. package/dist/assets/magna-logo-stacked.svg +29 -0
  251. package/dist/assets/magna-logo.svg +3 -0
  252. package/dist/assets/magna-music.png +0 -0
  253. package/dist/assets/magna-studio.png +0 -0
  254. package/dist/assets/magna-voice.png +0 -0
  255. package/dist/assets/mail.png +0 -0
  256. package/dist/assets/models.png +0 -0
  257. package/dist/assets/notes.png +0 -0
  258. package/dist/assets/notifications.png +0 -0
  259. package/dist/assets/salis-verify.png +0 -0
  260. package/dist/assets/salis.png +0 -0
  261. package/dist/assets/settings.png +0 -0
  262. package/dist/assets/sheets.png +0 -0
  263. package/dist/assets/sledes.png +0 -0
  264. package/dist/assets/spaces.png +0 -0
  265. package/dist/assets/task-manager.png +0 -0
  266. package/dist/assets/tasks.png +0 -0
  267. package/dist/assets/terminal.png +0 -0
  268. package/dist/assets/today.png +0 -0
  269. package/dist/assets/trajectory.png +0 -0
  270. package/dist/assets/vault.png +0 -0
  271. package/dist/assets/wafir.png +0 -0
  272. package/dist/assets/what-can-i-do.png +0 -0
  273. package/dist/assets/workflow.png +0 -0
  274. package/dist/components/interactions/border-beam.d.ts +5 -0
  275. package/dist/components/interactions/border-beam.js +15 -0
  276. package/dist/components/interactions/bot-avatar.d.ts +5 -0
  277. package/dist/components/interactions/bot-avatar.js +10 -0
  278. package/dist/components/interactions/image-generation.d.ts +58 -0
  279. package/dist/components/interactions/image-generation.js +86 -0
  280. package/dist/components/interactions/index.d.ts +7 -0
  281. package/dist/components/interactions/index.js +7 -0
  282. package/dist/components/interactions/liquid.d.ts +8 -0
  283. package/dist/components/interactions/liquid.js +19 -0
  284. package/dist/components/interactions/metal-fx.d.ts +6 -0
  285. package/dist/components/interactions/metal-fx.js +51 -0
  286. package/dist/components/interactions/preferences.d.ts +5 -0
  287. package/dist/components/interactions/preferences.js +55 -0
  288. package/dist/components/interactions/thinking-orb.d.ts +4 -0
  289. package/dist/components/interactions/thinking-orb.js +9 -0
  290. package/dist/components/interactions/voice-beam.d.ts +5 -0
  291. package/dist/components/interactions/voice-beam.js +33 -0
  292. package/dist/components/magna/app-icon.d.ts +13 -0
  293. package/dist/components/magna/app-icon.js +15 -0
  294. package/dist/components/magna/apps.d.ts +202 -0
  295. package/dist/components/magna/apps.js +243 -0
  296. package/dist/components/magna/chat-activity.d.ts +12 -0
  297. package/dist/components/magna/chat-activity.js +29 -0
  298. package/dist/components/magna/chat-composer.d.ts +31 -0
  299. package/dist/components/magna/chat-composer.js +122 -0
  300. package/dist/components/magna/chat-composer.module.css +36 -0
  301. package/dist/components/magna/desktop-button.d.ts +8 -0
  302. package/dist/components/magna/desktop-button.js +10 -0
  303. package/dist/components/magna/desktop-switch.d.ts +4 -0
  304. package/dist/components/magna/desktop-switch.js +8 -0
  305. package/dist/components/magna/file-tile.d.ts +9 -0
  306. package/dist/components/magna/file-tile.js +11 -0
  307. package/dist/components/magna/index.d.ts +11 -0
  308. package/dist/components/magna/index.js +11 -0
  309. package/dist/components/magna/logo-variants.d.ts +243 -0
  310. package/dist/components/magna/logo-variants.js +268 -0
  311. package/dist/components/magna/logo.d.ts +11 -0
  312. package/dist/components/magna/logo.js +42 -0
  313. package/dist/components/magna/navigation.d.ts +15 -0
  314. package/dist/components/magna/navigation.js +16 -0
  315. package/dist/components/magna/project-context.d.ts +11 -0
  316. package/dist/components/magna/project-context.js +8 -0
  317. package/dist/components/magna/voice-orb.d.ts +7 -0
  318. package/dist/components/magna/voice-orb.js +49 -0
  319. package/dist/components/magna/voice-orb.module.css +146 -0
  320. package/dist/components/theme-switch.d.ts +1 -0
  321. package/dist/components/theme-switch.js +14 -0
  322. package/dist/components/ui/accordion.d.ts +13 -0
  323. package/dist/components/ui/accordion.js +24 -0
  324. package/dist/components/ui/activity-feed.d.ts +64 -0
  325. package/dist/components/ui/activity-feed.js +40 -0
  326. package/dist/components/ui/alert.d.ts +31 -0
  327. package/dist/components/ui/alert.js +73 -0
  328. package/dist/components/ui/avatar-empty-icons.d.ts +3 -0
  329. package/dist/components/ui/avatar-empty-icons.js +14 -0
  330. package/dist/components/ui/avatar-group-compact.d.ts +140 -0
  331. package/dist/components/ui/avatar-group-compact.js +41 -0
  332. package/dist/components/ui/avatar-group.d.ts +237 -0
  333. package/dist/components/ui/avatar-group.js +37 -0
  334. package/dist/components/ui/avatar.d.ts +420 -0
  335. package/dist/components/ui/avatar.js +107 -0
  336. package/dist/components/ui/badge.d.ts +29 -0
  337. package/dist/components/ui/badge.js +67 -0
  338. package/dist/components/ui/banner.d.ts +26 -0
  339. package/dist/components/ui/banner.js +41 -0
  340. package/dist/components/ui/breadcrumb.d.ts +14 -0
  341. package/dist/components/ui/breadcrumb.js +23 -0
  342. package/dist/components/ui/button-group.d.ts +23 -0
  343. package/dist/components/ui/button-group.js +39 -0
  344. package/dist/components/ui/button.d.ts +22 -0
  345. package/dist/components/ui/button.js +62 -0
  346. package/dist/components/ui/chart-legend.d.ts +21 -0
  347. package/dist/components/ui/chart-legend.js +14 -0
  348. package/dist/components/ui/checkbox.d.ts +41 -0
  349. package/dist/components/ui/checkbox.js +42 -0
  350. package/dist/components/ui/color-picker.d.ts +13 -0
  351. package/dist/components/ui/color-picker.js +65 -0
  352. package/dist/components/ui/command-menu.d.ts +55 -0
  353. package/dist/components/ui/command-menu.js +33 -0
  354. package/dist/components/ui/compact-button.d.ts +22 -0
  355. package/dist/components/ui/compact-button.js +39 -0
  356. package/dist/components/ui/content-card.d.ts +22 -0
  357. package/dist/components/ui/content-card.js +11 -0
  358. package/dist/components/ui/content-label.d.ts +22 -0
  359. package/dist/components/ui/content-label.js +9 -0
  360. package/dist/components/ui/counter-input.d.ts +26 -0
  361. package/dist/components/ui/counter-input.js +47 -0
  362. package/dist/components/ui/datepicker.d.ts +9 -0
  363. package/dist/components/ui/datepicker.js +48 -0
  364. package/dist/components/ui/digit-input.d.ts +11 -0
  365. package/dist/components/ui/digit-input.js +98 -0
  366. package/dist/components/ui/display-asset.d.ts +3 -0
  367. package/dist/components/ui/display-asset.js +9 -0
  368. package/dist/components/ui/display-assets.d.ts +193 -0
  369. package/dist/components/ui/display-assets.js +195 -0
  370. package/dist/components/ui/divider.d.ts +13 -0
  371. package/dist/components/ui/divider.js +22 -0
  372. package/dist/components/ui/dot-stepper.d.ts +96 -0
  373. package/dist/components/ui/dot-stepper.js +29 -0
  374. package/dist/components/ui/drawer.d.ts +12 -0
  375. package/dist/components/ui/drawer.js +25 -0
  376. package/dist/components/ui/dropdown.d.ts +29 -0
  377. package/dist/components/ui/dropdown.js +74 -0
  378. package/dist/components/ui/fancy-button.d.ts +21 -0
  379. package/dist/components/ui/fancy-button.js +43 -0
  380. package/dist/components/ui/file-format-icon.d.ts +19 -0
  381. package/dist/components/ui/file-format-icon.js +48 -0
  382. package/dist/components/ui/file-upload-compositions.d.ts +32 -0
  383. package/dist/components/ui/file-upload-compositions.js +88 -0
  384. package/dist/components/ui/file-upload.d.ts +11 -0
  385. package/dist/components/ui/file-upload.js +20 -0
  386. package/dist/components/ui/filter.d.ts +53 -0
  387. package/dist/components/ui/filter.js +90 -0
  388. package/dist/components/ui/form-asset.d.ts +5 -0
  389. package/dist/components/ui/form-asset.js +10 -0
  390. package/dist/components/ui/hint.d.ts +22 -0
  391. package/dist/components/ui/hint.js +33 -0
  392. package/dist/components/ui/horizontal-stepper.d.ts +16 -0
  393. package/dist/components/ui/horizontal-stepper.js +28 -0
  394. package/dist/components/ui/inline-input.d.ts +24 -0
  395. package/dist/components/ui/inline-input.js +60 -0
  396. package/dist/components/ui/input.d.ts +205 -0
  397. package/dist/components/ui/input.js +69 -0
  398. package/dist/components/ui/kbd.d.ts +5 -0
  399. package/dist/components/ui/kbd.js +6 -0
  400. package/dist/components/ui/key-icon.d.ts +14 -0
  401. package/dist/components/ui/key-icon.js +35 -0
  402. package/dist/components/ui/label.d.ts +7 -0
  403. package/dist/components/ui/label.js +15 -0
  404. package/dist/components/ui/link-button.d.ts +22 -0
  405. package/dist/components/ui/link-button.js +38 -0
  406. package/dist/components/ui/magna-recipe.d.ts +83 -0
  407. package/dist/components/ui/magna-recipe.js +99 -0
  408. package/dist/components/ui/modal.d.ts +21 -0
  409. package/dist/components/ui/modal.js +35 -0
  410. package/dist/components/ui/notification-feed.d.ts +63 -0
  411. package/dist/components/ui/notification-feed.js +31 -0
  412. package/dist/components/ui/notification-provider.d.ts +1 -0
  413. package/dist/components/ui/notification-provider.js +13 -0
  414. package/dist/components/ui/notification.d.ts +24 -0
  415. package/dist/components/ui/notification.js +23 -0
  416. package/dist/components/ui/pagination.d.ts +19 -0
  417. package/dist/components/ui/pagination.js +38 -0
  418. package/dist/components/ui/password-strength.d.ts +16 -0
  419. package/dist/components/ui/password-strength.js +27 -0
  420. package/dist/components/ui/payment-icon.d.ts +11 -0
  421. package/dist/components/ui/payment-icon.js +19 -0
  422. package/dist/components/ui/popover.d.ts +36 -0
  423. package/dist/components/ui/popover.js +27 -0
  424. package/dist/components/ui/progress-bar.d.ts +35 -0
  425. package/dist/components/ui/progress-bar.js +32 -0
  426. package/dist/components/ui/progress-circle.d.ts +16 -0
  427. package/dist/components/ui/progress-circle.js +29 -0
  428. package/dist/components/ui/radio.d.ts +37 -0
  429. package/dist/components/ui/radio.js +39 -0
  430. package/dist/components/ui/rating.d.ts +62 -0
  431. package/dist/components/ui/rating.js +65 -0
  432. package/dist/components/ui/rich-editor.d.ts +77 -0
  433. package/dist/components/ui/rich-editor.js +248 -0
  434. package/dist/components/ui/rich-editor.module.css +58 -0
  435. package/dist/components/ui/scroll-area.d.ts +14 -0
  436. package/dist/components/ui/scroll-area.js +34 -0
  437. package/dist/components/ui/segmented-control.d.ts +8 -0
  438. package/dist/components/ui/segmented-control.js +30 -0
  439. package/dist/components/ui/select.d.ts +212 -0
  440. package/dist/components/ui/select.js +129 -0
  441. package/dist/components/ui/slider.d.ts +5 -0
  442. package/dist/components/ui/slider.js +16 -0
  443. package/dist/components/ui/social-button.d.ts +22 -0
  444. package/dist/components/ui/social-button.js +47 -0
  445. package/dist/components/ui/status-badge.d.ts +25 -0
  446. package/dist/components/ui/status-badge.js +51 -0
  447. package/dist/components/ui/status-modal.d.ts +26 -0
  448. package/dist/components/ui/status-modal.js +21 -0
  449. package/dist/components/ui/svg-rating-icons.d.ts +11 -0
  450. package/dist/components/ui/svg-rating-icons.js +33 -0
  451. package/dist/components/ui/switch-compositions.d.ts +46 -0
  452. package/dist/components/ui/switch-compositions.js +51 -0
  453. package/dist/components/ui/switch.d.ts +14 -0
  454. package/dist/components/ui/switch.js +17 -0
  455. package/dist/components/ui/tab-menu-horizontal.d.ts +11 -0
  456. package/dist/components/ui/tab-menu-horizontal.js +49 -0
  457. package/dist/components/ui/tab-menu-vertical.d.ts +9 -0
  458. package/dist/components/ui/tab-menu-vertical.js +23 -0
  459. package/dist/components/ui/table.d.ts +23 -0
  460. package/dist/components/ui/table.js +46 -0
  461. package/dist/components/ui/tag-input.d.ts +18 -0
  462. package/dist/components/ui/tag-input.js +57 -0
  463. package/dist/components/ui/tag.d.ts +28 -0
  464. package/dist/components/ui/tag.js +67 -0
  465. package/dist/components/ui/textarea.d.ts +21 -0
  466. package/dist/components/ui/textarea.js +32 -0
  467. package/dist/components/ui/time-picker.d.ts +35 -0
  468. package/dist/components/ui/time-picker.js +46 -0
  469. package/dist/components/ui/tooltip.d.ts +318 -0
  470. package/dist/components/ui/tooltip.js +56 -0
  471. package/dist/components/ui/vertical-stepper.d.ts +16 -0
  472. package/dist/components/ui/vertical-stepper.js +30 -0
  473. package/dist/design/figma-styles.d.ts +2 -0
  474. package/dist/design/figma-styles.js +2106 -0
  475. package/dist/design/theme.d.ts +18 -0
  476. package/dist/design/theme.js +185 -0
  477. package/dist/fonts/DM-Mono-OFL.txt +93 -0
  478. package/dist/fonts/Inter-OFL.txt +93 -0
  479. package/dist/fonts/README.md +23 -0
  480. package/dist/fonts/SHA256SUMS +11 -0
  481. package/dist/fonts/dm-mono-400-latin-ext.woff2 +0 -0
  482. package/dist/fonts/dm-mono-400-latin.woff2 +0 -0
  483. package/dist/fonts/dm-mono-500-latin-ext.woff2 +0 -0
  484. package/dist/fonts/dm-mono-500-latin.woff2 +0 -0
  485. package/dist/fonts/inter-cyrillic-ext.woff2 +0 -0
  486. package/dist/fonts/inter-cyrillic.woff2 +0 -0
  487. package/dist/fonts/inter-greek-ext.woff2 +0 -0
  488. package/dist/fonts/inter-greek.woff2 +0 -0
  489. package/dist/fonts/inter-latin-ext.woff2 +0 -0
  490. package/dist/fonts/inter-latin.woff2 +0 -0
  491. package/dist/fonts/inter-vietnamese.woff2 +0 -0
  492. package/dist/hooks/use-notification.d.ts +36 -0
  493. package/dist/hooks/use-notification.js +86 -0
  494. package/dist/hooks/use-tab-observer.d.ts +8 -0
  495. package/dist/hooks/use-tab-observer.js +72 -0
  496. package/dist/magna-assets.d.ts +2 -0
  497. package/dist/magna-assets.js +273 -0
  498. package/dist/magnaui.d.ts +77 -0
  499. package/dist/magnaui.js +77 -0
  500. package/dist/styles.css +2665 -0
  501. package/dist/utils/cn.d.ts +18 -0
  502. package/dist/utils/cn.js +14 -0
  503. package/dist/utils/polymorphic.d.ts +10 -0
  504. package/dist/utils/polymorphic.js +1 -0
  505. package/dist/utils/tv.d.ts +18 -0
  506. package/dist/utils/tv.js +5 -0
  507. package/dist/vendor/tailwind-variants/LICENSE +21 -0
  508. package/dist/vendor/tailwind-variants/config.d.ts +38 -0
  509. package/dist/vendor/tailwind-variants/generated.d.ts +3 -0
  510. package/dist/vendor/tailwind-variants/index.d.ts +370 -0
  511. package/docs/implementation-provenance.md +96 -0
  512. package/package.json +108 -0
@@ -0,0 +1,13 @@
1
+ import type { HTMLAttributes } from "react";
2
+ import type { ClassValue } from "../../utils/tv.js";
3
+ type Options = {
4
+ variant?: 'line' | 'line-spacing' | 'line-text' | 'content' | 'text' | 'solid-text';
5
+ class?: ClassValue;
6
+ className?: string;
7
+ };
8
+ export declare function dividerVariants({ variant, class: extra, className, }?: Options): string;
9
+ export declare function Root({ variant, children, className, ...props }: HTMLAttributes<HTMLDivElement> & Pick<Options, 'variant'>): import("react/jsx-runtime").JSX.Element;
10
+ export declare namespace Root {
11
+ var displayName: string;
12
+ }
13
+ export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../utils/cn.js";
3
+ export function dividerVariants({ variant = 'line', class: extra, className, } = {}) {
4
+ return cn('relative flex w-full items-center', {
5
+ line: 'h-0',
6
+ 'line-spacing': 'h-1',
7
+ 'line-text': 'gap-2.5 text-subheading-2xs text-text-soft-400',
8
+ content: 'gap-2.5',
9
+ text: 'flex items-center px-2 py-1 text-subheading-xs text-text-soft-400',
10
+ 'solid-text': 'flex items-center bg-bg-weak-50 px-5 py-1.5 text-subheading-xs uppercase text-text-soft-400',
11
+ }[variant], extra, className);
12
+ }
13
+ export function Root({ variant = 'line', children, className, ...props }) {
14
+ const line = (_jsx("span", { "aria-hidden": 'true', className: 'block h-px min-w-0 flex-1 bg-stroke-soft-200' }));
15
+ let content = children;
16
+ if (variant === 'line' || variant === 'line-spacing')
17
+ content = (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": 'true', className: 'absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-stroke-soft-200' }), children] }));
18
+ if (variant === 'line-text' || variant === 'content')
19
+ content = (_jsxs(_Fragment, { children: [line, children, line] }));
20
+ return (_jsx("div", { role: 'separator', ...props, className: dividerVariants({ variant, className }), children: content }));
21
+ }
22
+ Root.displayName = 'DividerRoot';
@@ -0,0 +1,96 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "../../utils/tv.js";
3
+ export declare const dotStepperVariants: import("../../vendor/tailwind-variants/index.js").TVReturnType<{
4
+ size: {
5
+ small: {
6
+ item: string;
7
+ root: string;
8
+ };
9
+ xsmall: {
10
+ item: string;
11
+ root: string;
12
+ };
13
+ };
14
+ }, {
15
+ root: string;
16
+ item: string;
17
+ }, undefined, {
18
+ responsiveVariants?: boolean | ("xl" | "lg" | "md" | "sm" | "2xl")[] | {
19
+ size?: boolean | ("xl" | "lg" | "md" | "sm" | "2xl")[] | undefined;
20
+ } | undefined;
21
+ } & import("../../vendor/tailwind-variants/config.js").TWMConfig & {
22
+ twMergeConfig: {
23
+ extend: {
24
+ classGroups: {
25
+ 'font-size': {
26
+ text: string[];
27
+ }[];
28
+ shadow: {
29
+ shadow: string[];
30
+ }[];
31
+ rounded: {
32
+ rounded: string[];
33
+ }[];
34
+ };
35
+ };
36
+ };
37
+ }, {
38
+ size: {
39
+ small: {
40
+ item: string;
41
+ root: string;
42
+ };
43
+ xsmall: {
44
+ item: string;
45
+ root: string;
46
+ };
47
+ };
48
+ }, {
49
+ root: string;
50
+ item: string;
51
+ }, import("../../vendor/tailwind-variants/index.js").TVReturnType<{
52
+ size: {
53
+ small: {
54
+ item: string;
55
+ root: string;
56
+ };
57
+ xsmall: {
58
+ item: string;
59
+ root: string;
60
+ };
61
+ };
62
+ }, {
63
+ root: string;
64
+ item: string;
65
+ }, undefined, import("../../vendor/tailwind-variants/config.js").TVConfig<{
66
+ size: {
67
+ small: {
68
+ item: string;
69
+ root: string;
70
+ };
71
+ xsmall: {
72
+ item: string;
73
+ root: string;
74
+ };
75
+ };
76
+ }, {
77
+ size: {
78
+ small: {
79
+ item: string;
80
+ root: string;
81
+ };
82
+ xsmall: {
83
+ item: string;
84
+ root: string;
85
+ };
86
+ };
87
+ }>, unknown, unknown, undefined>>;
88
+ type Sizing = VariantProps<typeof dotStepperVariants>;
89
+ export declare function Root({ size, asChild, className, ...props }: React.HTMLAttributes<HTMLDivElement> & Sizing & {
90
+ asChild?: boolean;
91
+ }): import("react/jsx-runtime").JSX.Element;
92
+ export declare const Item: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & Sizing & {
93
+ asChild?: boolean;
94
+ active?: boolean;
95
+ } & React.RefAttributes<HTMLButtonElement>>;
96
+ export {};
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ import { tv } from "../../utils/tv.js";
6
+ import { cn } from "../../utils/cn.js";
7
+ export const dotStepperVariants = tv({
8
+ slots: {
9
+ root: 'flex flex-wrap',
10
+ item: 'shrink-0 rounded-full bg-bg-soft-200 outline-none transition duration-200 ease-out focus-visible:ring-2 focus-visible:ring-stroke-strong-950',
11
+ },
12
+ variants: {
13
+ size: {
14
+ small: { item: 'size-2', root: 'gap-2.5' },
15
+ xsmall: { item: 'size-1', root: 'gap-1.5' },
16
+ },
17
+ },
18
+ defaultVariants: { size: 'small' },
19
+ });
20
+ const Size = React.createContext('small');
21
+ export function Root({ size = 'small', asChild, className, ...props }) {
22
+ const Element = asChild ? Slot : 'div';
23
+ return (_jsx(Size.Provider, { value: size, children: _jsx(Element, { ...props, className: dotStepperVariants({ size }).root({ class: className }) }) }));
24
+ }
25
+ export const Item = React.forwardRef(function Item({ size, asChild, active, className, ...props }, ref) {
26
+ const inherited = React.useContext(Size);
27
+ const Element = asChild ? Slot : 'button';
28
+ return (_jsx(Element, { type: asChild ? undefined : 'button', ...props, ref: ref, "aria-current": active ? 'step' : undefined, className: cn(dotStepperVariants({ size: size ?? inherited }).item(), active && 'bg-primary-base', className) }));
29
+ });
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import * as Dialog from "@radix-ui/react-dialog";
3
+ export declare const Root: React.FC<Dialog.DialogProps>;
4
+ export declare const Trigger: React.ForwardRefExoticComponent<Dialog.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ export declare const Close: React.ForwardRefExoticComponent<Dialog.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
6
+ export declare const Content: React.ForwardRefExoticComponent<Omit<Dialog.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export declare function Header({ showCloseButton, children, className, ...props }: React.HTMLAttributes<HTMLDivElement> & {
8
+ showCloseButton?: boolean;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export declare const Title: React.ForwardRefExoticComponent<Omit<Dialog.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
11
+ export declare function Body({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
12
+ export declare function Footer({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as Dialog from "@radix-ui/react-dialog";
5
+ import { RiCloseLine } from "@remixicon/react";
6
+ import * as CompactButton from "./compact-button.js";
7
+ import { cn } from "../../utils/cn.js";
8
+ export const Root = Dialog.Root;
9
+ export const Trigger = Dialog.Trigger;
10
+ export const Close = Dialog.Close;
11
+ export const Content = React.forwardRef(function Content({ children, className, ...props }, ref) {
12
+ return (_jsx(Dialog.Portal, { children: _jsx(Dialog.Overlay, { className: 'fixed inset-0 z-50 grid grid-cols-1 place-items-end overflow-hidden bg-overlay backdrop-blur-[10px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', children: _jsx(Dialog.Content, { ...props, ref: ref, className: cn('size-full max-w-[400px] overflow-y-auto border-l border-stroke-soft-200 bg-bg-white-0 data-[state=closed]:duration-200 data-[state=open]:duration-200 data-[state=closed]:ease-in data-[state=open]:ease-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-right-full', className), children: _jsx("div", { className: 'relative flex size-full flex-col', children: children }) }) }) }));
13
+ });
14
+ export function Header({ showCloseButton = true, children, className, ...props }) {
15
+ return (_jsxs("div", { ...props, className: cn('flex items-center gap-3 border-stroke-soft-200 p-5', className), children: [children, showCloseButton && (_jsx(Close, { asChild: true, children: _jsx(CompactButton.Root, { "aria-label": 'Close drawer', size: 'large', variant: 'ghost', children: _jsx(CompactButton.Icon, { as: RiCloseLine }) }) }))] }));
16
+ }
17
+ export const Title = React.forwardRef(function Title({ className, ...props }, ref) {
18
+ return (_jsx(Dialog.Title, { ...props, ref: ref, className: cn('flex-1 text-label-lg text-text-strong-950', className) }));
19
+ });
20
+ export function Body({ className, ...props }) {
21
+ return _jsx("div", { ...props, className: cn('flex-1', className) });
22
+ }
23
+ export function Footer({ className, ...props }) {
24
+ return (_jsx("div", { ...props, className: cn('flex items-center gap-4 border-stroke-soft-200 p-5', className) }));
25
+ }
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ import * as Menu from "@radix-ui/react-dropdown-menu";
3
+ import type { PolymorphicComponentProps } from "../../utils/polymorphic.js";
4
+ export declare const Root: React.FC<Menu.DropdownMenuProps>;
5
+ export declare const Trigger: React.ForwardRefExoticComponent<Menu.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
6
+ export declare const Portal: React.FC<Menu.DropdownMenuPortalProps>;
7
+ export declare const MenuSub: React.FC<Menu.DropdownMenuSubProps>;
8
+ export declare const CheckboxItem: React.ForwardRefExoticComponent<Menu.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const RadioGroup: React.ForwardRefExoticComponent<Menu.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const RadioItem: React.ForwardRefExoticComponent<Menu.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>>;
11
+ export declare const Separator: React.ForwardRefExoticComponent<Menu.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>>;
12
+ export declare const Arrow: React.ForwardRefExoticComponent<Menu.DropdownMenuArrowProps & React.RefAttributes<SVGSVGElement>>;
13
+ export declare const Search: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> & {
14
+ onClear?: () => void;
15
+ clearLabel?: string;
16
+ } & React.RefAttributes<HTMLInputElement>>;
17
+ export declare const Action: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
+ export declare function Caption({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
19
+ export declare const Content: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
20
+ export declare const Item: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
21
+ inset?: boolean;
22
+ } & React.RefAttributes<HTMLDivElement>>;
23
+ export declare function ItemIcon<T extends React.ElementType = 'div'>({ as, className, ...props }: PolymorphicComponentProps<T>): import("react/jsx-runtime").JSX.Element;
24
+ export declare const Group: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
25
+ export declare const Label: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
26
+ export declare const MenuSubTrigger: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
27
+ inset?: boolean;
28
+ } & React.RefAttributes<HTMLDivElement>>;
29
+ export declare const MenuSubContent: React.ForwardRefExoticComponent<Omit<Menu.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,74 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as Menu from "@radix-ui/react-dropdown-menu";
5
+ import { Slottable } from "@radix-ui/react-slot";
6
+ import { RiArrowRightSLine } from "@remixicon/react";
7
+ import { cn } from "../../utils/cn.js";
8
+ import { FormAsset } from "./form-asset.js";
9
+ export const Root = Menu.Root;
10
+ export const Trigger = Menu.Trigger;
11
+ export const Portal = Menu.Portal;
12
+ export const MenuSub = Menu.Sub;
13
+ export const CheckboxItem = Menu.CheckboxItem;
14
+ export const RadioGroup = Menu.RadioGroup;
15
+ export const RadioItem = Menu.RadioItem;
16
+ export const Separator = Menu.Separator;
17
+ export const Arrow = Menu.Arrow;
18
+ export const Search = React.forwardRef(function Search({ className, value, defaultValue, onChange, onKeyDown, onClear, clearLabel = 'Clear search', ...props }, ref) {
19
+ const [internal, setInternal] = React.useState(defaultValue ?? '');
20
+ const current = value ?? internal;
21
+ return (_jsxs("div", { className: cn('flex items-center gap-2 bg-bg-white-0 p-2 text-text-soft-400 focus-within:text-text-sub-600 hover:bg-bg-weak-50', className), children: [_jsx(FormAsset, { file: '1f174.svg' }), _jsx("input", { ...props, ref: ref, value: current, "aria-label": props['aria-label'] ?? 'Search menu', placeholder: props.placeholder ?? 'Search...', className: 'min-w-0 flex-1 bg-transparent text-paragraph-sm text-text-strong-950 outline-none placeholder:text-text-soft-400 disabled:opacity-50', onChange: (event) => {
22
+ if (value === undefined)
23
+ setInternal(event.target.value);
24
+ onChange?.(event);
25
+ }, onKeyDown: (event) => {
26
+ onKeyDown?.(event);
27
+ if (event.defaultPrevented)
28
+ return;
29
+ if (event.key === 'ArrowDown') {
30
+ event.preventDefault();
31
+ event.currentTarget
32
+ .closest('[role="menu"]')
33
+ ?.querySelector('[role="menuitem"]:not([data-disabled]), [role="menuitemcheckbox"]:not([data-disabled]), [role="menuitemradio"]:not([data-disabled])')
34
+ ?.focus();
35
+ }
36
+ if (event.key !== 'Escape' && event.key !== 'Tab')
37
+ event.stopPropagation();
38
+ } }), String(current).length > 0 && (_jsx("button", { type: 'button', disabled: props.disabled || props.readOnly, "aria-label": clearLabel, className: 'rounded outline-none focus-visible:ring-2 focus-visible:ring-primary-base', onClick: () => {
39
+ if (value === undefined)
40
+ setInternal('');
41
+ onClear?.();
42
+ }, children: _jsx(FormAsset, { file: '90a18.svg' }) }))] }));
43
+ });
44
+ export const Action = React.forwardRef(function Action({ className, children, ...props }, ref) {
45
+ return (_jsxs(Menu.Item, { ...props, ref: ref, className: cn('mx-2 my-1 flex h-8 cursor-pointer items-center justify-center gap-1 rounded-full border border-stroke-soft-200 bg-bg-white-0 px-1.5 text-label-sm text-text-sub-600 shadow-regular-xs outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-bg-weak-50 data-[disabled]:opacity-50', className), children: [_jsx(FormAsset, { file: '76214.svg' }), _jsx("span", { className: 'px-1', children: children })] }));
46
+ });
47
+ export function Caption({ className, ...props }) {
48
+ return (_jsx("div", { ...props, className: cn('p-2 text-paragraph-sm text-text-soft-400', className) }));
49
+ }
50
+ const surface = 'z-50 flex flex-col gap-1 overflow-hidden rounded-2xl p-2 bg-bg-white-0 shadow-regular-md ring-1 ring-inset ring-stroke-soft-200';
51
+ const motion = 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=top]:slide-in-from-bottom-2 data-[side=right]:slide-in-from-left-2 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2';
52
+ const row = 'group/item relative flex gap-2 items-center p-2 rounded-lg cursor-pointer select-none text-paragraph-sm text-text-strong-950 outline-none transition duration-200 ease-out data-[highlighted]:bg-bg-weak-50 data-[disabled]:text-text-disabled-300';
53
+ export const Content = React.forwardRef(function Content({ className, sideOffset = 8, ...props }, ref) {
54
+ return (_jsx(Portal, { children: _jsx(Menu.Content, { ...props, ref: ref, sideOffset: sideOffset, className: cn(surface, motion, 'w-[300px] data-[side=bottom]:origin-top data-[side=left]:origin-right data-[side=right]:origin-left data-[side=top]:origin-bottom', className) }) }));
55
+ });
56
+ export const Item = React.forwardRef(function Item({ inset, className, ...props }, ref) {
57
+ return (_jsx(Menu.Item, { ...props, ref: ref, className: cn(row, inset && 'pl-9', className) }));
58
+ });
59
+ export function ItemIcon({ as, className, ...props }) {
60
+ const Element = as ?? 'div';
61
+ return (_jsx(Element, { ...props, className: cn('size-5 text-text-sub-600 group-data-[disabled]/item:text-text-disabled-300', className) }));
62
+ }
63
+ export const Group = React.forwardRef(function Group({ className, ...props }, ref) {
64
+ return (_jsx(Menu.Group, { ...props, ref: ref, className: cn('flex flex-col gap-1', className) }));
65
+ });
66
+ export const Label = React.forwardRef(function Label({ className, ...props }, ref) {
67
+ return (_jsx(Menu.Label, { ...props, ref: ref, className: cn('px-2 py-1 text-subheading-xs uppercase text-text-soft-400', className) }));
68
+ });
69
+ export const MenuSubTrigger = React.forwardRef(function MenuSubTrigger({ children, inset, className, ...props }, ref) {
70
+ return (_jsxs(Menu.SubTrigger, { ...props, ref: ref, className: cn(row, inset && 'pl-9', className), children: [_jsx(Slottable, { children: children }), _jsx("span", { className: 'flex-1' }), _jsx(ItemIcon, { as: RiArrowRightSLine, "aria-hidden": 'true' })] }));
71
+ });
72
+ export const MenuSubContent = React.forwardRef(function MenuSubContent({ className, ...props }, ref) {
73
+ return (_jsx(Menu.SubContent, { ...props, ref: ref, className: cn(surface, motion, 'w-max', className) }));
74
+ });
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import type { PolymorphicComponentProps } from "../../utils/polymorphic.js";
3
+ type Appearance = {
4
+ variant: 'neutral' | 'primary' | 'destructive' | 'basic';
5
+ size: 'medium' | 'small' | 'xsmall';
6
+ };
7
+ export declare const fancyButtonVariants: (options?: Partial<Appearance> & {
8
+ class?: import("tailwind-merge").ClassNameValue;
9
+ className?: import("tailwind-merge").ClassNameValue;
10
+ }) => Record<"root" | "icon", (overrides?: (Partial<Appearance> & {
11
+ class?: import("tailwind-merge").ClassNameValue;
12
+ className?: import("tailwind-merge").ClassNameValue;
13
+ }) | undefined) => string>;
14
+ export declare const Root: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & Partial<Appearance> & {
15
+ asChild?: boolean;
16
+ } & React.RefAttributes<HTMLButtonElement>>;
17
+ export declare function Icon<T extends React.ElementType = 'div'>({ as, className, variant, size, ...props }: PolymorphicComponentProps<T, Partial<Appearance>>): import("react/jsx-runtime").JSX.Element;
18
+ export declare namespace Icon {
19
+ var displayName: string;
20
+ }
21
+ export {};
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ import { mergeOptions, slotRecipe } from "./magna-recipe.js";
6
+ const appearance = React.createContext({});
7
+ const palette = {
8
+ neutral: 'bg-bg-strong-950 text-text-white-0 shadow-fancy-buttons-neutral',
9
+ primary: 'bg-primary-base text-static-white shadow-fancy-buttons-primary',
10
+ destructive: 'bg-error-base text-static-white shadow-fancy-buttons-error',
11
+ basic: 'bg-bg-white-0 text-text-sub-600 shadow-fancy-buttons-stroke hover:bg-bg-weak-50 hover:text-text-strong-950 hover:shadow-none',
12
+ };
13
+ export const fancyButtonVariants = slotRecipe({ variant: 'neutral', size: 'medium' }, ({ variant, size }) => ({
14
+ root: [
15
+ 'group inline-flex relative items-center justify-center gap-3 rounded-full whitespace-nowrap text-label-sm outline-none transition duration-200 ease-out',
16
+ palette[variant],
17
+ { medium: 'h-10 px-3.5', small: 'h-9 px-3', xsmall: 'h-8 px-2.5' }[size],
18
+ variant !== 'basic' && [
19
+ // Keep the perimeter highlight separate from the surface lighting so the
20
+ // curved edge remains visible while hover changes only the wash opacity.
21
+ 'before:absolute before:inset-0 before:z-10 before:rounded-[inherit] before:p-px before:pointer-events-none',
22
+ 'before:bg-[linear-gradient(to_bottom,rgba(255,255,255,0.12),transparent)] before:[mask-image:linear-gradient(#fff_0_0),linear-gradient(#fff_0_0)] before:[mask-clip:content-box,border-box] before:[mask-composite:exclude]',
23
+ 'after:absolute after:inset-0 after:rounded-[inherit] after:pointer-events-none after:bg-[linear-gradient(to_bottom,#fff,transparent)] after:opacity-[.16] after:transition-opacity after:duration-200 after:ease-out hover:after:opacity-[.24]',
24
+ ],
25
+ 'disabled:pointer-events-none disabled:bg-bg-weak-50 disabled:text-text-disabled-300 disabled:bg-none disabled:shadow-none disabled:before:hidden disabled:after:hidden',
26
+ ],
27
+ icon: 'relative z-10 shrink-0 size-5 -mx-1',
28
+ }));
29
+ export const Root = React.forwardRef(function FancyButton({ variant, size, asChild, className, children, ...props }, ref) {
30
+ const options = { variant, size };
31
+ const Element = asChild ? Slot : 'button';
32
+ return (_jsx(appearance.Provider, { value: options, children: _jsx(Element, { ref: ref, className: fancyButtonVariants(options).root({ className }), ...props, children: children }) }));
33
+ });
34
+ Root.displayName = 'FancyButtonRoot';
35
+ export function Icon({ as, className, variant, size, ...props }) {
36
+ const options = mergeOptions(React.useContext(appearance), {
37
+ variant,
38
+ size,
39
+ });
40
+ const Element = as || 'div';
41
+ return (_jsx(Element, { className: fancyButtonVariants(options).icon({ className }), ...props }));
42
+ }
43
+ Icon.displayName = 'FancyButtonIcon';
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ import { toneClasses } from "./magna-recipe.js";
3
+ type Appearance = {
4
+ size: 'medium' | 'small';
5
+ color: Exclude<keyof typeof toneClasses, 'teal'>;
6
+ };
7
+ export declare const fileFormatIconVariants: (options?: Partial<Appearance> & {
8
+ class?: import("tailwind-merge").ClassNameValue;
9
+ className?: import("tailwind-merge").ClassNameValue;
10
+ }) => Record<"root" | "formatBox", (overrides?: (Partial<Appearance> & {
11
+ class?: import("tailwind-merge").ClassNameValue;
12
+ className?: import("tailwind-merge").ClassNameValue;
13
+ }) | undefined) => string>;
14
+ /** A document silhouette constructed from its sheet and fold dimensions. */
15
+ export declare function Root({ size, color, format, className, ...props }: Partial<Appearance> & React.SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
16
+ export declare namespace Root {
17
+ var displayName: string;
18
+ }
19
+ export {};
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { slotRecipe, toneClasses } from "./magna-recipe.js";
3
+ export const fileFormatIconVariants = slotRecipe({ size: 'medium', color: 'gray' }, ({ size, color }) => ({
4
+ root: ['relative shrink-0', size === 'small' ? 'size-8' : 'size-10'],
5
+ formatBox: [
6
+ 'absolute left-0 bottom-1.5 flex items-center h-4 rounded px-[3px] py-0.5 text-[11px] font-semibold leading-none text-static-white',
7
+ toneClasses[color].solid,
8
+ ],
9
+ }));
10
+ /** A document silhouette constructed from its sheet and fold dimensions. */
11
+ export function Root({ size, color, format, className, ...props }) {
12
+ const styles = fileFormatIconVariants({ size, color });
13
+ const page = { x: 4, y: 0, width: 32, height: 40, corner: 6, fold: 13 };
14
+ const stroke = 1.5;
15
+ const inset = stroke / 2;
16
+ const left = page.x + inset;
17
+ const right = page.x + page.width - inset;
18
+ const top = page.y + inset;
19
+ const bottom = page.y + page.height - inset;
20
+ const radius = page.corner - inset;
21
+ // Offset the diagonal inward by the same distance as the horizontal edges.
22
+ const diagonal = page.x + page.width - page.fold - inset * Math.SQRT2;
23
+ const topCorner = diagonal + top;
24
+ const rightCorner = right - diagonal;
25
+ const tangent = radius * Math.tan(Math.PI / 8);
26
+ const diagonalTangent = tangent / Math.SQRT2;
27
+ const arc = `A ${radius} ${radius} 0 0 1`;
28
+ const outline = [
29
+ `M ${left + radius} ${top}`,
30
+ `H ${topCorner - tangent}`,
31
+ `${arc} ${topCorner + diagonalTangent} ${top + diagonalTangent}`,
32
+ `L ${right - diagonalTangent} ${rightCorner - diagonalTangent}`,
33
+ `${arc} ${right} ${rightCorner + tangent}`,
34
+ `V ${bottom - radius}`,
35
+ `${arc} ${right - radius} ${bottom}`,
36
+ `H ${left + radius}`,
37
+ `${arc} ${left} ${bottom - radius}`,
38
+ `V ${top + radius}`,
39
+ `${arc} ${left + radius} ${top}`,
40
+ 'Z',
41
+ ].join(' ');
42
+ const foldX = page.x + page.width - page.fold;
43
+ const foldY = page.y + page.fold;
44
+ const foldRadius = 4;
45
+ const crease = `M ${foldX} ${page.y + 1} V ${foldY - foldRadius} A ${foldRadius} ${foldRadius} 0 0 0 ${foldX + foldRadius} ${foldY} H ${page.x + page.width - 1}`;
46
+ return (_jsxs("svg", { width: 40, height: 40, viewBox: '0 0 40 40', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', ...props, className: styles.root({ className }), children: [_jsx("path", { d: outline, strokeWidth: stroke, className: 'fill-bg-white-0 stroke-stroke-sub-300' }), _jsx("path", { d: crease, strokeWidth: stroke, className: 'stroke-stroke-sub-300' }), _jsx("foreignObject", { width: 40, height: 40, children: _jsx("div", { className: styles.formatBox(), children: format }) })] }));
47
+ }
48
+ Root.displayName = 'FileFormatIcon';
@@ -0,0 +1,32 @@
1
+ import * as React from "react";
2
+ export type CardProps = React.HTMLAttributes<HTMLDivElement> & {
3
+ filename: string;
4
+ description?: React.ReactNode;
5
+ status?: 'uploading' | 'success' | 'error';
6
+ showStatus?: boolean;
7
+ progress?: number;
8
+ format?: string;
9
+ icon?: React.ReactNode;
10
+ onCancel?: () => void;
11
+ onRemove?: () => void;
12
+ onRetry?: () => void;
13
+ disabled?: boolean;
14
+ };
15
+ export declare function Card({ filename, description, status, showStatus, progress, format, icon, onCancel, onRemove, onRetry, disabled, className, ...props }: CardProps): import("react/jsx-runtime").JSX.Element;
16
+ export type ImageProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'title' | 'onError'> & {
17
+ type?: 'avatar' | 'company';
18
+ alignment?: 'vertical' | 'horizontal';
19
+ src?: string | null;
20
+ defaultSrc?: string;
21
+ title?: React.ReactNode;
22
+ description?: React.ReactNode;
23
+ alt?: string;
24
+ accept?: string;
25
+ disabled?: boolean;
26
+ onFileChange?: (file: File | null) => void;
27
+ onRemove?: () => void;
28
+ onError?: (message: string) => void;
29
+ maxSizeBytes?: number;
30
+ renderPreview?: (src: string) => React.ReactNode;
31
+ };
32
+ export declare function Image({ type, alignment, src, defaultSrc, title, description, alt, accept, disabled, onFileChange, onRemove, onError, maxSizeBytes, renderPreview, className, ...props }: ImageProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,88 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { resolveMagnaAsset as __resolveMagnaAsset_1 } from "../../magna-assets.js";
4
+ /* eslint-disable @next/next/no-img-element */
5
+ import * as React from "react";
6
+ import { cn } from "../../utils/cn.js";
7
+ import * as Button from "./button.js";
8
+ import * as CompactButton from "./compact-button.js";
9
+ import * as LinkButton from "./link-button.js";
10
+ import * as FileFormatIcon from "./file-format-icon.js";
11
+ import * as ProgressBar from "./progress-bar.js";
12
+ const image = (name, className) => (_jsx("img", { src: __resolveMagnaAsset_1(`/magna/feeds/${name}.svg`), alt: '', "aria-hidden": 'true', className: cn('block max-w-none shrink-0', className) }));
13
+ export function Card({ filename, description, status = 'uploading', showStatus = true, progress = 0, format = 'PDF', icon, onCancel, onRemove, onRetry, disabled = false, className, ...props }) {
14
+ const id = React.useId();
15
+ const isUploading = status === 'uploading';
16
+ const action = isUploading ? onCancel : onRemove;
17
+ return (_jsxs("div", { ...props, className: cn('flex w-full max-w-[400px] flex-col gap-4 overflow-hidden rounded-xl border bg-bg-white-0 py-[15px] pe-[15px] ps-[13px]', status === 'error' ? 'border-error-base' : 'border-stroke-soft-200', className), children: [_jsxs("div", { className: 'flex items-start gap-3', children: [icon ?? (_jsx(FileFormatIcon.Root, { format: format, color: 'red', "aria-hidden": 'true' })), _jsxs("div", { className: 'flex min-w-0 flex-1 flex-col items-start', children: [_jsx("div", { id: id, className: 'break-words text-label-sm text-text-strong-950', children: filename }), _jsxs("div", { className: 'mt-1 flex flex-wrap items-center gap-1 text-paragraph-xs text-text-sub-600', children: [description && _jsx("span", { children: description }), showStatus && (_jsxs(_Fragment, { children: [description && _jsx("span", { "aria-hidden": 'true', children: "\u2219" }), _jsxs("span", { role: 'status', className: 'inline-flex items-center gap-1 text-text-strong-950', children: [image(`upload-${isUploading ? 'loading' : status}`, isUploading ? 'motion-safe:animate-spin' : undefined), isUploading
18
+ ? 'Uploading...'
19
+ : status === 'success'
20
+ ? 'Completed'
21
+ : 'Failed'] })] }))] }), status === 'error' && (_jsx(LinkButton.Root, { type: 'button', variant: 'error', underline: true, disabled: disabled || !onRetry, onClick: onRetry, className: 'mt-2', children: "Try Again" }))] }), _jsx(CompactButton.Root, { type: 'button', variant: 'ghost', "aria-label": isUploading ? `Cancel upload of ${filename}` : `Remove ${filename}`, disabled: disabled || !action, onClick: action, children: image(isUploading
22
+ ? 'upload-cancel'
23
+ : status === 'error'
24
+ ? 'upload-delete-error'
25
+ : 'upload-delete') })] }), isUploading && (_jsx(ProgressBar.Root, { value: progress, "aria-labelledby": id }))] }));
26
+ }
27
+ export function Image({ type = 'avatar', alignment = 'vertical', src, defaultSrc, title = 'Upload Image', description = 'Min 400x400px, PNG or JPEG', alt = 'Uploaded image', accept = 'image/png,image/jpeg', disabled = false, onFileChange, onRemove, onError, maxSizeBytes, renderPreview, className, ...props }) {
28
+ const [internal, setInternal] = React.useState(defaultSrc ?? null);
29
+ const [error, setError] = React.useState('');
30
+ const input = React.useRef(null);
31
+ const uploadButton = React.useRef(null);
32
+ const ownedUrl = React.useRef(null);
33
+ const preview = src === undefined ? internal : src;
34
+ const compact = alignment === 'horizontal';
35
+ const id = React.useId();
36
+ React.useEffect(() => () => {
37
+ if (ownedUrl.current)
38
+ URL.revokeObjectURL(ownedUrl.current);
39
+ }, []);
40
+ const release = () => {
41
+ if (ownedUrl.current) {
42
+ URL.revokeObjectURL(ownedUrl.current);
43
+ ownedUrl.current = null;
44
+ }
45
+ };
46
+ const select = (file) => {
47
+ const accepted = accept
48
+ .split(',')
49
+ .map((s) => s.trim())
50
+ .filter(Boolean);
51
+ const matches = accepted.length === 0 ||
52
+ accepted.some((pattern) => pattern.startsWith('.')
53
+ ? file.name.toLowerCase().endsWith(pattern.toLowerCase())
54
+ : pattern.endsWith('/*')
55
+ ? file.type.startsWith(pattern.slice(0, -1))
56
+ : file.type === pattern);
57
+ const message = !matches
58
+ ? 'Choose an accepted image file.'
59
+ : maxSizeBytes !== undefined && file.size > maxSizeBytes
60
+ ? 'The selected image exceeds the size limit.'
61
+ : '';
62
+ setError(message);
63
+ if (message) {
64
+ onError?.(message);
65
+ return;
66
+ }
67
+ release();
68
+ const url = URL.createObjectURL(file);
69
+ ownedUrl.current = url;
70
+ if (src === undefined)
71
+ setInternal(url);
72
+ onFileChange?.(file);
73
+ };
74
+ return (_jsxs("div", { ...props, className: cn('flex max-w-full items-start gap-5', compact && 'items-center', className), children: [_jsx("div", { className: cn('flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-bg-soft-200', compact ? 'size-14' : 'size-16', preview && type === 'avatar' && 'bg-yellow-200'), children: preview ? ((renderPreview?.(preview) ?? (_jsx("img", { src: preview, alt: alt, className: 'size-full rounded-full object-cover' })))) : type === 'avatar' ? (image(compact ? 'upload-avatar-empty56' : 'upload-avatar-empty64')) : (_jsx("span", { className: compact ? 'scale-[1.4]' : 'scale-[1.6]', children: image('upload-company-empty') })) }), _jsxs("div", { className: 'min-w-0 space-y-3', children: [!compact && (_jsxs("div", { className: 'space-y-1', children: [_jsx("div", { id: `${id}-title`, className: 'text-label-md text-text-strong-950', children: title }), _jsx("div", { id: `${id}-description`, className: 'text-paragraph-sm text-text-sub-600', children: description })] })), _jsx("input", { ref: input, type: 'file', accept: accept, disabled: disabled, className: 'hidden', "aria-label": type === 'avatar' ? 'Choose avatar image' : 'Choose company image', onChange: (event) => {
75
+ const file = event.target.files?.[0];
76
+ if (file)
77
+ select(file);
78
+ event.target.value = '';
79
+ } }), _jsxs("div", { className: 'flex flex-wrap items-center gap-3', children: [preview && (_jsx(Button.Root, { type: 'button', size: 'xsmall', variant: 'error', mode: 'stroke', disabled: disabled, onClick: () => {
80
+ release();
81
+ if (src === undefined)
82
+ setInternal(null);
83
+ setError('');
84
+ onFileChange?.(null);
85
+ onRemove?.();
86
+ queueMicrotask(() => uploadButton.current?.focus());
87
+ }, children: "Remove" })), _jsx(Button.Root, { ref: uploadButton, type: 'button', size: 'xsmall', variant: 'neutral', mode: 'stroke', disabled: disabled, "aria-describedby": !compact ? `${id}-description` : undefined, onClick: () => input.current?.click(), children: preview ? 'Change' : 'Upload' })] }), error && (_jsx("p", { role: 'alert', className: 'text-paragraph-xs text-error-base', children: error }))] })] }));
88
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import type { PolymorphicComponentProps } from "../../utils/polymorphic.js";
3
+ export declare const Root: React.ForwardRefExoticComponent<React.LabelHTMLAttributes<HTMLLabelElement> & {
4
+ asChild?: boolean;
5
+ } & React.RefAttributes<HTMLLabelElement>>;
6
+ export declare const Button: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
7
+ asChild?: boolean;
8
+ } & React.RefAttributes<HTMLDivElement>>;
9
+ export declare function Icon<T extends React.ElementType = 'div'>({ as, className, ...props }: PolymorphicComponentProps<T>): import("react/jsx-runtime").JSX.Element;
10
+ export { Card, Image } from "./file-upload-compositions.js";
11
+ export type { CardProps, ImageProps } from "./file-upload-compositions.js";
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ import { cn } from "../../utils/cn.js";
6
+ export const Root = React.forwardRef(function FileUpload({ asChild, className, ...props }, ref) {
7
+ const Element = asChild ? Slot : 'label';
8
+ return (_jsx(Element, { ...props, ref: ref, className: cn('flex w-full cursor-pointer flex-col items-center gap-5 rounded-xl border border-dashed border-stroke-sub-300 bg-bg-white-0 p-8 text-center transition duration-200 ease-out focus-within:ring-2 focus-within:ring-primary-base hover:bg-bg-weak-50', className) }));
9
+ });
10
+ Root.displayName = 'FileUpload';
11
+ export const Button = React.forwardRef(function FileUploadButton({ asChild, className, ...props }, ref) {
12
+ const Element = asChild ? Slot : 'div';
13
+ return (_jsx(Element, { ...props, ref: ref, className: cn('pointer-events-none inline-flex h-8 items-center justify-center gap-2.5 whitespace-nowrap rounded-lg bg-bg-white-0 px-2.5 text-label-sm text-text-sub-600 ring-1 ring-inset ring-stroke-soft-200', className) }));
14
+ });
15
+ Button.displayName = 'FileUploadButton';
16
+ export function Icon({ as, className, ...props }) {
17
+ const Element = as || 'div';
18
+ return (_jsx(Element, { ...props, className: cn('size-6 text-text-sub-600', className) }));
19
+ }
20
+ export { Card, Image } from "./file-upload-compositions.js";