@soyfri/shared-library 2.0.0-beta.9 → 2.0.0

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 (232) hide show
  1. package/Button-C17mExpd.cjs.map +1 -1
  2. package/Button-UkkP-bNw.js.map +1 -1
  3. package/README.md +182 -150
  4. package/components/ActionMenu/ActionMenu.cjs +52 -52
  5. package/components/ActionMenu/ActionMenu.cjs.map +1 -1
  6. package/components/ActionMenu/ActionMenu.d.ts +20 -36
  7. package/components/ActionMenu/ActionMenu.js +55 -55
  8. package/components/ActionMenu/ActionMenu.js.map +1 -1
  9. package/components/ActionMenu/index.d.ts +2 -2
  10. package/components/AppBar/AppBar.cjs +2 -219
  11. package/components/AppBar/AppBar.cjs.map +1 -1
  12. package/components/AppBar/AppBar.d.ts +6 -6
  13. package/components/AppBar/AppBar.js +5 -222
  14. package/components/AppBar/AppBar.js.map +1 -1
  15. package/components/AppBar/index.d.ts +0 -6
  16. package/components/Autocomplete/Autocomplete.cjs +93 -94
  17. package/components/Autocomplete/Autocomplete.cjs.map +1 -1
  18. package/components/Autocomplete/Autocomplete.d.ts +29 -26
  19. package/components/Autocomplete/Autocomplete.definitions.d.ts +2 -1
  20. package/components/Autocomplete/Autocomplete.helpers.d.ts +12 -8
  21. package/components/Autocomplete/Autocomplete.js +94 -95
  22. package/components/Autocomplete/Autocomplete.js.map +1 -1
  23. package/components/Autocomplete/_parts/AutocompleteChips.d.ts +7 -6
  24. package/components/Autocomplete/_parts/AutocompleteOption.d.ts +10 -13
  25. package/components/Autocomplete/index.d.ts +1 -1
  26. package/components/Avatar/Avatar.cjs +17 -18
  27. package/components/Avatar/Avatar.cjs.map +1 -1
  28. package/components/Avatar/Avatar.js +17 -18
  29. package/components/Avatar/Avatar.js.map +1 -1
  30. package/components/Avatar/index.d.ts +1 -0
  31. package/components/Button/Button.d.ts +5 -5
  32. package/components/Button/index.d.ts +1 -0
  33. package/components/Card/Card.cjs +3 -92
  34. package/components/Card/Card.cjs.map +1 -1
  35. package/components/Card/Card.d.ts +3 -50
  36. package/components/Card/Card.js +5 -94
  37. package/components/Card/Card.js.map +1 -1
  38. package/components/Card/Card.sx.d.ts +3 -6
  39. package/components/Card/index.d.ts +1 -1
  40. package/components/Checkbox/Checkbox.cjs +189 -0
  41. package/components/Checkbox/Checkbox.cjs.map +1 -0
  42. package/components/Checkbox/Checkbox.d.ts +55 -0
  43. package/components/Checkbox/Checkbox.js +189 -0
  44. package/components/Checkbox/Checkbox.js.map +1 -0
  45. package/components/Checkbox/Checkbox.sx.d.ts +13 -0
  46. package/components/Checkbox/index.d.ts +2 -0
  47. package/components/Checkbox.d.ts +6 -0
  48. package/components/Chip/Chip.cjs +2 -1
  49. package/components/Chip/Chip.cjs.map +1 -1
  50. package/components/Chip/Chip.js +2 -1
  51. package/components/Chip/Chip.js.map +1 -1
  52. package/components/Chip/index.d.ts +2 -1
  53. package/components/Chip.d.ts +4 -0
  54. package/components/DatePicker/DatePicker.cjs +40 -63
  55. package/components/DatePicker/DatePicker.cjs.map +1 -1
  56. package/components/DatePicker/DatePicker.d.ts +1 -13
  57. package/components/DatePicker/DatePicker.js +36 -59
  58. package/components/DatePicker/DatePicker.js.map +1 -1
  59. package/components/DatePicker/index.d.ts +1 -1
  60. package/components/DateTimePicker/DateTimePicker.cjs +58 -82
  61. package/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
  62. package/components/DateTimePicker/DateTimePicker.d.ts +9 -17
  63. package/components/DateTimePicker/DateTimePicker.definitions.d.ts +2 -0
  64. package/components/DateTimePicker/DateTimePicker.helpers.d.ts +4 -2
  65. package/components/DateTimePicker/DateTimePicker.js +54 -78
  66. package/components/DateTimePicker/DateTimePicker.js.map +1 -1
  67. package/components/DateTimePicker/index.d.ts +1 -1
  68. package/components/Drawer/Drawer.cjs +12 -6
  69. package/components/Drawer/Drawer.cjs.map +1 -1
  70. package/components/Drawer/Drawer.d.ts +3 -1
  71. package/components/Drawer/Drawer.js +13 -7
  72. package/components/Drawer/Drawer.js.map +1 -1
  73. package/components/Drawer/DrawerItem.d.ts +6 -1
  74. package/components/Gallery/Gallery.cjs +154 -79
  75. package/components/Gallery/Gallery.cjs.map +1 -1
  76. package/components/Gallery/Gallery.d.ts +25 -9
  77. package/components/Gallery/Gallery.js +154 -79
  78. package/components/Gallery/Gallery.js.map +1 -1
  79. package/components/Gallery/GalleryLightbox.d.ts +6 -10
  80. package/components/Gallery/GalleryMain.d.ts +3 -7
  81. package/components/Gallery/GalleryThumbnails.d.ts +7 -11
  82. package/components/Gallery/index.d.ts +2 -1
  83. package/components/Gallery.d.ts +4 -0
  84. package/components/Icon/Icon.cjs +6 -8
  85. package/components/Icon/Icon.cjs.map +1 -1
  86. package/components/Icon/Icon.d.ts +11 -17
  87. package/components/Icon/Icon.js +6 -8
  88. package/components/Icon/Icon.js.map +1 -1
  89. package/components/Icon/index.d.ts +2 -1
  90. package/components/Icon.d.ts +4 -0
  91. package/components/Input/Input.cjs +26 -13
  92. package/components/Input/Input.cjs.map +1 -1
  93. package/components/Input/Input.d.ts +9 -2
  94. package/components/Input/Input.helpers.d.ts +3 -3
  95. package/components/Input/Input.js +23 -10
  96. package/components/Input/Input.js.map +1 -1
  97. package/components/Input/index.d.ts +1 -1
  98. package/components/InputGroup/InputGroup.cjs +23 -22
  99. package/components/InputGroup/InputGroup.cjs.map +1 -1
  100. package/components/InputGroup/InputGroup.d.ts +4 -4
  101. package/components/InputGroup/InputGroup.js +22 -21
  102. package/components/InputGroup/InputGroup.js.map +1 -1
  103. package/components/InputGroup/index.d.ts +2 -1
  104. package/components/InputGroup.d.ts +4 -0
  105. package/components/Modal/Modal.cjs +127 -98
  106. package/components/Modal/Modal.cjs.map +1 -1
  107. package/components/Modal/Modal.d.ts +20 -5
  108. package/components/Modal/Modal.js +130 -101
  109. package/components/Modal/Modal.js.map +1 -1
  110. package/components/Modal/ModalBody.d.ts +6 -1
  111. package/components/Modal/ModalFooter.d.ts +4 -4
  112. package/components/Modal/ModalHeader.d.ts +6 -1
  113. package/components/Modal/index.d.ts +4 -2
  114. package/components/Modal.d.ts +4 -0
  115. package/components/RadioGroup/RadioGroup.cjs +9 -7
  116. package/components/RadioGroup/RadioGroup.cjs.map +1 -1
  117. package/components/RadioGroup/RadioGroup.d.ts +9 -3
  118. package/components/RadioGroup/RadioGroup.js +9 -7
  119. package/components/RadioGroup/RadioGroup.js.map +1 -1
  120. package/components/RadioGroup/index.d.ts +1 -1
  121. package/components/Select/Select.cjs +129 -264
  122. package/components/Select/Select.cjs.map +1 -1
  123. package/components/Select/Select.d.ts +35 -20
  124. package/components/Select/Select.helpers.d.ts +6 -19
  125. package/components/Select/Select.js +134 -269
  126. package/components/Select/Select.js.map +1 -1
  127. package/components/Select/index.d.ts +1 -1
  128. package/components/Stat/Stat.cjs +2 -2
  129. package/components/Stat/Stat.cjs.map +1 -1
  130. package/components/Stat/Stat.js +2 -2
  131. package/components/Stat/Stat.js.map +1 -1
  132. package/components/Stat/index.d.ts +2 -1
  133. package/components/Stat.d.ts +4 -0
  134. package/components/StatusMessage/StatusMessage.cjs +84 -55
  135. package/components/StatusMessage/StatusMessage.cjs.map +1 -1
  136. package/components/StatusMessage/StatusMessage.d.ts +20 -36
  137. package/components/StatusMessage/StatusMessage.js +86 -57
  138. package/components/StatusMessage/StatusMessage.js.map +1 -1
  139. package/components/StatusMessage/StatusMessageContext.d.ts +16 -0
  140. package/components/StatusMessage/index.d.ts +4 -1
  141. package/components/StatusMessage.d.ts +4 -0
  142. package/components/Stepper/Stepper.cjs +289 -55
  143. package/components/Stepper/Stepper.cjs.map +1 -1
  144. package/components/Stepper/Stepper.d.ts +9 -20
  145. package/components/Stepper/Stepper.js +291 -57
  146. package/components/Stepper/Stepper.js.map +1 -1
  147. package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +29 -23
  148. package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
  149. package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
  150. package/components/Stepper/index.d.ts +6 -2
  151. package/components/Stepper.d.ts +4 -0
  152. package/components/Switch/Switch.cjs +5 -2
  153. package/components/Switch/Switch.cjs.map +1 -1
  154. package/components/Switch/Switch.d.ts +7 -2
  155. package/components/Switch/Switch.js +5 -2
  156. package/components/Switch/Switch.js.map +1 -1
  157. package/components/Tabs/Tabs.cjs +45 -29
  158. package/components/Tabs/Tabs.cjs.map +1 -1
  159. package/components/Tabs/Tabs.d.ts +21 -16
  160. package/components/Tabs/Tabs.js +46 -30
  161. package/components/Tabs/Tabs.js.map +1 -1
  162. package/components/Tabs/index.d.ts +4 -2
  163. package/components/Tabs.d.ts +4 -0
  164. package/components/Timeline/Timeline.cjs +3 -2
  165. package/components/Timeline/Timeline.cjs.map +1 -1
  166. package/components/Timeline/Timeline.d.ts +4 -8
  167. package/components/Timeline/Timeline.js +3 -2
  168. package/components/Timeline/Timeline.js.map +1 -1
  169. package/components/Timeline/index.d.ts +4 -2
  170. package/components/Timeline.d.ts +4 -0
  171. package/components/_shared/mergeSx.d.ts +7 -0
  172. package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
  173. package/formField.sx-8_QRnKxv.js.map +1 -0
  174. package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
  175. package/formField.sx-BAX7KwMR.cjs.map +1 -0
  176. package/index.cjs +31 -2
  177. package/index.cjs.map +1 -1
  178. package/index.d.ts +1 -0
  179. package/index.js +16 -2
  180. package/index.js.map +1 -1
  181. package/mergeSx-BXoNZjB_.js +10 -0
  182. package/mergeSx-BXoNZjB_.js.map +1 -0
  183. package/mergeSx-Dbccoo_H.cjs +9 -0
  184. package/mergeSx-Dbccoo_H.cjs.map +1 -0
  185. package/mui.d.ts +3 -2
  186. package/package.json +6 -16
  187. package/theme/componentStyles.d.ts +1 -1
  188. package/tokens-BRrcP_p_.js +21 -0
  189. package/tokens-BRrcP_p_.js.map +1 -0
  190. package/tokens-jaWWNk39.cjs +20 -0
  191. package/tokens-jaWWNk39.cjs.map +1 -0
  192. package/utils/index.d.ts +2 -0
  193. package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
  194. package/components/AppBar/AppBarBrand.d.ts +0 -31
  195. package/components/AppBar/AppBarUserMenu.d.ts +0 -65
  196. package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
  197. package/components/DatePicker/DatePicker.types.d.ts +0 -1
  198. package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
  199. package/components/Input/Input.types.d.ts +0 -1
  200. package/components/PageLoader/PageLoader.cjs +0 -61
  201. package/components/PageLoader/PageLoader.cjs.map +0 -1
  202. package/components/PageLoader/PageLoader.d.ts +0 -38
  203. package/components/PageLoader/PageLoader.js +0 -61
  204. package/components/PageLoader/PageLoader.js.map +0 -1
  205. package/components/PageLoader/index.d.ts +0 -2
  206. package/components/PageLoader.d.ts +0 -6
  207. package/components/RadioGroup/RadioGroup.types.d.ts +0 -1
  208. package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
  209. package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
  210. package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
  211. package/components/ScrollTopButton/ScrollTopButton.js +0 -79
  212. package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
  213. package/components/ScrollTopButton/index.d.ts +0 -4
  214. package/components/ScrollTopButton.d.ts +0 -6
  215. package/components/Select/Select.definitions.d.ts +0 -17
  216. package/components/Select/Select.types.d.ts +0 -1
  217. package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
  218. package/components/Select/_parts/SelectValue.d.ts +0 -22
  219. package/formField.sx-CQ1mbk9M.cjs.map +0 -1
  220. package/formField.sx-DfVbMe0V.js.map +0 -1
  221. package/hooks/Wizard/Wizard.cjs +0 -7
  222. package/hooks/Wizard/Wizard.cjs.map +0 -1
  223. package/hooks/Wizard/Wizard.js +0 -7
  224. package/hooks/Wizard/Wizard.js.map +0 -1
  225. package/hooks/Wizard/index.d.ts +0 -3
  226. package/hooks/Wizard/useWizard.d.ts +0 -9
  227. package/hooks/Wizard.d.ts +0 -2
  228. package/useWizard-CWdIxZzX.cjs +0 -94
  229. package/useWizard-CWdIxZzX.cjs.map +0 -1
  230. package/useWizard-CWq--C3o.js +0 -95
  231. package/useWizard-CWq--C3o.js.map +0 -1
  232. /package/{styles.css → index.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Button-C17mExpd.cjs","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material/Button\";\nimport React from \"react\";\n\ntype PickButtonProps = Pick<ButtonProps, \"href\" | \"children\" | \"onClick\" | \"color\" | \"disabled\" | \"className\" | \"endIcon\" | \"startIcon\" | \"loading\" | \"loadingIndicator\" | \"variant\" | \"size\" | \"loadingPosition\" | \"type\" | \"sx\">;\n\nexport interface MyButtonProps extends PickButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"primary\" | \"success\" | \"error\" | \"info\" | \"warning\"; //change for tailwind class colors\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" ;\n}\n\nexport const Button: React.FC<MyButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["jsx","MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBO,MAAM,SAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;;"}
1
+ {"version":3,"file":"Button-C17mExpd.cjs","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport React from \"react\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\";\n sx?: SxProps<Theme>;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["jsx","MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;;AAuBO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button-UkkP-bNw.js","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material/Button\";\nimport React from \"react\";\n\ntype PickButtonProps = Pick<ButtonProps, \"href\" | \"children\" | \"onClick\" | \"color\" | \"disabled\" | \"className\" | \"endIcon\" | \"startIcon\" | \"loading\" | \"loadingIndicator\" | \"variant\" | \"size\" | \"loadingPosition\" | \"type\" | \"sx\">;\n\nexport interface MyButtonProps extends PickButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"primary\" | \"success\" | \"error\" | \"info\" | \"warning\"; //change for tailwind class colors\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" ;\n}\n\nexport const Button: React.FC<MyButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;AAwBO,MAAM,SAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;"}
1
+ {"version":3,"file":"Button-UkkP-bNw.js","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport React from \"react\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\";\n sx?: SxProps<Theme>;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;AAuBO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;"}
package/README.md CHANGED
@@ -1,28 +1,32 @@
1
1
  # @soyfri/shared-library
2
2
 
3
- Una librería de componentes React reutilizables construida con Material-UI, TypeScript y Tailwind CSS, diseñada para proporcionar componentes UI consistentes y bien documentados.
3
+ Librería central de componentes React del ecosistema FRI, construida sobre **Material-UI v7 + Emotion + utilidades de Tailwind**. Es un **paquete npm publicado** (no una app): se distribuye como ESM + CJS + `.d.ts`. Consumido hoy por `affiliations-web`.
4
4
 
5
5
  ## 📋 Tabla de Contenidos
6
6
 
7
- - [Características](#características)
8
- - [Instalación](#instalación)
9
- - [Uso](#uso)
10
- - [Componentes Disponibles](#componentes-disponibles)
11
- - [Desarrollo](#desarrollo)
12
- - [Scripts Disponibles](#scripts-disponibles)
13
- - [Storybook](#storybook)
14
- - [Testing](#testing)
15
- - [Tecnologías](#tecnologías)
16
- - [Estructura del Proyecto](#estructura-del-proyecto)
7
+ - [Características](#-características)
8
+ - [Instalación](#-instalación)
9
+ - [Uso](#-uso)
10
+ - [Componentes Disponibles](#-componentes-disponibles)
11
+ - [Sistema de presets](#-sistema-de-presets)
12
+ - [Desarrollo](#-desarrollo)
13
+ - [Scripts Disponibles](#-scripts-disponibles)
14
+ - [Storybook](#-storybook)
15
+ - [Testing](#-testing)
16
+ - [Tecnologías](#-tecnologías)
17
+ - [Estructura del Proyecto](#-estructura-del-proyecto)
18
+ - [Publicación](#-publicación)
17
19
 
18
20
  ## ✨ Características
19
21
 
20
- - 🎨 **Componentes tipados**: Todos los componentes están construidos con TypeScript para mayor seguridad de tipos
21
- - 📚 **Documentación con Storybook**: Cada componente incluye historias interactivas y documentación
22
- - 🎯 **Material-UI**: Basado en Material-UI para un diseño consistente y accesible
23
- - 🌈 **Tailwind CSS**: Integración con Tailwind para estilos utilitarios
24
- - 🧪 **Testing**: Configurado con Vitest y Playwright para testing de componentes
25
- - 📦 **Build optimizado**: Configuración con Rollup para generar builds ESM y CommonJS
22
+ - 🎨 **Componentes tipados**: todo en TypeScript (modo `strict`).
23
+ - 🧩 **Multi-entry**: cada componente y hook es su propio entry point, importable por subpath.
24
+ - 📚 **Documentación con Storybook**: cada componente tiene sus historias interactivas.
25
+ - 🎯 **Material-UI v7**: base de diseño accesible y consistente; las primitivas de MUI se re-exportan desde la propia librería (`mui.ts`).
26
+ - 🌈 **Tailwind CSS**: utilidades disponibles con `preflight: false` para coexistir con MUI.
27
+ - 📝 **Formularios**: soporte nativo para `react-hook-form` (modo RHF) además de modo controlado.
28
+ - 🎚️ **Sistema de presets**: estilos registrables vía `theme.styles`.
29
+ - 📦 **Build con Vite**: genera ESM (`.js`) + CommonJS (`.cjs`) + tipos (`.d.ts`), con los peers externalizados.
26
30
 
27
31
  ## 📦 Instalación
28
32
 
@@ -30,214 +34,242 @@ Una librería de componentes React reutilizables construida con Material-UI, Typ
30
34
  npm install @soyfri/shared-library
31
35
  ```
32
36
 
37
+ Los peer dependencies los provee el consumidor (no se bundlean): `react`, `react-dom`, `@mui/material`, `@mui/icons-material`, `@mui/x-date-pickers`, `@emotion/react`, `@emotion/styled`, `react-hook-form`, `dayjs` y Tailwind/postcss.
38
+
33
39
  ## 🚀 Uso
34
40
 
41
+ > **Importante:** los componentes de la librería se importan **por subpath** (`@soyfri/shared-library/components/<Nombre>`). El barrel raíz `@soyfri/shared-library` **no** exporta los componentes propios — desde ahí solo salen las primitivas de MUI (`Box`, `Stack`, `ThemeProvider`, …), las utilidades y el sistema de presets.
42
+
35
43
  ```tsx
36
- import { Button, Table, Select } from '@soyfri/shared-library';
37
- import '@soyfri/shared-library/dist/styles.css';
44
+ // ✅ Componentes: siempre por subpath
45
+ import { Button } from '@soyfri/shared-library/components/Button';
46
+ import { Input } from '@soyfri/shared-library/components/Input';
47
+ import { Table } from '@soyfri/shared-library/components/Table';
48
+
49
+ // ✅ Primitivas de MUI, utils y presets: desde el root
50
+ import { Box, ThemeProvider } from '@soyfri/shared-library';
51
+
52
+ // ✅ Hooks: por subpath
53
+ import { useClipBoard } from '@soyfri/shared-library/hooks/ClipBoard';
38
54
 
39
55
  function App() {
40
56
  return (
41
- <div>
57
+ <Box>
42
58
  <Button variant="contained" color="primary">
43
59
  Mi Botón
44
60
  </Button>
45
- </div>
61
+ </Box>
46
62
  );
47
63
  }
48
64
  ```
49
65
 
66
+ No es necesario importar un CSS manualmente: los estilos de cada componente se inyectan automáticamente en su propio bundle (`vite-plugin-lib-inject-css`).
67
+
50
68
  ## 🧩 Componentes Disponibles
51
69
 
52
- ### Button
53
- Componente de botón personalizable basado en Material-UI con soporte para iconos, diferentes tamaños y estados.
70
+ Todos disponibles vía `@soyfri/shared-library/components/<Nombre>`:
54
71
 
55
- **Características:**
56
- - Variantes: `text`, `outlined`, `contained`
57
- - Tamaños: `small`, `medium`, `large`
58
- - Soporte para iconos de inicio y fin
59
- - Estados de carga
60
- - Completamente tipado
72
+ | Categoría | Componentes |
73
+ |---|---|
74
+ | **Acciones** | `Button`, `MenuButton`, `ActionMenu` |
75
+ | **Formularios** | `Input`, `InputGroup`, `Select`, `Autocomplete`, `Checkbox`, `RadioGroup`, `Switch`, `DatePicker`, `DateTimePicker`, `DateRangePicker` |
76
+ | **Datos** | `Table`, `Column`, `Stat`, `Timeline` |
77
+ | **Layout / navegación** | `AppBar`, `Drawer`, `Tabs`, `Stepper`, `Card` |
78
+ | **Overlay** | `Modal`, `Flyout`, `Tooltip` |
79
+ | **Feedback** | `StatusMessage` |
80
+ | **Visuales** | `Avatar`, `Icon`, `Chip`, `Gallery` |
61
81
 
62
- ### Table
63
- Componente de tabla flexible con paginación interna y externa, ordenamiento y renderizado personalizado de columnas.
82
+ Hooks disponibles vía `@soyfri/shared-library/hooks/<Nombre>`: `ClipBoard`.
64
83
 
65
- **Características:**
66
- - Paginación interna automática
67
- - Paginación externa controlada
68
- - Columnas personalizables con renderizado custom
69
- - Soporte para componentes complejos en celdas
70
- - Completamente tipado con generics
84
+ ### Algunos destacados
71
85
 
72
- ### Select
73
- Componente select avanzado con soporte para selección múltiple, filtros, agrupación y renderizado personalizado.
86
+ **Button** — variantes (`text` / `outlined` / `contained`), tamaños (`small` / `medium` / `large`), `startIcon` / `endIcon`, estado `loading` (con `loadingIndicator` y `loadingPosition`), colores del theme y `sx`.
74
87
 
75
- **Características:**
76
- - Selección simple y múltiple
77
- - Filtrado de opciones
78
- - Agrupación de opciones
79
- - Renderizado personalizado con avatars
80
- - Placeholder configurable
88
+ **Input** — campo de texto que admite **dos modos mutuamente excluyentes**: RHF (`name` + `control` + `validation`, envuelto en `<Controller>`) y controlado (`value` + `onChange`). Soporta `labelPosition` (`outside` / `floating`), `borderRadius`, `readOnly`, tipos especializados y `preset`.
81
89
 
82
- ### Avatar
83
- Componente para mostrar avatares de usuarios con soporte para imágenes y texto.
90
+ **Select** — selección simple y múltiple, opciones con grupos, render personalizado de opciones (`RenderOptionItem`), tamaños y label flotante.
84
91
 
85
- ### Icon
86
- Wrapper para iconos de Material-UI con propiedades consistentes.
92
+ **Table** — genérico (`<T>`), con paginación interna o externa controlada, selección de filas, exportación a CSV/Excel y columnas personalizadas vía el componente `Column`.
87
93
 
88
- ### Stat
89
- Componente para mostrar estadísticas con diferentes plantillas de visualización.
94
+ > Para ver props, estados y ejemplos en vivo de cada componente, usa Storybook (`npm run storybook`).
90
95
 
91
- **Características:**
92
- - Plantilla simple
93
- - Plantilla con chip
94
- - Plantilla con lista de chips
95
- - Colores personalizables
96
+ ## 🎚️ Sistema de presets
96
97
 
97
- ### Column
98
- Componente auxiliar para definir columnas en el componente Table.
98
+ Los componentes resuelven estilos registrables desde el theme de MUI (`theme.styles`). El consumidor registra un preset por nombre y lo aplica con la prop `preset="<nombre>"`; `preset="default"` (o ausente) usa solo el estilo built-in. El paquete no envía presets propios. Tipos y API (`resolvePreset`, `DEFAULT_PRESET_NAME`, `LibraryComponentName`, …) se exportan desde el root.
99
99
 
100
100
  ## 🛠️ Desarrollo
101
101
 
102
102
  ### Prerrequisitos
103
103
 
104
- - Node.js (versión 18 o superior)
105
- - npm o yarn
104
+ - Node.js 20+ (CI usa Node v23.6.1 para el build y 20.x para publicar)
105
+ - npm
106
106
 
107
- ### Configuración del entorno de desarrollo
107
+ ### Configuración del entorno
108
108
 
109
- 1. Clona el repositorio:
110
109
  ```bash
111
110
  git clone <repository-url>
112
- cd shared-library
113
- ```
114
-
115
- 2. Instala las dependencias:
116
- ```bash
111
+ cd shared-library-web
117
112
  npm install
113
+ npm run storybook # forma principal de desarrollar/previsualizar un componente
118
114
  ```
119
115
 
120
- 3. Inicia el entorno de desarrollo:
116
+ ### Probar la librería en un proyecto local (`npm link`)
117
+
118
+ > **Clave:** el mapa `exports` con los subpaths (`/components/<Nombre>`) **solo existe en `dist/package.json`** — lo genera `npm run dist`. El `package.json` de la raíz **no** lo tiene. Por eso el `npm link` (igual que el `publish`) se hace **desde `dist/`**, no desde la raíz; si linkeas la raíz, los imports por subpath no resuelven.
119
+
121
120
  ```bash
122
- npm run dev
123
- ```
121
+ # 1) En la librería: build + generar el dist/package.json con el mapa exports
122
+ npm run build && npm run dist
124
123
 
125
- ## 📜 Scripts Disponibles
124
+ # 2) Registrar el paquete DESDE dist/
125
+ cd dist
126
+ npm link # registra @soyfri/shared-library apuntando a dist/
126
127
 
127
- - `npm run build` - Construye la librería para producción
128
- - `npm run dev` - Inicia el modo de desarrollo con watch
129
- - `npm run build:css` - Construye los estilos CSS
130
- - `npm run watch:css` - Observa cambios en los estilos CSS
131
- - `npm run clean` - Limpia la carpeta dist
132
- - `npm run prepare` - Limpia y construye la librería
133
- - `npm run storybook` - Inicia Storybook en modo desarrollo
134
- - `npm run build-storybook` - Construye Storybook para producción
135
- - `npm run dist` - Ejecuta el script de distribución personalizado
128
+ # 3) En el proyecto consumidor (p.ej. affiliations-web)
129
+ npm link @soyfri/shared-library
130
+ ```
136
131
 
137
- ## 📚 Storybook
132
+ Para iterar en vivo deja corriendo `npm run dev` (tsup en watch): reescribe los archivos de `dist/` en cada cambio y el symlink se mantiene. Vuelve a correr `npm run dist` solo si **agregas o quitas** componentes/hooks (para regenerar el mapa `exports`). No corras `npm run clean` mientras el link esté activo: borra `dist/` y rompe el enlace.
138
133
 
139
- La librería incluye Storybook para documentación interactiva y desarrollo de componentes.
134
+ > ⚠️ **React duplicado:** como `react`/`react-dom` son peers externalizados, con `npm link` puedes terminar con dos copias de React (errores de hooks). Si pasa, apunta el bundler del consumidor a su propio React (alias/dedupe de `react` y `react-dom` a `node_modules` del consumidor).
140
135
 
141
- ### Iniciar Storybook
136
+ Para deshacer el link: `npm unlink @soyfri/shared-library` en el consumidor y `npm rm --global @soyfri/shared-library` (o `npm unlink` dentro de `dist/`).
142
137
 
143
- ```bash
144
- npm run storybook
145
- ```
138
+ ## 📜 Scripts Disponibles
146
139
 
147
- Esto abrirá Storybook en `http://localhost:6006` donde podrás:
140
+ - `npm run build` — build canónico con **Vite** (`vite build --mode lib`) → genera `dist/` (ESM `.js` + CJS `.cjs` + `.d.ts` + sourcemaps).
141
+ - `npm run dist` — `node build.js` → escribe `dist/package.json` con el mapa `exports` granular y copia el README. Se ejecuta **después** de `build`.
142
+ - `npm run dev` — `tsup --watch`, rebuild incremental para desarrollo local.
143
+ - `npm run storybook` — servidor de Storybook en `:6006`.
144
+ - `npm run build-storybook` — build estático de Storybook.
145
+ - `npm run build:css` / `watch:css` — compila el CSS de Tailwind por separado (`src/styles.css` → `dist/styles.css`).
146
+ - `npm run rm` — `node cleanDirectories.js`, elimina carpetas con prefijo `_` de `dist` antes de publicar.
147
+ - `npm run clean` — `rimraf dist`.
148
148
 
149
- - Ver todos los componentes disponibles
150
- - Interactuar con las propiedades de cada componente
151
- - Ver ejemplos de uso
152
- - Acceder a la documentación detallada
149
+ > El pipeline completo de publicación es `build` → `dist` (igual que en CI). No hay runner de tests independiente: `npm test` es un stub.
153
150
 
154
- ### Construir Storybook
151
+ ## 📚 Storybook
152
+
153
+ Storybook (v9) es la forma principal de desarrollar, documentar y probar componentes.
155
154
 
156
155
  ```bash
157
- npm run build-storybook
156
+ npm run storybook # http://localhost:6006
157
+ npm run build-storybook # build estático
158
158
  ```
159
159
 
160
160
  ## 🧪 Testing
161
161
 
162
- La librería está configurada con Vitest y Playwright para testing de componentes.
163
-
164
- ### Configuración de Testing
165
-
166
- - **Vitest**: Para unit tests y testing de componentes
167
- - **Playwright**: Para testing de browser
168
- - **Storybook Test Addon**: Para testing de historias de Storybook
162
+ **Las historias son los tests.** Vitest ejecuta las historias de Storybook en un navegador real (Playwright, chromium headless) vía `@storybook/addon-vitest`; configuración en `vitest.config.ts` y `.storybook/`. Las historias usan aserciones de `storybook/test` (`expect`, `within`). **Chromatic** hace visual-regression sobre el Storybook publicado.
169
163
 
170
164
  ## 🔧 Tecnologías
171
165
 
172
- ### Dependencias Principales
166
+ ### Dependencias principales
173
167
 
174
- - **React 19.1.0**: Librería de UI
175
- - **Material-UI 7.1.0**: Sistema de diseño y componentes
176
- - **TypeScript 5.8.3**: Tipado estático
177
- - **Tailwind CSS 4.1.7**: Framework de CSS utilitario
168
+ - **React 19** — librería de UI
169
+ - **Material-UI v7** (`@mui/material`, `@mui/icons-material`, `@mui/lab`) — sistema de diseño
170
+ - **MUI X v8** (`@mui/x-date-pickers`, `@mui/x-date-pickers-pro`) — date/time pickers
171
+ - **react-hook-form 7** — formularios
172
+ - **dayjs** — fechas
173
+ - **Tailwind CSS 4** — utilidades de estilo
174
+ - **TypeScript 5.8** (`strict`) — tipado estático
178
175
 
179
- ### Herramientas de Desarrollo
176
+ ### Herramientas de desarrollo
180
177
 
181
- - **Storybook 9.0.8**: Documentación y desarrollo de componentes
182
- - **Rollup**: Bundler para la construcción de la librería
183
- - **Vitest**: Framework de testing
184
- - **Playwright**: Testing de browser
185
- - **Prettier**: Formateo de código
178
+ - **Vite** (`--mode lib`) — bundler canónico de la librería
179
+ - **tsup** — build incremental en watch (dev)
180
+ - **Storybook 9** — documentación y desarrollo
181
+ - **Vitest + Playwright** — testing de historias
182
+ - **Chromatic** — visual-regression
183
+ - **Prettier** — formateo
186
184
 
187
185
  ## 📁 Estructura del Proyecto
188
186
 
189
187
  ```
190
- shared-library/
191
- ├── .storybook/ # Configuración de Storybook
188
+ shared-library-web/
189
+ ├── .storybook/ # Configuración de Storybook (main.ts, preview.ts, vitest.setup.ts)
192
190
  ├── src/
193
- │ ├── components/ # Componentes de la librería
194
- │ │ ├── Avatar/
195
- │ │ ├── Button/
196
- │ │ ├── Column/
197
- │ │ ├── Icon/
198
- │ │ ├── Select/
199
- │ │ ├── Stat/
200
- │ │ └── Table/
201
- │ ├── index.ts # Punto de entrada principal
202
- │ └── styles.css # Estilos globales
203
- ├── dist/ # Archivos construidos
204
- ├── package.json
205
- ├── tsconfig.json
206
- ├── tailwind.config.js
207
- ├── rollup.config.cjs
208
- └── vitest.config.ts
191
+ │ ├── components/ # Componentes (un folder PascalCase por componente)
192
+ │ │ └── _shared/ # Helpers internos (mergeSx, resolvePreset, …)
193
+ │ ├── hooks/ # Hooks (ClipBoard)
194
+ │ ├── theme/ # tokens.ts + componentStyles.ts (sistema de presets)
195
+ │ ├── utils/ # Utilidades (scrollToTop)
196
+ │ ├── mui.ts # Pass-through de primitivas MUI
197
+ │ ├── index.ts # Barrel raíz (mui + utils + presets; NO componentes)
198
+ │ └── styles.css # Estilos globales / Tailwind
199
+ ├── dist/ # Artefactos del build (generados)
200
+ ├── build.js # Genera dist/package.json con el mapa `exports`
201
+ ├── vite.config.js # Build canónico de la librería
202
+ ├── tsup.config.js # Build watch (dev)
203
+ ├── vitest.config.ts
204
+ └── package.json
209
205
  ```
210
206
 
211
- ### Estructura de Componentes
212
-
213
- Cada componente sigue una estructura consistente:
207
+ ### Anatomía de un componente
214
208
 
215
209
  ```
216
210
  ComponentName/
217
- ├── ComponentName.tsx # Implementación del componente
218
- ├── ComponentName.stories.tsx # Historias de Storybook
219
- ├── ComponentName.definition.ts # Definiciones de código (opcional)
220
- ├── index.ts # Exportaciones
221
- └── types.ts # Tipos específicos (opcional)
211
+ ├── ComponentName.tsx # Implementación (export const + export default)
212
+ ├── index.ts # Barrel: componente + tipos
213
+ ├── ComponentName.stories.tsx # Historias de Storybook
214
+ ├── ComponentName.sx.ts # Builders de sx (opcional)
215
+ ├── ComponentName.helpers.ts # Helpers (opcional)
216
+ ├── ComponentName.definition.ts# Strings de código para los docs (opcional)
217
+ ├── _parts/ # Subcomponentes internos (opcional)
218
+ └── _hooks/ # Hooks internos (opcional)
222
219
  ```
223
220
 
224
- ## 🤝 Contribución
221
+ > Solo los folders cuyo nombre empieza con **mayúscula** se convierten en entry points públicos. Los folders en minúscula o con prefijo `_` (`_shared`, `_parts`, `_hooks`) son internos.
225
222
 
226
- Para contribuir al proyecto:
223
+ ## 🚢 Publicación
227
224
 
228
- 1. Fork el repositorio
229
- 2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`)
230
- 3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`)
231
- 4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
232
- 5. Crea un Pull Request
225
+ La publicación a npm es automática vía GitHub Actions (`.github/workflows/publish.yml`) al hacer **push a `main`**: `install` → `rm` → `build` → `dist` → `npm publish --access public` **desde la carpeta `dist/`** → notificación a Discord.
233
226
 
234
- ## 📄 Licencia
227
+ > El publish **siempre sale de `dist/`**, no de la raíz: es `dist/package.json` (generado por `npm run dist`) el que tiene el mapa `exports`, ya sin `scripts` ni `devDependencies`. El paquete que se sube a npm es el contenido de `dist/`, no el del repo.
235
228
 
236
- ISC License
229
+ **El versionado es manual:** sube el `version` en `package.json` antes de mergear a `main`, o npm rechazará re-publicar una versión existente.
230
+
231
+ ### Publicar manualmente
232
+
233
+ Reproduce localmente lo que hace el CI, publicando desde `dist/`:
234
+
235
+ ```bash
236
+ # 1) sube el "version" en package.json (raíz)
237
+ npm run rm # limpia carpetas _ de dist (si existe)
238
+ npm run build # Vite → dist/ (ESM + CJS + .d.ts)
239
+ npm run dist # genera dist/package.json con el mapa exports
240
+ cd dist
241
+ npm publish --access public
242
+ ```
243
+
244
+ ### Publicar una versión beta
245
+
246
+ Las betas usan un `version` con sufijo `-beta.N` (p.ej. `1.6.0-beta.1`). Dos caminos:
247
+
248
+ **A) Vía CI (como se hace hoy):** sube el `version` a `x.y.z-beta.N` y mergea a `main`; el pipeline la publica.
249
+ ⚠️ El workflow publica con el dist-tag **`latest`** por defecto (no usa `--tag`), así que la beta quedará marcada como `latest` en npm. Si no quieres eso, usa el camino manual.
250
+
251
+ **B) Manual con dist-tag `beta`** (no toca `latest`):
237
252
 
238
- ---
253
+ ```bash
254
+ # version = x.y.z-beta.N en package.json (raíz)
255
+ npm run build && npm run dist
256
+ cd dist
257
+ npm publish --access public --tag beta
258
+ ```
259
+
260
+ Los consumidores la instalan con:
239
261
 
240
- **Versión actual:** 1.0.1
262
+ ```bash
263
+ npm install @soyfri/shared-library@beta # última beta
264
+ npm install @soyfri/shared-library@1.6.0-beta.1 # una beta exacta
265
+ ```
241
266
 
242
- Para más información y ejemplos detallados, consulta la documentación en Storybook ejecutando `npm run storybook`.
243
-
267
+ ## 🤝 Contribución
268
+
269
+ 1. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`).
270
+ 2. Desarrolla y documenta el componente en Storybook.
271
+ 3. Commitea tus cambios y abre un Pull Request.
272
+
273
+ ## 📄 Licencia
274
+
275
+ ISC License
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
3
5
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -15,49 +17,60 @@ var __spreadValues = (a, b) => {
15
17
  }
16
18
  return a;
17
19
  };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
18
33
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
19
34
  const jsxRuntime = require("react/jsx-runtime");
20
35
  const React = require("react");
21
36
  const material = require("@mui/material");
22
37
  const MoreVertIcon = require("@mui/icons-material/MoreVert");
23
- function ActionMenu({
24
- items,
38
+ const ActionMenuContext = React.createContext(null);
39
+ const ActionMenu = ({
40
+ children,
25
41
  trigger,
26
- triggerTooltip = "Acciones",
42
+ triggerTooltip,
27
43
  anchorOrigin = { vertical: "bottom", horizontal: "right" },
28
44
  transformOrigin = { vertical: "top", horizontal: "right" },
29
45
  menuSx,
30
- disabled = false,
31
- className
32
- }) {
46
+ disabled = false
47
+ }) => {
33
48
  const [anchorEl, setAnchorEl] = React.useState(null);
34
49
  const open = Boolean(anchorEl);
35
- const handleOpen = (event) => {
50
+ const handleClose = () => setAnchorEl(null);
51
+ const openMenu = (event) => {
36
52
  if (disabled) return;
37
53
  event.stopPropagation();
38
54
  setAnchorEl(event.currentTarget);
39
55
  };
40
- const handleClose = () => setAnchorEl(null);
41
- const handleItemClick = (event, item) => {
42
- var _a;
43
- event.stopPropagation();
44
- (_a = item.onClick) == null ? void 0 : _a.call(item, event);
45
- handleClose();
46
- };
47
- const triggerElement = trigger ? React.isValidElement(trigger) ? React.cloneElement(trigger, {
48
- onClick: handleOpen,
56
+ const triggerElement = trigger ? React.cloneElement(trigger, {
57
+ onClick: openMenu,
49
58
  disabled
50
- }) : /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: handleOpen, children: trigger }) : /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: triggerTooltip, arrow: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(
59
+ }) : /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: triggerTooltip, arrow: true, children: /* @__PURE__ */ jsxRuntime.jsx(
51
60
  material.IconButton,
52
61
  {
53
62
  size: "small",
54
- onClick: handleOpen,
63
+ onClick: openMenu,
55
64
  disabled,
56
65
  "aria-label": triggerTooltip,
57
66
  children: /* @__PURE__ */ jsxRuntime.jsx(MoreVertIcon, { fontSize: "small" })
58
67
  }
59
- ) }) });
60
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className, children: [
68
+ ) });
69
+ const paperSx = [
70
+ { minWidth: 180 },
71
+ ...Array.isArray(menuSx) ? menuSx : menuSx ? [menuSx] : []
72
+ ];
73
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
61
74
  triggerElement,
62
75
  /* @__PURE__ */ jsxRuntime.jsx(
63
76
  material.Menu,
@@ -67,41 +80,28 @@ function ActionMenu({
67
80
  onClose: handleClose,
68
81
  anchorOrigin,
69
82
  transformOrigin,
70
- slotProps: { paper: { sx: __spreadValues({ minWidth: 180 }, menuSx) } },
71
- children: items.map((item, idx) => {
72
- var _a;
73
- const key = (_a = item.key) != null ? _a : `${String(item.label)}-${idx}`;
74
- const node = /* @__PURE__ */ jsxRuntime.jsxs(
75
- material.MenuItem,
76
- {
77
- disabled: item.disabled,
78
- onClick: (event) => handleItemClick(event, item),
79
- sx: (theme) => ({
80
- color: item.danger ? theme.palette.error.main : "inherit",
81
- "& .MuiListItemIcon-root": {
82
- color: item.danger ? theme.palette.error.main : "inherit",
83
- minWidth: 32
84
- }
85
- }),
86
- children: [
87
- item.icon && /* @__PURE__ */ jsxRuntime.jsx(material.ListItemIcon, { children: item.icon }),
88
- /* @__PURE__ */ jsxRuntime.jsx(material.ListItemText, { primary: item.label })
89
- ]
90
- },
91
- key
92
- );
93
- if (item.dividerBefore && idx > 0) {
94
- return /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
95
- /* @__PURE__ */ jsxRuntime.jsx(material.Divider, {}),
96
- node
97
- ] }, `${key}-frag`);
98
- }
99
- return node;
100
- })
83
+ slotProps: { paper: { sx: paperSx } },
84
+ children: /* @__PURE__ */ jsxRuntime.jsx(ActionMenuContext.Provider, { value: { close: handleClose }, children })
101
85
  }
102
86
  )
103
87
  ] });
104
- }
88
+ };
89
+ const ActionMenuItem = React.forwardRef(
90
+ function ActionMenuItem2(_a, ref) {
91
+ var _b = _a, { icon, children, onClick } = _b, rest = __objRest(_b, ["icon", "children", "onClick"]);
92
+ const ctx = React.useContext(ActionMenuContext);
93
+ const handleClick = (event) => {
94
+ event.stopPropagation();
95
+ onClick == null ? void 0 : onClick(event);
96
+ ctx == null ? void 0 : ctx.close();
97
+ };
98
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.MenuItem, __spreadProps(__spreadValues({ ref, onClick: handleClick }, rest), { children: [
99
+ icon && /* @__PURE__ */ jsxRuntime.jsx(material.ListItemIcon, { sx: { minWidth: 32 }, children: icon }),
100
+ /* @__PURE__ */ jsxRuntime.jsx(material.ListItemText, { primary: children })
101
+ ] }));
102
+ }
103
+ );
105
104
  exports.ActionMenu = ActionMenu;
105
+ exports.ActionMenuItem = ActionMenuItem;
106
106
  exports.default = ActionMenu;
107
107
  //# sourceMappingURL=ActionMenu.cjs.map