@soyfri/shared-library 2.0.0-beta.3 → 2.0.0-beta.4

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 (488) hide show
  1. package/.dockerignore +8 -0
  2. package/.github/workflows/publish.yml +107 -0
  3. package/.prettierrc +3 -0
  4. package/.storybook/main.ts +19 -0
  5. package/.storybook/preview.ts +14 -0
  6. package/.storybook/vitest.setup.ts +9 -0
  7. package/Dockerfile +37 -0
  8. package/build.js +102 -0
  9. package/chromatic.config.json +5 -0
  10. package/cleanDirectories.js +40 -0
  11. package/dist/README.md +243 -0
  12. package/{index.cjs → dist/index.cjs} +24 -0
  13. package/{index.cjs.map → dist/index.cjs.map} +1 -1
  14. package/{index.js → dist/index.js} +7 -1
  15. package/{mui.d.ts → dist/mui.d.ts} +1 -0
  16. package/dist/package.json +197 -0
  17. package/package.json +43 -164
  18. package/rollup.config.cjs +87 -0
  19. package/src/components/ActionMenu/ActionMenu.stories.tsx +230 -0
  20. package/src/components/ActionMenu/ActionMenu.tsx +174 -0
  21. package/src/components/ActionMenu/index.ts +2 -0
  22. package/src/components/AppBar/AppBar.stories.tsx +272 -0
  23. package/src/components/AppBar/AppBar.sx.ts +32 -0
  24. package/src/components/AppBar/AppBar.tsx +123 -0
  25. package/src/components/AppBar/AppBarBrand.tsx +120 -0
  26. package/src/components/AppBar/AppBarContext.ts +25 -0
  27. package/src/components/AppBar/AppBarMenuToggle.tsx +90 -0
  28. package/src/components/AppBar/AppBarUserMenu.tsx +217 -0
  29. package/src/components/AppBar/index.ts +25 -0
  30. package/src/components/Autocomplete/Autocomplete.definitions.ts +477 -0
  31. package/src/components/Autocomplete/Autocomplete.helpers.ts +60 -0
  32. package/src/components/Autocomplete/Autocomplete.stories.tsx +748 -0
  33. package/src/components/Autocomplete/Autocomplete.sx.ts +30 -0
  34. package/src/components/Autocomplete/Autocomplete.tsx +361 -0
  35. package/src/components/Autocomplete/Autocomplete.types.ts +13 -0
  36. package/src/components/Autocomplete/_parts/AutocompleteChips.tsx +55 -0
  37. package/src/components/Autocomplete/_parts/AutocompleteLoader.tsx +17 -0
  38. package/src/components/Autocomplete/_parts/AutocompleteOption.tsx +31 -0
  39. package/src/components/Autocomplete/index.ts +12 -0
  40. package/src/components/Avatar/Avatar.definitions.ts +162 -0
  41. package/src/components/Avatar/Avatar.stories.tsx +258 -0
  42. package/src/components/Avatar/Avatar.tsx +206 -0
  43. package/src/components/Avatar/index.ts +1 -0
  44. package/src/components/Button/Button.definition.ts +97 -0
  45. package/src/components/Button/Button.stories.tsx +285 -0
  46. package/src/components/Button/Button.tsx +67 -0
  47. package/src/components/Button/index.ts +1 -0
  48. package/src/components/Card/Card.definition.ts +5 -0
  49. package/src/components/Card/Card.stories.tsx +221 -0
  50. package/src/components/Card/Card.sx.ts +104 -0
  51. package/src/components/Card/Card.tsx +200 -0
  52. package/src/components/Card/index.ts +9 -0
  53. package/src/components/Chip/Chip.definitions.ts +167 -0
  54. package/src/components/Chip/Chip.stories.tsx +265 -0
  55. package/src/components/Chip/Chip.tsx +61 -0
  56. package/src/components/Chip/index.ts +1 -0
  57. package/src/components/Column/Column.tsx +29 -0
  58. package/src/components/Column/index.ts +1 -0
  59. package/src/components/DatePicker/DatePicker.definitions.ts +228 -0
  60. package/src/components/DatePicker/DatePicker.helpers.ts +24 -0
  61. package/src/components/DatePicker/DatePicker.stories.tsx +309 -0
  62. package/src/components/DatePicker/DatePicker.sx.ts +33 -0
  63. package/src/components/DatePicker/DatePicker.tsx +189 -0
  64. package/src/components/DatePicker/DatePicker.types.ts +10 -0
  65. package/src/components/DatePicker/index.ts +9 -0
  66. package/src/components/DateRangePicker/DateRangePicker.definitions.ts +191 -0
  67. package/src/components/DateRangePicker/DateRangePicker.stories.tsx +252 -0
  68. package/src/components/DateRangePicker/DateRangePicker.tsx +56 -0
  69. package/src/components/DateRangePicker/index.ts +1 -0
  70. package/src/components/DateTimePicker/DateTimePicker.definitions.ts +256 -0
  71. package/src/components/DateTimePicker/DateTimePicker.helpers.ts +38 -0
  72. package/src/components/DateTimePicker/DateTimePicker.stories.tsx +418 -0
  73. package/src/components/DateTimePicker/DateTimePicker.sx.ts +30 -0
  74. package/src/components/DateTimePicker/DateTimePicker.tsx +225 -0
  75. package/src/components/DateTimePicker/DateTimePicker.types.ts +10 -0
  76. package/src/components/DateTimePicker/index.ts +9 -0
  77. package/src/components/Drawer/Drawer.stories.tsx +270 -0
  78. package/src/components/Drawer/Drawer.sx.ts +106 -0
  79. package/src/components/Drawer/Drawer.tsx +214 -0
  80. package/src/components/Drawer/DrawerContext.ts +26 -0
  81. package/src/components/Drawer/DrawerItem.tsx +110 -0
  82. package/src/components/Drawer/index.ts +10 -0
  83. package/src/components/Flyout/Flyout.stories.tsx +282 -0
  84. package/src/components/Flyout/Flyout.tsx +122 -0
  85. package/src/components/Flyout/index.ts +1 -0
  86. package/src/components/Gallery/Gallery.definition.tsx +37 -0
  87. package/src/components/Gallery/Gallery.stories.tsx +82 -0
  88. package/src/components/Gallery/Gallery.tsx +118 -0
  89. package/src/components/Gallery/GalleryLightbox.tsx +170 -0
  90. package/src/components/Gallery/GalleryMain.tsx +84 -0
  91. package/src/components/Gallery/GalleryThumbnails.tsx +106 -0
  92. package/src/components/Gallery/index.ts +1 -0
  93. package/src/components/Icon/Icon.stories.tsx +121 -0
  94. package/src/components/Icon/Icon.tsx +175 -0
  95. package/src/components/Icon/index.ts +2 -0
  96. package/src/components/Input/Input.definitions.ts +324 -0
  97. package/src/components/Input/Input.helpers.ts +49 -0
  98. package/src/components/Input/Input.stories.tsx +499 -0
  99. package/src/components/Input/Input.sx.ts +42 -0
  100. package/src/components/Input/Input.tsx +141 -0
  101. package/src/components/Input/Input.types.ts +10 -0
  102. package/src/components/Input/index.ts +9 -0
  103. package/src/components/InputGroup/InputGroup.definitions.ts +158 -0
  104. package/src/components/InputGroup/InputGroup.stories.tsx +267 -0
  105. package/src/components/InputGroup/InputGroup.tsx +179 -0
  106. package/src/components/InputGroup/index.ts +1 -0
  107. package/src/components/MenuButton/MenuButton.stories.tsx +197 -0
  108. package/src/components/MenuButton/MenuButton.tsx +100 -0
  109. package/src/components/MenuButton/index.ts +1 -0
  110. package/src/components/Modal/Modal.stories.tsx +721 -0
  111. package/src/components/Modal/Modal.tsx +355 -0
  112. package/src/components/Modal/ModalBody.tsx +16 -0
  113. package/src/components/Modal/ModalFooter.tsx +71 -0
  114. package/src/components/Modal/ModalHeader.tsx +18 -0
  115. package/src/components/Modal/index.ts +6 -0
  116. package/src/components/PageLoader/PageLoader.stories.tsx +217 -0
  117. package/src/components/PageLoader/PageLoader.tsx +96 -0
  118. package/src/components/PageLoader/index.ts +2 -0
  119. package/src/components/ScrollTopButton/ScrollTopButton.stories.tsx +158 -0
  120. package/src/components/ScrollTopButton/ScrollTopButton.tsx +135 -0
  121. package/src/components/ScrollTopButton/index.ts +8 -0
  122. package/src/components/ScrollTopButton/scrollToTop.ts +37 -0
  123. package/src/components/Select/Select.definitions.ts +602 -0
  124. package/src/components/Select/Select.helpers.ts +71 -0
  125. package/src/components/Select/Select.stories.tsx +687 -0
  126. package/src/components/Select/Select.sx.ts +14 -0
  127. package/src/components/Select/Select.tsx +429 -0
  128. package/src/components/Select/Select.types.ts +15 -0
  129. package/src/components/Select/_parts/SelectMenuItem.tsx +40 -0
  130. package/src/components/Select/_parts/SelectSearchHeader.tsx +51 -0
  131. package/src/components/Select/_parts/SelectValue.tsx +96 -0
  132. package/src/components/Select/index.ts +14 -0
  133. package/src/components/Stat/Stat.stories.tsx +85 -0
  134. package/src/components/Stat/Stat.tsx +117 -0
  135. package/src/components/Stat/index.ts +2 -0
  136. package/src/components/StatusMessage/StatusMessage.stories.tsx +130 -0
  137. package/src/components/StatusMessage/StatusMessage.tsx +162 -0
  138. package/src/components/StatusMessage/index.ts +2 -0
  139. package/src/components/Stepper/Step.tsx +21 -0
  140. package/src/components/Stepper/Stepper.definition.ts +75 -0
  141. package/src/components/Stepper/Stepper.stories.tsx +122 -0
  142. package/src/components/Stepper/Stepper.tsx +75 -0
  143. package/src/components/Stepper/index.ts +2 -0
  144. package/src/components/Table/EmptyTable.png +0 -0
  145. package/src/components/Table/Table.definition.ts +580 -0
  146. package/src/components/Table/Table.stories.tsx +853 -0
  147. package/src/components/Table/Table.tsx +495 -0
  148. package/src/components/Table/data.ts +134 -0
  149. package/src/components/Table/exportsUtils.ts +195 -0
  150. package/src/components/Table/index.ts +3 -0
  151. package/src/components/Table/types.ts +34 -0
  152. package/src/components/Tabs/Tab.definition.ts +53 -0
  153. package/src/components/Tabs/Tab.tsx +19 -0
  154. package/src/components/Tabs/Tabs.stories.tsx +118 -0
  155. package/src/components/Tabs/Tabs.tsx +99 -0
  156. package/src/components/Tabs/_tabUtils.tsx +4 -0
  157. package/src/components/Tabs/index.ts +2 -0
  158. package/src/components/Timeline/Timeline.definition.ts +43 -0
  159. package/src/components/Timeline/Timeline.stories.tsx +108 -0
  160. package/src/components/Timeline/Timeline.tsx +49 -0
  161. package/src/components/Timeline/TimelineItem.tsx +31 -0
  162. package/src/components/Timeline/index.ts +2 -0
  163. package/src/components/Tooltip/Tooltip.stories.tsx +129 -0
  164. package/src/components/Tooltip/Tooltip.tsx +58 -0
  165. package/src/components/Tooltip/index.ts +1 -0
  166. package/src/components/_shared/formField.sx.ts +118 -0
  167. package/src/components/_shared/resolvePreset.ts +35 -0
  168. package/src/hooks/ClipBoard/ClipBoard.stories.tsx +168 -0
  169. package/src/hooks/ClipBoard/ClipBoard.tsx +131 -0
  170. package/src/hooks/ClipBoard/ClipboardUnifiedDemo.tsx +111 -0
  171. package/src/hooks/ClipBoard/index.ts +1 -0
  172. package/src/hooks/Wizard/Wizard.stories.tsx +301 -0
  173. package/src/hooks/Wizard/WizardContext.tsx +166 -0
  174. package/src/hooks/Wizard/index.ts +6 -0
  175. package/src/hooks/Wizard/useWizard.ts +13 -0
  176. package/src/index.ts +17 -0
  177. package/src/mui.ts +54 -0
  178. package/src/styles.css +3 -0
  179. package/src/theme/componentStyles.ts +47 -0
  180. package/src/theme/tokens.ts +43 -0
  181. package/tailwind.config.js +10 -0
  182. package/tsconfig.json +48 -0
  183. package/tsup.config.js +41 -0
  184. package/vite.config.js +132 -0
  185. package/vitest.config.ts +35 -0
  186. /package/{README.md → Readme.md} +0 -0
  187. /package/{Button-C17mExpd.cjs → dist/Button-C17mExpd.cjs} +0 -0
  188. /package/{Button-C17mExpd.cjs.map → dist/Button-C17mExpd.cjs.map} +0 -0
  189. /package/{Button-UkkP-bNw.js → dist/Button-UkkP-bNw.js} +0 -0
  190. /package/{Button-UkkP-bNw.js.map → dist/Button-UkkP-bNw.js.map} +0 -0
  191. /package/{components → dist/components}/ActionMenu/ActionMenu.cjs +0 -0
  192. /package/{components → dist/components}/ActionMenu/ActionMenu.cjs.map +0 -0
  193. /package/{components → dist/components}/ActionMenu/ActionMenu.d.ts +0 -0
  194. /package/{components → dist/components}/ActionMenu/ActionMenu.js +0 -0
  195. /package/{components → dist/components}/ActionMenu/ActionMenu.js.map +0 -0
  196. /package/{components → dist/components}/ActionMenu/index.d.ts +0 -0
  197. /package/{components → dist/components}/ActionMenu.d.ts +0 -0
  198. /package/{components → dist/components}/AppBar/AppBar.cjs +0 -0
  199. /package/{components → dist/components}/AppBar/AppBar.cjs.map +0 -0
  200. /package/{components → dist/components}/AppBar/AppBar.d.ts +0 -0
  201. /package/{components → dist/components}/AppBar/AppBar.js +0 -0
  202. /package/{components → dist/components}/AppBar/AppBar.js.map +0 -0
  203. /package/{components → dist/components}/AppBar/AppBar.sx.d.ts +0 -0
  204. /package/{components → dist/components}/AppBar/AppBarBrand.d.ts +0 -0
  205. /package/{components → dist/components}/AppBar/AppBarContext.d.ts +0 -0
  206. /package/{components → dist/components}/AppBar/AppBarMenuToggle.d.ts +0 -0
  207. /package/{components → dist/components}/AppBar/AppBarUserMenu.d.ts +0 -0
  208. /package/{components → dist/components}/AppBar/index.d.ts +0 -0
  209. /package/{components → dist/components}/AppBar.d.ts +0 -0
  210. /package/{components → dist/components}/Autocomplete/Autocomplete.cjs +0 -0
  211. /package/{components → dist/components}/Autocomplete/Autocomplete.cjs.map +0 -0
  212. /package/{components → dist/components}/Autocomplete/Autocomplete.d.ts +0 -0
  213. /package/{components → dist/components}/Autocomplete/Autocomplete.definitions.d.ts +0 -0
  214. /package/{components → dist/components}/Autocomplete/Autocomplete.helpers.d.ts +0 -0
  215. /package/{components → dist/components}/Autocomplete/Autocomplete.js +0 -0
  216. /package/{components → dist/components}/Autocomplete/Autocomplete.js.map +0 -0
  217. /package/{components → dist/components}/Autocomplete/Autocomplete.sx.d.ts +0 -0
  218. /package/{components → dist/components}/Autocomplete/Autocomplete.types.d.ts +0 -0
  219. /package/{components → dist/components}/Autocomplete/_parts/AutocompleteChips.d.ts +0 -0
  220. /package/{components → dist/components}/Autocomplete/_parts/AutocompleteLoader.d.ts +0 -0
  221. /package/{components → dist/components}/Autocomplete/_parts/AutocompleteOption.d.ts +0 -0
  222. /package/{components → dist/components}/Autocomplete/index.d.ts +0 -0
  223. /package/{components → dist/components}/Autocomplete.d.ts +0 -0
  224. /package/{components → dist/components}/Avatar/Avatar.cjs +0 -0
  225. /package/{components → dist/components}/Avatar/Avatar.cjs.map +0 -0
  226. /package/{components → dist/components}/Avatar/Avatar.d.ts +0 -0
  227. /package/{components → dist/components}/Avatar/Avatar.definitions.d.ts +0 -0
  228. /package/{components → dist/components}/Avatar/Avatar.js +0 -0
  229. /package/{components → dist/components}/Avatar/Avatar.js.map +0 -0
  230. /package/{components → dist/components}/Avatar/index.d.ts +0 -0
  231. /package/{components → dist/components}/Avatar.d.ts +0 -0
  232. /package/{components → dist/components}/Button/Button.cjs +0 -0
  233. /package/{components → dist/components}/Button/Button.cjs.map +0 -0
  234. /package/{components → dist/components}/Button/Button.d.ts +0 -0
  235. /package/{components → dist/components}/Button/Button.definition.d.ts +0 -0
  236. /package/{components → dist/components}/Button/Button.js +0 -0
  237. /package/{components → dist/components}/Button/Button.js.map +0 -0
  238. /package/{components → dist/components}/Button/index.d.ts +0 -0
  239. /package/{components → dist/components}/Button.d.ts +0 -0
  240. /package/{components → dist/components}/Card/Card.cjs +0 -0
  241. /package/{components → dist/components}/Card/Card.cjs.map +0 -0
  242. /package/{components → dist/components}/Card/Card.d.ts +0 -0
  243. /package/{components → dist/components}/Card/Card.definition.d.ts +0 -0
  244. /package/{components → dist/components}/Card/Card.js +0 -0
  245. /package/{components → dist/components}/Card/Card.js.map +0 -0
  246. /package/{components → dist/components}/Card/Card.sx.d.ts +0 -0
  247. /package/{components → dist/components}/Card/index.d.ts +0 -0
  248. /package/{components → dist/components}/Card.d.ts +0 -0
  249. /package/{components → dist/components}/Chip/Chip.cjs +0 -0
  250. /package/{components → dist/components}/Chip/Chip.cjs.map +0 -0
  251. /package/{components → dist/components}/Chip/Chip.d.ts +0 -0
  252. /package/{components → dist/components}/Chip/Chip.definitions.d.ts +0 -0
  253. /package/{components → dist/components}/Chip/Chip.js +0 -0
  254. /package/{components → dist/components}/Chip/Chip.js.map +0 -0
  255. /package/{components → dist/components}/Chip/index.d.ts +0 -0
  256. /package/{components → dist/components}/Chip.d.ts +0 -0
  257. /package/{components → dist/components}/Column/Column.cjs +0 -0
  258. /package/{components → dist/components}/Column/Column.cjs.map +0 -0
  259. /package/{components → dist/components}/Column/Column.d.ts +0 -0
  260. /package/{components → dist/components}/Column/Column.js +0 -0
  261. /package/{components → dist/components}/Column/Column.js.map +0 -0
  262. /package/{components → dist/components}/Column/index.d.ts +0 -0
  263. /package/{components → dist/components}/Column.d.ts +0 -0
  264. /package/{components → dist/components}/DatePicker/DatePicker.cjs +0 -0
  265. /package/{components → dist/components}/DatePicker/DatePicker.cjs.map +0 -0
  266. /package/{components → dist/components}/DatePicker/DatePicker.d.ts +0 -0
  267. /package/{components → dist/components}/DatePicker/DatePicker.definitions.d.ts +0 -0
  268. /package/{components → dist/components}/DatePicker/DatePicker.helpers.d.ts +0 -0
  269. /package/{components → dist/components}/DatePicker/DatePicker.js +0 -0
  270. /package/{components → dist/components}/DatePicker/DatePicker.js.map +0 -0
  271. /package/{components → dist/components}/DatePicker/DatePicker.sx.d.ts +0 -0
  272. /package/{components → dist/components}/DatePicker/DatePicker.types.d.ts +0 -0
  273. /package/{components → dist/components}/DatePicker/index.d.ts +0 -0
  274. /package/{components → dist/components}/DatePicker.d.ts +0 -0
  275. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs +0 -0
  276. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs.map +0 -0
  277. /package/{components → dist/components}/DateRangePicker/DateRangePicker.d.ts +0 -0
  278. /package/{components → dist/components}/DateRangePicker/DateRangePicker.definitions.d.ts +0 -0
  279. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js +0 -0
  280. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js.map +0 -0
  281. /package/{components → dist/components}/DateRangePicker/index.d.ts +0 -0
  282. /package/{components → dist/components}/DateRangePicker.d.ts +0 -0
  283. /package/{components → dist/components}/DateTimePicker/DateTimePicker.cjs +0 -0
  284. /package/{components → dist/components}/DateTimePicker/DateTimePicker.cjs.map +0 -0
  285. /package/{components → dist/components}/DateTimePicker/DateTimePicker.d.ts +0 -0
  286. /package/{components → dist/components}/DateTimePicker/DateTimePicker.definitions.d.ts +0 -0
  287. /package/{components → dist/components}/DateTimePicker/DateTimePicker.helpers.d.ts +0 -0
  288. /package/{components → dist/components}/DateTimePicker/DateTimePicker.js +0 -0
  289. /package/{components → dist/components}/DateTimePicker/DateTimePicker.js.map +0 -0
  290. /package/{components → dist/components}/DateTimePicker/DateTimePicker.sx.d.ts +0 -0
  291. /package/{components → dist/components}/DateTimePicker/DateTimePicker.types.d.ts +0 -0
  292. /package/{components → dist/components}/DateTimePicker/index.d.ts +0 -0
  293. /package/{components → dist/components}/DateTimePicker.d.ts +0 -0
  294. /package/{components → dist/components}/Drawer/Drawer.cjs +0 -0
  295. /package/{components → dist/components}/Drawer/Drawer.cjs.map +0 -0
  296. /package/{components → dist/components}/Drawer/Drawer.d.ts +0 -0
  297. /package/{components → dist/components}/Drawer/Drawer.js +0 -0
  298. /package/{components → dist/components}/Drawer/Drawer.js.map +0 -0
  299. /package/{components → dist/components}/Drawer/Drawer.sx.d.ts +0 -0
  300. /package/{components → dist/components}/Drawer/DrawerContext.d.ts +0 -0
  301. /package/{components → dist/components}/Drawer/DrawerItem.d.ts +0 -0
  302. /package/{components → dist/components}/Drawer/index.d.ts +0 -0
  303. /package/{components → dist/components}/Drawer.d.ts +0 -0
  304. /package/{components → dist/components}/Flyout/Flyout.cjs +0 -0
  305. /package/{components → dist/components}/Flyout/Flyout.cjs.map +0 -0
  306. /package/{components → dist/components}/Flyout/Flyout.d.ts +0 -0
  307. /package/{components → dist/components}/Flyout/Flyout.js +0 -0
  308. /package/{components → dist/components}/Flyout/Flyout.js.map +0 -0
  309. /package/{components → dist/components}/Flyout/index.d.ts +0 -0
  310. /package/{components → dist/components}/Flyout.d.ts +0 -0
  311. /package/{components → dist/components}/Gallery/Gallery.cjs +0 -0
  312. /package/{components → dist/components}/Gallery/Gallery.cjs.map +0 -0
  313. /package/{components → dist/components}/Gallery/Gallery.d.ts +0 -0
  314. /package/{components → dist/components}/Gallery/Gallery.definition.d.ts +0 -0
  315. /package/{components → dist/components}/Gallery/Gallery.js +0 -0
  316. /package/{components → dist/components}/Gallery/Gallery.js.map +0 -0
  317. /package/{components → dist/components}/Gallery/GalleryLightbox.d.ts +0 -0
  318. /package/{components → dist/components}/Gallery/GalleryMain.d.ts +0 -0
  319. /package/{components → dist/components}/Gallery/GalleryThumbnails.d.ts +0 -0
  320. /package/{components → dist/components}/Gallery/index.d.ts +0 -0
  321. /package/{components → dist/components}/Gallery.d.ts +0 -0
  322. /package/{components → dist/components}/Icon/Icon.cjs +0 -0
  323. /package/{components → dist/components}/Icon/Icon.cjs.map +0 -0
  324. /package/{components → dist/components}/Icon/Icon.d.ts +0 -0
  325. /package/{components → dist/components}/Icon/Icon.js +0 -0
  326. /package/{components → dist/components}/Icon/Icon.js.map +0 -0
  327. /package/{components → dist/components}/Icon/index.d.ts +0 -0
  328. /package/{components → dist/components}/Icon.d.ts +0 -0
  329. /package/{components → dist/components}/Input/Input.cjs +0 -0
  330. /package/{components → dist/components}/Input/Input.cjs.map +0 -0
  331. /package/{components → dist/components}/Input/Input.d.ts +0 -0
  332. /package/{components → dist/components}/Input/Input.definitions.d.ts +0 -0
  333. /package/{components → dist/components}/Input/Input.helpers.d.ts +0 -0
  334. /package/{components → dist/components}/Input/Input.js +0 -0
  335. /package/{components → dist/components}/Input/Input.js.map +0 -0
  336. /package/{components → dist/components}/Input/Input.sx.d.ts +0 -0
  337. /package/{components → dist/components}/Input/Input.types.d.ts +0 -0
  338. /package/{components → dist/components}/Input/index.d.ts +0 -0
  339. /package/{components → dist/components}/Input.d.ts +0 -0
  340. /package/{components → dist/components}/InputGroup/InputGroup.cjs +0 -0
  341. /package/{components → dist/components}/InputGroup/InputGroup.cjs.map +0 -0
  342. /package/{components → dist/components}/InputGroup/InputGroup.d.ts +0 -0
  343. /package/{components → dist/components}/InputGroup/InputGroup.definitions.d.ts +0 -0
  344. /package/{components → dist/components}/InputGroup/InputGroup.js +0 -0
  345. /package/{components → dist/components}/InputGroup/InputGroup.js.map +0 -0
  346. /package/{components → dist/components}/InputGroup/index.d.ts +0 -0
  347. /package/{components → dist/components}/InputGroup.d.ts +0 -0
  348. /package/{components → dist/components}/MenuButton/MenuButton.cjs +0 -0
  349. /package/{components → dist/components}/MenuButton/MenuButton.cjs.map +0 -0
  350. /package/{components → dist/components}/MenuButton/MenuButton.d.ts +0 -0
  351. /package/{components → dist/components}/MenuButton/MenuButton.js +0 -0
  352. /package/{components → dist/components}/MenuButton/MenuButton.js.map +0 -0
  353. /package/{components → dist/components}/MenuButton/index.d.ts +0 -0
  354. /package/{components → dist/components}/MenuButton.d.ts +0 -0
  355. /package/{components → dist/components}/Modal/Modal.cjs +0 -0
  356. /package/{components → dist/components}/Modal/Modal.cjs.map +0 -0
  357. /package/{components → dist/components}/Modal/Modal.d.ts +0 -0
  358. /package/{components → dist/components}/Modal/Modal.js +0 -0
  359. /package/{components → dist/components}/Modal/Modal.js.map +0 -0
  360. /package/{components → dist/components}/Modal/ModalBody.d.ts +0 -0
  361. /package/{components → dist/components}/Modal/ModalFooter.d.ts +0 -0
  362. /package/{components → dist/components}/Modal/ModalHeader.d.ts +0 -0
  363. /package/{components → dist/components}/Modal/index.d.ts +0 -0
  364. /package/{components → dist/components}/Modal.d.ts +0 -0
  365. /package/{components → dist/components}/PageLoader/PageLoader.cjs +0 -0
  366. /package/{components → dist/components}/PageLoader/PageLoader.cjs.map +0 -0
  367. /package/{components → dist/components}/PageLoader/PageLoader.d.ts +0 -0
  368. /package/{components → dist/components}/PageLoader/PageLoader.js +0 -0
  369. /package/{components → dist/components}/PageLoader/PageLoader.js.map +0 -0
  370. /package/{components → dist/components}/PageLoader/index.d.ts +0 -0
  371. /package/{components → dist/components}/PageLoader.d.ts +0 -0
  372. /package/{components → dist/components}/ScrollTopButton/ScrollTopButton.cjs +0 -0
  373. /package/{components → dist/components}/ScrollTopButton/ScrollTopButton.cjs.map +0 -0
  374. /package/{components → dist/components}/ScrollTopButton/ScrollTopButton.d.ts +0 -0
  375. /package/{components → dist/components}/ScrollTopButton/ScrollTopButton.js +0 -0
  376. /package/{components → dist/components}/ScrollTopButton/ScrollTopButton.js.map +0 -0
  377. /package/{components → dist/components}/ScrollTopButton/index.d.ts +0 -0
  378. /package/{components → dist/components}/ScrollTopButton/scrollToTop.d.ts +0 -0
  379. /package/{components → dist/components}/ScrollTopButton.d.ts +0 -0
  380. /package/{components → dist/components}/Select/Select.cjs +0 -0
  381. /package/{components → dist/components}/Select/Select.cjs.map +0 -0
  382. /package/{components → dist/components}/Select/Select.d.ts +0 -0
  383. /package/{components → dist/components}/Select/Select.definitions.d.ts +0 -0
  384. /package/{components → dist/components}/Select/Select.helpers.d.ts +0 -0
  385. /package/{components → dist/components}/Select/Select.js +0 -0
  386. /package/{components → dist/components}/Select/Select.js.map +0 -0
  387. /package/{components → dist/components}/Select/Select.sx.d.ts +0 -0
  388. /package/{components → dist/components}/Select/Select.types.d.ts +0 -0
  389. /package/{components → dist/components}/Select/_parts/SelectMenuItem.d.ts +0 -0
  390. /package/{components → dist/components}/Select/_parts/SelectSearchHeader.d.ts +0 -0
  391. /package/{components → dist/components}/Select/_parts/SelectValue.d.ts +0 -0
  392. /package/{components → dist/components}/Select/index.d.ts +0 -0
  393. /package/{components → dist/components}/Select.d.ts +0 -0
  394. /package/{components → dist/components}/Stat/Stat.cjs +0 -0
  395. /package/{components → dist/components}/Stat/Stat.cjs.map +0 -0
  396. /package/{components → dist/components}/Stat/Stat.d.ts +0 -0
  397. /package/{components → dist/components}/Stat/Stat.js +0 -0
  398. /package/{components → dist/components}/Stat/Stat.js.map +0 -0
  399. /package/{components → dist/components}/Stat/index.d.ts +0 -0
  400. /package/{components → dist/components}/Stat.d.ts +0 -0
  401. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs +0 -0
  402. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs.map +0 -0
  403. /package/{components → dist/components}/StatusMessage/StatusMessage.d.ts +0 -0
  404. /package/{components → dist/components}/StatusMessage/StatusMessage.js +0 -0
  405. /package/{components → dist/components}/StatusMessage/StatusMessage.js.map +0 -0
  406. /package/{components → dist/components}/StatusMessage/index.d.ts +0 -0
  407. /package/{components → dist/components}/StatusMessage.d.ts +0 -0
  408. /package/{components → dist/components}/Stepper/Step.d.ts +0 -0
  409. /package/{components → dist/components}/Stepper/Stepper.cjs +0 -0
  410. /package/{components → dist/components}/Stepper/Stepper.cjs.map +0 -0
  411. /package/{components → dist/components}/Stepper/Stepper.d.ts +0 -0
  412. /package/{components → dist/components}/Stepper/Stepper.definition.d.ts +0 -0
  413. /package/{components → dist/components}/Stepper/Stepper.js +0 -0
  414. /package/{components → dist/components}/Stepper/Stepper.js.map +0 -0
  415. /package/{components → dist/components}/Stepper/index.d.ts +0 -0
  416. /package/{components → dist/components}/Stepper.d.ts +0 -0
  417. /package/{components → dist/components}/Table/Table.cjs +0 -0
  418. /package/{components → dist/components}/Table/Table.cjs.map +0 -0
  419. /package/{components → dist/components}/Table/Table.d.ts +0 -0
  420. /package/{components → dist/components}/Table/Table.definition.d.ts +0 -0
  421. /package/{components → dist/components}/Table/Table.js +0 -0
  422. /package/{components → dist/components}/Table/Table.js.map +0 -0
  423. /package/{components → dist/components}/Table/data.d.ts +0 -0
  424. /package/{components → dist/components}/Table/exportsUtils.d.ts +0 -0
  425. /package/{components → dist/components}/Table/index.d.ts +0 -0
  426. /package/{components → dist/components}/Table/types.d.ts +0 -0
  427. /package/{components → dist/components}/Table.d.ts +0 -0
  428. /package/{components → dist/components}/Tabs/Tab.d.ts +0 -0
  429. /package/{components → dist/components}/Tabs/Tab.definition.d.ts +0 -0
  430. /package/{components → dist/components}/Tabs/Tabs.cjs +0 -0
  431. /package/{components → dist/components}/Tabs/Tabs.cjs.map +0 -0
  432. /package/{components → dist/components}/Tabs/Tabs.d.ts +0 -0
  433. /package/{components → dist/components}/Tabs/Tabs.js +0 -0
  434. /package/{components → dist/components}/Tabs/Tabs.js.map +0 -0
  435. /package/{components → dist/components}/Tabs/_tabUtils.d.ts +0 -0
  436. /package/{components → dist/components}/Tabs/index.d.ts +0 -0
  437. /package/{components → dist/components}/Tabs.d.ts +0 -0
  438. /package/{components → dist/components}/Timeline/Timeline.cjs +0 -0
  439. /package/{components → dist/components}/Timeline/Timeline.cjs.map +0 -0
  440. /package/{components → dist/components}/Timeline/Timeline.d.ts +0 -0
  441. /package/{components → dist/components}/Timeline/Timeline.definition.d.ts +0 -0
  442. /package/{components → dist/components}/Timeline/Timeline.js +0 -0
  443. /package/{components → dist/components}/Timeline/Timeline.js.map +0 -0
  444. /package/{components → dist/components}/Timeline/TimelineItem.d.ts +0 -0
  445. /package/{components → dist/components}/Timeline/index.d.ts +0 -0
  446. /package/{components → dist/components}/Timeline.d.ts +0 -0
  447. /package/{components → dist/components}/Tooltip/Tooltip.cjs +0 -0
  448. /package/{components → dist/components}/Tooltip/Tooltip.cjs.map +0 -0
  449. /package/{components → dist/components}/Tooltip/Tooltip.d.ts +0 -0
  450. /package/{components → dist/components}/Tooltip/Tooltip.js +0 -0
  451. /package/{components → dist/components}/Tooltip/Tooltip.js.map +0 -0
  452. /package/{components → dist/components}/Tooltip/index.d.ts +0 -0
  453. /package/{components → dist/components}/Tooltip.d.ts +0 -0
  454. /package/{components → dist/components}/_shared/formField.sx.d.ts +0 -0
  455. /package/{components → dist/components}/_shared/resolvePreset.d.ts +0 -0
  456. /package/{formField.sx-CQ1mbk9M.cjs → dist/formField.sx-CQ1mbk9M.cjs} +0 -0
  457. /package/{formField.sx-CQ1mbk9M.cjs.map → dist/formField.sx-CQ1mbk9M.cjs.map} +0 -0
  458. /package/{formField.sx-DfVbMe0V.js → dist/formField.sx-DfVbMe0V.js} +0 -0
  459. /package/{formField.sx-DfVbMe0V.js.map → dist/formField.sx-DfVbMe0V.js.map} +0 -0
  460. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs +0 -0
  461. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs.map +0 -0
  462. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.d.ts +0 -0
  463. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js +0 -0
  464. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js.map +0 -0
  465. /package/{hooks → dist/hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
  466. /package/{hooks → dist/hooks}/ClipBoard/index.d.ts +0 -0
  467. /package/{hooks → dist/hooks}/ClipBoard.d.ts +0 -0
  468. /package/{hooks → dist/hooks}/Wizard/Wizard.cjs +0 -0
  469. /package/{hooks → dist/hooks}/Wizard/Wizard.cjs.map +0 -0
  470. /package/{hooks → dist/hooks}/Wizard/Wizard.js +0 -0
  471. /package/{hooks → dist/hooks}/Wizard/Wizard.js.map +0 -0
  472. /package/{hooks → dist/hooks}/Wizard/WizardContext.d.ts +0 -0
  473. /package/{hooks → dist/hooks}/Wizard/index.d.ts +0 -0
  474. /package/{hooks → dist/hooks}/Wizard/useWizard.d.ts +0 -0
  475. /package/{hooks → dist/hooks}/Wizard.d.ts +0 -0
  476. /package/{index.d.ts → dist/index.d.ts} +0 -0
  477. /package/{index.js.map → dist/index.js.map} +0 -0
  478. /package/{resolvePreset-B-IB0ehH.js → dist/resolvePreset-B-IB0ehH.js} +0 -0
  479. /package/{resolvePreset-B-IB0ehH.js.map → dist/resolvePreset-B-IB0ehH.js.map} +0 -0
  480. /package/{resolvePreset-CT3kU-K2.cjs → dist/resolvePreset-CT3kU-K2.cjs} +0 -0
  481. /package/{resolvePreset-CT3kU-K2.cjs.map → dist/resolvePreset-CT3kU-K2.cjs.map} +0 -0
  482. /package/{styles.css → dist/styles.css} +0 -0
  483. /package/{theme → dist/theme}/componentStyles.d.ts +0 -0
  484. /package/{theme → dist/theme}/tokens.d.ts +0 -0
  485. /package/{useWizard-CWdIxZzX.cjs → dist/useWizard-CWdIxZzX.cjs} +0 -0
  486. /package/{useWizard-CWdIxZzX.cjs.map → dist/useWizard-CWdIxZzX.cjs.map} +0 -0
  487. /package/{useWizard-CWq--C3o.js → dist/useWizard-CWq--C3o.js} +0 -0
  488. /package/{useWizard-CWq--C3o.js.map → dist/useWizard-CWq--C3o.js.map} +0 -0
@@ -0,0 +1,270 @@
1
+ import React, { useState } from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Box, Typography, Avatar } from '@mui/material';
4
+ import HomeIcon from '@mui/icons-material/Home';
5
+ import PersonIcon from '@mui/icons-material/Person';
6
+ import SettingsIcon from '@mui/icons-material/Settings';
7
+ import ReceiptIcon from '@mui/icons-material/Receipt';
8
+ import LogoutIcon from '@mui/icons-material/Logout';
9
+ import NotificationsIcon from '@mui/icons-material/Notifications';
10
+
11
+ import { Drawer } from './Drawer';
12
+ import { DrawerItem } from './DrawerItem';
13
+
14
+ const meta: Meta<typeof Drawer> = {
15
+ title: 'Components/Drawer',
16
+ component: Drawer,
17
+ tags: ['autodocs'],
18
+ parameters: {
19
+ layout: 'fullscreen',
20
+ docs: {
21
+ description: {
22
+ component:
23
+ 'Drawer lateral para navegación. Soporta modo `collapsed` (mini-variant con solo iconos) y reemplaza el `DrawerComponent` de Metronic. Los sub-componentes `DrawerItem` reaccionan al estado `collapsed` vía context y muestran tooltip automático al hover cuando el drawer está mini.',
24
+ },
25
+ },
26
+ },
27
+ argTypes: {
28
+ variant: {
29
+ control: 'select',
30
+ options: ['permanent', 'persistent', 'temporary'],
31
+ description:
32
+ '`permanent` (default) = siempre visible en desktop. `persistent` = oculta/muestra empujando contenido. `temporary` = flotante con backdrop (típico móvil).',
33
+ },
34
+ anchor: {
35
+ control: 'select',
36
+ options: ['left', 'right', 'top', 'bottom'],
37
+ },
38
+ collapsed: {
39
+ control: 'boolean',
40
+ description: 'Estado mini (solo iconos). Solo aplica en `permanent`/`persistent`.',
41
+ },
42
+ expandedWidth: { control: { type: 'number', min: 180, max: 400, step: 10 } },
43
+ collapsedWidth: { control: { type: 'number', min: 48, max: 120, step: 4 } },
44
+ },
45
+ };
46
+
47
+ export default meta;
48
+ type Story = StoryObj<typeof Drawer>;
49
+
50
+ // ── Helpers ──────────────────────────────────────────────────────────────
51
+
52
+ const SampleLogo = () => (
53
+ <Typography variant="h6" sx={{ fontWeight: 700, color: 'primary.main' }}>
54
+ soyfri
55
+ </Typography>
56
+ );
57
+
58
+ const SampleFooter = ({ collapsed }: { collapsed: boolean }) => (
59
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>
60
+ <Avatar sx={{ width: 36, height: 36 }}>AP</Avatar>
61
+ {!collapsed && (
62
+ <Box sx={{ minWidth: 0 }}>
63
+ <Typography variant="body2" noWrap sx={{ fontWeight: 600 }}>
64
+ Andrea Pérez
65
+ </Typography>
66
+ <Typography variant="caption" color="text.secondary" noWrap>
67
+ admin@soyfri.com
68
+ </Typography>
69
+ </Box>
70
+ )}
71
+ </Box>
72
+ );
73
+
74
+ // ── Stories ──────────────────────────────────────────────────────────────
75
+
76
+ export const ExpandedPermanent: Story = {
77
+ args: {
78
+ variant: 'permanent',
79
+ anchor: 'left',
80
+ collapsed: false,
81
+ expandedWidth: 260,
82
+ collapsedWidth: 72,
83
+ header: <SampleLogo />,
84
+ },
85
+ render: (args) => (
86
+ <Box sx={{ display: 'flex', height: '100vh' }}>
87
+ <Drawer {...args}>
88
+ <DrawerItem icon={<HomeIcon />} label="Inicio" active />
89
+ <DrawerItem icon={<PersonIcon />} label="Perfil" />
90
+ <DrawerItem
91
+ icon={<NotificationsIcon />}
92
+ label="Notificaciones"
93
+ endAdornment={
94
+ <Typography
95
+ variant="caption"
96
+ sx={{
97
+ bgcolor: 'primary.main',
98
+ color: '#fff',
99
+ borderRadius: 10,
100
+ px: 1,
101
+ py: 0.25,
102
+ fontWeight: 600,
103
+ }}
104
+ >
105
+ 3
106
+ </Typography>
107
+ }
108
+ />
109
+ <DrawerItem icon={<ReceiptIcon />} label="Facturación" />
110
+ <DrawerItem icon={<SettingsIcon />} label="Configuración" />
111
+ </Drawer>
112
+ <Box sx={{ flex: 1, p: 3 }}>
113
+ <Typography variant="h5">Contenido principal</Typography>
114
+ <Typography color="text.secondary">
115
+ El drawer permanente convive con el contenido y no lo tapa.
116
+ </Typography>
117
+ </Box>
118
+ </Box>
119
+ ),
120
+ parameters: {
121
+ docs: {
122
+ description: {
123
+ story:
124
+ 'Drawer permanente expandido con logo en header y lista de items. Uno de los items tiene un badge como `endAdornment`.',
125
+ },
126
+ },
127
+ },
128
+ };
129
+
130
+ export const CollapsedPermanent: Story = {
131
+ ...ExpandedPermanent,
132
+ args: {
133
+ ...ExpandedPermanent.args,
134
+ collapsed: true,
135
+ },
136
+ parameters: {
137
+ docs: {
138
+ description: {
139
+ story:
140
+ 'El mismo drawer en modo mini. Los labels se ocultan y al hacer hover sobre cada item aparece un tooltip con su texto. Notar que el badge `endAdornment` se oculta también en modo collapsed.',
141
+ },
142
+ },
143
+ },
144
+ };
145
+
146
+ export const ToggleableDrawer: Story = {
147
+ render: () => {
148
+ const [collapsed, setCollapsed] = useState(false);
149
+
150
+ return (
151
+ <Box sx={{ display: 'flex', height: '100vh' }}>
152
+ <Drawer
153
+ variant="permanent"
154
+ collapsed={collapsed}
155
+ onToggleCollapse={() => setCollapsed((v) => !v)}
156
+ header={<SampleLogo />}
157
+ footer={<SampleFooter collapsed={collapsed} />}
158
+ >
159
+ <DrawerItem icon={<HomeIcon />} label="Inicio" active />
160
+ <DrawerItem icon={<PersonIcon />} label="Perfil" />
161
+ <DrawerItem icon={<ReceiptIcon />} label="Facturación" />
162
+ <DrawerItem icon={<SettingsIcon />} label="Configuración" />
163
+ <DrawerItem icon={<LogoutIcon />} label="Cerrar sesión" danger />
164
+ </Drawer>
165
+ <Box sx={{ flex: 1, p: 3 }}>
166
+ <Typography variant="h5">
167
+ Drawer: {collapsed ? 'colapsado' : 'expandido'}
168
+ </Typography>
169
+ <Typography color="text.secondary">
170
+ Usá el chevron del header para alternar. El footer se adapta
171
+ (avatar solo cuando está mini, avatar + texto cuando está
172
+ expandido).
173
+ </Typography>
174
+ </Box>
175
+ </Box>
176
+ );
177
+ },
178
+ parameters: {
179
+ docs: {
180
+ description: {
181
+ story:
182
+ 'Drawer con botón chevron funcional (el que provee el paquete) y footer que reacciona al estado. Incluye un item `danger` (cerrar sesión) que se pinta en color error.',
183
+ },
184
+ },
185
+ },
186
+ };
187
+
188
+ export const TemporaryDrawer: Story = {
189
+ render: () => {
190
+ const [open, setOpen] = useState(false);
191
+
192
+ return (
193
+ <Box sx={{ height: '100vh', p: 3 }}>
194
+ <Typography variant="h5" gutterBottom>
195
+ Drawer temporal (para móvil)
196
+ </Typography>
197
+ <Typography
198
+ sx={{ cursor: 'pointer', color: 'primary.main' }}
199
+ onClick={() => setOpen(true)}
200
+ >
201
+ → Abrir drawer
202
+ </Typography>
203
+
204
+ <Drawer
205
+ variant="temporary"
206
+ open={open}
207
+ onClose={() => setOpen(false)}
208
+ header={<SampleLogo />}
209
+ >
210
+ <DrawerItem
211
+ icon={<HomeIcon />}
212
+ label="Inicio"
213
+ onClick={() => setOpen(false)}
214
+ />
215
+ <DrawerItem
216
+ icon={<PersonIcon />}
217
+ label="Perfil"
218
+ onClick={() => setOpen(false)}
219
+ />
220
+ <DrawerItem
221
+ icon={<SettingsIcon />}
222
+ label="Configuración"
223
+ onClick={() => setOpen(false)}
224
+ />
225
+ </Drawer>
226
+ </Box>
227
+ );
228
+ },
229
+ parameters: {
230
+ docs: {
231
+ description: {
232
+ story:
233
+ 'Drawer `temporary`: flota por encima del contenido con backdrop. Cierra con ESC, click en backdrop, o handler explícito en cada item. El modo `collapsed` no aplica acá.',
234
+ },
235
+ },
236
+ },
237
+ };
238
+
239
+ export const RightAnchored: Story = {
240
+ args: {
241
+ variant: 'permanent',
242
+ anchor: 'right',
243
+ expandedWidth: 320,
244
+ header: (
245
+ <Typography variant="subtitle1" sx={{ fontWeight: 600 }}>
246
+ Panel lateral
247
+ </Typography>
248
+ ),
249
+ },
250
+ render: (args) => (
251
+ <Box sx={{ display: 'flex', height: '100vh' }}>
252
+ <Box sx={{ flex: 1, p: 3 }}>
253
+ <Typography variant="h5">Contenido principal</Typography>
254
+ </Box>
255
+ <Drawer {...args}>
256
+ <DrawerItem icon={<NotificationsIcon />} label="Notificaciones" />
257
+ <DrawerItem icon={<PersonIcon />} label="Contactos" />
258
+ <DrawerItem icon={<SettingsIcon />} label="Ajustes" />
259
+ </Drawer>
260
+ </Box>
261
+ ),
262
+ parameters: {
263
+ docs: {
264
+ description: {
265
+ story:
266
+ 'Drawer anclado a la derecha. Útil para paneles secundarios (inbox, notificaciones, detalles) en lugar de navegación principal.',
267
+ },
268
+ },
269
+ },
270
+ };
@@ -0,0 +1,106 @@
1
+ import type { SxProps, Theme } from '@mui/material/styles';
2
+
3
+ export interface BuildDrawerSxArgs {
4
+ /** Ancho actual del drawer (expanded o collapsed). */
5
+ width: number;
6
+ /** Duración de la transición de ancho en ms. */
7
+ transitionDuration?: number;
8
+ }
9
+
10
+ /**
11
+ * sx aplicado al root del MuiDrawer. Controla el ancho animado y el paper
12
+ * interno. Los estilos visuales del paper (background, border) se dejan en
13
+ * manos del theme / preset.
14
+ */
15
+ export function buildDrawerSx({
16
+ width,
17
+ transitionDuration = 200,
18
+ }: BuildDrawerSxArgs): SxProps<Theme> {
19
+ return {
20
+ width,
21
+ flexShrink: 0,
22
+ whiteSpace: 'nowrap',
23
+ boxSizing: 'border-box',
24
+ transition: (theme) =>
25
+ theme.transitions.create('width', {
26
+ easing: theme.transitions.easing.sharp,
27
+ duration: transitionDuration,
28
+ }),
29
+ '& .MuiDrawer-paper': {
30
+ width,
31
+ boxSizing: 'border-box',
32
+ overflowX: 'hidden',
33
+ transition: (theme) =>
34
+ theme.transitions.create('width', {
35
+ easing: theme.transitions.easing.sharp,
36
+ duration: transitionDuration,
37
+ }),
38
+ },
39
+ };
40
+ }
41
+
42
+ export interface BuildDrawerItemSxArgs {
43
+ collapsed: boolean;
44
+ active?: boolean;
45
+ danger?: boolean;
46
+ }
47
+
48
+ /**
49
+ * sx para un item del drawer. Centra el icono cuando está colapsado y
50
+ * tiñe el fondo cuando el item está activo.
51
+ */
52
+ export function buildDrawerItemSx({
53
+ collapsed,
54
+ active,
55
+ danger,
56
+ }: BuildDrawerItemSxArgs): SxProps<Theme> {
57
+ return (theme) => ({
58
+ minHeight: 44,
59
+ px: collapsed ? 1 : 2,
60
+ py: 1,
61
+ mx: 1,
62
+ my: 0.25,
63
+ borderRadius: 1,
64
+ display: 'flex',
65
+ alignItems: 'center',
66
+ justifyContent: collapsed ? 'center' : 'flex-start',
67
+ gap: collapsed ? 0 : 1.5,
68
+ cursor: 'pointer',
69
+ color: danger
70
+ ? theme.palette.error.main
71
+ : active
72
+ ? theme.palette.primary.main
73
+ : theme.palette.text.primary,
74
+ backgroundColor: active
75
+ ? theme.palette.action.selected
76
+ : 'transparent',
77
+ transition: theme.transitions.create(
78
+ ['background-color', 'color', 'padding'],
79
+ { duration: 150 },
80
+ ),
81
+ '&:hover': {
82
+ backgroundColor: danger
83
+ ? theme.palette.error.light + '22'
84
+ : theme.palette.action.hover,
85
+ },
86
+ '& .drawer-item__icon': {
87
+ display: 'flex',
88
+ alignItems: 'center',
89
+ justifyContent: 'center',
90
+ flexShrink: 0,
91
+ minWidth: 24,
92
+ },
93
+ '& .drawer-item__label': {
94
+ flex: 1,
95
+ minWidth: 0,
96
+ overflow: 'hidden',
97
+ textOverflow: 'ellipsis',
98
+ whiteSpace: 'nowrap',
99
+ opacity: collapsed ? 0 : 1,
100
+ width: collapsed ? 0 : 'auto',
101
+ transition: theme.transitions.create(['opacity', 'width'], {
102
+ duration: collapsed ? 100 : 200,
103
+ }),
104
+ },
105
+ });
106
+ }
@@ -0,0 +1,214 @@
1
+ import React, { useMemo, type ReactNode } from 'react';
2
+ import {
3
+ Drawer as MuiDrawer,
4
+ IconButton,
5
+ Box,
6
+ type DrawerProps as MuiDrawerProps,
7
+ } from '@mui/material';
8
+ import {
9
+ useTheme,
10
+ type SxProps,
11
+ type Theme,
12
+ } from '@mui/material/styles';
13
+ import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
14
+ import ChevronRightIcon from '@mui/icons-material/ChevronRight';
15
+
16
+ import { DrawerContext } from './DrawerContext';
17
+ import { buildDrawerSx } from './Drawer.sx';
18
+ import { resolvePreset } from '../_shared/resolvePreset';
19
+
20
+ // ── Tipos públicos ──────────────────────────────────────────────────────
21
+ export type DrawerVariant = 'permanent' | 'persistent' | 'temporary';
22
+ export type DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';
23
+
24
+ export interface DrawerProps {
25
+ /** Contenido del drawer (típicamente `<DrawerItem>`s). */
26
+ children?: ReactNode;
27
+ /**
28
+ * Variante del drawer:
29
+ * - `permanent` (default): siempre visible en desktop, soporta collapsed (mini).
30
+ * - `persistent`: se oculta/muestra, empuja el contenido principal.
31
+ * - `temporary`: flotante con backdrop (típico móvil).
32
+ */
33
+ variant?: DrawerVariant;
34
+ /** Lado del viewport. Default: `'left'`. */
35
+ anchor?: DrawerAnchor;
36
+ /**
37
+ * Estado mini (solo iconos). Solo se aplica con `variant="permanent"` o
38
+ * `"persistent"`. Si no se provee, el drawer está siempre expandido.
39
+ */
40
+ collapsed?: boolean;
41
+ /** Callback del botón de toggle (chevron). */
42
+ onToggleCollapse?: () => void;
43
+ /** Estado abierto/cerrado (aplica a `temporary` y `persistent`). */
44
+ open?: boolean;
45
+ /** Callback de cierre (backdrop o ESC en temporary). */
46
+ onClose?: MuiDrawerProps['onClose'];
47
+ /** Ancho en estado expandido. Default: 260. */
48
+ expandedWidth?: number;
49
+ /** Ancho en estado colapsado (solo iconos). Default: 72. */
50
+ collapsedWidth?: number;
51
+ /** Muestra el botón chevron para toggle collapsed. Default: true si `onToggleCollapse` está definido. */
52
+ showCollapseButton?: boolean;
53
+ /** Contenido del header (por encima de los items). Típicamente logo/brand. */
54
+ header?: ReactNode;
55
+ /** Contenido del footer (por debajo de los items). Típicamente user profile. */
56
+ footer?: ReactNode;
57
+ /**
58
+ * Nombre del preset de estilo registrado en `theme.styles.Drawer`.
59
+ * - `"default"` (o ausente) = estilo built-in del paquete.
60
+ */
61
+ preset?: string;
62
+ /** sx aplicado al Drawer (root). Se mergea después del preset. */
63
+ sx?: SxProps<Theme>;
64
+ /** sx aplicado al Paper interno. */
65
+ paperSx?: SxProps<Theme>;
66
+ className?: string;
67
+ }
68
+
69
+ export function Drawer({
70
+ children,
71
+ variant = 'permanent',
72
+ anchor = 'left',
73
+ collapsed = false,
74
+ onToggleCollapse,
75
+ open,
76
+ onClose,
77
+ expandedWidth = 260,
78
+ collapsedWidth = 72,
79
+ showCollapseButton,
80
+ header,
81
+ footer,
82
+ preset,
83
+ sx,
84
+ paperSx,
85
+ className,
86
+ }: DrawerProps) {
87
+ const theme = useTheme();
88
+ const presetSx = resolvePreset('Drawer', preset, theme);
89
+
90
+ // El mini-variant solo tiene sentido en permanent / persistent.
91
+ const supportsCollapsed = variant !== 'temporary';
92
+ const effectiveWidth =
93
+ supportsCollapsed && collapsed ? collapsedWidth : expandedWidth;
94
+
95
+ const contextValue = useMemo(
96
+ () => ({
97
+ collapsed: supportsCollapsed && collapsed,
98
+ width: effectiveWidth,
99
+ }),
100
+ [supportsCollapsed, collapsed, effectiveWidth],
101
+ );
102
+
103
+ const rootSx: SxProps<Theme> = [
104
+ buildDrawerSx({ width: effectiveWidth }),
105
+ ...(presetSx ? [presetSx] : []),
106
+ ...(Array.isArray(sx) ? sx : sx ? [sx] : []),
107
+ ];
108
+
109
+ const shouldShowToggle =
110
+ showCollapseButton ?? (supportsCollapsed && !!onToggleCollapse);
111
+
112
+ const openProp =
113
+ variant === 'permanent'
114
+ ? true
115
+ : open !== undefined
116
+ ? open
117
+ : false;
118
+
119
+ return (
120
+ <DrawerContext.Provider value={contextValue}>
121
+ <MuiDrawer
122
+ variant={variant}
123
+ anchor={anchor}
124
+ open={openProp}
125
+ onClose={onClose}
126
+ className={className}
127
+ sx={rootSx}
128
+ PaperProps={{
129
+ sx: paperSx,
130
+ }}
131
+ >
132
+ {header && (
133
+ <Box
134
+ sx={{
135
+ display: 'flex',
136
+ alignItems: 'center',
137
+ justifyContent: contextValue.collapsed
138
+ ? 'center'
139
+ : 'space-between',
140
+ px: contextValue.collapsed ? 1 : 2,
141
+ py: 1.5,
142
+ minHeight: 64,
143
+ flexShrink: 0,
144
+ }}
145
+ >
146
+ {!contextValue.collapsed && (
147
+ <Box sx={{ flex: 1, minWidth: 0 }}>{header}</Box>
148
+ )}
149
+ {shouldShowToggle && (
150
+ <IconButton
151
+ size="small"
152
+ onClick={onToggleCollapse}
153
+ aria-label={collapsed ? 'Expandir menú' : 'Colapsar menú'}
154
+ >
155
+ {collapsed ? <ChevronRightIcon /> : <ChevronLeftIcon />}
156
+ </IconButton>
157
+ )}
158
+ </Box>
159
+ )}
160
+
161
+ {!header && shouldShowToggle && (
162
+ <Box
163
+ sx={{
164
+ display: 'flex',
165
+ justifyContent: contextValue.collapsed
166
+ ? 'center'
167
+ : 'flex-end',
168
+ px: 1,
169
+ py: 1,
170
+ }}
171
+ >
172
+ <IconButton
173
+ size="small"
174
+ onClick={onToggleCollapse}
175
+ aria-label={collapsed ? 'Expandir menú' : 'Colapsar menú'}
176
+ >
177
+ {collapsed ? <ChevronRightIcon /> : <ChevronLeftIcon />}
178
+ </IconButton>
179
+ </Box>
180
+ )}
181
+
182
+ <Box
183
+ component="nav"
184
+ sx={{
185
+ flex: 1,
186
+ overflowY: 'auto',
187
+ overflowX: 'hidden',
188
+ py: 1,
189
+ }}
190
+ >
191
+ {children}
192
+ </Box>
193
+
194
+ {footer && (
195
+ <Box
196
+ sx={{
197
+ flexShrink: 0,
198
+ borderTop: (t) => `1px solid ${t.palette.divider}`,
199
+ p: contextValue.collapsed ? 1 : 1.5,
200
+ display: 'flex',
201
+ justifyContent: contextValue.collapsed
202
+ ? 'center'
203
+ : 'flex-start',
204
+ }}
205
+ >
206
+ {footer}
207
+ </Box>
208
+ )}
209
+ </MuiDrawer>
210
+ </DrawerContext.Provider>
211
+ );
212
+ }
213
+
214
+ export default Drawer;
@@ -0,0 +1,26 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ /**
4
+ * Context interno del Drawer. Permite que los sub-componentes (DrawerItem,
5
+ * DrawerSection, etc.) reaccionen al estado `collapsed` sin necesidad de
6
+ * recibirlo por props explícitas.
7
+ */
8
+ export interface DrawerContextValue {
9
+ /** Si el drawer está en modo mini (solo iconos). */
10
+ collapsed: boolean;
11
+ /** Ancho actual del drawer (útil para sub-componentes que necesiten layout). */
12
+ width: number;
13
+ }
14
+
15
+ export const DrawerContext = createContext<DrawerContextValue | null>(null);
16
+
17
+ /**
18
+ * Hook para leer el estado del drawer desde cualquier sub-componente. Si se
19
+ * llama fuera de un `<Drawer>`, devuelve valores por defecto (collapsed=false)
20
+ * para que los items renderizados sueltos no exploten.
21
+ */
22
+ export function useDrawerContext(): DrawerContextValue {
23
+ const ctx = useContext(DrawerContext);
24
+ if (ctx) return ctx;
25
+ return { collapsed: false, width: 260 };
26
+ }