@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,110 @@
1
+ import React, { type ReactNode, type MouseEvent } from 'react';
2
+ import { Box, Tooltip, Typography } from '@mui/material';
3
+ import type { SxProps, Theme } from '@mui/material/styles';
4
+
5
+ import { useDrawerContext } from './DrawerContext';
6
+ import { buildDrawerItemSx } from './Drawer.sx';
7
+
8
+ export interface DrawerItemProps {
9
+ /** Icono del item. Se muestra siempre (expanded y collapsed). */
10
+ icon?: ReactNode;
11
+ /** Texto del item. Se oculta cuando el drawer está colapsado (muestra tooltip). */
12
+ label: ReactNode;
13
+ /** Handler de click. */
14
+ onClick?: (event: MouseEvent<HTMLDivElement>) => void;
15
+ /** Marca el item como activo (destaca color y fondo). */
16
+ active?: boolean;
17
+ /** Marca el item como "destructivo" (p.ej. cerrar sesión): color error. */
18
+ danger?: boolean;
19
+ /** Deshabilita click + bajo opacidad. */
20
+ disabled?: boolean;
21
+ /** Contenido adicional a la derecha del label (badge, count, chevron). */
22
+ endAdornment?: ReactNode;
23
+ /** sx override del consumer, se mergea al final. */
24
+ sx?: SxProps<Theme>;
25
+ className?: string;
26
+ }
27
+
28
+ /**
29
+ * Item de un Drawer de shared-library. Lee el estado `collapsed` del
30
+ * DrawerContext para adaptar layout y mostrar tooltip en modo mini.
31
+ *
32
+ * Uso típico:
33
+ * ```tsx
34
+ * <Drawer collapsed={collapsed} onToggleCollapse={toggle}>
35
+ * <DrawerItem icon={<HomeIcon />} label="Inicio" active />
36
+ * <DrawerItem icon={<UserIcon />} label="Perfil" />
37
+ * </Drawer>
38
+ * ```
39
+ */
40
+ export function DrawerItem({
41
+ icon,
42
+ label,
43
+ onClick,
44
+ active = false,
45
+ danger = false,
46
+ disabled = false,
47
+ endAdornment,
48
+ sx,
49
+ className,
50
+ }: DrawerItemProps) {
51
+ const { collapsed } = useDrawerContext();
52
+
53
+ const baseSx = buildDrawerItemSx({ collapsed, active, danger });
54
+
55
+ const mergedSx: SxProps<Theme> = [
56
+ baseSx,
57
+ disabled && { pointerEvents: 'none', opacity: 0.5 },
58
+ ...(Array.isArray(sx) ? sx : sx ? [sx] : []),
59
+ ].filter(Boolean) as SxProps<Theme>;
60
+
61
+ const content = (
62
+ <Box
63
+ role="button"
64
+ tabIndex={disabled ? -1 : 0}
65
+ aria-disabled={disabled}
66
+ onClick={disabled ? undefined : onClick}
67
+ onKeyDown={(event) => {
68
+ if (disabled) return;
69
+ if (event.key === 'Enter' || event.key === ' ') {
70
+ event.preventDefault();
71
+ onClick?.(event as unknown as MouseEvent<HTMLDivElement>);
72
+ }
73
+ }}
74
+ className={className}
75
+ sx={mergedSx}
76
+ >
77
+ {icon !== undefined && (
78
+ <Box className="drawer-item__icon" component="span">
79
+ {icon}
80
+ </Box>
81
+ )}
82
+ <Typography
83
+ component="span"
84
+ variant="body2"
85
+ className="drawer-item__label"
86
+ sx={{ fontWeight: active ? 600 : 400 }}
87
+ >
88
+ {label}
89
+ </Typography>
90
+ {!collapsed && endAdornment && (
91
+ <Box component="span" sx={{ flexShrink: 0, ml: 'auto' }}>
92
+ {endAdornment}
93
+ </Box>
94
+ )}
95
+ </Box>
96
+ );
97
+
98
+ // Cuando está colapsado, envolvemos en tooltip para revelar el label al hover.
99
+ if (collapsed && typeof label === 'string') {
100
+ return (
101
+ <Tooltip title={label} placement="right" arrow>
102
+ {content}
103
+ </Tooltip>
104
+ );
105
+ }
106
+
107
+ return content;
108
+ }
109
+
110
+ export default DrawerItem;
@@ -0,0 +1,10 @@
1
+ export { Drawer, default } from './Drawer';
2
+ export { DrawerItem } from './DrawerItem';
3
+ export { useDrawerContext } from './DrawerContext';
4
+ export type {
5
+ DrawerProps,
6
+ DrawerVariant,
7
+ DrawerAnchor,
8
+ } from './Drawer';
9
+ export type { DrawerItemProps } from './DrawerItem';
10
+ export type { DrawerContextValue } from './DrawerContext';
@@ -0,0 +1,282 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import React, { useState } from 'react';
3
+ import { Box, Button, List, ListItem, ListItemText, Typography } from '@mui/material';
4
+ import Flyout from './Flyout'; // Adjust the import path if your Flyout.tsx is in a different directory
5
+ import { Input } from '../Input/Input';
6
+
7
+ // Define the Meta for the Flyout component
8
+ const meta: Meta<typeof Flyout> = {
9
+ title: 'Components/Flyout', // Category in Storybook
10
+ component: Flyout,
11
+ tags: ['autodocs'], // Automatically generate documentation
12
+ argTypes: {
13
+ open: {
14
+ control: 'boolean',
15
+ description: 'Controls the visibility of the flyout.',
16
+ },
17
+ onClose: {
18
+ action: 'closed', // Log the onClose event in Storybook actions panel
19
+ description: 'Callback function when the flyout is requested to close.',
20
+ },
21
+ title: {
22
+ control: 'text',
23
+ description: 'Title displayed at the top of the flyout.',
24
+ },
25
+ anchor: {
26
+ control: 'select',
27
+ options: ['left', 'top', 'right', 'bottom'],
28
+ description: 'Side from which the flyout will appear.',
29
+ },
30
+ size: {
31
+ control: 'select',
32
+ options: ['small', 'medium', 'large'],
33
+ description: 'Predefined size of the flyout (width for left/right, height for top/bottom).',
34
+ },
35
+ height: {
36
+ control: 'text',
37
+ description: 'Custom height for top/bottom anchored flyouts (e.g., "50vh", "300px").',
38
+ if: { arg: 'anchor', eq: ['top', 'bottom'] }, // Only show if anchor is top or bottom
39
+ },
40
+ children: {
41
+ control: 'text', // Can be set to 'text' for simple string content, or 'disable'
42
+ description: 'Content to be rendered inside the flyout.',
43
+ },
44
+ },
45
+ parameters: {
46
+ docs: {
47
+ description: {
48
+ component: 'A customizable Drawer component that slides in from a specified anchor point, ideal for displaying supplementary content or forms without navigating away from the main page.',
49
+ },
50
+ },
51
+ },
52
+ };
53
+
54
+ export default meta;
55
+
56
+ type Story = StoryObj<typeof Flyout>;
57
+
58
+ // --- Helper component for demonstration content ---
59
+ const DefaultValueInput: React.FC = () => {
60
+ const [value, setValue] = useState<string | number>('Some text');
61
+ return (
62
+ <Box sx={{ my: 2 }}>
63
+ <Input
64
+ label="Input Field"
65
+ value={value}
66
+ onChange={(next) => setValue(next)}
67
+ />
68
+ </Box>
69
+ );
70
+ };
71
+
72
+ const DemoContent: React.FC = () => (
73
+ <Box>
74
+ <Typography variant="body1" paragraph>
75
+ This is some example content inside the flyout. It can contain any React elements.
76
+ </Typography>
77
+ <List dense>
78
+ <ListItem disablePadding>
79
+ <ListItemText primary="Item 1:" secondary="Detail A" />
80
+ </ListItem>
81
+ <ListItem disablePadding>
82
+ <ListItemText primary="Item 2:" secondary="Detail B" />
83
+ </ListItem>
84
+ <ListItem disablePadding>
85
+ <ListItemText primary="Item 3:" secondary="Detail C" />
86
+ </ListItem>
87
+ {[...Array(15)].map((_, i) => ( // Add more items to demonstrate scrolling
88
+ <ListItem key={i + 4} disablePadding>
89
+ <ListItemText primary={`More Item ${i + 4}:`} secondary={`More Detail ${i + 4}`} />
90
+ </ListItem>
91
+ ))}
92
+ </List>
93
+ <DefaultValueInput />
94
+ <Button variant="contained" color="primary" sx={{ mt: 2 }}>
95
+ Action Button
96
+ </Button>
97
+ </Box>
98
+ );
99
+
100
+
101
+ // --- Stories ---
102
+
103
+ // Default story for a basic right-anchored flyout
104
+ export const Default: Story = {
105
+ render: (args) => {
106
+ const [isOpen, setIsOpen] = useState(false);
107
+ return (
108
+ <Box sx={{ height: '200vh', p: 2, backgroundColor: '#f0f0f0' }}> {/* Added height to simulate scrollable page */}
109
+ <Typography variant="h5" mb={2}>Default Flyout Example</Typography>
110
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
111
+ Open Flyout (Right)
112
+ </Button>
113
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
114
+ <DemoContent />
115
+ </Flyout>
116
+ </Box>
117
+ );
118
+ },
119
+ args: {
120
+ title: 'Flyout Title',
121
+ anchor: 'right',
122
+ size: 'medium',
123
+ // children is handled by the render function with DemoContent
124
+ },
125
+ };
126
+
127
+ // Story for a small flyout from the left
128
+ export const SmallLeft: Story = {
129
+ render: (args) => {
130
+ const [isOpen, setIsOpen] = useState(false);
131
+ return (
132
+ <Box sx={{ p: 2 }}>
133
+ <Typography variant="h5" mb={2}>Small Flyout from Left</Typography>
134
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
135
+ Open Small Flyout (Left)
136
+ </Button>
137
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
138
+ <DemoContent />
139
+ </Flyout>
140
+ </Box>
141
+ );
142
+ },
143
+ args: {
144
+ title: 'Small Flyout',
145
+ anchor: 'left',
146
+ size: 'small',
147
+ },
148
+ };
149
+
150
+ // Story for a large flyout from the right
151
+ export const LargeRight: Story = {
152
+ render: (args) => {
153
+ const [isOpen, setIsOpen] = useState(false);
154
+ return (
155
+ <Box sx={{ p: 2 }}>
156
+ <Typography variant="h5" mb={2}>Large Flyout from Right</Typography>
157
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
158
+ Open Large Flyout (Right)
159
+ </Button>
160
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
161
+ <DemoContent />
162
+ </Flyout>
163
+ </Box>
164
+ );
165
+ },
166
+ args: {
167
+ title: 'Large Flyout',
168
+ anchor: 'right',
169
+ size: 'large',
170
+ },
171
+ };
172
+
173
+ // Story for a top-anchored flyout with custom height
174
+ export const TopAnchor: Story = {
175
+ render: (args) => {
176
+ const [isOpen, setIsOpen] = useState(false);
177
+ return (
178
+ <Box sx={{ p: 2 }}>
179
+ <Typography variant="h5" mb={2}>Top Anchored Flyout</Typography>
180
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
181
+ Open Top Flyout
182
+ </Button>
183
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
184
+ <DemoContent />
185
+ </Flyout>
186
+ </Box>
187
+ );
188
+ },
189
+ args: {
190
+ title: 'Top Flyout',
191
+ anchor: 'top',
192
+ height: '300px', // Custom height for top/bottom anchor
193
+ size: 'medium', // Size prop still applies but width is 100% for top/bottom
194
+ },
195
+ };
196
+
197
+ // Story for a bottom-anchored flyout with custom height
198
+ export const BottomAnchor: Story = {
199
+ render: (args) => {
200
+ const [isOpen, setIsOpen] = useState(false);
201
+ return (
202
+ <Box sx={{ p: 2 }}>
203
+ <Typography variant="h5" mb={2}>Bottom Anchored Flyout</Typography>
204
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
205
+ Open Bottom Flyout
206
+ </Button>
207
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
208
+ <DemoContent />
209
+ </Flyout>
210
+ </Box>
211
+ );
212
+ },
213
+ args: {
214
+ title: 'Bottom Flyout',
215
+ anchor: 'bottom',
216
+ height: '40vh', // Custom height using viewport units
217
+ size: 'medium',
218
+ },
219
+ };
220
+
221
+ // Story with no title
222
+ export const NoTitle: Story = {
223
+ render: (args) => {
224
+ const [isOpen, setIsOpen] = useState(false);
225
+ return (
226
+ <Box sx={{ p: 2 }}>
227
+ <Typography variant="h5" mb={2}>Flyout with No Title</Typography>
228
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
229
+ Open Flyout (No Title)
230
+ </Button>
231
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
232
+ <DemoContent />
233
+ </Flyout>
234
+ </Box>
235
+ );
236
+ },
237
+ args: {
238
+ title: undefined, // Explicitly no title
239
+ anchor: 'right',
240
+ size: 'medium',
241
+ },
242
+ };
243
+
244
+ // Story with custom content
245
+ export const CustomContent: Story = {
246
+ render: (args) => {
247
+ const [isOpen, setIsOpen] = useState(false);
248
+ const [customText, setCustomText] = useState('This is some custom text that can be edited.');
249
+ return (
250
+ <Box sx={{ p: 2 }}>
251
+ <Typography variant="h5" mb={2}>Flyout with Custom Content</Typography>
252
+ <Button variant="contained" onClick={() => setIsOpen(true)}>
253
+ Open Custom Content Flyout
254
+ </Button>
255
+ <Flyout {...args} open={isOpen} onClose={() => setIsOpen(false)}>
256
+ <Box sx={{ p: 2 }}>
257
+ <Typography variant="h6" gutterBottom>Custom Form</Typography>
258
+ <Box sx={{ mb: 2 }}>
259
+ <Input
260
+ label="Your Message"
261
+ multiline
262
+ rows={4}
263
+ fullWidth
264
+ value={customText}
265
+ onChange={(next) => setCustomText(String(next))}
266
+ />
267
+ </Box>
268
+ <Button variant="contained" color="secondary">
269
+ Submit Custom Content
270
+ </Button>
271
+ </Box>
272
+ </Flyout>
273
+ </Box>
274
+ );
275
+ },
276
+ args: {
277
+ title: 'Custom Content Flyout',
278
+ anchor: 'right',
279
+ size: 'medium',
280
+ // children is handled by the render function
281
+ },
282
+ };
@@ -0,0 +1,122 @@
1
+ import React, { useMemo } from 'react';
2
+ import {
3
+ Box,
4
+ Typography,
5
+ IconButton,
6
+ Divider,
7
+ Drawer,
8
+ List,
9
+ ListItem,
10
+ ListItemText,
11
+ TextField,
12
+ Button,
13
+ } from '@mui/material';
14
+ import CloseIcon from '@mui/icons-material/Close';
15
+
16
+ // Define the size types for the Flyout
17
+ type FlyoutSize = 'small' | 'medium' | 'large';
18
+
19
+ // Define the props for the Flyout component
20
+ export interface FlyoutProps {
21
+ open: boolean;
22
+ onClose: () => void;
23
+ title?: string;
24
+ anchor?: 'left' | 'top' | 'right' | 'bottom';
25
+ children: React.ReactNode;
26
+ size?: FlyoutSize; // New prop for predefined size
27
+ height?: string | number; // Allows custom height for top/bottom anchors
28
+ }
29
+
30
+ const Flyout: React.FC<FlyoutProps> = ({
31
+ open,
32
+ onClose,
33
+ title,
34
+ anchor = 'right',
35
+ children,
36
+ size = 'medium', // Default size: 'medium'
37
+ height = 'auto',
38
+ }) => {
39
+ // Mapping of predefined sizes to pixel widths
40
+ const getWidthBySize = (flyoutSize: FlyoutSize): number => {
41
+ const baseMultiplier = 1.15; // 15% larger than base
42
+ switch (flyoutSize) {
43
+ case 'small':
44
+ return Math.round(300 * baseMultiplier); // ~345px
45
+ case 'medium':
46
+ return Math.round(450 * baseMultiplier); // ~518px (rounded)
47
+ case 'large':
48
+ return Math.round(600 * baseMultiplier); // ~690px
49
+ default:
50
+ return Math.round(450 * baseMultiplier); // Fallback, ~518px
51
+ }
52
+ };
53
+
54
+ // Calculate width based on size prop for left/right anchors
55
+ const calculatedWidth = getWidthBySize(size);
56
+
57
+ // Determine the style for the content box based on anchor
58
+ const contentStyle = useMemo(() => {
59
+ if (anchor === 'left' || anchor === 'right') {
60
+ return { width: calculatedWidth }; // Use the calculated width
61
+ } else {
62
+ // For 'top' or 'bottom' anchors, width is 100% and height is controlled
63
+ return { height: height, width: '100%' };
64
+ }
65
+ }, [anchor, calculatedWidth, height]);
66
+
67
+ return (
68
+ <Drawer
69
+ anchor={anchor}
70
+ open={open}
71
+ onClose={onClose}
72
+ // Allows closing with Escape key, but prevents closing by clicking outside if ModalProps.disableBackdropClick is true
73
+ disableEscapeKeyDown={false}
74
+ ModalProps={{
75
+ // Keep mounted for better performance if content is complex or needs to retain state
76
+ keepMounted: true,
77
+ }}
78
+ >
79
+ <Box
80
+ sx={{
81
+ ...contentStyle, // Apply calculated width/height
82
+ display: 'flex',
83
+ flexDirection: 'column',
84
+ p: 2, // Padding around the content
85
+ backgroundColor: (theme) => theme.palette.background.paper, // Use theme background color
86
+ color: (theme) => theme.palette.text.primary, // Use theme text color
87
+ height: '100%', // Ensure the main container of the Drawer takes full height
88
+ }}
89
+ role="presentation" // ARIA role for accessibility
90
+ >
91
+ {/* Header section with title and close button */}
92
+ <Box
93
+ sx={{
94
+ display: 'flex',
95
+ justifyContent: 'space-between',
96
+ alignItems: 'center',
97
+ mb: 2, // Margin bottom for separation from content
98
+ flexShrink: 0, // Prevent the header from shrinking when content scrolls
99
+ }}
100
+ >
101
+ {title && (
102
+ <Typography variant="h6" component="div" sx={{ fontWeight: 'bold' }}>
103
+ {title}
104
+ </Typography>
105
+ )}
106
+ <IconButton onClick={onClose} sx={{ ml: 'auto' }}>
107
+ <CloseIcon />
108
+ </IconButton>
109
+ </Box>
110
+
111
+ <Divider sx={{ mb: 2 }} /> {/* Separator line */}
112
+
113
+ {/* Scrollable content area */}
114
+ <Box sx={{ flexGrow: 1, overflowY: 'auto' }}>
115
+ {children}
116
+ </Box>
117
+ </Box>
118
+ </Drawer>
119
+ );
120
+ };
121
+
122
+ export default Flyout;
@@ -0,0 +1 @@
1
+ export { default as Flyout } from './Flyout';
@@ -0,0 +1,37 @@
1
+ export const DefaultGalleryDefinition = `
2
+ <Gallery
3
+ maxWidth="600px"
4
+ items={[
5
+ {
6
+ type: "image",
7
+ url: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
8
+ title: "Image 1",
9
+ thumbnail: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
10
+ },
11
+ {
12
+ type: "image",
13
+ url: "https://images.unsplash.com/photo-1511765224389-37f0e77cf0eb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
14
+ title: "Image 2",
15
+ thumbnail: "https://images.unsplash.com/photo-1511765224389-37f0e77cf0eb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
16
+ },
17
+ {
18
+ type: "image",
19
+ url: "https://images.unsplash.com/photo-1500534623283-312aade485b7?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
20
+ title: "Image 3",
21
+ thumbnail: "https://images.unsplash.com/photo-1500534623283-312aade485b7?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
22
+ },
23
+ {
24
+ type: "video",
25
+ url: "https://www.w3schools.com/html/mov_bbb.mp4",
26
+ title: "Video 1",
27
+ thumbnail: "https://peach.blender.org/wp-content/uploads/title_anouncement.jpg?x11217"
28
+ },
29
+ {
30
+ type: "image",
31
+ url: "https://images.unsplash.com/photo-1494526585095-c41746248156?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
32
+ title: "Image 4",
33
+ thumbnail: "https://images.unsplash.com/photo-1494526585095-c41746248156?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
34
+ }
35
+ ]}
36
+ />
37
+ `.trim();
@@ -0,0 +1,82 @@
1
+ import Gallery from "./Gallery";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { DefaultGalleryDefinition } from "./Gallery.definition";
4
+
5
+ const meta: Meta<typeof Gallery> = {
6
+ title: "Components/Gallery",
7
+ component: Gallery,
8
+ parameters: {
9
+ layout: "centered"
10
+ },
11
+ tags: ["autodocs"]
12
+ };
13
+
14
+ export default meta;
15
+
16
+
17
+ type Story = StoryObj<typeof Gallery>;
18
+
19
+
20
+ export const Default: Story = {
21
+ args: {
22
+ maxWidth: "600px",
23
+ items: [
24
+ {
25
+ type: "image",
26
+ url: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
27
+ title: "Image 1",
28
+ thumbnail: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
29
+ },
30
+ {
31
+ type: "image",
32
+ url: "https://images.unsplash.com/photo-1511765224389-37f0e77cf0eb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
33
+ title: "Image 2",
34
+ thumbnail: "https://images.unsplash.com/photo-1511765224389-37f0e77cf0eb?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
35
+ },
36
+ {
37
+ type: "image",
38
+ url: "https://images.unsplash.com/photo-1500534623283-312aade485b7?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
39
+ title: "Image 3",
40
+ thumbnail: "https://images.unsplash.com/photo-1500534623283-312aade485b7?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
41
+ },
42
+ {
43
+ type: "video",
44
+ url: "https://www.w3schools.com/html/mov_bbb.mp4",
45
+ title: "Video 1",
46
+ thumbnail: "https://peach.blender.org/wp-content/uploads/title_anouncement.jpg?x11217"
47
+ },
48
+ {
49
+ type: "image",
50
+ url: "https://images.unsplash.com/photo-1494526585095-c41746248156?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80",
51
+ title: "Image 4",
52
+ thumbnail: "https://images.unsplash.com/photo-1494526585095-c41746248156?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80"
53
+ },
54
+
55
+
56
+ ]
57
+ },
58
+ render: (args) => (
59
+
60
+ <Gallery {...args} />
61
+
62
+ ),
63
+ parameters: {
64
+ docs: {
65
+ description: {
66
+ story: "Ejemplo básico de Gallery, permite ver imagenes y videos"
67
+ },
68
+ source: {
69
+ code: DefaultGalleryDefinition
70
+ },
71
+ argTypes: {
72
+ maxWidth: { description: 'Permite ajustar el maxwidht de el componente gallery' },
73
+ items: { control: false, description: `Array de objetos con la información de las imágenes y videos a mostrar, la estructura de los objetos es la siguiente : {
74
+ type: "image" | "video",
75
+ url: string,
76
+ title: string,
77
+ thumbnail: string
78
+ }` }
79
+ }
80
+ }
81
+ }
82
+ };