@mihcm/ui 0.14.1

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 (737) hide show
  1. package/README.md +138 -0
  2. package/dist/AccessLevelGroup.d.ts +37 -0
  3. package/dist/AccessLevelGroup.d.ts.map +1 -0
  4. package/dist/AccessLevelGroup.js +39 -0
  5. package/dist/AccessLevelGroup.js.map +1 -0
  6. package/dist/AccessLevelGroup.native.d.ts +18 -0
  7. package/dist/AccessLevelGroup.native.d.ts.map +1 -0
  8. package/dist/AccessLevelGroup.native.js +40 -0
  9. package/dist/AccessLevelGroup.native.js.map +1 -0
  10. package/dist/Accordion.d.ts +52 -0
  11. package/dist/Accordion.d.ts.map +1 -0
  12. package/dist/Accordion.js +90 -0
  13. package/dist/Accordion.js.map +1 -0
  14. package/dist/Accordion.native.d.ts +36 -0
  15. package/dist/Accordion.native.d.ts.map +1 -0
  16. package/dist/Accordion.native.js +86 -0
  17. package/dist/Accordion.native.js.map +1 -0
  18. package/dist/Alert.d.ts +33 -0
  19. package/dist/Alert.d.ts.map +1 -0
  20. package/dist/Alert.js +45 -0
  21. package/dist/Alert.js.map +1 -0
  22. package/dist/Alert.native.d.ts +26 -0
  23. package/dist/Alert.native.d.ts.map +1 -0
  24. package/dist/Alert.native.js +41 -0
  25. package/dist/Alert.native.js.map +1 -0
  26. package/dist/AlertDialog.d.ts +57 -0
  27. package/dist/AlertDialog.d.ts.map +1 -0
  28. package/dist/AlertDialog.js +91 -0
  29. package/dist/AlertDialog.js.map +1 -0
  30. package/dist/AlertDialog.native.d.ts +66 -0
  31. package/dist/AlertDialog.native.d.ts.map +1 -0
  32. package/dist/AlertDialog.native.js +71 -0
  33. package/dist/AlertDialog.native.js.map +1 -0
  34. package/dist/AspectRatio.d.ts +18 -0
  35. package/dist/AspectRatio.d.ts.map +1 -0
  36. package/dist/AspectRatio.js +19 -0
  37. package/dist/AspectRatio.js.map +1 -0
  38. package/dist/AspectRatio.native.d.ts +7 -0
  39. package/dist/AspectRatio.native.d.ts.map +1 -0
  40. package/dist/AspectRatio.native.js +13 -0
  41. package/dist/AspectRatio.native.js.map +1 -0
  42. package/dist/Avatar.d.ts +45 -0
  43. package/dist/Avatar.d.ts.map +1 -0
  44. package/dist/Avatar.js +69 -0
  45. package/dist/Avatar.js.map +1 -0
  46. package/dist/Avatar.native.d.ts +38 -0
  47. package/dist/Avatar.native.d.ts.map +1 -0
  48. package/dist/Avatar.native.js +56 -0
  49. package/dist/Avatar.native.js.map +1 -0
  50. package/dist/AvatarGroup.d.ts +32 -0
  51. package/dist/AvatarGroup.d.ts.map +1 -0
  52. package/dist/AvatarGroup.js +45 -0
  53. package/dist/AvatarGroup.js.map +1 -0
  54. package/dist/AvatarGroup.native.d.ts +18 -0
  55. package/dist/AvatarGroup.native.d.ts.map +1 -0
  56. package/dist/AvatarGroup.native.js +35 -0
  57. package/dist/AvatarGroup.native.js.map +1 -0
  58. package/dist/Badge.d.ts +26 -0
  59. package/dist/Badge.d.ts.map +1 -0
  60. package/dist/Badge.js +44 -0
  61. package/dist/Badge.js.map +1 -0
  62. package/dist/Badge.native.d.ts +23 -0
  63. package/dist/Badge.native.d.ts.map +1 -0
  64. package/dist/Badge.native.js +49 -0
  65. package/dist/Badge.native.js.map +1 -0
  66. package/dist/Banner.d.ts +27 -0
  67. package/dist/Banner.d.ts.map +1 -0
  68. package/dist/Banner.js +41 -0
  69. package/dist/Banner.js.map +1 -0
  70. package/dist/Banner.native.d.ts +24 -0
  71. package/dist/Banner.native.d.ts.map +1 -0
  72. package/dist/Banner.native.js +39 -0
  73. package/dist/Banner.native.js.map +1 -0
  74. package/dist/BarList.d.ts +27 -0
  75. package/dist/BarList.d.ts.map +1 -0
  76. package/dist/BarList.js +25 -0
  77. package/dist/BarList.js.map +1 -0
  78. package/dist/Breadcrumb.d.ts +67 -0
  79. package/dist/Breadcrumb.d.ts.map +1 -0
  80. package/dist/Breadcrumb.js +63 -0
  81. package/dist/Breadcrumb.js.map +1 -0
  82. package/dist/Breadcrumb.native.d.ts +64 -0
  83. package/dist/Breadcrumb.native.d.ts.map +1 -0
  84. package/dist/Breadcrumb.native.js +50 -0
  85. package/dist/Breadcrumb.native.js.map +1 -0
  86. package/dist/Button.d.ts +42 -0
  87. package/dist/Button.d.ts.map +1 -0
  88. package/dist/Button.js +68 -0
  89. package/dist/Button.js.map +1 -0
  90. package/dist/Button.native.d.ts +38 -0
  91. package/dist/Button.native.d.ts.map +1 -0
  92. package/dist/Button.native.js +51 -0
  93. package/dist/Button.native.js.map +1 -0
  94. package/dist/Calendar.d.ts +16 -0
  95. package/dist/Calendar.d.ts.map +1 -0
  96. package/dist/Calendar.js +94 -0
  97. package/dist/Calendar.js.map +1 -0
  98. package/dist/Calendar.native.d.ts +21 -0
  99. package/dist/Calendar.native.d.ts.map +1 -0
  100. package/dist/Calendar.native.js +15 -0
  101. package/dist/Calendar.native.js.map +1 -0
  102. package/dist/Card.d.ts +29 -0
  103. package/dist/Card.d.ts.map +1 -0
  104. package/dist/Card.js +44 -0
  105. package/dist/Card.js.map +1 -0
  106. package/dist/Card.native.d.ts +20 -0
  107. package/dist/Card.native.d.ts.map +1 -0
  108. package/dist/Card.native.js +32 -0
  109. package/dist/Card.native.js.map +1 -0
  110. package/dist/Carousel.d.ts +46 -0
  111. package/dist/Carousel.d.ts.map +1 -0
  112. package/dist/Carousel.js +115 -0
  113. package/dist/Carousel.js.map +1 -0
  114. package/dist/Carousel.native.d.ts +59 -0
  115. package/dist/Carousel.native.d.ts.map +1 -0
  116. package/dist/Carousel.native.js +93 -0
  117. package/dist/Carousel.native.js.map +1 -0
  118. package/dist/CategoryBar.d.ts +22 -0
  119. package/dist/CategoryBar.d.ts.map +1 -0
  120. package/dist/CategoryBar.js +27 -0
  121. package/dist/CategoryBar.js.map +1 -0
  122. package/dist/Chart.d.ts +77 -0
  123. package/dist/Chart.d.ts.map +1 -0
  124. package/dist/Chart.js +197 -0
  125. package/dist/Chart.js.map +1 -0
  126. package/dist/Checkbox.d.ts +28 -0
  127. package/dist/Checkbox.d.ts.map +1 -0
  128. package/dist/Checkbox.js +44 -0
  129. package/dist/Checkbox.js.map +1 -0
  130. package/dist/Checkbox.native.d.ts +13 -0
  131. package/dist/Checkbox.native.d.ts.map +1 -0
  132. package/dist/Checkbox.native.js +34 -0
  133. package/dist/Checkbox.native.js.map +1 -0
  134. package/dist/CheckboxGrid.d.ts +49 -0
  135. package/dist/CheckboxGrid.d.ts.map +1 -0
  136. package/dist/CheckboxGrid.js +79 -0
  137. package/dist/CheckboxGrid.js.map +1 -0
  138. package/dist/CheckboxGrid.native.d.ts +14 -0
  139. package/dist/CheckboxGrid.native.d.ts.map +1 -0
  140. package/dist/CheckboxGrid.native.js +47 -0
  141. package/dist/CheckboxGrid.native.js.map +1 -0
  142. package/dist/Collapsible.d.ts +51 -0
  143. package/dist/Collapsible.d.ts.map +1 -0
  144. package/dist/Collapsible.js +101 -0
  145. package/dist/Collapsible.js.map +1 -0
  146. package/dist/Collapsible.native.d.ts +53 -0
  147. package/dist/Collapsible.native.d.ts.map +1 -0
  148. package/dist/Collapsible.native.js +109 -0
  149. package/dist/Collapsible.native.js.map +1 -0
  150. package/dist/Combobox.d.ts +42 -0
  151. package/dist/Combobox.d.ts.map +1 -0
  152. package/dist/Combobox.js +96 -0
  153. package/dist/Combobox.js.map +1 -0
  154. package/dist/Combobox.native.d.ts +21 -0
  155. package/dist/Combobox.native.d.ts.map +1 -0
  156. package/dist/Combobox.native.js +28 -0
  157. package/dist/Combobox.native.js.map +1 -0
  158. package/dist/Command.d.ts +107 -0
  159. package/dist/Command.d.ts.map +1 -0
  160. package/dist/Command.js +68 -0
  161. package/dist/Command.js.map +1 -0
  162. package/dist/Command.native.d.ts +41 -0
  163. package/dist/Command.native.d.ts.map +1 -0
  164. package/dist/Command.native.js +31 -0
  165. package/dist/Command.native.js.map +1 -0
  166. package/dist/ContextMenu.d.ts +48 -0
  167. package/dist/ContextMenu.d.ts.map +1 -0
  168. package/dist/ContextMenu.js +79 -0
  169. package/dist/ContextMenu.js.map +1 -0
  170. package/dist/ContextMenu.native.d.ts +81 -0
  171. package/dist/ContextMenu.native.d.ts.map +1 -0
  172. package/dist/ContextMenu.native.js +82 -0
  173. package/dist/ContextMenu.native.js.map +1 -0
  174. package/dist/DataTable.d.ts +98 -0
  175. package/dist/DataTable.d.ts.map +1 -0
  176. package/dist/DataTable.js +291 -0
  177. package/dist/DataTable.js.map +1 -0
  178. package/dist/DataTable.native.d.ts +31 -0
  179. package/dist/DataTable.native.d.ts.map +1 -0
  180. package/dist/DataTable.native.js +22 -0
  181. package/dist/DataTable.native.js.map +1 -0
  182. package/dist/DatePicker.d.ts +63 -0
  183. package/dist/DatePicker.d.ts.map +1 -0
  184. package/dist/DatePicker.js +106 -0
  185. package/dist/DatePicker.js.map +1 -0
  186. package/dist/DatePicker.native.d.ts +21 -0
  187. package/dist/DatePicker.native.d.ts.map +1 -0
  188. package/dist/DatePicker.native.js +15 -0
  189. package/dist/DatePicker.native.js.map +1 -0
  190. package/dist/Dialog.d.ts +52 -0
  191. package/dist/Dialog.d.ts.map +1 -0
  192. package/dist/Dialog.js +93 -0
  193. package/dist/Dialog.js.map +1 -0
  194. package/dist/Dialog.native.d.ts +57 -0
  195. package/dist/Dialog.native.d.ts.map +1 -0
  196. package/dist/Dialog.native.js +62 -0
  197. package/dist/Dialog.native.js.map +1 -0
  198. package/dist/Drawer.d.ts +36 -0
  199. package/dist/Drawer.d.ts.map +1 -0
  200. package/dist/Drawer.js +57 -0
  201. package/dist/Drawer.js.map +1 -0
  202. package/dist/Drawer.native.d.ts +50 -0
  203. package/dist/Drawer.native.d.ts.map +1 -0
  204. package/dist/Drawer.native.js +43 -0
  205. package/dist/Drawer.native.js.map +1 -0
  206. package/dist/DropdownMenu.d.ts +57 -0
  207. package/dist/DropdownMenu.d.ts.map +1 -0
  208. package/dist/DropdownMenu.js +192 -0
  209. package/dist/DropdownMenu.js.map +1 -0
  210. package/dist/DropdownMenu.native.d.ts +53 -0
  211. package/dist/DropdownMenu.native.d.ts.map +1 -0
  212. package/dist/DropdownMenu.native.js +71 -0
  213. package/dist/DropdownMenu.native.js.map +1 -0
  214. package/dist/Dropzone.d.ts +27 -0
  215. package/dist/Dropzone.d.ts.map +1 -0
  216. package/dist/Dropzone.js +33 -0
  217. package/dist/Dropzone.js.map +1 -0
  218. package/dist/EmptyState.d.ts +21 -0
  219. package/dist/EmptyState.d.ts.map +1 -0
  220. package/dist/EmptyState.js +16 -0
  221. package/dist/EmptyState.js.map +1 -0
  222. package/dist/EmptyState.native.d.ts +19 -0
  223. package/dist/EmptyState.native.d.ts.map +1 -0
  224. package/dist/EmptyState.native.js +16 -0
  225. package/dist/EmptyState.native.js.map +1 -0
  226. package/dist/Form.d.ts +310 -0
  227. package/dist/Form.d.ts.map +1 -0
  228. package/dist/Form.js +260 -0
  229. package/dist/Form.js.map +1 -0
  230. package/dist/Form.native.d.ts +36 -0
  231. package/dist/Form.native.d.ts.map +1 -0
  232. package/dist/Form.native.js +33 -0
  233. package/dist/Form.native.js.map +1 -0
  234. package/dist/HoverCard.d.ts +47 -0
  235. package/dist/HoverCard.d.ts.map +1 -0
  236. package/dist/HoverCard.js +86 -0
  237. package/dist/HoverCard.js.map +1 -0
  238. package/dist/HoverCard.native.d.ts +48 -0
  239. package/dist/HoverCard.native.d.ts.map +1 -0
  240. package/dist/HoverCard.native.js +19 -0
  241. package/dist/HoverCard.native.js.map +1 -0
  242. package/dist/IconSidebar.d.ts +50 -0
  243. package/dist/IconSidebar.d.ts.map +1 -0
  244. package/dist/IconSidebar.js +121 -0
  245. package/dist/IconSidebar.js.map +1 -0
  246. package/dist/IconSidebar.native.d.ts +40 -0
  247. package/dist/IconSidebar.native.d.ts.map +1 -0
  248. package/dist/IconSidebar.native.js +24 -0
  249. package/dist/IconSidebar.native.js.map +1 -0
  250. package/dist/Input.d.ts +52 -0
  251. package/dist/Input.d.ts.map +1 -0
  252. package/dist/Input.js +57 -0
  253. package/dist/Input.js.map +1 -0
  254. package/dist/Input.native.d.ts +37 -0
  255. package/dist/Input.native.d.ts.map +1 -0
  256. package/dist/Input.native.js +39 -0
  257. package/dist/Input.native.js.map +1 -0
  258. package/dist/InputOTP.d.ts +30 -0
  259. package/dist/InputOTP.d.ts.map +1 -0
  260. package/dist/InputOTP.js +47 -0
  261. package/dist/InputOTP.js.map +1 -0
  262. package/dist/InputOTP.native.d.ts +32 -0
  263. package/dist/InputOTP.native.d.ts.map +1 -0
  264. package/dist/InputOTP.native.js +48 -0
  265. package/dist/InputOTP.native.js.map +1 -0
  266. package/dist/Label.d.ts +26 -0
  267. package/dist/Label.d.ts.map +1 -0
  268. package/dist/Label.js +35 -0
  269. package/dist/Label.js.map +1 -0
  270. package/dist/Label.native.d.ts +26 -0
  271. package/dist/Label.native.d.ts.map +1 -0
  272. package/dist/Label.native.js +30 -0
  273. package/dist/Label.native.js.map +1 -0
  274. package/dist/Link.d.ts +21 -0
  275. package/dist/Link.d.ts.map +1 -0
  276. package/dist/Link.js +46 -0
  277. package/dist/Link.js.map +1 -0
  278. package/dist/Link.native.d.ts +23 -0
  279. package/dist/Link.native.d.ts.map +1 -0
  280. package/dist/Link.native.js +59 -0
  281. package/dist/Link.native.js.map +1 -0
  282. package/dist/Logo.d.ts +25 -0
  283. package/dist/Logo.d.ts.map +1 -0
  284. package/dist/Logo.js +58 -0
  285. package/dist/Logo.js.map +1 -0
  286. package/dist/Logo.native.d.ts +22 -0
  287. package/dist/Logo.native.d.ts.map +1 -0
  288. package/dist/Logo.native.js +46 -0
  289. package/dist/Logo.native.js.map +1 -0
  290. package/dist/MainSidebar.d.ts +2 -0
  291. package/dist/MainSidebar.d.ts.map +1 -0
  292. package/dist/MainSidebar.js +3 -0
  293. package/dist/MainSidebar.js.map +1 -0
  294. package/dist/MainSidebar.native.d.ts +2 -0
  295. package/dist/MainSidebar.native.d.ts.map +1 -0
  296. package/dist/MainSidebar.native.js +2 -0
  297. package/dist/MainSidebar.native.js.map +1 -0
  298. package/dist/Menubar.d.ts +70 -0
  299. package/dist/Menubar.d.ts.map +1 -0
  300. package/dist/Menubar.js +142 -0
  301. package/dist/Menubar.js.map +1 -0
  302. package/dist/NavigationMenu.d.ts +12 -0
  303. package/dist/NavigationMenu.d.ts.map +1 -0
  304. package/dist/NavigationMenu.js +63 -0
  305. package/dist/NavigationMenu.js.map +1 -0
  306. package/dist/NavigationMenu.native.d.ts +44 -0
  307. package/dist/NavigationMenu.native.d.ts.map +1 -0
  308. package/dist/NavigationMenu.native.js +43 -0
  309. package/dist/NavigationMenu.native.js.map +1 -0
  310. package/dist/NotificationBadge.d.ts +33 -0
  311. package/dist/NotificationBadge.d.ts.map +1 -0
  312. package/dist/NotificationBadge.js +49 -0
  313. package/dist/NotificationBadge.js.map +1 -0
  314. package/dist/NotificationBadge.native.d.ts +25 -0
  315. package/dist/NotificationBadge.native.d.ts.map +1 -0
  316. package/dist/NotificationBadge.native.js +41 -0
  317. package/dist/NotificationBadge.native.js.map +1 -0
  318. package/dist/PageShell.d.ts +24 -0
  319. package/dist/PageShell.d.ts.map +1 -0
  320. package/dist/PageShell.js +24 -0
  321. package/dist/PageShell.js.map +1 -0
  322. package/dist/PageShell.native.d.ts +21 -0
  323. package/dist/PageShell.native.d.ts.map +1 -0
  324. package/dist/PageShell.native.js +19 -0
  325. package/dist/PageShell.native.js.map +1 -0
  326. package/dist/Pagination.d.ts +53 -0
  327. package/dist/Pagination.d.ts.map +1 -0
  328. package/dist/Pagination.js +79 -0
  329. package/dist/Pagination.js.map +1 -0
  330. package/dist/Pagination.native.d.ts +48 -0
  331. package/dist/Pagination.native.d.ts.map +1 -0
  332. package/dist/Pagination.native.js +55 -0
  333. package/dist/Pagination.native.js.map +1 -0
  334. package/dist/Popover.d.ts +57 -0
  335. package/dist/Popover.d.ts.map +1 -0
  336. package/dist/Popover.js +71 -0
  337. package/dist/Popover.js.map +1 -0
  338. package/dist/Popover.native.d.ts +48 -0
  339. package/dist/Popover.native.d.ts.map +1 -0
  340. package/dist/Popover.native.js +65 -0
  341. package/dist/Popover.native.js.map +1 -0
  342. package/dist/Popper.d.ts +54 -0
  343. package/dist/Popper.d.ts.map +1 -0
  344. package/dist/Popper.js +219 -0
  345. package/dist/Popper.js.map +1 -0
  346. package/dist/Progress.d.ts +79 -0
  347. package/dist/Progress.d.ts.map +1 -0
  348. package/dist/Progress.js +110 -0
  349. package/dist/Progress.js.map +1 -0
  350. package/dist/Progress.native.d.ts +42 -0
  351. package/dist/Progress.native.d.ts.map +1 -0
  352. package/dist/Progress.native.js +91 -0
  353. package/dist/Progress.native.js.map +1 -0
  354. package/dist/ProgressCircle.d.ts +69 -0
  355. package/dist/ProgressCircle.d.ts.map +1 -0
  356. package/dist/ProgressCircle.js +78 -0
  357. package/dist/ProgressCircle.js.map +1 -0
  358. package/dist/RadioCardGroup.d.ts +26 -0
  359. package/dist/RadioCardGroup.d.ts.map +1 -0
  360. package/dist/RadioCardGroup.js +26 -0
  361. package/dist/RadioCardGroup.js.map +1 -0
  362. package/dist/RadioGroup.d.ts +35 -0
  363. package/dist/RadioGroup.d.ts.map +1 -0
  364. package/dist/RadioGroup.js +68 -0
  365. package/dist/RadioGroup.js.map +1 -0
  366. package/dist/RadioGroup.native.d.ts +33 -0
  367. package/dist/RadioGroup.native.d.ts.map +1 -0
  368. package/dist/RadioGroup.native.js +55 -0
  369. package/dist/RadioGroup.native.js.map +1 -0
  370. package/dist/Resizable.d.ts +32 -0
  371. package/dist/Resizable.d.ts.map +1 -0
  372. package/dist/Resizable.js +31 -0
  373. package/dist/Resizable.js.map +1 -0
  374. package/dist/Resizable.native.d.ts +32 -0
  375. package/dist/Resizable.native.d.ts.map +1 -0
  376. package/dist/Resizable.native.js +23 -0
  377. package/dist/Resizable.native.js.map +1 -0
  378. package/dist/RichTextEditor.d.ts +38 -0
  379. package/dist/RichTextEditor.d.ts.map +1 -0
  380. package/dist/RichTextEditor.js +218 -0
  381. package/dist/RichTextEditor.js.map +1 -0
  382. package/dist/ScrollArea.d.ts +4 -0
  383. package/dist/ScrollArea.d.ts.map +1 -0
  384. package/dist/ScrollArea.js +26 -0
  385. package/dist/ScrollArea.js.map +1 -0
  386. package/dist/ScrollArea.native.d.ts +19 -0
  387. package/dist/ScrollArea.native.d.ts.map +1 -0
  388. package/dist/ScrollArea.native.js +19 -0
  389. package/dist/ScrollArea.native.js.map +1 -0
  390. package/dist/SearchField.d.ts +43 -0
  391. package/dist/SearchField.d.ts.map +1 -0
  392. package/dist/SearchField.js +34 -0
  393. package/dist/SearchField.js.map +1 -0
  394. package/dist/SearchField.native.d.ts +31 -0
  395. package/dist/SearchField.native.d.ts.map +1 -0
  396. package/dist/SearchField.native.js +30 -0
  397. package/dist/SearchField.native.js.map +1 -0
  398. package/dist/SectionHeader.d.ts +58 -0
  399. package/dist/SectionHeader.d.ts.map +1 -0
  400. package/dist/SectionHeader.js +95 -0
  401. package/dist/SectionHeader.js.map +1 -0
  402. package/dist/SectionHeader.native.d.ts +45 -0
  403. package/dist/SectionHeader.native.d.ts.map +1 -0
  404. package/dist/SectionHeader.native.js +92 -0
  405. package/dist/SectionHeader.native.js.map +1 -0
  406. package/dist/Select.d.ts +78 -0
  407. package/dist/Select.d.ts.map +1 -0
  408. package/dist/Select.js +310 -0
  409. package/dist/Select.js.map +1 -0
  410. package/dist/Select.native.d.ts +53 -0
  411. package/dist/Select.native.d.ts.map +1 -0
  412. package/dist/Select.native.js +86 -0
  413. package/dist/Select.native.js.map +1 -0
  414. package/dist/Separator.d.ts +20 -0
  415. package/dist/Separator.d.ts.map +1 -0
  416. package/dist/Separator.js +20 -0
  417. package/dist/Separator.js.map +1 -0
  418. package/dist/Separator.native.d.ts +8 -0
  419. package/dist/Separator.native.d.ts.map +1 -0
  420. package/dist/Separator.native.js +17 -0
  421. package/dist/Separator.native.js.map +1 -0
  422. package/dist/Sheet.d.ts +54 -0
  423. package/dist/Sheet.d.ts.map +1 -0
  424. package/dist/Sheet.js +191 -0
  425. package/dist/Sheet.js.map +1 -0
  426. package/dist/Sheet.native.d.ts +55 -0
  427. package/dist/Sheet.native.d.ts.map +1 -0
  428. package/dist/Sheet.native.js +112 -0
  429. package/dist/Sheet.native.js.map +1 -0
  430. package/dist/Sidebar.d.ts +131 -0
  431. package/dist/Sidebar.d.ts.map +1 -0
  432. package/dist/Sidebar.js +328 -0
  433. package/dist/Sidebar.js.map +1 -0
  434. package/dist/Skeleton.d.ts +14 -0
  435. package/dist/Skeleton.d.ts.map +1 -0
  436. package/dist/Skeleton.js +17 -0
  437. package/dist/Skeleton.js.map +1 -0
  438. package/dist/Skeleton.native.d.ts +6 -0
  439. package/dist/Skeleton.native.d.ts.map +1 -0
  440. package/dist/Skeleton.native.js +26 -0
  441. package/dist/Skeleton.native.js.map +1 -0
  442. package/dist/Slider.d.ts +63 -0
  443. package/dist/Slider.d.ts.map +1 -0
  444. package/dist/Slider.js +109 -0
  445. package/dist/Slider.js.map +1 -0
  446. package/dist/Slider.native.d.ts +38 -0
  447. package/dist/Slider.native.d.ts.map +1 -0
  448. package/dist/Slider.native.js +18 -0
  449. package/dist/Slider.native.js.map +1 -0
  450. package/dist/SortableList.d.ts +26 -0
  451. package/dist/SortableList.d.ts.map +1 -0
  452. package/dist/SortableList.js +44 -0
  453. package/dist/SortableList.js.map +1 -0
  454. package/dist/SparkChart.d.ts +34 -0
  455. package/dist/SparkChart.d.ts.map +1 -0
  456. package/dist/SparkChart.js +55 -0
  457. package/dist/SparkChart.js.map +1 -0
  458. package/dist/StatCard.d.ts +35 -0
  459. package/dist/StatCard.d.ts.map +1 -0
  460. package/dist/StatCard.js +37 -0
  461. package/dist/StatCard.js.map +1 -0
  462. package/dist/StatCard.native.d.ts +28 -0
  463. package/dist/StatCard.native.d.ts.map +1 -0
  464. package/dist/StatCard.native.js +31 -0
  465. package/dist/StatCard.native.js.map +1 -0
  466. package/dist/StatusBadge.d.ts +23 -0
  467. package/dist/StatusBadge.d.ts.map +1 -0
  468. package/dist/StatusBadge.js +33 -0
  469. package/dist/StatusBadge.js.map +1 -0
  470. package/dist/StatusBadge.native.d.ts +21 -0
  471. package/dist/StatusBadge.native.d.ts.map +1 -0
  472. package/dist/StatusBadge.native.js +37 -0
  473. package/dist/StatusBadge.native.js.map +1 -0
  474. package/dist/Switch.d.ts +31 -0
  475. package/dist/Switch.d.ts.map +1 -0
  476. package/dist/Switch.js +46 -0
  477. package/dist/Switch.js.map +1 -0
  478. package/dist/Switch.native.d.ts +16 -0
  479. package/dist/Switch.native.d.ts.map +1 -0
  480. package/dist/Switch.native.js +41 -0
  481. package/dist/Switch.native.js.map +1 -0
  482. package/dist/TabNavigation.d.ts +49 -0
  483. package/dist/TabNavigation.d.ts.map +1 -0
  484. package/dist/TabNavigation.js +121 -0
  485. package/dist/TabNavigation.js.map +1 -0
  486. package/dist/Table.d.ts +54 -0
  487. package/dist/Table.d.ts.map +1 -0
  488. package/dist/Table.js +96 -0
  489. package/dist/Table.js.map +1 -0
  490. package/dist/Table.native.d.ts +37 -0
  491. package/dist/Table.native.d.ts.map +1 -0
  492. package/dist/Table.native.js +37 -0
  493. package/dist/Table.native.js.map +1 -0
  494. package/dist/Tabs.d.ts +45 -0
  495. package/dist/Tabs.d.ts.map +1 -0
  496. package/dist/Tabs.js +94 -0
  497. package/dist/Tabs.js.map +1 -0
  498. package/dist/Tabs.native.d.ts +47 -0
  499. package/dist/Tabs.native.d.ts.map +1 -0
  500. package/dist/Tabs.native.js +57 -0
  501. package/dist/Tabs.native.js.map +1 -0
  502. package/dist/Tag.d.ts +24 -0
  503. package/dist/Tag.d.ts.map +1 -0
  504. package/dist/Tag.js +41 -0
  505. package/dist/Tag.js.map +1 -0
  506. package/dist/Tag.native.d.ts +23 -0
  507. package/dist/Tag.native.d.ts.map +1 -0
  508. package/dist/Tag.native.js +55 -0
  509. package/dist/Tag.native.js.map +1 -0
  510. package/dist/Text.d.ts +26 -0
  511. package/dist/Text.d.ts.map +1 -0
  512. package/dist/Text.js +63 -0
  513. package/dist/Text.js.map +1 -0
  514. package/dist/Text.native.d.ts +18 -0
  515. package/dist/Text.native.d.ts.map +1 -0
  516. package/dist/Text.native.js +58 -0
  517. package/dist/Text.native.js.map +1 -0
  518. package/dist/Textarea.d.ts +23 -0
  519. package/dist/Textarea.d.ts.map +1 -0
  520. package/dist/Textarea.js +39 -0
  521. package/dist/Textarea.js.map +1 -0
  522. package/dist/Textarea.native.d.ts +16 -0
  523. package/dist/Textarea.native.d.ts.map +1 -0
  524. package/dist/Textarea.native.js +30 -0
  525. package/dist/Textarea.native.js.map +1 -0
  526. package/dist/TiptapEditor.d.ts +24 -0
  527. package/dist/TiptapEditor.d.ts.map +1 -0
  528. package/dist/TiptapEditor.js +84 -0
  529. package/dist/TiptapEditor.js.map +1 -0
  530. package/dist/TitleBar.d.ts +31 -0
  531. package/dist/TitleBar.d.ts.map +1 -0
  532. package/dist/TitleBar.js +27 -0
  533. package/dist/TitleBar.js.map +1 -0
  534. package/dist/TitleBar.native.d.ts +19 -0
  535. package/dist/TitleBar.native.d.ts.map +1 -0
  536. package/dist/TitleBar.native.js +16 -0
  537. package/dist/TitleBar.native.js.map +1 -0
  538. package/dist/Toast.d.ts +72 -0
  539. package/dist/Toast.d.ts.map +1 -0
  540. package/dist/Toast.js +194 -0
  541. package/dist/Toast.js.map +1 -0
  542. package/dist/Toast.native.d.ts +65 -0
  543. package/dist/Toast.native.d.ts.map +1 -0
  544. package/dist/Toast.native.js +182 -0
  545. package/dist/Toast.native.js.map +1 -0
  546. package/dist/Toggle.d.ts +46 -0
  547. package/dist/Toggle.d.ts.map +1 -0
  548. package/dist/Toggle.js +70 -0
  549. package/dist/Toggle.js.map +1 -0
  550. package/dist/Toggle.native.d.ts +42 -0
  551. package/dist/Toggle.native.d.ts.map +1 -0
  552. package/dist/Toggle.native.js +56 -0
  553. package/dist/Toggle.native.js.map +1 -0
  554. package/dist/Tooltip.d.ts +32 -0
  555. package/dist/Tooltip.d.ts.map +1 -0
  556. package/dist/Tooltip.js +43 -0
  557. package/dist/Tooltip.js.map +1 -0
  558. package/dist/Tooltip.native.d.ts +25 -0
  559. package/dist/Tooltip.native.d.ts.map +1 -0
  560. package/dist/Tooltip.native.js +25 -0
  561. package/dist/Tooltip.native.js.map +1 -0
  562. package/dist/TopBar.d.ts +105 -0
  563. package/dist/TopBar.d.ts.map +1 -0
  564. package/dist/TopBar.js +90 -0
  565. package/dist/TopBar.js.map +1 -0
  566. package/dist/TopBar.native.d.ts +67 -0
  567. package/dist/TopBar.native.d.ts.map +1 -0
  568. package/dist/TopBar.native.js +41 -0
  569. package/dist/TopBar.native.js.map +1 -0
  570. package/dist/Tracker.d.ts +44 -0
  571. package/dist/Tracker.d.ts.map +1 -0
  572. package/dist/Tracker.js +92 -0
  573. package/dist/Tracker.js.map +1 -0
  574. package/dist/TransferList.d.ts +51 -0
  575. package/dist/TransferList.d.ts.map +1 -0
  576. package/dist/TransferList.js +107 -0
  577. package/dist/TransferList.js.map +1 -0
  578. package/dist/TransferList.native.d.ts +14 -0
  579. package/dist/TransferList.native.d.ts.map +1 -0
  580. package/dist/TransferList.native.js +57 -0
  581. package/dist/TransferList.native.js.map +1 -0
  582. package/dist/index.d.ts +78 -0
  583. package/dist/index.d.ts.map +1 -0
  584. package/dist/index.js +79 -0
  585. package/dist/index.js.map +1 -0
  586. package/dist/internal/cn.d.ts +7 -0
  587. package/dist/internal/cn.d.ts.map +1 -0
  588. package/dist/internal/cn.js +30 -0
  589. package/dist/internal/cn.js.map +1 -0
  590. package/package.json +499 -0
  591. package/src/AccessLevelGroup.native.tsx +103 -0
  592. package/src/AccessLevelGroup.tsx +103 -0
  593. package/src/Accordion.native.tsx +199 -0
  594. package/src/Accordion.tsx +279 -0
  595. package/src/Alert.native.tsx +100 -0
  596. package/src/Alert.tsx +101 -0
  597. package/src/AlertDialog.native.tsx +189 -0
  598. package/src/AlertDialog.tsx +194 -0
  599. package/src/AspectRatio.native.tsx +28 -0
  600. package/src/AspectRatio.tsx +35 -0
  601. package/src/Avatar.native.tsx +142 -0
  602. package/src/Avatar.tsx +155 -0
  603. package/src/AvatarGroup.native.tsx +81 -0
  604. package/src/AvatarGroup.tsx +114 -0
  605. package/src/Badge.native.tsx +85 -0
  606. package/src/Badge.tsx +93 -0
  607. package/src/Banner.native.tsx +77 -0
  608. package/src/Banner.tsx +95 -0
  609. package/src/BarList.tsx +102 -0
  610. package/src/Breadcrumb.native.tsx +238 -0
  611. package/src/Breadcrumb.tsx +258 -0
  612. package/src/Button.native.tsx +123 -0
  613. package/src/Button.tsx +153 -0
  614. package/src/Calendar.native.tsx +28 -0
  615. package/src/Calendar.tsx +211 -0
  616. package/src/Card.native.tsx +82 -0
  617. package/src/Card.tsx +94 -0
  618. package/src/Carousel.native.tsx +224 -0
  619. package/src/Carousel.tsx +292 -0
  620. package/src/CategoryBar.tsx +85 -0
  621. package/src/Chart.tsx +467 -0
  622. package/src/Checkbox.native.tsx +69 -0
  623. package/src/Checkbox.tsx +108 -0
  624. package/src/CheckboxGrid.native.tsx +160 -0
  625. package/src/CheckboxGrid.tsx +262 -0
  626. package/src/Collapsible.native.tsx +240 -0
  627. package/src/Collapsible.tsx +241 -0
  628. package/src/Combobox.native.tsx +171 -0
  629. package/src/Combobox.tsx +272 -0
  630. package/src/Command.native.tsx +71 -0
  631. package/src/Command.tsx +203 -0
  632. package/src/ContextMenu.native.tsx +313 -0
  633. package/src/ContextMenu.tsx +238 -0
  634. package/src/DataTable.native.tsx +70 -0
  635. package/src/DataTable.tsx +989 -0
  636. package/src/DatePicker.native.tsx +46 -0
  637. package/src/DatePicker.tsx +357 -0
  638. package/src/Dialog.native.tsx +181 -0
  639. package/src/Dialog.tsx +224 -0
  640. package/src/Drawer.native.tsx +134 -0
  641. package/src/Drawer.tsx +119 -0
  642. package/src/DropdownMenu.native.tsx +258 -0
  643. package/src/DropdownMenu.tsx +387 -0
  644. package/src/Dropzone.tsx +95 -0
  645. package/src/EmptyState.native.tsx +43 -0
  646. package/src/EmptyState.tsx +52 -0
  647. package/src/Form.native.tsx +94 -0
  648. package/src/Form.tsx +1324 -0
  649. package/src/HoverCard.native.tsx +63 -0
  650. package/src/HoverCard.tsx +181 -0
  651. package/src/IconSidebar.native.tsx +94 -0
  652. package/src/IconSidebar.tsx +448 -0
  653. package/src/Input.native.tsx +99 -0
  654. package/src/Input.tsx +132 -0
  655. package/src/InputOTP.native.tsx +154 -0
  656. package/src/InputOTP.tsx +119 -0
  657. package/src/Label.native.tsx +55 -0
  658. package/src/Label.tsx +60 -0
  659. package/src/Link.native.tsx +89 -0
  660. package/src/Link.tsx +85 -0
  661. package/src/Logo.native.tsx +114 -0
  662. package/src/Logo.tsx +153 -0
  663. package/src/MainSidebar.native.tsx +8 -0
  664. package/src/MainSidebar.tsx +10 -0
  665. package/src/Menubar.tsx +485 -0
  666. package/src/NavigationMenu.native.tsx +136 -0
  667. package/src/NavigationMenu.tsx +180 -0
  668. package/src/NotificationBadge.native.tsx +80 -0
  669. package/src/NotificationBadge.tsx +91 -0
  670. package/src/PageShell.native.tsx +43 -0
  671. package/src/PageShell.tsx +50 -0
  672. package/src/Pagination.native.tsx +217 -0
  673. package/src/Pagination.tsx +250 -0
  674. package/src/Popover.native.tsx +139 -0
  675. package/src/Popover.tsx +175 -0
  676. package/src/Popper.tsx +399 -0
  677. package/src/Progress.native.tsx +197 -0
  678. package/src/Progress.tsx +286 -0
  679. package/src/ProgressCircle.tsx +200 -0
  680. package/src/RadioCardGroup.tsx +97 -0
  681. package/src/RadioGroup.native.tsx +153 -0
  682. package/src/RadioGroup.tsx +201 -0
  683. package/src/Resizable.native.tsx +76 -0
  684. package/src/Resizable.tsx +88 -0
  685. package/src/RichTextEditor.tsx +513 -0
  686. package/src/ScrollArea.native.tsx +36 -0
  687. package/src/ScrollArea.tsx +62 -0
  688. package/src/SearchField.native.tsx +104 -0
  689. package/src/SearchField.tsx +136 -0
  690. package/src/SectionHeader.native.tsx +226 -0
  691. package/src/SectionHeader.tsx +250 -0
  692. package/src/Select.native.tsx +299 -0
  693. package/src/Select.tsx +710 -0
  694. package/src/Separator.native.tsx +38 -0
  695. package/src/Separator.tsx +43 -0
  696. package/src/Sheet.native.tsx +233 -0
  697. package/src/Sheet.tsx +329 -0
  698. package/src/Sidebar.tsx +956 -0
  699. package/src/Skeleton.native.tsx +47 -0
  700. package/src/Skeleton.tsx +29 -0
  701. package/src/Slider.native.tsx +64 -0
  702. package/src/Slider.tsx +284 -0
  703. package/src/SortableList.tsx +158 -0
  704. package/src/SparkChart.tsx +143 -0
  705. package/src/StatCard.native.tsx +64 -0
  706. package/src/StatCard.tsx +75 -0
  707. package/src/StatusBadge.native.tsx +57 -0
  708. package/src/StatusBadge.tsx +52 -0
  709. package/src/Switch.native.tsx +78 -0
  710. package/src/Switch.tsx +94 -0
  711. package/src/TabNavigation.tsx +329 -0
  712. package/src/Table.native.tsx +183 -0
  713. package/src/Table.tsx +260 -0
  714. package/src/Tabs.native.tsx +139 -0
  715. package/src/Tabs.tsx +216 -0
  716. package/src/Tag.native.tsx +87 -0
  717. package/src/Tag.tsx +93 -0
  718. package/src/Text.native.tsx +95 -0
  719. package/src/Text.tsx +93 -0
  720. package/src/Textarea.native.tsx +64 -0
  721. package/src/Textarea.tsx +66 -0
  722. package/src/TitleBar.native.tsx +46 -0
  723. package/src/TitleBar.tsx +64 -0
  724. package/src/Toast.native.tsx +366 -0
  725. package/src/Toast.tsx +408 -0
  726. package/src/Toggle.native.tsx +162 -0
  727. package/src/Toggle.tsx +169 -0
  728. package/src/Tooltip.native.tsx +62 -0
  729. package/src/Tooltip.tsx +88 -0
  730. package/src/TopBar.native.tsx +223 -0
  731. package/src/TopBar.tsx +436 -0
  732. package/src/Tracker.tsx +244 -0
  733. package/src/TransferList.native.tsx +180 -0
  734. package/src/TransferList.tsx +297 -0
  735. package/src/globals.d.ts +1 -0
  736. package/src/index.ts +502 -0
  737. package/src/internal/cn.ts +31 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Progress (React Native variant).
3
+ *
4
+ * Renders a progress bar using RN `View` + `Animated` for the
5
+ * indeterminate shimmer. No Reanimated dependency.
6
+ *
7
+ * Wiki: docs/components/Progress.md
8
+ */
9
+ import { forwardRef, useEffect, useRef } from 'react';
10
+ import { Animated, Text, View, type ViewProps } from 'react-native';
11
+ import { cn } from './internal/cn.js';
12
+
13
+ const SIZE_CLASSES = {
14
+ sm: 'h-1.5',
15
+ md: 'h-2.5',
16
+ lg: 'h-4',
17
+ } as const;
18
+
19
+ const TONE_CLASSES = {
20
+ primary: 'bg-primary',
21
+ accent: 'bg-accent',
22
+ success: 'bg-success',
23
+ warning: 'bg-warning',
24
+ danger: 'bg-destructive',
25
+ } as const;
26
+
27
+ const DEFAULT_SEGMENTS: ProgressSegment[] = [
28
+ { from: 0, to: 25, tone: 'danger' },
29
+ { from: 25, to: 50, tone: 'warning' },
30
+ { from: 50, to: 75, tone: 'primary' },
31
+ { from: 75, to: 100, tone: 'success' },
32
+ ];
33
+
34
+ export interface ProgressSegment {
35
+ from: number;
36
+ to: number;
37
+ tone: keyof typeof TONE_CLASSES;
38
+ }
39
+
40
+ export type ProgressValueLabelPosition =
41
+ | 'inline-end'
42
+ | 'top-left'
43
+ | 'top-center'
44
+ | 'top-right'
45
+ | 'bottom-left'
46
+ | 'bottom-center'
47
+ | 'bottom-right';
48
+
49
+ export interface ProgressProps extends Omit<ViewProps, 'style'> {
50
+ /** Current value (0–100). Omit for indeterminate mode. */
51
+ value?: number;
52
+ /** Maximum value. Defaults to 100. */
53
+ max?: number;
54
+ /** Tone of the indicator bar. */
55
+ tone?: 'primary' | 'accent' | 'success' | 'warning' | 'danger';
56
+ /** Use value-based semantic color thresholds instead of one fixed tone. */
57
+ segmented?: boolean;
58
+ /** Custom percentage thresholds for `segmented` mode. */
59
+ segments?: ProgressSegment[];
60
+ /** Size of the bar track. */
61
+ size?: 'sm' | 'md' | 'lg';
62
+ /** Accessible label. */
63
+ label?: string;
64
+ /** Show percentage text next to, above, or below the bar. */
65
+ showValue?: boolean;
66
+ /** Position for the visible value label. */
67
+ valueLabelPosition?: ProgressValueLabelPosition;
68
+ /** Override the visible value label. */
69
+ valueLabel?: string;
70
+ /** Format the visible value label from the current value. */
71
+ valueFormatter?: (value: number, percentage: number, max: number) => string;
72
+ className?: string;
73
+ }
74
+
75
+ const VALUE_LABEL_ALIGNMENT: Record<Exclude<ProgressValueLabelPosition, 'inline-end'>, string> = {
76
+ 'top-left': 'items-start',
77
+ 'top-center': 'items-center',
78
+ 'top-right': 'items-end',
79
+ 'bottom-left': 'items-start',
80
+ 'bottom-center': 'items-center',
81
+ 'bottom-right': 'items-end',
82
+ };
83
+
84
+ export const Progress = forwardRef<View, ProgressProps>(function Progress(
85
+ {
86
+ className,
87
+ value,
88
+ max = 100,
89
+ tone = 'primary',
90
+ segmented = false,
91
+ segments = DEFAULT_SEGMENTS,
92
+ size = 'md',
93
+ label,
94
+ showValue = false,
95
+ valueLabelPosition = 'inline-end',
96
+ valueLabel,
97
+ valueFormatter,
98
+ ...props
99
+ },
100
+ ref,
101
+ ) {
102
+ const isIndeterminate = value === undefined;
103
+ const safeMax = max > 0 ? max : 100;
104
+ const clampedValue = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value));
105
+ const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, (clampedValue / safeMax) * 100));
106
+ const resolvedTone = segmented
107
+ ? segments.find((segment) => percentage >= segment.from && percentage < segment.to)?.tone ??
108
+ segments.at(-1)?.tone ??
109
+ tone
110
+ : tone;
111
+ const translateX = useRef(new Animated.Value(-1)).current;
112
+ const formattedValue = valueLabel ?? valueFormatter?.(clampedValue, percentage, safeMax) ?? `${Math.round(percentage)}%`;
113
+ const showInlineValue = showValue && !isIndeterminate && valueLabelPosition === 'inline-end';
114
+ const showStackedValue = showValue && !isIndeterminate && valueLabelPosition !== 'inline-end';
115
+ const stackedValueBefore = showStackedValue && valueLabelPosition.startsWith('top');
116
+ const stackedValueAfter = showStackedValue && valueLabelPosition.startsWith('bottom');
117
+ const valueNode = (
118
+ <Text className="text-xs font-medium text-muted-foreground tabular-nums">
119
+ {formattedValue}
120
+ </Text>
121
+ );
122
+
123
+ useEffect(() => {
124
+ if (!isIndeterminate) return;
125
+ const loop = Animated.loop(
126
+ Animated.sequence([
127
+ Animated.timing(translateX, {
128
+ toValue: 4,
129
+ duration: 1500,
130
+ useNativeDriver: true,
131
+ }),
132
+ Animated.timing(translateX, {
133
+ toValue: -1,
134
+ duration: 0,
135
+ useNativeDriver: true,
136
+ }),
137
+ ]),
138
+ );
139
+ loop.start();
140
+ return () => loop.stop();
141
+ }, [isIndeterminate, translateX]);
142
+
143
+ const barNode = (
144
+ <View
145
+ ref={ref}
146
+ accessibilityRole="progressbar"
147
+ accessibilityValue={{
148
+ min: 0,
149
+ max: safeMax,
150
+ now: isIndeterminate ? undefined : clampedValue,
151
+ }}
152
+ accessibilityLabel={label}
153
+ className={cn(
154
+ 'relative w-full overflow-hidden rounded-full bg-muted',
155
+ SIZE_CLASSES[size],
156
+ className,
157
+ )}
158
+ {...props}
159
+ >
160
+ {isIndeterminate ? (
161
+ <Animated.View
162
+ className={cn('h-full rounded-full', TONE_CLASSES[resolvedTone])}
163
+ style={{
164
+ width: '33%',
165
+ transform: [
166
+ {
167
+ translateX: translateX.interpolate({
168
+ inputRange: [-1, 4],
169
+ outputRange: ['-100%' as unknown as number, '400%' as unknown as number],
170
+ }),
171
+ },
172
+ ],
173
+ }}
174
+ />
175
+ ) : (
176
+ <View
177
+ className={cn('h-full rounded-full', TONE_CLASSES[resolvedTone])}
178
+ style={{ width: `${percentage}%` }}
179
+ />
180
+ )}
181
+ </View>
182
+ );
183
+
184
+ return (
185
+ <View
186
+ className={cn(
187
+ showInlineValue ? 'flex-row items-center gap-2' : 'w-full flex-col gap-2',
188
+ showStackedValue && VALUE_LABEL_ALIGNMENT[valueLabelPosition],
189
+ )}
190
+ >
191
+ {stackedValueBefore && valueNode}
192
+ {barNode}
193
+ {stackedValueAfter && valueNode}
194
+ {showInlineValue && valueNode}
195
+ </View>
196
+ );
197
+ });
@@ -0,0 +1,286 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Progress (web variant — React DOM).
5
+ *
6
+ * A simple progress bar that indicates completion status. Pass a
7
+ * `value` (0–100) for determinate mode or omit it for an
8
+ * indeterminate shimmer animation.
9
+ *
10
+ * <Progress value={60} tone="success" />
11
+ * <Progress label="Loading…" /> // indeterminate
12
+ *
13
+ * Sets `role="progressbar"` with appropriate ARIA attributes.
14
+ *
15
+ * Wiki: docs/components/Progress.md
16
+ */
17
+ import { forwardRef, type HTMLAttributes } from 'react';
18
+ import { cva, type VariantProps } from 'class-variance-authority';
19
+ import { cn } from './internal/cn.js';
20
+
21
+ export const progressVariants = cva(
22
+ 'relative w-full overflow-hidden rounded-full bg-muted',
23
+ {
24
+ variants: {
25
+ size: {
26
+ sm: 'h-1.5',
27
+ md: 'h-2.5',
28
+ lg: 'h-4',
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ size: 'md',
33
+ },
34
+ },
35
+ );
36
+
37
+ type ProgressVariantProps = VariantProps<typeof progressVariants>;
38
+
39
+ const TONE_COLORS = {
40
+ primary: 'bg-primary',
41
+ accent: 'bg-accent',
42
+ success: 'bg-success',
43
+ warning: 'bg-warning',
44
+ danger: 'bg-destructive',
45
+ } as const;
46
+
47
+ const DEFAULT_SEGMENTS: ProgressSegment[] = [
48
+ { from: 0, to: 25, tone: 'danger' },
49
+ { from: 25, to: 50, tone: 'warning' },
50
+ { from: 50, to: 75, tone: 'primary' },
51
+ { from: 75, to: 100, tone: 'success' },
52
+ ];
53
+
54
+ export type ProgressValueLabelPosition =
55
+ | 'inline-end'
56
+ | 'top-left'
57
+ | 'top-center'
58
+ | 'top-right'
59
+ | 'bottom-left'
60
+ | 'bottom-center'
61
+ | 'bottom-right';
62
+ export type ProgressTrackLabelPosition = 'none' | 'top' | 'bottom' | 'inline';
63
+ export type ProgressLabelGap = 'none' | 'xs' | 'sm' | 'md';
64
+
65
+ export interface ProgressSegment {
66
+ /** Inclusive lower percentage bound. */
67
+ from: number;
68
+ /** Exclusive upper percentage bound, except the last segment may include 100. */
69
+ to: number;
70
+ /** Semantic tone used while the value is inside this segment. */
71
+ tone: keyof typeof TONE_COLORS;
72
+ }
73
+
74
+ export interface ProgressProps
75
+ extends Omit<HTMLAttributes<HTMLDivElement>, 'role'>,
76
+ ProgressVariantProps {
77
+ /** Current value (0–100). Omit for indeterminate mode. */
78
+ value?: number;
79
+ /** Maximum value. Defaults to 100. */
80
+ max?: number;
81
+ /** Tone of the indicator bar. */
82
+ tone?: keyof typeof TONE_COLORS;
83
+ /** Use value-based semantic color thresholds instead of one fixed tone. */
84
+ segmented?: boolean;
85
+ /** Custom percentage thresholds for `segmented` mode. */
86
+ segments?: ProgressSegment[];
87
+ /** Accessible label (maps to aria-label). */
88
+ label?: string;
89
+ /** Show percentage text next to the bar. */
90
+ showValue?: boolean;
91
+ /** Position for the visible value label. */
92
+ valueLabelPosition?: ProgressValueLabelPosition;
93
+ /** Override the visible value label. */
94
+ valueLabel?: string;
95
+ /** Format the visible value label from the current value. */
96
+ valueFormatter?: (value: number, percentage: number, max: number) => string;
97
+ /** Show min/max scale labels around the progress bar. */
98
+ showTrackLabels?: boolean;
99
+ /** Position for min/max scale labels. */
100
+ trackLabelPosition?: ProgressTrackLabelPosition;
101
+ /** Override the visible minimum scale label. */
102
+ minLabel?: string;
103
+ /** Override the visible maximum scale label. */
104
+ maxLabel?: string;
105
+ /** Format min/max scale labels from the current numeric bounds. */
106
+ trackLabelFormatter?: (value: number, position: 'min' | 'max') => string;
107
+ /** Vertical gap between the bar and top/bottom label rows. */
108
+ labelGap?: ProgressLabelGap;
109
+ /** Gap between a left/right value label and the adjacent min/max scale label. */
110
+ labelGroupGap?: ProgressLabelGap;
111
+ /** Additional className for value and min/max labels. */
112
+ labelClassName?: string;
113
+ }
114
+
115
+ const LABEL_ROW_GAP: Record<ProgressLabelGap, string> = {
116
+ none: 'gap-0',
117
+ xs: 'gap-1',
118
+ sm: 'gap-2',
119
+ md: 'gap-3',
120
+ };
121
+
122
+ const LABEL_GROUP_GAP: Record<ProgressLabelGap, string> = {
123
+ none: 'gap-0',
124
+ xs: 'gap-1',
125
+ sm: 'gap-1.5',
126
+ md: 'gap-2',
127
+ };
128
+
129
+ function resolveProgressTone(
130
+ percentage: number,
131
+ tone: keyof typeof TONE_COLORS,
132
+ segmented: boolean,
133
+ segments: ProgressSegment[],
134
+ ) {
135
+ if (!segmented) return tone;
136
+ return segments.find((segment) => percentage >= segment.from && percentage < segment.to)?.tone ??
137
+ segments.at(-1)?.tone ??
138
+ tone;
139
+ }
140
+
141
+ export const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(
142
+ {
143
+ className,
144
+ value,
145
+ max = 100,
146
+ tone = 'primary',
147
+ segmented = false,
148
+ segments = DEFAULT_SEGMENTS,
149
+ size,
150
+ label,
151
+ showValue,
152
+ valueLabelPosition = 'inline-end',
153
+ valueLabel,
154
+ valueFormatter,
155
+ showTrackLabels = false,
156
+ trackLabelPosition = 'none',
157
+ minLabel,
158
+ maxLabel,
159
+ trackLabelFormatter,
160
+ labelGap = 'xs',
161
+ labelGroupGap = 'xs',
162
+ labelClassName,
163
+ ...props
164
+ },
165
+ ref,
166
+ ) {
167
+ const isIndeterminate = value === undefined;
168
+ const safeMax = max > 0 ? max : 100;
169
+ const clampedValue = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value));
170
+ const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, (clampedValue / safeMax) * 100));
171
+ const resolvedTone = resolveProgressTone(percentage, tone, segmented, segments);
172
+ const formattedValue = valueLabel ?? valueFormatter?.(clampedValue, percentage, safeMax) ?? `${Math.round(percentage)}%`;
173
+ const formattedMin = minLabel ?? trackLabelFormatter?.(0, 'min') ?? '0';
174
+ const formattedMax = maxLabel ?? trackLabelFormatter?.(safeMax, 'max') ?? `${safeMax}`;
175
+ const showInlineValue = showValue && !isIndeterminate && valueLabelPosition === 'inline-end';
176
+ const showStackedValue = showValue && !isIndeterminate && valueLabelPosition !== 'inline-end';
177
+ const renderScaleLabels = showTrackLabels && trackLabelPosition !== 'none';
178
+ const valueSide = valueLabelPosition.startsWith('top') ? 'top' : 'bottom';
179
+ const valueAlign = valueLabelPosition.endsWith('left')
180
+ ? 'left'
181
+ : valueLabelPosition.endsWith('right')
182
+ ? 'right'
183
+ : 'center';
184
+ const valueNode = (
185
+ <span className={cn('text-xs font-medium text-muted-foreground tabular-nums transition-colors duration-300', labelClassName)}>
186
+ {formattedValue}
187
+ </span>
188
+ );
189
+ const minNode = (
190
+ <span className={cn('text-xs font-medium text-muted-foreground tabular-nums', labelClassName)}>
191
+ {formattedMin}
192
+ </span>
193
+ );
194
+ const maxNode = (
195
+ <span className={cn('text-xs font-medium text-muted-foreground tabular-nums', labelClassName)}>
196
+ {formattedMax}
197
+ </span>
198
+ );
199
+ const barNode = (
200
+ <div
201
+ ref={ref}
202
+ role="progressbar"
203
+ aria-valuenow={isIndeterminate ? undefined : clampedValue}
204
+ aria-valuemin={0}
205
+ aria-valuemax={safeMax}
206
+ aria-label={label ?? 'Progress'}
207
+ className={cn(progressVariants({ size }), className)}
208
+ {...props}
209
+ >
210
+ <div
211
+ className={cn(
212
+ 'h-full rounded-full transition-[width,background-color] duration-300 ease-out',
213
+ TONE_COLORS[resolvedTone],
214
+ isIndeterminate && 'w-1/3 animate-[progress-indeterminate_1.5s_ease-in-out_infinite]',
215
+ )}
216
+ style={
217
+ isIndeterminate
218
+ ? undefined
219
+ : { width: `${percentage}%` }
220
+ }
221
+ />
222
+ </div>
223
+ );
224
+
225
+ function renderLabelRow(side: 'top' | 'bottom') {
226
+ const hasScaleLabels = renderScaleLabels && trackLabelPosition === side;
227
+ const hasValue = showStackedValue && valueSide === side;
228
+
229
+ if (!hasScaleLabels && !hasValue) return null;
230
+
231
+ return (
232
+ <div className="grid w-full grid-cols-[1fr_auto_1fr] items-center">
233
+ <div className={cn('flex min-w-0 items-center justify-start', LABEL_GROUP_GAP[labelGroupGap])}>
234
+ {hasScaleLabels ? minNode : null}
235
+ {hasValue && valueAlign === 'left' ? valueNode : null}
236
+ </div>
237
+ <div className="flex min-w-0 justify-center">
238
+ {hasValue && valueAlign === 'center' ? valueNode : null}
239
+ </div>
240
+ <div className={cn('flex min-w-0 items-center justify-end', LABEL_GROUP_GAP[labelGroupGap])}>
241
+ {hasValue && valueAlign === 'right' ? valueNode : null}
242
+ {hasScaleLabels ? maxNode : null}
243
+ </div>
244
+ </div>
245
+ );
246
+ }
247
+
248
+ if (trackLabelPosition === 'inline' && renderScaleLabels) {
249
+ return (
250
+ <>
251
+ <div className={cn('flex w-full items-center', LABEL_GROUP_GAP[labelGroupGap])}>
252
+ {minNode}
253
+ {barNode}
254
+ {maxNode}
255
+ {showInlineValue && valueNode}
256
+ </div>
257
+ <style>{`
258
+ @keyframes progress-indeterminate {
259
+ 0% { transform: translateX(-100%); }
260
+ 100% { transform: translateX(400%); }
261
+ }
262
+ `}</style>
263
+ </>
264
+ );
265
+ }
266
+
267
+ return (
268
+ <>
269
+ <div className={cn(
270
+ showInlineValue ? 'flex items-center gap-2' : 'flex w-full flex-col',
271
+ !showInlineValue && LABEL_ROW_GAP[labelGap],
272
+ )}>
273
+ {renderLabelRow('top')}
274
+ {barNode}
275
+ {renderLabelRow('bottom')}
276
+ {showInlineValue && valueNode}
277
+ </div>
278
+ <style>{`
279
+ @keyframes progress-indeterminate {
280
+ 0% { transform: translateX(-100%); }
281
+ 100% { transform: translateX(400%); }
282
+ }
283
+ `}</style>
284
+ </>
285
+ );
286
+ });
@@ -0,0 +1,200 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * ProgressCircle (web variant).
5
+ *
6
+ * Circular progress indicator for compact KPI cards and status summaries.
7
+ *
8
+ * Wiki: docs/components/ProgressCircle.md
9
+ */
10
+ import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
11
+ import { cn } from './internal/cn.js';
12
+
13
+ const SIZE = {
14
+ sm: 64,
15
+ md: 88,
16
+ lg: 120,
17
+ xl: 160,
18
+ } as const;
19
+
20
+ const STROKE = {
21
+ sm: 6,
22
+ md: 8,
23
+ lg: 10,
24
+ xl: 12,
25
+ } as const;
26
+
27
+ const TONE_CLASS = {
28
+ primary: 'stroke-primary',
29
+ accent: 'stroke-accent',
30
+ success: 'stroke-success',
31
+ warning: 'stroke-warning',
32
+ danger: 'stroke-destructive',
33
+ } as const;
34
+
35
+ const VALUE_TONE_CLASS = {
36
+ foreground: 'text-foreground',
37
+ primary: 'text-primary',
38
+ accent: 'text-accent',
39
+ success: 'text-success',
40
+ warning: 'text-warning',
41
+ danger: 'text-destructive',
42
+ } as const;
43
+
44
+ const VALUE_SIZE_CLASS = {
45
+ xs: 'text-xs',
46
+ sm: 'text-sm',
47
+ md: 'text-base',
48
+ lg: 'text-lg',
49
+ xl: 'text-xl',
50
+ } as const;
51
+
52
+ const DEFAULT_SEGMENTS: ProgressCircleSegment[] = [
53
+ { from: 0, to: 25, tone: 'danger' },
54
+ { from: 25, to: 50, tone: 'warning' },
55
+ { from: 50, to: 75, tone: 'primary' },
56
+ { from: 75, to: 100, tone: 'success' },
57
+ ];
58
+
59
+ export type ProgressCircleTone = keyof typeof TONE_CLASS;
60
+ export type ProgressCircleValueTone = keyof typeof VALUE_TONE_CLASS | 'auto';
61
+ export type ProgressCircleValueSize = keyof typeof VALUE_SIZE_CLASS;
62
+
63
+ export interface ProgressCircleSegment {
64
+ /** Inclusive lower percentage bound. */
65
+ from: number;
66
+ /** Exclusive upper percentage bound, except the last segment may include 100. */
67
+ to: number;
68
+ /** Semantic tone used while the value is inside this segment. */
69
+ tone: ProgressCircleTone;
70
+ }
71
+
72
+ export interface ProgressCircleProps extends HTMLAttributes<HTMLDivElement> {
73
+ value: number;
74
+ max?: number;
75
+ size?: keyof typeof SIZE;
76
+ tone?: ProgressCircleTone;
77
+ /** Use value-based semantic color thresholds instead of one fixed tone. */
78
+ segmented?: boolean;
79
+ /** Custom percentage thresholds for `segmented` mode. */
80
+ segments?: ProgressCircleSegment[];
81
+ showValue?: boolean;
82
+ /** Center value font-size preset. */
83
+ valueSize?: ProgressCircleValueSize;
84
+ /** Center value tone. Defaults to percentage tone when `segmented` is true. */
85
+ valueTone?: ProgressCircleValueTone;
86
+ valueFormatter?: (value: number, percentage: number) => ReactNode;
87
+ /** Additional Tailwind classes on the center value label. */
88
+ valueClassName?: string;
89
+ label?: string;
90
+ }
91
+
92
+ function resolveProgressCircleTone(
93
+ percentage: number,
94
+ tone: ProgressCircleTone,
95
+ segmented: boolean,
96
+ segments: ProgressCircleSegment[],
97
+ ) {
98
+ if (!segmented) return tone;
99
+ return (
100
+ segments.find((segment) => percentage >= segment.from && percentage < segment.to)?.tone ??
101
+ segments.at(-1)?.tone ??
102
+ tone
103
+ );
104
+ }
105
+
106
+ export const ProgressCircle = forwardRef<HTMLDivElement, ProgressCircleProps>(
107
+ function ProgressCircle(
108
+ {
109
+ value,
110
+ max = 100,
111
+ size = 'md',
112
+ tone = 'primary',
113
+ segmented = false,
114
+ segments = DEFAULT_SEGMENTS,
115
+ showValue = true,
116
+ valueSize = 'sm',
117
+ valueTone,
118
+ valueFormatter,
119
+ valueClassName,
120
+ label = 'Progress',
121
+ className,
122
+ ...props
123
+ },
124
+ ref,
125
+ ) {
126
+ const dimension = SIZE[size];
127
+ const strokeWidth = STROKE[size];
128
+ const radius = (dimension - strokeWidth) / 2;
129
+ const circumference = 2 * Math.PI * radius;
130
+ const safeMax = max > 0 ? max : 100;
131
+ const clamped = Math.min(safeMax, Math.max(0, value));
132
+ const percentage = (clamped / safeMax) * 100;
133
+ const dashOffset = circumference - (percentage / 100) * circumference;
134
+ const resolvedTone = resolveProgressCircleTone(percentage, tone, segmented, segments);
135
+ const resolvedValueTone =
136
+ valueTone === undefined
137
+ ? segmented
138
+ ? resolvedTone
139
+ : 'foreground'
140
+ : valueTone === 'auto'
141
+ ? resolvedTone
142
+ : valueTone;
143
+
144
+ return (
145
+ <div
146
+ ref={ref}
147
+ className={cn('relative inline-grid place-items-center text-foreground', className)}
148
+ role="progressbar"
149
+ aria-label={label}
150
+ aria-valuemin={0}
151
+ aria-valuemax={safeMax}
152
+ aria-valuenow={clamped}
153
+ {...props}
154
+ >
155
+ <svg
156
+ width={dimension}
157
+ height={dimension}
158
+ viewBox={`0 0 ${dimension} ${dimension}`}
159
+ aria-hidden
160
+ >
161
+ <circle
162
+ cx={dimension / 2}
163
+ cy={dimension / 2}
164
+ r={radius}
165
+ fill="none"
166
+ className="stroke-muted"
167
+ strokeWidth={strokeWidth}
168
+ />
169
+ <circle
170
+ cx={dimension / 2}
171
+ cy={dimension / 2}
172
+ r={radius}
173
+ fill="none"
174
+ className={cn(
175
+ 'transition-[stroke-dashoffset,stroke] duration-500 ease-out',
176
+ TONE_CLASS[resolvedTone],
177
+ )}
178
+ strokeWidth={strokeWidth}
179
+ strokeLinecap="round"
180
+ strokeDasharray={circumference}
181
+ strokeDashoffset={dashOffset}
182
+ transform={`rotate(-90 ${dimension / 2} ${dimension / 2})`}
183
+ />
184
+ </svg>
185
+ {showValue ? (
186
+ <span
187
+ className={cn(
188
+ 'absolute font-semibold tabular-nums transition-colors duration-500 ease-out',
189
+ VALUE_SIZE_CLASS[valueSize],
190
+ VALUE_TONE_CLASS[resolvedValueTone],
191
+ valueClassName,
192
+ )}
193
+ >
194
+ {valueFormatter?.(clamped, percentage) ?? `${Math.round(percentage)}%`}
195
+ </span>
196
+ ) : null}
197
+ </div>
198
+ );
199
+ },
200
+ );