@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,230 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { fn } from '@storybook/test';
4
+ import {
5
+ Box,
6
+ Button,
7
+ Table,
8
+ TableBody,
9
+ TableCell,
10
+ TableHead,
11
+ TableRow,
12
+ Paper,
13
+ Chip,
14
+ } from '@mui/material';
15
+ import EditIcon from '@mui/icons-material/Edit';
16
+ import ContentCopyIcon from '@mui/icons-material/ContentCopy';
17
+ import DeleteIcon from '@mui/icons-material/Delete';
18
+ import VisibilityIcon from '@mui/icons-material/Visibility';
19
+ import DownloadIcon from '@mui/icons-material/Download';
20
+ import ShareIcon from '@mui/icons-material/Share';
21
+ import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
22
+
23
+ import { ActionMenu } from './ActionMenu';
24
+
25
+ const meta: Meta<typeof ActionMenu> = {
26
+ title: 'Components/ActionMenu',
27
+ component: ActionMenu,
28
+ tags: ['autodocs'],
29
+ parameters: {
30
+ docs: {
31
+ description: {
32
+ component:
33
+ 'Menú de acciones compacto pensado para celdas de tabla, cabeceras y cualquier lugar donde hagan falta acciones secundarias detrás de un trigger. Reemplaza los patrones `<Dropdown>` de react-bootstrap.',
34
+ },
35
+ },
36
+ },
37
+ };
38
+
39
+ export default meta;
40
+ type Story = StoryObj<typeof ActionMenu>;
41
+
42
+ // ── Stories ──────────────────────────────────────────────────────────────
43
+
44
+ export const Default: Story = {
45
+ args: {
46
+ items: [
47
+ { label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
48
+ { label: 'Duplicar', icon: <ContentCopyIcon fontSize="small" />, onClick: fn() },
49
+ { label: 'Ver detalle', icon: <VisibilityIcon fontSize="small" />, onClick: fn() },
50
+ ],
51
+ },
52
+ parameters: {
53
+ docs: {
54
+ description: {
55
+ story:
56
+ 'Menú básico con trigger de 3 puntos (icono por defecto). Cada item tiene label + icono + onClick.',
57
+ },
58
+ },
59
+ },
60
+ };
61
+
62
+ export const WithDangerItem: Story = {
63
+ args: {
64
+ items: [
65
+ { label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
66
+ { label: 'Duplicar', icon: <ContentCopyIcon fontSize="small" />, onClick: fn() },
67
+ {
68
+ label: 'Eliminar',
69
+ icon: <DeleteIcon fontSize="small" />,
70
+ onClick: fn(),
71
+ danger: true,
72
+ dividerBefore: true,
73
+ },
74
+ ],
75
+ },
76
+ parameters: {
77
+ docs: {
78
+ description: {
79
+ story:
80
+ 'Item final marcado como `danger` (pintado en rojo) con `dividerBefore: true` para separarlo visualmente del resto. Patrón típico para acciones destructivas.',
81
+ },
82
+ },
83
+ },
84
+ };
85
+
86
+ export const WithDisabledItems: Story = {
87
+ args: {
88
+ items: [
89
+ { label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
90
+ {
91
+ label: 'Exportar',
92
+ icon: <DownloadIcon fontSize="small" />,
93
+ onClick: fn(),
94
+ disabled: true,
95
+ },
96
+ {
97
+ label: 'Compartir',
98
+ icon: <ShareIcon fontSize="small" />,
99
+ onClick: fn(),
100
+ disabled: true,
101
+ },
102
+ ],
103
+ },
104
+ parameters: {
105
+ docs: {
106
+ description: {
107
+ story:
108
+ 'Items deshabilitados condicionalmente — útil cuando una acción no aplica al estado actual del row (ej. exportar un recurso que aún no se procesó).',
109
+ },
110
+ },
111
+ },
112
+ };
113
+
114
+ export const CustomTrigger: Story = {
115
+ args: {
116
+ items: [
117
+ { label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
118
+ { label: 'Duplicar', icon: <ContentCopyIcon fontSize="small" />, onClick: fn() },
119
+ { label: 'Eliminar', icon: <DeleteIcon fontSize="small" />, onClick: fn(), danger: true },
120
+ ],
121
+ trigger: (
122
+ <Button variant="outlined" startIcon={<MoreHorizIcon />}>
123
+ Más
124
+ </Button>
125
+ ),
126
+ },
127
+ parameters: {
128
+ docs: {
129
+ description: {
130
+ story:
131
+ 'El trigger por defecto es un IconButton de 3 puntos, pero podés pasar cualquier nodo (botón, chip, icono custom). El `onClick` del menú se inyecta automáticamente al trigger clonado.',
132
+ },
133
+ },
134
+ },
135
+ };
136
+
137
+ export const InsideTableCell: Story = {
138
+ render: () => {
139
+ const rows = [
140
+ { id: 1, name: 'Comercio A', status: 'Activo' },
141
+ { id: 2, name: 'Comercio B', status: 'Pendiente' },
142
+ { id: 3, name: 'Comercio C', status: 'Suspendido' },
143
+ ];
144
+
145
+ return (
146
+ <Paper sx={{ maxWidth: 720 }}>
147
+ <Table size="small">
148
+ <TableHead>
149
+ <TableRow>
150
+ <TableCell>ID</TableCell>
151
+ <TableCell>Comercio</TableCell>
152
+ <TableCell>Estado</TableCell>
153
+ <TableCell align="right">Acciones</TableCell>
154
+ </TableRow>
155
+ </TableHead>
156
+ <TableBody>
157
+ {rows.map((row) => (
158
+ <TableRow key={row.id} hover>
159
+ <TableCell>{row.id}</TableCell>
160
+ <TableCell>{row.name}</TableCell>
161
+ <TableCell>
162
+ <Chip
163
+ label={row.status}
164
+ size="small"
165
+ color={
166
+ row.status === 'Activo'
167
+ ? 'success'
168
+ : row.status === 'Pendiente'
169
+ ? 'warning'
170
+ : 'error'
171
+ }
172
+ />
173
+ </TableCell>
174
+ <TableCell align="right">
175
+ <ActionMenu
176
+ items={[
177
+ {
178
+ label: 'Ver detalle',
179
+ icon: <VisibilityIcon fontSize="small" />,
180
+ onClick: fn(() => console.log('Ver', row.id)),
181
+ },
182
+ {
183
+ label: 'Editar',
184
+ icon: <EditIcon fontSize="small" />,
185
+ onClick: fn(() => console.log('Editar', row.id)),
186
+ },
187
+ {
188
+ label: 'Eliminar',
189
+ icon: <DeleteIcon fontSize="small" />,
190
+ onClick: fn(() => console.log('Eliminar', row.id)),
191
+ danger: true,
192
+ dividerBefore: true,
193
+ },
194
+ ]}
195
+ />
196
+ </TableCell>
197
+ </TableRow>
198
+ ))}
199
+ </TableBody>
200
+ </Table>
201
+ </Paper>
202
+ );
203
+ },
204
+ parameters: {
205
+ docs: {
206
+ description: {
207
+ story:
208
+ 'Caso de uso principal: un `ActionMenu` por cada fila de una tabla. Reemplaza exactamente el patrón `DropDownActions` + `react-bootstrap Dropdown` usado hoy en Afiliaciones.',
209
+ },
210
+ },
211
+ },
212
+ };
213
+
214
+ export const DisabledTrigger: Story = {
215
+ args: {
216
+ disabled: true,
217
+ items: [
218
+ { label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
219
+ { label: 'Eliminar', icon: <DeleteIcon fontSize="small" />, onClick: fn(), danger: true },
220
+ ],
221
+ },
222
+ parameters: {
223
+ docs: {
224
+ description: {
225
+ story:
226
+ 'Cuando el row o la acción no tiene permisos, se puede deshabilitar el trigger entero pasando `disabled`.',
227
+ },
228
+ },
229
+ },
230
+ };
@@ -0,0 +1,174 @@
1
+ import React, { useState, type ReactNode, type MouseEvent } from 'react';
2
+ import {
3
+ IconButton,
4
+ Menu,
5
+ MenuItem,
6
+ ListItemIcon,
7
+ ListItemText,
8
+ Divider,
9
+ Tooltip,
10
+ } from '@mui/material';
11
+ import MoreVertIcon from '@mui/icons-material/MoreVert';
12
+ import type { SxProps, Theme } from '@mui/material/styles';
13
+
14
+ export interface ActionMenuItem {
15
+ /** Key única para React. Si no se provee, se usa el label. */
16
+ key?: string;
17
+ /** Texto del item. */
18
+ label: ReactNode;
19
+ /** Icono opcional a la izquierda. */
20
+ icon?: ReactNode;
21
+ /** Handler de click. Recibe el evento del MenuItem. */
22
+ onClick?: (event: MouseEvent<HTMLLIElement>) => void;
23
+ /** Deshabilita el item. */
24
+ disabled?: boolean;
25
+ /** Marca el item como destructivo (pinta color error). */
26
+ danger?: boolean;
27
+ /** Inserta un `<Divider />` ANTES de este item. */
28
+ dividerBefore?: boolean;
29
+ }
30
+
31
+ export interface ActionMenuProps {
32
+ /** Lista de items del menú. */
33
+ items: ActionMenuItem[];
34
+ /**
35
+ * Elemento trigger. Si no se provee, se renderiza un IconButton con icono
36
+ * de tres puntos (MoreVertIcon) — el patrón típico de celda de tabla.
37
+ */
38
+ trigger?: ReactNode;
39
+ /** Texto de tooltip sobre el trigger default. Default: "Acciones". */
40
+ triggerTooltip?: string;
41
+ /** Anchor origin del menu. Default: { vertical: 'bottom', horizontal: 'right' }. */
42
+ anchorOrigin?: {
43
+ vertical: 'top' | 'center' | 'bottom';
44
+ horizontal: 'left' | 'center' | 'right';
45
+ };
46
+ /** Transform origin del menu. Default: { vertical: 'top', horizontal: 'right' }. */
47
+ transformOrigin?: {
48
+ vertical: 'top' | 'center' | 'bottom';
49
+ horizontal: 'left' | 'center' | 'right';
50
+ };
51
+ /** sx del Menu (Paper interno). */
52
+ menuSx?: SxProps<Theme>;
53
+ /** Deshabilita el trigger entero. */
54
+ disabled?: boolean;
55
+ className?: string;
56
+ }
57
+
58
+ /**
59
+ * Menú de acciones compacto, pensado para celdas de tabla y cabeceras.
60
+ * Reemplaza los patrones `<Dropdown>` de react-bootstrap.
61
+ *
62
+ * ```tsx
63
+ * <ActionMenu
64
+ * items={[
65
+ * { label: 'Editar', icon: <EditIcon />, onClick: handleEdit },
66
+ * { label: 'Duplicar', icon: <CopyIcon />, onClick: handleDup },
67
+ * { label: 'Eliminar', icon: <TrashIcon />, onClick: handleDel, danger: true, dividerBefore: true },
68
+ * ]}
69
+ * />
70
+ * ```
71
+ */
72
+ export function ActionMenu({
73
+ items,
74
+ trigger,
75
+ triggerTooltip = 'Acciones',
76
+ anchorOrigin = { vertical: 'bottom', horizontal: 'right' },
77
+ transformOrigin = { vertical: 'top', horizontal: 'right' },
78
+ menuSx,
79
+ disabled = false,
80
+ className,
81
+ }: ActionMenuProps) {
82
+ const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
83
+ const open = Boolean(anchorEl);
84
+
85
+ const handleOpen = (event: MouseEvent<HTMLElement>) => {
86
+ if (disabled) return;
87
+ event.stopPropagation();
88
+ setAnchorEl(event.currentTarget);
89
+ };
90
+
91
+ const handleClose = () => setAnchorEl(null);
92
+
93
+ const handleItemClick = (
94
+ event: MouseEvent<HTMLLIElement>,
95
+ item: ActionMenuItem,
96
+ ) => {
97
+ event.stopPropagation();
98
+ item.onClick?.(event);
99
+ handleClose();
100
+ };
101
+
102
+ const triggerElement = trigger ? (
103
+ React.isValidElement(trigger) ? (
104
+ React.cloneElement(trigger as React.ReactElement<any>, {
105
+ onClick: handleOpen,
106
+ disabled,
107
+ })
108
+ ) : (
109
+ <span onClick={handleOpen}>{trigger}</span>
110
+ )
111
+ ) : (
112
+ <Tooltip title={triggerTooltip} arrow>
113
+ <span>
114
+ <IconButton
115
+ size="small"
116
+ onClick={handleOpen}
117
+ disabled={disabled}
118
+ aria-label={triggerTooltip}
119
+ >
120
+ <MoreVertIcon fontSize="small" />
121
+ </IconButton>
122
+ </span>
123
+ </Tooltip>
124
+ );
125
+
126
+ return (
127
+ <span className={className}>
128
+ {triggerElement}
129
+ <Menu
130
+ anchorEl={anchorEl}
131
+ open={open}
132
+ onClose={handleClose}
133
+ anchorOrigin={anchorOrigin}
134
+ transformOrigin={transformOrigin}
135
+ slotProps={{ paper: { sx: { minWidth: 180, ...(menuSx as any) } } }}
136
+ >
137
+ {items.map((item, idx) => {
138
+ const key = item.key ?? `${String(item.label)}-${idx}`;
139
+ const node = (
140
+ <MenuItem
141
+ key={key}
142
+ disabled={item.disabled}
143
+ onClick={(event) => handleItemClick(event, item)}
144
+ sx={(theme) => ({
145
+ color: item.danger ? theme.palette.error.main : 'inherit',
146
+ '& .MuiListItemIcon-root': {
147
+ color: item.danger
148
+ ? theme.palette.error.main
149
+ : 'inherit',
150
+ minWidth: 32,
151
+ },
152
+ })}
153
+ >
154
+ {item.icon && <ListItemIcon>{item.icon}</ListItemIcon>}
155
+ <ListItemText primary={item.label} />
156
+ </MenuItem>
157
+ );
158
+
159
+ if (item.dividerBefore && idx > 0) {
160
+ return (
161
+ <React.Fragment key={`${key}-frag`}>
162
+ <Divider />
163
+ {node}
164
+ </React.Fragment>
165
+ );
166
+ }
167
+ return node;
168
+ })}
169
+ </Menu>
170
+ </span>
171
+ );
172
+ }
173
+
174
+ export default ActionMenu;
@@ -0,0 +1,2 @@
1
+ export { ActionMenu, default } from './ActionMenu';
2
+ export type { ActionMenuProps, ActionMenuItem } from './ActionMenu';
@@ -0,0 +1,272 @@
1
+ import React, { useState } from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { Box, Typography, Button, IconButton, Tooltip } from '@mui/material';
4
+ import NotificationsIcon from '@mui/icons-material/Notifications';
5
+ import HelpOutlineIcon from '@mui/icons-material/HelpOutline';
6
+ import PersonIcon from '@mui/icons-material/Person';
7
+ import SettingsIcon from '@mui/icons-material/Settings';
8
+ import LogoutIcon from '@mui/icons-material/Logout';
9
+ import DashboardIcon from '@mui/icons-material/Dashboard';
10
+
11
+ import { AppBar } from './AppBar';
12
+ import { AppBarBrand } from './AppBarBrand';
13
+ import { AppBarMenuToggle } from './AppBarMenuToggle';
14
+ import { AppBarUserMenu } from './AppBarUserMenu';
15
+
16
+ const meta: Meta<typeof AppBar> = {
17
+ title: 'Components/AppBar',
18
+ component: AppBar,
19
+ tags: ['autodocs'],
20
+ parameters: {
21
+ layout: 'fullscreen',
22
+ docs: {
23
+ description: {
24
+ component:
25
+ 'AppBar (header superior) pensado como shell compositivo. El consumer arma su contenido con los sub-componentes `AppBarBrand`, `AppBarMenuToggle` y `AppBarUserMenu`, además de cualquier acción custom. Reemplaza el header de Metronic.',
26
+ },
27
+ },
28
+ },
29
+ argTypes: {
30
+ position: {
31
+ control: 'select',
32
+ options: ['fixed', 'sticky', 'static', 'absolute', 'relative'],
33
+ },
34
+ color: {
35
+ control: 'select',
36
+ options: ['default', 'primary', 'secondary', 'transparent', 'inherit'],
37
+ },
38
+ elevation: { control: { type: 'number', min: 0, max: 24, step: 1 } },
39
+ height: { control: { type: 'number', min: 48, max: 96, step: 4 } },
40
+ },
41
+ };
42
+
43
+ export default meta;
44
+ type Story = StoryObj<typeof AppBar>;
45
+
46
+ // ── Helpers ──────────────────────────────────────────────────────────────
47
+
48
+ const SampleLogo = () => (
49
+ <Box
50
+ sx={{
51
+ width: 32,
52
+ height: 32,
53
+ borderRadius: 1,
54
+ display: 'flex',
55
+ alignItems: 'center',
56
+ justifyContent: 'center',
57
+ backgroundColor: 'primary.main',
58
+ color: 'primary.contrastText',
59
+ fontWeight: 700,
60
+ fontSize: 14,
61
+ }}
62
+ >
63
+ F
64
+ </Box>
65
+ );
66
+
67
+ const SampleBody = () => (
68
+ <Box sx={{ p: 3 }}>
69
+ <Typography variant="h5" gutterBottom>
70
+ Contenido de la página
71
+ </Typography>
72
+ <Typography variant="body2" color="text.secondary" sx={{ mb: 2 }}>
73
+ Este bloque sólo demuestra el layout bajo el AppBar.
74
+ </Typography>
75
+ {Array.from({ length: 20 }).map((_, idx) => (
76
+ <Typography key={idx} variant="body2" sx={{ mb: 1 }}>
77
+ Línea {idx + 1} — contenido de ejemplo para scroll sticky.
78
+ </Typography>
79
+ ))}
80
+ </Box>
81
+ );
82
+
83
+ const userMenuItems = [
84
+ {
85
+ label: 'Mi perfil',
86
+ icon: <PersonIcon fontSize="small" />,
87
+ onClick: () => console.log('profile'),
88
+ },
89
+ {
90
+ label: 'Configuración',
91
+ icon: <SettingsIcon fontSize="small" />,
92
+ onClick: () => console.log('settings'),
93
+ },
94
+ {
95
+ label: 'Cerrar sesión',
96
+ icon: <LogoutIcon fontSize="small" />,
97
+ onClick: () => console.log('logout'),
98
+ danger: true,
99
+ dividerBefore: true,
100
+ },
101
+ ];
102
+
103
+ // ── Stories ──────────────────────────────────────────────────────────────
104
+
105
+ export const BasicHeader: Story = {
106
+ args: {
107
+ position: 'sticky',
108
+ color: 'default',
109
+ elevation: 1,
110
+ height: 64,
111
+ },
112
+ render: (args) => (
113
+ <>
114
+ <AppBar {...args}>
115
+ <AppBarBrand
116
+ logo={<SampleLogo />}
117
+ title="Afiliaciones"
118
+ subtitle="Panel administrativo"
119
+ />
120
+ </AppBar>
121
+ <SampleBody />
122
+ </>
123
+ ),
124
+ };
125
+
126
+ export const WithMenuToggle: Story = {
127
+ render: (args) => {
128
+ const [open, setOpen] = useState(false);
129
+ return (
130
+ <>
131
+ <AppBar
132
+ {...args}
133
+ onMenuToggle={() => setOpen((value) => !value)}
134
+ menuOpen={open}
135
+ >
136
+ <AppBarMenuToggle />
137
+ <AppBarBrand logo={<SampleLogo />} title="Afiliaciones" />
138
+ </AppBar>
139
+ <Box sx={{ p: 3 }}>
140
+ <Typography variant="body2">
141
+ Drawer {open ? 'abierto' : 'cerrado'} — el icono cambia según el
142
+ estado. Click en el botón hamburguesa para alternar.
143
+ </Typography>
144
+ </Box>
145
+ </>
146
+ );
147
+ },
148
+ };
149
+
150
+ export const WithUserMenu: Story = {
151
+ render: (args) => (
152
+ <>
153
+ <AppBar {...args}>
154
+ <AppBarBrand logo={<SampleLogo />} title="Afiliaciones" />
155
+ <Box sx={{ flex: 1 }} />
156
+ <AppBarUserMenu
157
+ user={{
158
+ name: 'Andrea Pineda',
159
+ email: 'andrea@soyfri.com',
160
+ }}
161
+ items={userMenuItems}
162
+ />
163
+ </AppBar>
164
+ <SampleBody />
165
+ </>
166
+ ),
167
+ };
168
+
169
+ export const CompleteDashboardHeader: Story = {
170
+ render: (args) => {
171
+ const [open, setOpen] = useState(true);
172
+ return (
173
+ <>
174
+ <AppBar
175
+ {...args}
176
+ onMenuToggle={() => setOpen((value) => !value)}
177
+ menuOpen={open}
178
+ >
179
+ <AppBarMenuToggle />
180
+ <AppBarBrand
181
+ logo={<SampleLogo />}
182
+ title="Afiliaciones"
183
+ subtitle="Panel administrativo"
184
+ onClick={() => console.log('go home')}
185
+ />
186
+ <Box sx={{ flex: 1 }} />
187
+ <Tooltip title="Notificaciones" arrow>
188
+ <IconButton color="inherit">
189
+ <NotificationsIcon />
190
+ </IconButton>
191
+ </Tooltip>
192
+ <Tooltip title="Ayuda" arrow>
193
+ <IconButton color="inherit">
194
+ <HelpOutlineIcon />
195
+ </IconButton>
196
+ </Tooltip>
197
+ <AppBarUserMenu
198
+ user={{
199
+ name: 'Andrea Pineda',
200
+ email: 'andrea@soyfri.com',
201
+ }}
202
+ items={userMenuItems}
203
+ />
204
+ </AppBar>
205
+ <SampleBody />
206
+ </>
207
+ );
208
+ },
209
+ };
210
+
211
+ export const TransparentVariant: Story = {
212
+ args: {
213
+ color: 'transparent',
214
+ elevation: 0,
215
+ },
216
+ render: (args) => (
217
+ <Box
218
+ sx={{
219
+ minHeight: '100vh',
220
+ background:
221
+ 'linear-gradient(135deg, #f0f4ff 0%, #e6f7ff 50%, #fff5f5 100%)',
222
+ }}
223
+ >
224
+ <AppBar {...args}>
225
+ <AppBarBrand logo={<SampleLogo />} title="Afiliaciones" />
226
+ <Box sx={{ flex: 1 }} />
227
+ <Button variant="contained" color="primary" size="small">
228
+ Iniciar sesión
229
+ </Button>
230
+ </AppBar>
231
+ <Box sx={{ p: 3 }}>
232
+ <Typography variant="h5">Landing page transparente</Typography>
233
+ <Typography variant="body2" color="text.secondary">
234
+ Sin sombra, con borde sutil — útil para headers sobre hero sections.
235
+ </Typography>
236
+ </Box>
237
+ </Box>
238
+ ),
239
+ };
240
+
241
+ export const PrimaryColorWithMenu: Story = {
242
+ args: {
243
+ color: 'primary',
244
+ },
245
+ render: (args) => {
246
+ const [open, setOpen] = useState(false);
247
+ return (
248
+ <>
249
+ <AppBar
250
+ {...args}
251
+ onMenuToggle={() => setOpen((value) => !value)}
252
+ menuOpen={open}
253
+ >
254
+ <AppBarMenuToggle />
255
+ <DashboardIcon sx={{ mr: 1 }} />
256
+ <Typography variant="h6" sx={{ fontWeight: 700 }}>
257
+ Dashboard
258
+ </Typography>
259
+ <Box sx={{ flex: 1 }} />
260
+ <AppBarUserMenu
261
+ user={{
262
+ name: 'Andrea Pineda',
263
+ email: 'andrea@soyfri.com',
264
+ }}
265
+ items={userMenuItems}
266
+ />
267
+ </AppBar>
268
+ <SampleBody />
269
+ </>
270
+ );
271
+ },
272
+ };