@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
package/src/TopBar.tsx ADDED
@@ -0,0 +1,436 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * TopBar (web variant — React DOM) + compound sub-components.
5
+ *
6
+ * Segmented app header from the MiHCM Figma prototype.
7
+ * 60 px height on desktop, compact on mobile. Overflow is clipped so the
8
+ * parallelogram shapes stay within bounds without leaving visual gaps.
9
+ *
10
+ * Sub-components:
11
+ * TopBarLogo — brand mark using the Logo primitive
12
+ * TopBarHomeButton — parallelogram home nav button
13
+ * TopBarBackLink — parallelogram back link with ‹ arrow + text
14
+ * TopBarNotification — icon with badge count
15
+ * TopBarProfile — user greeting + avatar + status
16
+ * TopBarDivider — thin vertical separator
17
+ * TopBarAction — generic action button (icon + optional label)
18
+ *
19
+ * Wiki: docs/components/TopBar.md
20
+ */
21
+ import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
22
+ import { cn } from './internal/cn.js';
23
+ import { Logo, type LogoProps } from './Logo.js';
24
+ import { NotificationBadge } from './NotificationBadge.js';
25
+
26
+ /* ── TopBar (container) ──────────────────────────────────────────── */
27
+
28
+ export interface TopBarProps extends HTMLAttributes<HTMLElement> {
29
+ /** Leading slot — logo, home button, back link, notification. */
30
+ start?: ReactNode;
31
+ /** Optional middle slot — global search, page-level controls. */
32
+ center?: ReactNode;
33
+ /** Trailing slot — profile, actions, logout. */
34
+ end?: ReactNode;
35
+ /** Force a surface treatment, or follow the app `.dark` class. */
36
+ appearance?: 'system' | 'light' | 'dark';
37
+ }
38
+
39
+ export const TopBar = forwardRef<HTMLElement, TopBarProps>(function TopBar(
40
+ { className, start, center, end, children, appearance = 'system', ...props },
41
+ ref,
42
+ ) {
43
+ const surfaceClass =
44
+ appearance === 'dark'
45
+ ? 'bg-topbar-dark-surface text-topbar-dark-foreground'
46
+ : appearance === 'light'
47
+ ? 'bg-topbar-light-surface text-topbar-light-foreground'
48
+ : 'bg-topbar-light-surface text-topbar-light-foreground dark:!bg-topbar-dark-surface dark:!text-topbar-dark-foreground';
49
+
50
+ return (
51
+ <header
52
+ ref={ref}
53
+ data-appearance={appearance}
54
+ className={cn(
55
+ 'group/topbar z-30 flex h-15 flex-shrink-0 items-center justify-between overflow-hidden px-6 py-2 shadow-mi-soft',
56
+ surfaceClass,
57
+ className,
58
+ )}
59
+ {...props}
60
+ >
61
+ {children ?? (
62
+ <>
63
+ {start ? (
64
+ <div className="flex min-w-0 shrink-0 items-center gap-0.5">{start}</div>
65
+ ) : (
66
+ <span />
67
+ )}
68
+ {center ? (
69
+ <div className="hidden md:flex flex-1 justify-center px-6">{center}</div>
70
+ ) : null}
71
+ {end ? <div className="flex h-10 shrink-0 items-center gap-6">{end}</div> : <span />}
72
+ </>
73
+ )}
74
+ </header>
75
+ );
76
+ });
77
+
78
+ /* ── TopBarLogo ───────────────────────────────────────────────────── */
79
+
80
+ export interface TopBarLogoProps extends HTMLAttributes<HTMLDivElement> {
81
+ /** Built-in Logo color treatment. */
82
+ variant?: LogoProps['variant'];
83
+ /** Built-in Logo size. */
84
+ size?: LogoProps['size'];
85
+ /** Approved brand asset family to swap the mark. */
86
+ brand?: LogoProps['brand'];
87
+ /** Approved asset variant when `brand` is set. */
88
+ assetVariant?: LogoProps['assetVariant'];
89
+ /** Base public path for approved logo assets. */
90
+ assetBasePath?: LogoProps['assetBasePath'];
91
+ /** Logo image source. Overrides `brand`. */
92
+ src?: string;
93
+ /** Alt text for the logo image or built-in mark. */
94
+ alt?: string;
95
+ /** Classes for the inner Logo primitive. */
96
+ logoClassName?: string;
97
+ }
98
+
99
+ export const TopBarLogo = forwardRef<HTMLDivElement, TopBarLogoProps>(function TopBarLogo(
100
+ {
101
+ className,
102
+ src,
103
+ alt = 'MiHCM',
104
+ variant = 'primary',
105
+ size = 'md',
106
+ brand,
107
+ assetVariant,
108
+ assetBasePath,
109
+ logoClassName,
110
+ children,
111
+ ...props
112
+ },
113
+ ref,
114
+ ) {
115
+ const logoProps = {
116
+ ...(src ? { src } : {}),
117
+ ...(brand ? { brand } : {}),
118
+ ...(assetVariant ? { assetVariant } : {}),
119
+ ...(assetBasePath ? { assetBasePath } : {}),
120
+ };
121
+ const shouldAutoSwapBuiltIn = !children && !src && !brand && variant === 'primary';
122
+ const shouldAutoSwapAsset =
123
+ !children && !src && Boolean(brand) && (assetVariant === undefined || assetVariant === 'primary');
124
+
125
+ return (
126
+ <div
127
+ ref={ref}
128
+ className={cn('flex flex-shrink-0 items-center justify-center', className)}
129
+ {...props}
130
+ >
131
+ {children ?? (shouldAutoSwapBuiltIn ? (
132
+ <>
133
+ <Logo
134
+ alt={alt}
135
+ variant="primary"
136
+ size={size}
137
+ className={cn(
138
+ 'dark:!hidden group-data-[appearance=dark]/topbar:!hidden group-data-[appearance=light]/topbar:!inline-flex',
139
+ logoClassName,
140
+ )}
141
+ />
142
+ <Logo
143
+ alt={alt}
144
+ variant="white"
145
+ size={size}
146
+ className={cn(
147
+ 'hidden dark:!inline-flex group-data-[appearance=dark]/topbar:!inline-flex group-data-[appearance=light]/topbar:!hidden',
148
+ logoClassName,
149
+ )}
150
+ />
151
+ </>
152
+ ) : shouldAutoSwapAsset ? (
153
+ <>
154
+ <Logo
155
+ {...logoProps}
156
+ alt={alt}
157
+ assetVariant="primary"
158
+ size={size}
159
+ className={cn(
160
+ 'dark:!hidden group-data-[appearance=dark]/topbar:!hidden group-data-[appearance=light]/topbar:!inline-flex',
161
+ logoClassName,
162
+ )}
163
+ />
164
+ <Logo
165
+ {...logoProps}
166
+ alt={alt}
167
+ assetVariant="white"
168
+ size={size}
169
+ className={cn(
170
+ 'hidden dark:!inline-flex group-data-[appearance=dark]/topbar:!inline-flex group-data-[appearance=light]/topbar:!hidden',
171
+ logoClassName,
172
+ )}
173
+ />
174
+ </>
175
+ ) : (
176
+ <Logo
177
+ {...logoProps}
178
+ alt={alt}
179
+ variant={variant}
180
+ size={size}
181
+ className={logoClassName}
182
+ />
183
+ ))}
184
+ </div>
185
+ );
186
+ });
187
+
188
+ /* ── TopBarHomeButton ─────────────────────────────────────────────── */
189
+
190
+ export interface TopBarHomeButtonProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'children'> {
191
+ /** The icon rendered inside the parallelogram. */
192
+ icon: ReactNode;
193
+ }
194
+
195
+ /**
196
+ * Parallelogram-shaped home navigation button.
197
+ * Hidden on mobile (`hidden md:block`) by default.
198
+ */
199
+ export const TopBarHomeButton = forwardRef<HTMLButtonElement, TopBarHomeButtonProps>(
200
+ function TopBarHomeButton({ className, icon, ...props }, ref) {
201
+ return (
202
+ <button
203
+ ref={ref}
204
+ type="button"
205
+ aria-label="Home"
206
+ className={cn(
207
+ 'relative -mr-12 hidden h-[65px] w-[102px] shrink-0 md:block',
208
+ 'cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-ring',
209
+ className,
210
+ )}
211
+ {...props}
212
+ >
213
+ <span
214
+ className="absolute inset-0 bg-topbar-light-home dark:!bg-topbar-dark-home group-data-[appearance=dark]/topbar:!bg-topbar-dark-home group-data-[appearance=light]/topbar:!bg-topbar-light-home"
215
+ style={{ clipPath: 'polygon(48px 0, 100% 0, calc(100% - 48px) 100%, 0 100%)' }}
216
+ aria-hidden
217
+ />
218
+ <span className="absolute inset-0 flex items-center justify-center text-topbar-light-muted dark:!text-topbar-dark-muted group-data-[appearance=dark]/topbar:!text-topbar-dark-muted group-data-[appearance=light]/topbar:!text-topbar-light-muted [&_svg]:size-4">
219
+ {icon}
220
+ </span>
221
+ </button>
222
+ );
223
+ },
224
+ );
225
+
226
+ /* ── TopBarBackLink ───────────────────────────────────────────────── */
227
+
228
+ export interface TopBarBackLinkProps extends HTMLAttributes<HTMLElement> {
229
+ /** Navigates as an anchor when provided. Renders a button otherwise. */
230
+ href?: string;
231
+ /** Override the default chevron icon. */
232
+ icon?: ReactNode;
233
+ }
234
+
235
+ /**
236
+ * Back navigation — parallelogram with chevron + text.
237
+ * Hidden on mobile (`hidden md:flex`). The text is hidden below `sm`.
238
+ */
239
+ export const TopBarBackLink = forwardRef<HTMLElement, TopBarBackLinkProps>(function TopBarBackLink(
240
+ { className, href, icon, children, ...props },
241
+ ref,
242
+ ) {
243
+ const chevron = icon ?? (
244
+ <svg
245
+ width="16"
246
+ height="16"
247
+ viewBox="0 0 24 24"
248
+ fill="none"
249
+ stroke="currentColor"
250
+ strokeWidth="2.5"
251
+ strokeLinecap="round"
252
+ strokeLinejoin="round"
253
+ aria-hidden
254
+ >
255
+ <path d="M15 18L9 12L15 6" />
256
+ </svg>
257
+ );
258
+
259
+ const inner = (
260
+ <>
261
+ {/* Parallelogram background */}
262
+ <span
263
+ className="absolute inset-0 bg-topbar-light-segment dark:!bg-topbar-dark-segment group-data-[appearance=dark]/topbar:!bg-topbar-dark-segment group-data-[appearance=light]/topbar:!bg-topbar-light-segment"
264
+ style={{ clipPath: 'polygon(48px 0, 100% 0, calc(100% - 48px) 100%, 0 100%)' }}
265
+ aria-hidden
266
+ />
267
+ {/* Content — relative so it drives the element's auto width */}
268
+ <span className="relative flex h-full items-center gap-2 pl-[39.77px] pr-12">
269
+ <span className="w-4 h-4 flex items-center justify-center shrink-0">{chevron}</span>
270
+ {children ? (
271
+ <span className="hidden whitespace-nowrap text-xs font-medium text-topbar-light-foreground dark:!text-topbar-dark-foreground group-data-[appearance=dark]/topbar:!text-topbar-dark-foreground group-data-[appearance=light]/topbar:!text-topbar-light-foreground sm:inline">
272
+ {children}
273
+ </span>
274
+ ) : null}
275
+ </span>
276
+ </>
277
+ );
278
+
279
+ const shared = {
280
+ className: cn(
281
+ 'relative hidden h-[65px] w-[193.773px] shrink-0 md:block',
282
+ 'cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-ring',
283
+ className,
284
+ ),
285
+ ...props,
286
+ };
287
+
288
+ if (href) {
289
+ return (
290
+ <a ref={ref as React.Ref<HTMLAnchorElement>} href={href} {...shared}>
291
+ {inner}
292
+ </a>
293
+ );
294
+ }
295
+ return (
296
+ <button ref={ref as React.Ref<HTMLButtonElement>} type="button" {...shared}>
297
+ {inner}
298
+ </button>
299
+ );
300
+ });
301
+
302
+ /* ── TopBarNotification ───────────────────────────────────────────── */
303
+
304
+ export interface TopBarNotificationProps extends Omit<
305
+ HTMLAttributes<HTMLButtonElement>,
306
+ 'children'
307
+ > {
308
+ /** The notification icon (e.g. Bell from lucide). */
309
+ icon: ReactNode;
310
+ /** Badge count. Hidden when 0 or undefined. */
311
+ count?: number;
312
+ }
313
+
314
+ export const TopBarNotification = forwardRef<HTMLButtonElement, TopBarNotificationProps>(
315
+ function TopBarNotification({ className, icon, count, ...props }, ref) {
316
+ return (
317
+ <button
318
+ ref={ref}
319
+ type="button"
320
+ aria-label={count ? `Notifications (${count})` : 'Notifications'}
321
+ className={cn(
322
+ 'relative ml-0 cursor-pointer',
323
+ 'focus:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded',
324
+ className,
325
+ )}
326
+ {...props}
327
+ >
328
+ <span className="flex size-4 items-center justify-center text-topbar-light-muted dark:!text-topbar-dark-muted group-data-[appearance=dark]/topbar:!text-topbar-dark-muted group-data-[appearance=light]/topbar:!text-topbar-light-muted [&_svg]:size-4">
329
+ {icon}
330
+ </span>
331
+ <NotificationBadge count={count ?? 0} className="-top-[9px] -right-2.5" />
332
+ </button>
333
+ );
334
+ },
335
+ );
336
+
337
+ /* ── TopBarProfile ────────────────────────────────────────────────── */
338
+
339
+ export interface TopBarProfileProps extends HTMLAttributes<HTMLDivElement> {
340
+ /** Primary line, e.g. "Good Morning Yashi". */
341
+ name?: string;
342
+ /** Secondary line, e.g. "Edit Profile". */
343
+ subtitle?: string;
344
+ /** Avatar element (use the Avatar component). */
345
+ avatar: ReactNode;
346
+ /** Optional status indicator overlaid on the avatar. */
347
+ status?: ReactNode;
348
+ }
349
+
350
+ export const TopBarProfile = forwardRef<HTMLDivElement, TopBarProfileProps>(function TopBarProfile(
351
+ { className, name, subtitle, avatar, status, ...props },
352
+ ref,
353
+ ) {
354
+ return (
355
+ <div ref={ref} className={cn('relative flex items-center gap-4', className)} {...props}>
356
+ {(name || subtitle) && (
357
+ <div className="text-right leading-4 hidden md:flex md:flex-col md:items-end gap-0.5">
358
+ {name && (
359
+ <span className="whitespace-nowrap text-xs font-medium text-topbar-light-foreground dark:!text-topbar-dark-foreground group-data-[appearance=dark]/topbar:!text-topbar-dark-foreground group-data-[appearance=light]/topbar:!text-topbar-light-foreground">
360
+ {name}
361
+ </span>
362
+ )}
363
+ {subtitle && (
364
+ <span className="whitespace-nowrap text-xs leading-4 text-topbar-light-muted dark:!text-topbar-dark-muted group-data-[appearance=dark]/topbar:!text-topbar-dark-muted group-data-[appearance=light]/topbar:!text-topbar-light-muted">
365
+ {subtitle}
366
+ </span>
367
+ )}
368
+ </div>
369
+ )}
370
+ <div className="relative">
371
+ {avatar}
372
+ {status && <span className="absolute -bottom-0.5 -right-0.5">{status}</span>}
373
+ </div>
374
+ </div>
375
+ );
376
+ });
377
+
378
+ /* ── TopBarDivider ────────────────────────────────────────────────── */
379
+
380
+ /**
381
+ * Thin vertical separator between TopBar items.
382
+ * Hidden below `lg` by default; override with `className`.
383
+ */
384
+ export const TopBarDivider = forwardRef<HTMLSpanElement, HTMLAttributes<HTMLSpanElement>>(
385
+ function TopBarDivider({ className, ...props }, ref) {
386
+ return (
387
+ <span
388
+ ref={ref}
389
+ aria-hidden
390
+ className={cn(
391
+ 'hidden h-[15px] w-px bg-topbar-light-divider dark:!bg-topbar-dark-divider lg:block',
392
+ 'group-data-[appearance=dark]/topbar:!bg-topbar-dark-divider group-data-[appearance=light]/topbar:!bg-topbar-light-divider',
393
+ className,
394
+ )}
395
+ {...props}
396
+ />
397
+ );
398
+ },
399
+ );
400
+
401
+ /* ── TopBarAction ─────────────────────────────────────────────────── */
402
+
403
+ export interface TopBarActionProps extends HTMLAttributes<HTMLButtonElement> {
404
+ /** Leading icon (e.g. Sparkles, Headphones from lucide). */
405
+ icon?: ReactNode;
406
+ }
407
+
408
+ /**
409
+ * Generic action button for the TopBar end slot.
410
+ * Pass `icon` for an icon-only or icon+label button.
411
+ * Pass `children` (string or node) for the visible label.
412
+ * Control responsive visibility via `className` (e.g. `hidden lg:flex`).
413
+ */
414
+ export const TopBarAction = forwardRef<HTMLButtonElement, TopBarActionProps>(function TopBarAction(
415
+ { className, icon, children, ...props },
416
+ ref,
417
+ ) {
418
+ return (
419
+ <button
420
+ ref={ref}
421
+ type="button"
422
+ className={cn(
423
+ 'flex items-center gap-2 cursor-pointer',
424
+ 'text-topbar-light-muted transition-colors duration-150 hover:text-topbar-light-foreground dark:!text-topbar-dark-muted dark:hover:!text-topbar-dark-foreground',
425
+ 'group-data-[appearance=dark]/topbar:!text-topbar-dark-muted group-data-[appearance=dark]/topbar:hover:!text-topbar-dark-foreground',
426
+ 'group-data-[appearance=light]/topbar:!text-topbar-light-muted group-data-[appearance=light]/topbar:hover:!text-topbar-light-foreground',
427
+ 'focus:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded',
428
+ className,
429
+ )}
430
+ {...props}
431
+ >
432
+ {icon && <span className="[&_svg]:size-4">{icon}</span>}
433
+ {children && <span className="text-xs leading-4">{children}</span>}
434
+ </button>
435
+ );
436
+ });
@@ -0,0 +1,244 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Tracker (web variant).
5
+ *
6
+ * Dense sequence of status segments for uptime, workflows, and timeline
7
+ * coverage. Inspired by Tremor's Tracker but tokenized for MiHCM.
8
+ *
9
+ * Wiki: docs/components/Tracker.md
10
+ */
11
+ import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';
12
+ import { cn } from './internal/cn.js';
13
+
14
+ const TONE_CLASS = {
15
+ neutral: 'bg-muted',
16
+ primary: 'bg-primary',
17
+ accent: 'bg-accent',
18
+ success: 'bg-success',
19
+ warning: 'bg-warning',
20
+ danger: 'bg-destructive',
21
+ } as const;
22
+
23
+ export interface TrackerItem {
24
+ key?: string;
25
+ label?: string;
26
+ tone?: keyof typeof TONE_CLASS;
27
+ value?: number;
28
+ tooltip?: ReactNode;
29
+ className?: string;
30
+ labelClassName?: string;
31
+ }
32
+
33
+ export interface TrackerProps extends HTMLAttributes<HTMLDivElement> {
34
+ data: TrackerItem[];
35
+ variant?: 'bar' | 'blocks' | 'dots' | 'timeline';
36
+ size?: 'xs' | 'sm' | 'md' | 'lg';
37
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'full';
38
+ gap?: 'none' | 'xs' | 'sm' | 'md';
39
+ distribution?: 'equal' | 'weighted';
40
+ ariaLabel?: string;
41
+ showLabels?: boolean;
42
+ labelPosition?: 'top' | 'bottom';
43
+ selectedKey?: string;
44
+ onItemSelect?: (item: TrackerItem, index: number) => void;
45
+ itemClassName?: string;
46
+ labelClassName?: string;
47
+ }
48
+
49
+ const SIZE_CLASS = {
50
+ xs: 'h-3',
51
+ sm: 'h-6',
52
+ md: 'h-8',
53
+ lg: 'h-10',
54
+ } as const;
55
+
56
+ const DOT_SIZE_CLASS = {
57
+ xs: 'size-2.5',
58
+ sm: 'size-3.5',
59
+ md: 'size-[1.125rem]',
60
+ lg: 'size-6',
61
+ } as const;
62
+
63
+ const RADIUS_CLASS = {
64
+ none: 'rounded-none',
65
+ sm: 'rounded-sm',
66
+ md: 'rounded-md',
67
+ lg: 'rounded-lg',
68
+ full: 'rounded-full',
69
+ } as const;
70
+
71
+ const GAP_CLASS = {
72
+ none: 'gap-0',
73
+ xs: 'gap-0.5',
74
+ sm: 'gap-1',
75
+ md: 'gap-2',
76
+ } as const;
77
+
78
+ const VARIANT_CLASS = {
79
+ bar: 'min-w-1 flex-1',
80
+ blocks: 'min-w-3 flex-1 border border-background/70 shadow-mi-card',
81
+ dots: 'shrink-0 rounded-full',
82
+ timeline: 'min-w-4 flex-1 border-y border-background/70',
83
+ } as const;
84
+
85
+ function getItemKey(item: TrackerItem, index: number) {
86
+ return item.key ?? `${item.label ?? 'tracker-item'}-${index}`;
87
+ }
88
+
89
+ function getItemStyle(
90
+ item: TrackerItem,
91
+ variant: NonNullable<TrackerProps['variant']>,
92
+ distribution: NonNullable<TrackerProps['distribution']>,
93
+ ): CSSProperties | undefined {
94
+ if (variant === 'dots') {
95
+ return undefined;
96
+ }
97
+
98
+ if (distribution === 'weighted') {
99
+ return { flexGrow: Math.max(item.value ?? 1, 0), flexBasis: 0 };
100
+ }
101
+
102
+ return undefined;
103
+ }
104
+
105
+ function getItemLayoutClass(
106
+ variant: NonNullable<TrackerProps['variant']>,
107
+ showLabels: boolean,
108
+ labelPosition: NonNullable<TrackerProps['labelPosition']>,
109
+ ) {
110
+ return cn(
111
+ 'min-w-0',
112
+ variant === 'dots' ? 'shrink-0' : 'flex-1',
113
+ showLabels && 'flex flex-col gap-1',
114
+ showLabels && labelPosition === 'top' && 'flex-col-reverse',
115
+ );
116
+ }
117
+
118
+ function getTimelineRadiusClass(
119
+ variant: NonNullable<TrackerProps['variant']>,
120
+ index: number,
121
+ length: number,
122
+ ) {
123
+ if (variant !== 'timeline') {
124
+ return undefined;
125
+ }
126
+
127
+ if (length === 1) {
128
+ return 'rounded-full';
129
+ }
130
+
131
+ return cn(index === 0 && 'rounded-l-full', index === length - 1 && 'rounded-r-full');
132
+ }
133
+
134
+ export const Tracker = forwardRef<HTMLDivElement, TrackerProps>(function Tracker(
135
+ {
136
+ data,
137
+ variant = 'bar',
138
+ size = 'md',
139
+ radius = 'md',
140
+ gap = 'xs',
141
+ distribution = 'equal',
142
+ ariaLabel = 'Status tracker',
143
+ showLabels = false,
144
+ labelPosition = 'bottom',
145
+ selectedKey,
146
+ onItemSelect,
147
+ itemClassName,
148
+ labelClassName,
149
+ className,
150
+ ...props
151
+ },
152
+ ref,
153
+ ) {
154
+ const renderSegment = (item: TrackerItem, index: number) => {
155
+ const key = getItemKey(item, index);
156
+ const selected = selectedKey === key;
157
+ const interactive = Boolean(onItemSelect);
158
+ const title = typeof item.tooltip === 'string' ? item.tooltip : item.label;
159
+ const segmentClassName = cn(
160
+ 'block border-0 p-0 transition-all duration-300',
161
+ interactive && 'appearance-none',
162
+ variant !== 'dots' && 'w-full',
163
+ variant === 'dots' ? DOT_SIZE_CLASS[size] : SIZE_CLASS[size],
164
+ variant !== 'timeline' && RADIUS_CLASS[radius],
165
+ getTimelineRadiusClass(variant, index, data.length),
166
+ VARIANT_CLASS[variant],
167
+ TONE_CLASS[item.tone ?? 'neutral'],
168
+ selected && 'ring-2 ring-ring ring-offset-2 ring-offset-background',
169
+ interactive &&
170
+ 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
171
+ itemClassName,
172
+ item.className,
173
+ );
174
+ const segment = interactive ? (
175
+ <button
176
+ type="button"
177
+ aria-pressed={selected}
178
+ aria-label={item.label}
179
+ title={title}
180
+ className={segmentClassName}
181
+ onClick={() => onItemSelect?.(item, index)}
182
+ />
183
+ ) : (
184
+ <span
185
+ aria-label={item.label}
186
+ title={title}
187
+ className={segmentClassName}
188
+ />
189
+ );
190
+
191
+ if (!showLabels) {
192
+ return (
193
+ <span
194
+ key={key}
195
+ role="listitem"
196
+ className={getItemLayoutClass(variant, false, labelPosition)}
197
+ style={getItemStyle(item, variant, distribution)}
198
+ >
199
+ {segment}
200
+ </span>
201
+ );
202
+ }
203
+
204
+ return (
205
+ <span
206
+ key={key}
207
+ role="listitem"
208
+ className={getItemLayoutClass(variant, true, labelPosition)}
209
+ style={getItemStyle(item, variant, distribution)}
210
+ >
211
+ {segment}
212
+ {item.label ? (
213
+ <span
214
+ className={cn(
215
+ 'truncate text-xs text-muted-foreground',
216
+ labelPosition === 'top' ? 'mb-1' : 'mt-1',
217
+ labelClassName,
218
+ item.labelClassName,
219
+ )}
220
+ >
221
+ {item.label}
222
+ </span>
223
+ ) : null}
224
+ </span>
225
+ );
226
+ };
227
+
228
+ return (
229
+ <div
230
+ ref={ref}
231
+ className={cn(
232
+ 'flex w-full items-center',
233
+ variant === 'dots' ? 'justify-start' : 'items-stretch',
234
+ GAP_CLASS[gap],
235
+ className,
236
+ )}
237
+ role="list"
238
+ aria-label={ariaLabel}
239
+ {...props}
240
+ >
241
+ {data.map(renderSegment)}
242
+ </div>
243
+ );
244
+ });