@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,448 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * MainSidebar (web variant — React DOM).
5
+ *
6
+ * Figma rail: compact 46 px primary-blue icon strip with an accent selected item.
7
+ * Expansion: controlled/uncontrolled drilldown panel that slides beside the rail.
8
+ *
9
+ * `IconSidebar` remains as a compatibility alias.
10
+ *
11
+ * Wiki: docs/components/IconSidebar.md
12
+ */
13
+ import { forwardRef, useMemo, useState, type HTMLAttributes, type ReactNode } from 'react';
14
+ import { cn } from './internal/cn.js';
15
+
16
+ export interface MainSidebarItem {
17
+ key: string;
18
+ icon: ReactNode;
19
+ label: string;
20
+ href?: string;
21
+ description?: string;
22
+ badge?: ReactNode;
23
+ disabled?: boolean;
24
+ children?: MainSidebarItem[];
25
+ panel?: ReactNode;
26
+ }
27
+
28
+ export interface MainSidebarProps extends Omit<HTMLAttributes<HTMLElement>, 'onSelect'> {
29
+ items: MainSidebarItem[];
30
+ activeKey?: string;
31
+ expanded?: boolean;
32
+ defaultExpanded?: boolean;
33
+ onExpandedChange?: (expanded: boolean) => void;
34
+ onItemSelect?: (key: string, item: MainSidebarItem) => void;
35
+ header?: ReactNode;
36
+ footer?: ReactNode;
37
+ panelHeader?: ReactNode;
38
+ panelFooter?: ReactNode;
39
+ railClassName?: string;
40
+ panelClassName?: string;
41
+ itemClassName?: string;
42
+ activeItemClassName?: string;
43
+ collapsedLabel?: string;
44
+ expandedLabel?: string;
45
+ backLabel?: string;
46
+ showLabelsWhenExpanded?: boolean;
47
+ side?: 'left' | 'right';
48
+ /** Force the bottom mobile navigation pattern for docs, tests, or mobile-only shells. */
49
+ mobile?: boolean;
50
+ }
51
+
52
+ export type IconSidebarItem = MainSidebarItem;
53
+ export type IconSidebarProps = MainSidebarProps;
54
+
55
+ function ChevronLeftIcon() {
56
+ return (
57
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden>
58
+ <path d="m15 18-6-6 6-6" strokeLinecap="round" strokeLinejoin="round" />
59
+ </svg>
60
+ );
61
+ }
62
+
63
+ function ChevronRightIcon() {
64
+ return (
65
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden>
66
+ <path d="m9 18 6-6-6-6" strokeLinecap="round" strokeLinejoin="round" />
67
+ </svg>
68
+ );
69
+ }
70
+
71
+ function MenuIcon() {
72
+ return (
73
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden>
74
+ <path d="M4 7h16M4 12h16M4 17h16" strokeLinecap="round" />
75
+ </svg>
76
+ );
77
+ }
78
+
79
+ function findItem(items: MainSidebarItem[], key?: string): MainSidebarItem | undefined {
80
+ if (!key) return undefined;
81
+
82
+ for (const item of items) {
83
+ if (item.key === key) return item;
84
+ const child = findItem(item.children ?? [], key);
85
+ if (child) return child;
86
+ }
87
+
88
+ return undefined;
89
+ }
90
+
91
+ function firstPanelItem(items: MainSidebarItem[], activeKey?: string) {
92
+ const active = findItem(items, activeKey);
93
+ if (active?.children?.length || active?.panel) return active;
94
+ return items.find((item) => item.children?.length || item.panel) ?? items[0];
95
+ }
96
+
97
+ function opensPanel(item: MainSidebarItem) {
98
+ return Boolean(item.children?.length || item.panel);
99
+ }
100
+
101
+ export const MainSidebar = forwardRef<HTMLElement, MainSidebarProps>(function MainSidebar(
102
+ {
103
+ className,
104
+ items,
105
+ activeKey,
106
+ expanded,
107
+ defaultExpanded = false,
108
+ onExpandedChange,
109
+ onItemSelect,
110
+ header,
111
+ footer,
112
+ panelHeader,
113
+ panelFooter,
114
+ railClassName,
115
+ panelClassName,
116
+ itemClassName,
117
+ activeItemClassName,
118
+ collapsedLabel = 'Expand main sidebar',
119
+ expandedLabel = 'Collapse main sidebar',
120
+ backLabel = 'Back',
121
+ showLabelsWhenExpanded = true,
122
+ side = 'left',
123
+ mobile = false,
124
+ ...props
125
+ },
126
+ ref,
127
+ ) {
128
+ const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);
129
+ const isExpanded = expanded ?? internalExpanded;
130
+ const rootItem = useMemo(() => firstPanelItem(items, activeKey), [activeKey, items]);
131
+ const [pathKeys, setPathKeys] = useState<string[]>([]);
132
+ const path = useMemo(() => {
133
+ const resolved = pathKeys
134
+ .map((key) => findItem(items, key))
135
+ .filter((item): item is MainSidebarItem => Boolean(item));
136
+ return resolved.length ? resolved : rootItem ? [rootItem] : [];
137
+ }, [items, pathKeys, rootItem]);
138
+
139
+ const current = path.at(-1);
140
+ const currentItems = current?.children ?? items;
141
+ const isRightSide = side === 'right';
142
+
143
+ function setExpanded(next: boolean) {
144
+ if (expanded === undefined) setInternalExpanded(next);
145
+ if (!next) setPathKeys([]);
146
+ onExpandedChange?.(next);
147
+ }
148
+
149
+ function selectRailItem(item: MainSidebarItem) {
150
+ if (item.disabled) return;
151
+ onItemSelect?.(item.key, item);
152
+
153
+ if (opensPanel(item)) {
154
+ setPathKeys([item.key]);
155
+ setExpanded(true);
156
+ } else {
157
+ setPathKeys([]);
158
+ }
159
+ }
160
+
161
+ function selectPanelItem(item: MainSidebarItem) {
162
+ if (item.disabled) return;
163
+ onItemSelect?.(item.key, item);
164
+
165
+ if (opensPanel(item)) {
166
+ setExpanded(true);
167
+ setPathKeys((previous) =>
168
+ previous.at(-1) === item.key ? previous : [...previous, item.key],
169
+ );
170
+ }
171
+ }
172
+
173
+ const panel = isExpanded ? (
174
+ <div
175
+ className={cn(
176
+ 'min-w-0 bg-card text-card-foreground shadow-mi-card',
177
+ isRightSide ? 'border-l border-border' : 'border-r border-border',
178
+ 'w-full md:w-72 md:flex-none',
179
+ isRightSide
180
+ ? 'animate-in fade-in slide-in-from-right-2 duration-300'
181
+ : 'animate-in fade-in slide-in-from-left-2 duration-300',
182
+ panelClassName,
183
+ )}
184
+ >
185
+ <div className="flex h-full flex-col">
186
+ <div className="border-b border-border px-5 py-4">
187
+ {panelHeader ?? (
188
+ <div className="flex items-center justify-between gap-3">
189
+ <div className="min-w-0">
190
+ <div className="text-sm font-semibold">{current?.label ?? 'Main Sidebar'}</div>
191
+ {current?.description ? (
192
+ <p className="mt-1 text-xs text-muted-foreground">{current.description}</p>
193
+ ) : null}
194
+ </div>
195
+ <button
196
+ type="button"
197
+ aria-label={expandedLabel}
198
+ onClick={() => setExpanded(false)}
199
+ className="grid size-8 shrink-0 place-items-center rounded-md text-muted-foreground transition hover:bg-muted hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
200
+ >
201
+ {isRightSide ? <ChevronRightIcon /> : <ChevronLeftIcon />}
202
+ </button>
203
+ </div>
204
+ )}
205
+ </div>
206
+
207
+ <div className="min-h-0 flex-1 overflow-y-auto px-3 py-4">
208
+ {path.length > 1 ? (
209
+ <button
210
+ type="button"
211
+ onClick={() => setPathKeys((previous) => previous.slice(0, -1))}
212
+ className="mb-3 inline-flex items-center gap-2 rounded-md px-2 py-1.5 text-xs font-medium text-muted-foreground transition hover:bg-muted hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
213
+ >
214
+ <span className="[&_svg]:size-4">
215
+ <ChevronLeftIcon />
216
+ </span>
217
+ {backLabel}
218
+ </button>
219
+ ) : null}
220
+
221
+ {current?.panel ? (
222
+ <div className="animate-in fade-in slide-in-from-left-2 duration-200">
223
+ {current.panel}
224
+ </div>
225
+ ) : (
226
+ <div className="grid gap-1 animate-in fade-in slide-in-from-right-2 duration-200">
227
+ {currentItems.map((item) => {
228
+ const isActive = item.key === activeKey;
229
+ const hasChildren = opensPanel(item);
230
+ return (
231
+ <button
232
+ key={item.key}
233
+ type="button"
234
+ disabled={item.disabled}
235
+ onClick={() => selectPanelItem(item)}
236
+ className={cn(
237
+ 'group flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left transition',
238
+ 'focus:outline-none focus-visible:ring-2 focus-visible:ring-ring',
239
+ item.disabled && 'cursor-not-allowed opacity-40',
240
+ isActive ? 'bg-accent text-primary-foreground' : 'hover:bg-muted',
241
+ )}
242
+ >
243
+ <span className="grid size-8 shrink-0 place-items-center rounded-md bg-muted text-foreground group-hover:bg-background [&_svg]:size-4">
244
+ {item.icon}
245
+ </span>
246
+ <span className="min-w-0 flex-1">
247
+ <span className="block truncate text-sm font-medium">{item.label}</span>
248
+ {item.description ? (
249
+ <span
250
+ className={cn(
251
+ 'mt-0.5 block text-xs',
252
+ isActive ? 'text-primary-foreground/80' : 'text-muted-foreground',
253
+ )}
254
+ >
255
+ {item.description}
256
+ </span>
257
+ ) : null}
258
+ </span>
259
+ {item.badge ? <span className="shrink-0">{item.badge}</span> : null}
260
+ {hasChildren ? (
261
+ <span className="shrink-0 text-muted-foreground [&_svg]:size-4">
262
+ <ChevronRightIcon />
263
+ </span>
264
+ ) : null}
265
+ </button>
266
+ );
267
+ })}
268
+ </div>
269
+ )}
270
+ </div>
271
+
272
+ {showLabelsWhenExpanded ? (
273
+ <div className="border-t border-border px-5 py-4 text-xs text-muted-foreground">
274
+ {currentItems.length} navigation {currentItems.length === 1 ? 'item' : 'items'}
275
+ </div>
276
+ ) : null}
277
+ {panelFooter ? <div className="border-t border-border px-5 py-4">{panelFooter}</div> : null}
278
+ </div>
279
+ </div>
280
+ ) : null;
281
+
282
+ return (
283
+ <>
284
+ <nav
285
+ aria-label="Main Sidebar"
286
+ data-expanded={isExpanded ? 'true' : 'false'}
287
+ data-mobile={mobile ? 'true' : undefined}
288
+ className={cn('absolute inset-x-0 bottom-0 z-30', !mobile && 'md:hidden', className)}
289
+ >
290
+ {isExpanded ? (
291
+ <div className="absolute inset-x-3 bottom-full mb-3 max-h-96 overflow-hidden rounded-lg border border-border bg-card text-card-foreground shadow-mi-popover">
292
+ {panel}
293
+ </div>
294
+ ) : null}
295
+ <div
296
+ className={cn(
297
+ 'flex items-stretch border-t border-primary/80 bg-primary text-primary-foreground',
298
+ railClassName,
299
+ )}
300
+ >
301
+ <div className="flex min-w-0 flex-1 overflow-x-auto">
302
+ {items.map((item) => {
303
+ const isActive = item.key === activeKey;
304
+ const mobileItemClassName = cn(
305
+ 'grid min-w-18 flex-1 place-items-center gap-1 px-3 py-2 text-caption transition',
306
+ 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-foreground/70',
307
+ item.disabled && 'cursor-not-allowed opacity-40',
308
+ isActive ? 'bg-accent text-primary-foreground' : 'text-primary-foreground/75',
309
+ itemClassName,
310
+ isActive && activeItemClassName,
311
+ );
312
+ const mobileItemContent = (
313
+ <>
314
+ <span className="[&_svg]:size-5">{item.icon}</span>
315
+ <span className="max-w-16 truncate">{item.label}</span>
316
+ </>
317
+ );
318
+
319
+ if (item.href && !item.disabled && !item.children?.length && !item.panel) {
320
+ return (
321
+ <a
322
+ key={item.key}
323
+ href={item.href}
324
+ aria-label={item.label}
325
+ aria-current={isActive ? 'page' : undefined}
326
+ aria-disabled={item.disabled || undefined}
327
+ className={mobileItemClassName}
328
+ >
329
+ {mobileItemContent}
330
+ </a>
331
+ );
332
+ }
333
+
334
+ return (
335
+ <button
336
+ key={item.key}
337
+ type="button"
338
+ disabled={item.disabled}
339
+ aria-label={item.label}
340
+ aria-current={isActive ? 'page' : undefined}
341
+ aria-disabled={item.disabled || undefined}
342
+ onClick={() => selectRailItem(item)}
343
+ className={mobileItemClassName}
344
+ >
345
+ {mobileItemContent}
346
+ </button>
347
+ );
348
+ })}
349
+ </div>
350
+ <button
351
+ type="button"
352
+ aria-label={isExpanded ? expandedLabel : collapsedLabel}
353
+ aria-expanded={isExpanded}
354
+ onClick={() => setExpanded(!isExpanded)}
355
+ className="grid min-w-16 place-items-center gap-1 border-l border-primary-foreground/15 px-3 py-2 text-caption text-primary-foreground/85 transition hover:bg-primary-foreground/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-foreground/70"
356
+ >
357
+ <span className="[&_svg]:size-5">
358
+ <MenuIcon />
359
+ </span>
360
+ Menu
361
+ </button>
362
+ </div>
363
+ </nav>
364
+
365
+ <aside
366
+ ref={ref}
367
+ aria-label="Main Sidebar"
368
+ data-expanded={isExpanded ? 'true' : 'false'}
369
+ data-side={side}
370
+ data-mobile={mobile ? 'false' : undefined}
371
+ className={cn(
372
+ 'h-full flex-shrink-0 overflow-hidden bg-primary text-primary-foreground',
373
+ mobile ? 'hidden' : 'hidden md:flex',
374
+ isRightSide && 'flex-row-reverse',
375
+ 'transition-[width] duration-300 ease-out',
376
+ isExpanded ? 'w-[20.875rem]' : 'w-11.5',
377
+ className,
378
+ )}
379
+ {...props}
380
+ >
381
+ <div
382
+ className={cn(
383
+ 'flex w-11.5 shrink-0 flex-col items-center gap-9 overflow-hidden bg-primary pb-20',
384
+ railClassName,
385
+ )}
386
+ >
387
+ {header ? <div className="flex w-full justify-center">{header}</div> : null}
388
+ <nav className="flex flex-col items-center" aria-label="Primary">
389
+ {items.map((item) => {
390
+ const isActive = item.key === activeKey;
391
+ const shared = {
392
+ 'aria-label': item.label,
393
+ 'aria-current': isActive ? ('page' as const) : undefined,
394
+ 'aria-disabled': item.disabled || undefined,
395
+ title: item.label,
396
+ className: cn(
397
+ 'grid h-11.5 w-11.5 shrink-0 place-items-center transition-colors duration-150',
398
+ 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-foreground/70',
399
+ item.disabled ? 'cursor-not-allowed opacity-40' : 'cursor-pointer',
400
+ isActive
401
+ ? 'bg-accent text-primary-foreground opacity-100'
402
+ : 'text-primary-foreground opacity-70 hover:opacity-100 focus-visible:opacity-100',
403
+ itemClassName,
404
+ isActive && activeItemClassName,
405
+ ),
406
+ };
407
+ const content = <span className="[&_svg]:size-5">{item.icon}</span>;
408
+
409
+ if (item.href && !item.disabled && !item.children?.length && !item.panel) {
410
+ return (
411
+ <a key={item.key} href={item.href} {...shared}>
412
+ {content}
413
+ </a>
414
+ );
415
+ }
416
+
417
+ return (
418
+ <button
419
+ key={item.key}
420
+ type="button"
421
+ disabled={item.disabled}
422
+ onClick={() => selectRailItem(item)}
423
+ {...shared}
424
+ >
425
+ {content}
426
+ </button>
427
+ );
428
+ })}
429
+ </nav>
430
+ {footer ? <div className="mt-auto flex w-full justify-center">{footer}</div> : null}
431
+ <button
432
+ type="button"
433
+ aria-label={isExpanded ? expandedLabel : collapsedLabel}
434
+ aria-expanded={isExpanded}
435
+ onClick={() => setExpanded(!isExpanded)}
436
+ className="mb-3 grid size-8 place-items-center rounded-md text-primary-foreground/80 transition hover:bg-primary-foreground/10 hover:text-primary-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-foreground/70"
437
+ >
438
+ <MenuIcon />
439
+ </button>
440
+ </div>
441
+
442
+ {panel}
443
+ </aside>
444
+ </>
445
+ );
446
+ });
447
+
448
+ export const IconSidebar = MainSidebar;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Input (React Native variant).
3
+ *
4
+ * Selected by the `react-native` export condition in package.json.
5
+ * Same prop API as the web variant.
6
+ *
7
+ * Wiki: docs/components/Input.md
8
+ */
9
+ import { forwardRef, type ReactNode } from 'react';
10
+ import { TextInput, View, type TextInputProps } from 'react-native';
11
+ import { cva, type VariantProps } from 'class-variance-authority';
12
+ import { cn } from './internal/cn.js';
13
+
14
+ export const inputVariants = cva(
15
+ 'flex-row items-center rounded-lg border bg-card shadow-mi-input',
16
+ {
17
+ variants: {
18
+ variant: {
19
+ default: 'border-border',
20
+ destructive: 'border-destructive',
21
+ },
22
+ size: {
23
+ sm: 'h-9 px-3',
24
+ md: 'h-10 px-3.5',
25
+ lg: 'h-12 px-4',
26
+ },
27
+ },
28
+ defaultVariants: {
29
+ variant: 'default',
30
+ size: 'md',
31
+ },
32
+ },
33
+ );
34
+
35
+ type WrapperVariantProps = VariantProps<typeof inputVariants>;
36
+
37
+ export interface InputProps
38
+ extends Omit<TextInputProps, 'style'> {
39
+ /** Visual + a11y variant. `destructive` mirrors `invalid={true}`. */
40
+ variant?: WrapperVariantProps['variant'];
41
+ /** Height + horizontal padding. `lg` gives a 48px touch target. */
42
+ size?: WrapperVariantProps['size'];
43
+ /** Marks the input as invalid (drives destructive style; pair with visible error text). */
44
+ invalid?: boolean;
45
+ /** Wrapper className. */
46
+ className?: string;
47
+ /** Forwarded to the underlying `<TextInput>`. */
48
+ inputClassName?: string;
49
+ /** Optional icon rendered before the input. */
50
+ leadingIcon?: ReactNode;
51
+ /** Optional icon/element rendered after the input. */
52
+ trailingIcon?: ReactNode;
53
+ /** Forwarded as the input's accessibilityLabel for screen readers. */
54
+ accessibilityLabel?: string;
55
+ }
56
+
57
+ export const Input = forwardRef<TextInput, InputProps>(function Input(
58
+ {
59
+ className,
60
+ inputClassName,
61
+ variant,
62
+ size,
63
+ invalid,
64
+ leadingIcon,
65
+ trailingIcon,
66
+ editable,
67
+ accessibilityLabel,
68
+ accessibilityState,
69
+ ...props
70
+ },
71
+ ref,
72
+ ) {
73
+ const isDisabled = editable === false;
74
+ const resolvedVariant = variant ?? (invalid ? 'destructive' : 'default');
75
+
76
+ return (
77
+ <View
78
+ className={cn(
79
+ inputVariants({ variant: resolvedVariant, size }),
80
+ isDisabled && 'opacity-50',
81
+ className,
82
+ )}
83
+ >
84
+ {leadingIcon ? <View accessibilityElementsHidden>{leadingIcon}</View> : null}
85
+ <TextInput
86
+ ref={ref}
87
+ editable={editable}
88
+ accessibilityLabel={accessibilityLabel}
89
+ accessibilityState={{
90
+ disabled: !!isDisabled,
91
+ ...accessibilityState,
92
+ }}
93
+ className={cn('flex-1 text-foreground', inputClassName)}
94
+ {...props}
95
+ />
96
+ {trailingIcon ? <View accessibilityElementsHidden>{trailingIcon}</View> : null}
97
+ </View>
98
+ );
99
+ });
package/src/Input.tsx ADDED
@@ -0,0 +1,132 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Input (web variant — React DOM).
5
+ *
6
+ * Native variant lives at `Input.native.tsx`; bundlers pick it via the
7
+ * `react-native` export condition in package.json.
8
+ *
9
+ * Universal contract:
10
+ * - Same prop API on both platforms.
11
+ * - Variants & sizes from `inputVariants` (cva).
12
+ * - className accepted and forwarded.
13
+ * - forwardRef to the underlying input element.
14
+ * - WCAG 2.1 AA:
15
+ * - `aria-invalid` driven by `invalid` prop.
16
+ * - `aria-required` driven by `required` prop.
17
+ * - `aria-describedby` accepted by consumer (point at an error
18
+ * message element they render below the input).
19
+ * - Focus-visible ring (uses the same `ring`/`ring-offset` tokens
20
+ * as Button so the system feels consistent).
21
+ * - 48px touch target on `lg` size.
22
+ *
23
+ * Wiki: docs/components/Input.md
24
+ */
25
+ import { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';
26
+ import { cva, type VariantProps } from 'class-variance-authority';
27
+ import { cn } from './internal/cn.js';
28
+
29
+ export const inputVariants = cva(
30
+ 'flex w-full items-center gap-2 rounded-lg border bg-card text-foreground shadow-mi-input ' +
31
+ 'transition-colors duration-150 ' +
32
+ 'focus-within:outline-none focus-within:border-primary ' +
33
+ 'has-[input:disabled]:opacity-50 has-[input:disabled]:cursor-not-allowed',
34
+ {
35
+ variants: {
36
+ variant: {
37
+ default:
38
+ 'border-border placeholder:text-muted-foreground',
39
+ destructive:
40
+ 'border-destructive text-destructive placeholder:text-destructive/70 ' +
41
+ 'focus-within:border-destructive',
42
+ },
43
+ size: {
44
+ sm: 'h-9 px-3 text-body-sm',
45
+ md: 'h-10 px-3.5 text-body-sm',
46
+ lg: 'h-12 px-4 text-body-sm',
47
+ },
48
+ },
49
+ defaultVariants: {
50
+ variant: 'default',
51
+ size: 'md',
52
+ },
53
+ },
54
+ );
55
+
56
+ type WrapperVariantProps = VariantProps<typeof inputVariants>;
57
+
58
+ export interface InputProps
59
+ extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
60
+ /** Visual + a11y variant. `destructive` mirrors `invalid={true}` and is preferred. */
61
+ variant?: WrapperVariantProps['variant'];
62
+ /** Height + horizontal padding. `lg` gives a 48px touch target. */
63
+ size?: WrapperVariantProps['size'];
64
+ /**
65
+ * Marks the input as invalid (sets `aria-invalid` and applies the
66
+ * destructive variant unless `variant` is set explicitly). Prefer
67
+ * this over manually toggling `variant`.
68
+ */
69
+ invalid?: boolean;
70
+ /** Wrapper className. To style the input element itself, use `inputClassName`. */
71
+ className?: string;
72
+ /** Forwarded to the underlying `<input>` for inner-only styling. */
73
+ inputClassName?: string;
74
+ /** Optional icon rendered before the input (e.g., search glyph). */
75
+ leadingIcon?: ReactNode;
76
+ /** Optional icon/element rendered after the input (e.g., clear button). */
77
+ trailingIcon?: ReactNode;
78
+ }
79
+
80
+ export const Input = forwardRef<HTMLInputElement, InputProps>(function Input(
81
+ {
82
+ className,
83
+ inputClassName,
84
+ variant,
85
+ size,
86
+ invalid,
87
+ leadingIcon,
88
+ trailingIcon,
89
+ type = 'text',
90
+ required,
91
+ disabled,
92
+ 'aria-invalid': ariaInvalidProp,
93
+ ...props
94
+ },
95
+ ref,
96
+ ) {
97
+ // Single source of truth: `invalid` drives both styling and ARIA.
98
+ const isInvalid = ariaInvalidProp ?? invalid;
99
+ const resolvedVariant = variant ?? (isInvalid ? 'destructive' : 'default');
100
+
101
+ return (
102
+ <span
103
+ className={cn(inputVariants({ variant: resolvedVariant, size }), className)}
104
+ >
105
+ {leadingIcon ? (
106
+ <span aria-hidden className="text-muted-foreground shrink-0">
107
+ {leadingIcon}
108
+ </span>
109
+ ) : null}
110
+ <input
111
+ ref={ref}
112
+ type={type}
113
+ required={required}
114
+ disabled={disabled}
115
+ aria-invalid={isInvalid || undefined}
116
+ aria-required={required || undefined}
117
+ className={cn(
118
+ 'min-w-0 flex-1 bg-transparent outline-none ' +
119
+ 'disabled:cursor-not-allowed ' +
120
+ 'placeholder:text-inherit/70',
121
+ inputClassName,
122
+ )}
123
+ {...props}
124
+ />
125
+ {trailingIcon ? (
126
+ <span aria-hidden className="text-muted-foreground shrink-0">
127
+ {trailingIcon}
128
+ </span>
129
+ ) : null}
130
+ </span>
131
+ );
132
+ });