@soyfri/shared-library 1.5.0-beta.3 → 1.5.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 (349) 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/styles.css +112 -0
  12. package/package.json +43 -134
  13. package/rollup.config.cjs +87 -0
  14. package/src/components/Autocomplete/Autocomplete.definitions.ts +254 -0
  15. package/src/components/Autocomplete/Autocomplete.stories.tsx +387 -0
  16. package/src/components/Autocomplete/Autocomplete.tsx +139 -0
  17. package/src/components/Autocomplete/index.ts +1 -0
  18. package/src/components/Avatar/Avatar.stories.tsx +54 -0
  19. package/src/components/Avatar/Avatar.tsx +143 -0
  20. package/src/components/Avatar/index.ts +1 -0
  21. package/src/components/Button/Button.definition.ts +97 -0
  22. package/src/components/Button/Button.stories.tsx +285 -0
  23. package/src/components/Button/Button.tsx +67 -0
  24. package/src/components/Button/index.ts +1 -0
  25. package/src/components/Card/Card.definition.ts +5 -0
  26. package/src/components/Card/Card.stories.tsx +32 -0
  27. package/src/components/Card/Card.tsx +44 -0
  28. package/src/components/Card/index.ts +1 -0
  29. package/src/components/Chip/Chip.definitions.ts +167 -0
  30. package/src/components/Chip/Chip.stories.tsx +265 -0
  31. package/src/components/Chip/Chip.tsx +61 -0
  32. package/src/components/Chip/index.ts +1 -0
  33. package/src/components/Column/Column.tsx +29 -0
  34. package/src/components/Column/index.ts +1 -0
  35. package/src/components/DatePicker/DatePicker.definitions.ts +205 -0
  36. package/src/components/DatePicker/DatePicker.stories.tsx +282 -0
  37. package/src/components/DatePicker/DatePicker.tsx +165 -0
  38. package/src/components/DatePicker/index.ts +1 -0
  39. package/src/components/DateRangePicker/DateRangePicker.definitions.ts +191 -0
  40. package/src/components/DateRangePicker/DateRangePicker.stories.tsx +252 -0
  41. package/src/components/DateRangePicker/DateRangePicker.tsx +56 -0
  42. package/src/components/DateRangePicker/index.ts +1 -0
  43. package/src/components/DateTimePicker/DateTimePicker.definitions.ts +232 -0
  44. package/src/components/DateTimePicker/DateTimePicker.stories.tsx +390 -0
  45. package/src/components/DateTimePicker/DateTimePicker.tsx +191 -0
  46. package/src/components/DateTimePicker/index.ts +1 -0
  47. package/src/components/Flyout/Flyout.stories.tsx +274 -0
  48. package/src/components/Flyout/Flyout.tsx +122 -0
  49. package/src/components/Flyout/index.ts +1 -0
  50. package/src/components/Gallery/Gallery.definition.tsx +37 -0
  51. package/src/components/Gallery/Gallery.stories.tsx +82 -0
  52. package/src/components/Gallery/Gallery.tsx +118 -0
  53. package/src/components/Gallery/GalleryLightbox.tsx +170 -0
  54. package/src/components/Gallery/GalleryMain.tsx +84 -0
  55. package/src/components/Gallery/GalleryThumbnails.tsx +106 -0
  56. package/src/components/Gallery/index.ts +1 -0
  57. package/src/components/Icon/Icon.stories.tsx +54 -0
  58. package/src/components/Icon/Icon.tsx +94 -0
  59. package/src/components/Icon/index.ts +2 -0
  60. package/src/components/Input/Input.definitions.ts +252 -0
  61. package/src/components/Input/Input.stories.tsx +387 -0
  62. package/src/components/Input/Input.tsx +186 -0
  63. package/src/components/Input/index.ts +1 -0
  64. package/src/components/InputGroup/InputGroup.stories.tsx +136 -0
  65. package/src/components/InputGroup/InputGroup.tsx +136 -0
  66. package/src/components/InputGroup/index.ts +1 -0
  67. package/src/components/MenuButton/MenuButton.stories.tsx +197 -0
  68. package/src/components/MenuButton/MenuButton.tsx +100 -0
  69. package/src/components/MenuButton/index.ts +1 -0
  70. package/src/components/Modal/Modal.stories.tsx +293 -0
  71. package/src/components/Modal/Modal.tsx +173 -0
  72. package/src/components/Modal/ModalBody.tsx +16 -0
  73. package/src/components/Modal/ModalFooter.tsx +61 -0
  74. package/src/components/Modal/ModalHeader.tsx +18 -0
  75. package/src/components/Modal/index.ts +1 -0
  76. package/src/components/Select/Select.definitions.ts +488 -0
  77. package/src/components/Select/Select.stories.tsx +569 -0
  78. package/src/components/Select/Select.tsx +468 -0
  79. package/src/components/Select/index.ts +1 -0
  80. package/src/components/Stat/Stat.stories.tsx +85 -0
  81. package/src/components/Stat/Stat.tsx +117 -0
  82. package/src/components/Stat/index.ts +2 -0
  83. package/src/components/StatusMessage/StatusMessage.stories.tsx +130 -0
  84. package/src/components/StatusMessage/StatusMessage.tsx +162 -0
  85. package/src/components/StatusMessage/index.ts +2 -0
  86. package/src/components/Stepper/Step.tsx +21 -0
  87. package/src/components/Stepper/Stepper.definition.ts +75 -0
  88. package/src/components/Stepper/Stepper.stories.tsx +122 -0
  89. package/src/components/Stepper/Stepper.tsx +59 -0
  90. package/src/components/Stepper/index.ts +2 -0
  91. package/src/components/Table/EmptyTable.png +0 -0
  92. package/src/components/Table/Table.definition.ts +580 -0
  93. package/src/components/Table/Table.stories.tsx +853 -0
  94. package/src/components/Table/Table.tsx +495 -0
  95. package/src/components/Table/data.ts +134 -0
  96. package/src/components/Table/exportsUtils.ts +195 -0
  97. package/src/components/Table/index.ts +3 -0
  98. package/src/components/Table/types.ts +34 -0
  99. package/src/components/Tabs/Tab.definition.ts +53 -0
  100. package/src/components/Tabs/Tab.tsx +19 -0
  101. package/src/components/Tabs/Tabs.stories.tsx +118 -0
  102. package/src/components/Tabs/Tabs.tsx +99 -0
  103. package/src/components/Tabs/_tabUtils.tsx +4 -0
  104. package/src/components/Tabs/index.ts +2 -0
  105. package/src/components/Timeline/Timeline.definition.ts +43 -0
  106. package/src/components/Timeline/Timeline.stories.tsx +108 -0
  107. package/src/components/Timeline/Timeline.tsx +49 -0
  108. package/src/components/Timeline/TimelineItem.tsx +31 -0
  109. package/src/components/Timeline/index.ts +2 -0
  110. package/src/components/Tooltip/Tooltip.stories.tsx +117 -0
  111. package/src/components/Tooltip/Tooltip.tsx +58 -0
  112. package/src/components/Tooltip/index.ts +1 -0
  113. package/src/hooks/ClipBoard/ClipBoard.stories.tsx +168 -0
  114. package/src/hooks/ClipBoard/ClipBoard.tsx +131 -0
  115. package/src/hooks/ClipBoard/ClipboardUnifiedDemo.tsx +111 -0
  116. package/src/hooks/ClipBoard/index.ts +1 -0
  117. package/src/index.ts +1 -0
  118. package/src/styles.css +3 -0
  119. package/tailwind.config.js +10 -0
  120. package/tsconfig.json +48 -0
  121. package/tsup.config.js +41 -0
  122. package/vite.config.js +132 -0
  123. package/vitest.config.ts +35 -0
  124. /package/{README.md → Readme.md} +0 -0
  125. /package/{Button-C17mExpd.cjs → dist/Button-C17mExpd.cjs} +0 -0
  126. /package/{Button-C17mExpd.cjs.map → dist/Button-C17mExpd.cjs.map} +0 -0
  127. /package/{Button-UkkP-bNw.js → dist/Button-UkkP-bNw.js} +0 -0
  128. /package/{Button-UkkP-bNw.js.map → dist/Button-UkkP-bNw.js.map} +0 -0
  129. /package/{DatePicker-BSNboVhN.js → dist/DatePicker-BSNboVhN.js} +0 -0
  130. /package/{DatePicker-BSNboVhN.js.map → dist/DatePicker-BSNboVhN.js.map} +0 -0
  131. /package/{DatePicker-BoqxWAhj.cjs → dist/DatePicker-BoqxWAhj.cjs} +0 -0
  132. /package/{DatePicker-BoqxWAhj.cjs.map → dist/DatePicker-BoqxWAhj.cjs.map} +0 -0
  133. /package/{Input-DFHs7cJ_.js → dist/Input-DFHs7cJ_.js} +0 -0
  134. /package/{Input-DFHs7cJ_.js.map → dist/Input-DFHs7cJ_.js.map} +0 -0
  135. /package/{Input-c8MwNNPg.cjs → dist/Input-c8MwNNPg.cjs} +0 -0
  136. /package/{Input-c8MwNNPg.cjs.map → dist/Input-c8MwNNPg.cjs.map} +0 -0
  137. /package/{Select-BO2N56sm.cjs → dist/Select-BO2N56sm.cjs} +0 -0
  138. /package/{Select-BO2N56sm.cjs.map → dist/Select-BO2N56sm.cjs.map} +0 -0
  139. /package/{Select-BcLkyHSE.js → dist/Select-BcLkyHSE.js} +0 -0
  140. /package/{Select-BcLkyHSE.js.map → dist/Select-BcLkyHSE.js.map} +0 -0
  141. /package/{components → dist/components}/Autocomplete/Autocomplete.cjs +0 -0
  142. /package/{components → dist/components}/Autocomplete/Autocomplete.cjs.map +0 -0
  143. /package/{components → dist/components}/Autocomplete/Autocomplete.d.ts +0 -0
  144. /package/{components → dist/components}/Autocomplete/Autocomplete.definitions.d.ts +0 -0
  145. /package/{components → dist/components}/Autocomplete/Autocomplete.js +0 -0
  146. /package/{components → dist/components}/Autocomplete/Autocomplete.js.map +0 -0
  147. /package/{components → dist/components}/Autocomplete/index.d.ts +0 -0
  148. /package/{components → dist/components}/Autocomplete.d.ts +0 -0
  149. /package/{components → dist/components}/Avatar/Avatar.cjs +0 -0
  150. /package/{components → dist/components}/Avatar/Avatar.cjs.map +0 -0
  151. /package/{components → dist/components}/Avatar/Avatar.d.ts +0 -0
  152. /package/{components → dist/components}/Avatar/Avatar.js +0 -0
  153. /package/{components → dist/components}/Avatar/Avatar.js.map +0 -0
  154. /package/{components → dist/components}/Avatar/index.d.ts +0 -0
  155. /package/{components → dist/components}/Avatar.d.ts +0 -0
  156. /package/{components → dist/components}/Button/Button.cjs +0 -0
  157. /package/{components → dist/components}/Button/Button.cjs.map +0 -0
  158. /package/{components → dist/components}/Button/Button.d.ts +0 -0
  159. /package/{components → dist/components}/Button/Button.definition.d.ts +0 -0
  160. /package/{components → dist/components}/Button/Button.js +0 -0
  161. /package/{components → dist/components}/Button/Button.js.map +0 -0
  162. /package/{components → dist/components}/Button/index.d.ts +0 -0
  163. /package/{components → dist/components}/Button.d.ts +0 -0
  164. /package/{components → dist/components}/Card/Card.cjs +0 -0
  165. /package/{components → dist/components}/Card/Card.cjs.map +0 -0
  166. /package/{components → dist/components}/Card/Card.d.ts +0 -0
  167. /package/{components → dist/components}/Card/Card.definition.d.ts +0 -0
  168. /package/{components → dist/components}/Card/Card.js +0 -0
  169. /package/{components → dist/components}/Card/Card.js.map +0 -0
  170. /package/{components → dist/components}/Card/index.d.ts +0 -0
  171. /package/{components → dist/components}/Card.d.ts +0 -0
  172. /package/{components → dist/components}/Chip/Chip.cjs +0 -0
  173. /package/{components → dist/components}/Chip/Chip.cjs.map +0 -0
  174. /package/{components → dist/components}/Chip/Chip.d.ts +0 -0
  175. /package/{components → dist/components}/Chip/Chip.definitions.d.ts +0 -0
  176. /package/{components → dist/components}/Chip/Chip.js +0 -0
  177. /package/{components → dist/components}/Chip/Chip.js.map +0 -0
  178. /package/{components → dist/components}/Chip/index.d.ts +0 -0
  179. /package/{components → dist/components}/Chip.d.ts +0 -0
  180. /package/{components → dist/components}/Column/Column.cjs +0 -0
  181. /package/{components → dist/components}/Column/Column.cjs.map +0 -0
  182. /package/{components → dist/components}/Column/Column.d.ts +0 -0
  183. /package/{components → dist/components}/Column/Column.js +0 -0
  184. /package/{components → dist/components}/Column/Column.js.map +0 -0
  185. /package/{components → dist/components}/Column/index.d.ts +0 -0
  186. /package/{components → dist/components}/Column.d.ts +0 -0
  187. /package/{components → dist/components}/DatePicker/DatePicker.cjs +0 -0
  188. /package/{components → dist/components}/DatePicker/DatePicker.cjs.map +0 -0
  189. /package/{components → dist/components}/DatePicker/DatePicker.d.ts +0 -0
  190. /package/{components → dist/components}/DatePicker/DatePicker.definitions.d.ts +0 -0
  191. /package/{components → dist/components}/DatePicker/DatePicker.js +0 -0
  192. /package/{components → dist/components}/DatePicker/DatePicker.js.map +0 -0
  193. /package/{components → dist/components}/DatePicker/index.d.ts +0 -0
  194. /package/{components → dist/components}/DatePicker.d.ts +0 -0
  195. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs +0 -0
  196. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs.map +0 -0
  197. /package/{components → dist/components}/DateRangePicker/DateRangePicker.d.ts +0 -0
  198. /package/{components → dist/components}/DateRangePicker/DateRangePicker.definitions.d.ts +0 -0
  199. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js +0 -0
  200. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js.map +0 -0
  201. /package/{components → dist/components}/DateRangePicker/index.d.ts +0 -0
  202. /package/{components → dist/components}/DateRangePicker.d.ts +0 -0
  203. /package/{components → dist/components}/DateTimePicker/DateTimePicker.cjs +0 -0
  204. /package/{components → dist/components}/DateTimePicker/DateTimePicker.cjs.map +0 -0
  205. /package/{components → dist/components}/DateTimePicker/DateTimePicker.d.ts +0 -0
  206. /package/{components → dist/components}/DateTimePicker/DateTimePicker.definitions.d.ts +0 -0
  207. /package/{components → dist/components}/DateTimePicker/DateTimePicker.js +0 -0
  208. /package/{components → dist/components}/DateTimePicker/DateTimePicker.js.map +0 -0
  209. /package/{components → dist/components}/DateTimePicker/index.d.ts +0 -0
  210. /package/{components → dist/components}/DateTimePicker.d.ts +0 -0
  211. /package/{components → dist/components}/Flyout/Flyout.cjs +0 -0
  212. /package/{components → dist/components}/Flyout/Flyout.cjs.map +0 -0
  213. /package/{components → dist/components}/Flyout/Flyout.d.ts +0 -0
  214. /package/{components → dist/components}/Flyout/Flyout.js +0 -0
  215. /package/{components → dist/components}/Flyout/Flyout.js.map +0 -0
  216. /package/{components → dist/components}/Flyout/index.d.ts +0 -0
  217. /package/{components → dist/components}/Flyout.d.ts +0 -0
  218. /package/{components → dist/components}/Gallery/Gallery.cjs +0 -0
  219. /package/{components → dist/components}/Gallery/Gallery.cjs.map +0 -0
  220. /package/{components → dist/components}/Gallery/Gallery.d.ts +0 -0
  221. /package/{components → dist/components}/Gallery/Gallery.definition.d.ts +0 -0
  222. /package/{components → dist/components}/Gallery/Gallery.js +0 -0
  223. /package/{components → dist/components}/Gallery/Gallery.js.map +0 -0
  224. /package/{components → dist/components}/Gallery/GalleryLightbox.d.ts +0 -0
  225. /package/{components → dist/components}/Gallery/GalleryMain.d.ts +0 -0
  226. /package/{components → dist/components}/Gallery/GalleryThumbnails.d.ts +0 -0
  227. /package/{components → dist/components}/Gallery/index.d.ts +0 -0
  228. /package/{components → dist/components}/Gallery.d.ts +0 -0
  229. /package/{components → dist/components}/Icon/Icon.cjs +0 -0
  230. /package/{components → dist/components}/Icon/Icon.cjs.map +0 -0
  231. /package/{components → dist/components}/Icon/Icon.d.ts +0 -0
  232. /package/{components → dist/components}/Icon/Icon.js +0 -0
  233. /package/{components → dist/components}/Icon/Icon.js.map +0 -0
  234. /package/{components → dist/components}/Icon/index.d.ts +0 -0
  235. /package/{components → dist/components}/Icon.d.ts +0 -0
  236. /package/{components → dist/components}/Input/Input.cjs +0 -0
  237. /package/{components → dist/components}/Input/Input.cjs.map +0 -0
  238. /package/{components → dist/components}/Input/Input.d.ts +0 -0
  239. /package/{components → dist/components}/Input/Input.definitions.d.ts +0 -0
  240. /package/{components → dist/components}/Input/Input.js +0 -0
  241. /package/{components → dist/components}/Input/Input.js.map +0 -0
  242. /package/{components → dist/components}/Input/index.d.ts +0 -0
  243. /package/{components → dist/components}/Input.d.ts +0 -0
  244. /package/{components → dist/components}/InputGroup/InputGroup.cjs +0 -0
  245. /package/{components → dist/components}/InputGroup/InputGroup.cjs.map +0 -0
  246. /package/{components → dist/components}/InputGroup/InputGroup.d.ts +0 -0
  247. /package/{components → dist/components}/InputGroup/InputGroup.js +0 -0
  248. /package/{components → dist/components}/InputGroup/InputGroup.js.map +0 -0
  249. /package/{components → dist/components}/InputGroup/index.d.ts +0 -0
  250. /package/{components → dist/components}/InputGroup.d.ts +0 -0
  251. /package/{components → dist/components}/MenuButton/MenuButton.cjs +0 -0
  252. /package/{components → dist/components}/MenuButton/MenuButton.cjs.map +0 -0
  253. /package/{components → dist/components}/MenuButton/MenuButton.d.ts +0 -0
  254. /package/{components → dist/components}/MenuButton/MenuButton.js +0 -0
  255. /package/{components → dist/components}/MenuButton/MenuButton.js.map +0 -0
  256. /package/{components → dist/components}/MenuButton/index.d.ts +0 -0
  257. /package/{components → dist/components}/MenuButton.d.ts +0 -0
  258. /package/{components → dist/components}/Modal/Modal.cjs +0 -0
  259. /package/{components → dist/components}/Modal/Modal.cjs.map +0 -0
  260. /package/{components → dist/components}/Modal/Modal.d.ts +0 -0
  261. /package/{components → dist/components}/Modal/Modal.js +0 -0
  262. /package/{components → dist/components}/Modal/Modal.js.map +0 -0
  263. /package/{components → dist/components}/Modal/ModalBody.d.ts +0 -0
  264. /package/{components → dist/components}/Modal/ModalFooter.d.ts +0 -0
  265. /package/{components → dist/components}/Modal/ModalHeader.d.ts +0 -0
  266. /package/{components → dist/components}/Modal/index.d.ts +0 -0
  267. /package/{components → dist/components}/Modal.d.ts +0 -0
  268. /package/{components → dist/components}/Select/Select.cjs +0 -0
  269. /package/{components → dist/components}/Select/Select.cjs.map +0 -0
  270. /package/{components → dist/components}/Select/Select.d.ts +0 -0
  271. /package/{components → dist/components}/Select/Select.definitions.d.ts +0 -0
  272. /package/{components → dist/components}/Select/Select.js +0 -0
  273. /package/{components → dist/components}/Select/Select.js.map +0 -0
  274. /package/{components → dist/components}/Select/index.d.ts +0 -0
  275. /package/{components → dist/components}/Select.d.ts +0 -0
  276. /package/{components → dist/components}/Stat/Stat.cjs +0 -0
  277. /package/{components → dist/components}/Stat/Stat.cjs.map +0 -0
  278. /package/{components → dist/components}/Stat/Stat.d.ts +0 -0
  279. /package/{components → dist/components}/Stat/Stat.js +0 -0
  280. /package/{components → dist/components}/Stat/Stat.js.map +0 -0
  281. /package/{components → dist/components}/Stat/index.d.ts +0 -0
  282. /package/{components → dist/components}/Stat.d.ts +0 -0
  283. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs +0 -0
  284. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs.map +0 -0
  285. /package/{components → dist/components}/StatusMessage/StatusMessage.d.ts +0 -0
  286. /package/{components → dist/components}/StatusMessage/StatusMessage.js +0 -0
  287. /package/{components → dist/components}/StatusMessage/StatusMessage.js.map +0 -0
  288. /package/{components → dist/components}/StatusMessage/index.d.ts +0 -0
  289. /package/{components → dist/components}/StatusMessage.d.ts +0 -0
  290. /package/{components → dist/components}/Stepper/Step.d.ts +0 -0
  291. /package/{components → dist/components}/Stepper/Stepper.cjs +0 -0
  292. /package/{components → dist/components}/Stepper/Stepper.cjs.map +0 -0
  293. /package/{components → dist/components}/Stepper/Stepper.d.ts +0 -0
  294. /package/{components → dist/components}/Stepper/Stepper.definition.d.ts +0 -0
  295. /package/{components → dist/components}/Stepper/Stepper.js +0 -0
  296. /package/{components → dist/components}/Stepper/Stepper.js.map +0 -0
  297. /package/{components → dist/components}/Stepper/index.d.ts +0 -0
  298. /package/{components → dist/components}/Stepper.d.ts +0 -0
  299. /package/{components → dist/components}/Table/Table.cjs +0 -0
  300. /package/{components → dist/components}/Table/Table.cjs.map +0 -0
  301. /package/{components → dist/components}/Table/Table.d.ts +0 -0
  302. /package/{components → dist/components}/Table/Table.definition.d.ts +0 -0
  303. /package/{components → dist/components}/Table/Table.js +0 -0
  304. /package/{components → dist/components}/Table/Table.js.map +0 -0
  305. /package/{components → dist/components}/Table/data.d.ts +0 -0
  306. /package/{components → dist/components}/Table/exportsUtils.d.ts +0 -0
  307. /package/{components → dist/components}/Table/index.d.ts +0 -0
  308. /package/{components → dist/components}/Table/types.d.ts +0 -0
  309. /package/{components → dist/components}/Table.d.ts +0 -0
  310. /package/{components → dist/components}/Tabs/Tab.d.ts +0 -0
  311. /package/{components → dist/components}/Tabs/Tab.definition.d.ts +0 -0
  312. /package/{components → dist/components}/Tabs/Tabs.cjs +0 -0
  313. /package/{components → dist/components}/Tabs/Tabs.cjs.map +0 -0
  314. /package/{components → dist/components}/Tabs/Tabs.d.ts +0 -0
  315. /package/{components → dist/components}/Tabs/Tabs.js +0 -0
  316. /package/{components → dist/components}/Tabs/Tabs.js.map +0 -0
  317. /package/{components → dist/components}/Tabs/_tabUtils.d.ts +0 -0
  318. /package/{components → dist/components}/Tabs/index.d.ts +0 -0
  319. /package/{components → dist/components}/Tabs.d.ts +0 -0
  320. /package/{components → dist/components}/Timeline/Timeline.cjs +0 -0
  321. /package/{components → dist/components}/Timeline/Timeline.cjs.map +0 -0
  322. /package/{components → dist/components}/Timeline/Timeline.d.ts +0 -0
  323. /package/{components → dist/components}/Timeline/Timeline.definition.d.ts +0 -0
  324. /package/{components → dist/components}/Timeline/Timeline.js +0 -0
  325. /package/{components → dist/components}/Timeline/Timeline.js.map +0 -0
  326. /package/{components → dist/components}/Timeline/TimelineItem.d.ts +0 -0
  327. /package/{components → dist/components}/Timeline/index.d.ts +0 -0
  328. /package/{components → dist/components}/Timeline.d.ts +0 -0
  329. /package/{components → dist/components}/Tooltip/Tooltip.cjs +0 -0
  330. /package/{components → dist/components}/Tooltip/Tooltip.cjs.map +0 -0
  331. /package/{components → dist/components}/Tooltip/Tooltip.d.ts +0 -0
  332. /package/{components → dist/components}/Tooltip/Tooltip.js +0 -0
  333. /package/{components → dist/components}/Tooltip/Tooltip.js.map +0 -0
  334. /package/{components → dist/components}/Tooltip/index.d.ts +0 -0
  335. /package/{components → dist/components}/Tooltip.d.ts +0 -0
  336. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs +0 -0
  337. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs.map +0 -0
  338. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.d.ts +0 -0
  339. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js +0 -0
  340. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js.map +0 -0
  341. /package/{hooks → dist/hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
  342. /package/{hooks → dist/hooks}/ClipBoard/index.d.ts +0 -0
  343. /package/{hooks → dist/hooks}/ClipBoard.d.ts +0 -0
  344. /package/{index.cjs → dist/index.cjs} +0 -0
  345. /package/{index.cjs.map → dist/index.cjs.map} +0 -0
  346. /package/{index.css → dist/index.css} +0 -0
  347. /package/{index.d.ts → dist/index.d.ts} +0 -0
  348. /package/{index.js → dist/index.js} +0 -0
  349. /package/{index.js.map → dist/index.js.map} +0 -0
@@ -0,0 +1,293 @@
1
+ import React, { useState, useRef } from 'react'; // 👈 Importa useRef
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+
4
+ import { Button, Typography, Box } from '@mui/material';
5
+ import { fn } from '@storybook/test';
6
+ import Modal, { ModalRef } from './Modal';
7
+ import { useClipboard } from '../../hooks/ClipBoard';
8
+
9
+ const meta: Meta<typeof Modal> = {
10
+ title: 'Components/Modal',
11
+ component: Modal,
12
+ tags: ['autodocs'],
13
+ argTypes: {
14
+ open: {
15
+ control: 'boolean',
16
+ description: 'Controla si el modal está abierto o cerrado (uso controlado). Opcional si se usa el control imperativo con `ref`.',
17
+ },
18
+ onClose: {
19
+ action: 'onClose clickeado',
20
+ description: 'Función a ejecutar cuando el modal solicita cerrarse (ej. clic fuera o botón de cerrar). Opcional si se usa el control imperativo con `ref`.',
21
+ },
22
+ title: {
23
+ control: 'text',
24
+ description: 'Título opcional para el encabezado del modal. Se usará si no se proporciona `Modal.Header` explícitamente.',
25
+ },
26
+ children: {
27
+ control: 'object',
28
+ description: 'Contenido del modal, típicamente `Modal.Header`, `Modal.Body` y `Modal.Footer`.',
29
+ },
30
+ showCloseButton: {
31
+ control: 'boolean',
32
+ description: 'Controla la visibilidad del botón "Cerrar" por defecto en el `Modal.Footer`.',
33
+ },
34
+ closeButtonText: {
35
+ control: 'text',
36
+ description: 'Texto personalizado para el botón "Cerrar".',
37
+ },
38
+ closeButtonDisabled: {
39
+ control: 'boolean',
40
+ description: 'Deshabilita el botón "Cerrar".',
41
+ },
42
+ actions: {
43
+ control: 'object',
44
+ description: 'Un arreglo de objetos `ModalAction` para botones de acción personalizados en el `Modal.Footer`.',
45
+ },
46
+ maxWidth: {
47
+ control: 'select',
48
+ options: ['xs', 'sm', 'md', 'lg', 'xl', false],
49
+ description: 'Tamaño máximo del modal (propiedad de Material-UI `Dialog`).',
50
+ },
51
+ },
52
+ parameters: {
53
+ docs: {
54
+ description: {
55
+ component: 'Un componente de modal reutilizable de Material-UI con una estructura de componente compuesto (`Modal.Header`, `Modal.Body`, `Modal.Footer`). Puede ser controlado por una prop `open` o de forma imperativa a través de `ref` (`open()` y `close()` métodos). Permite definir acciones personalizadas y controlar la visibilidad y el estado de los botones por defecto.',
56
+ },
57
+ },
58
+ },
59
+ };
60
+
61
+ export default meta;
62
+ type Story = StoryObj<typeof Modal>;
63
+
64
+ // --- Historias ---
65
+
66
+ // Historia base: Modal simple con título y contenido básico (uso controlado por estado)
67
+ export const Default: Story = {
68
+ args: {
69
+ open: true,
70
+ onClose: fn(),
71
+ title: 'Modal de Ejemplo (Controlado por Estado)',
72
+ children: (
73
+ <Modal.Body>
74
+ <Typography>Este es el contenido principal del modal.</Typography>
75
+ <Typography sx={{ mt: 2 }}>Puedes colocar cualquier elemento React aquí.</Typography>
76
+ </Modal.Body>
77
+ ),
78
+ showCloseButton: true,
79
+ closeButtonText: 'Cerrar',
80
+ actions: [
81
+ { text: 'Guardar', onClick: fn(() => console.log("some some")), variant: 'contained' },
82
+ { text: 'Aceptar', onClick: fn(), color: 'success' },
83
+ ],
84
+ },
85
+ parameters: {
86
+ docs: {
87
+ description: {
88
+ story: 'Muestra un modal básico con un título y botones de acción, controlado por una prop `open` en el componente padre.',
89
+ },
90
+ },
91
+ },
92
+ };
93
+
94
+ // Nueva Historia: Modal controlado de forma Imperativa (sin estado `open` en el padre)
95
+ export const ImperativeControl: Story = {
96
+ render: (args) => {
97
+ const modalRef = useRef<ModalRef>(null);
98
+
99
+ const handleOpen = () => {
100
+ modalRef.current?.open();
101
+ };
102
+
103
+ const handleConfirm = () => {
104
+ alert('Acción confirmada desde el modal imperativo!');
105
+ modalRef.current?.close();
106
+ };
107
+
108
+ return (
109
+ <Box>
110
+ <Button onClick={handleOpen} variant="contained">
111
+ Abrir Modal Imperativo
112
+ </Button>
113
+
114
+ <Modal
115
+ ref={modalRef} // Asigna la ref al modal
116
+ // No se pasa la prop `open` aquí, el modal gestiona su estado interno
117
+ onClose={fn(() => console.log('Modal cerrado imperativamente'))} // El padre aún puede escuchar el cierre
118
+ title="Modal Controlado Imperativamente"
119
+ showCloseButton={true}
120
+ closeButtonText="Cerrar"
121
+ actions={[{ text: 'Aceptar', onClick: handleConfirm, variant: 'contained' }]}
122
+ maxWidth="sm"
123
+ {...args} // Pasa otras props del story
124
+ >
125
+ <Modal.Body>
126
+ <Typography>Este modal se abre y cierra llamando a métodos de la `ref`.</Typography>
127
+ <Typography sx={{ mt: 2 }}>No hay un `useState` para `open` en este componente padre.</Typography>
128
+ </Modal.Body>
129
+ </Modal>
130
+ </Box>
131
+ );
132
+ },
133
+ args: {
134
+ // Las props 'open' y 'onClose' se omiten o se gestionan internamente en el render
135
+ open: undefined, // Asegúrate de que `open` no se pase para activar el control interno
136
+ onClose: undefined, // `onClose` se gestiona en el render
137
+ },
138
+ parameters: {
139
+ docs: {
140
+ description: {
141
+ story: 'Demuestra cómo controlar el modal de forma imperativa usando `useRef` y los métodos `open()` y `close()` expuestos por el modal, sin necesidad de gestionar un estado `open` en el componente padre.',
142
+ },
143
+ },
144
+ },
145
+ };
146
+
147
+
148
+ // Historia: Modal con estructura de componente compuesto completa
149
+ export const CompleteStructure: Story = {
150
+ args: {
151
+ open: true,
152
+ onClose: fn(),
153
+ maxWidth: 'md',
154
+ children: (
155
+ <>
156
+ <Modal.Header>
157
+ <Typography variant="h6">Detalles del Artículo</Typography>
158
+ </Modal.Header>
159
+ <Modal.Body>
160
+ <Box sx={{ p: 2, border: '1px dashed grey', borderRadius: 1 }}>
161
+ <Typography>Aquí va un formulario complejo o información detallada.</Typography>
162
+ <Typography sx={{ mt: 1 }}>El cuerpo puede crecer y tener scroll si es necesario.</Typography>
163
+ <Button onClick={fn()} sx={{ mt: 2 }}>Acción en el cuerpo</Button>
164
+ </Box>
165
+ </Modal.Body>
166
+ <Modal.Footer
167
+ showCloseButton={false}
168
+ onClose={fn()} // Added onClose property
169
+ actions={[
170
+ { text: 'Cancelar', onClick: fn(), variant: 'outlined', color: 'error' },
171
+ { text: 'Confirmar Envío', onClick: fn(), variant: 'contained', color: 'primary' },
172
+ ]}
173
+ >
174
+ <Typography variant="caption" sx={{ mr: 2 }}>
175
+ Requiere confirmación.
176
+ </Typography>
177
+ </Modal.Footer>
178
+ </>
179
+ ),
180
+ },
181
+ parameters: {
182
+ docs: {
183
+ description: {
184
+ story: 'Demuestra el uso completo de la estructura de componente compuesto (`Modal.Header`, `Modal.Body`, `Modal.Footer`) con contenido variado y control de botones.',
185
+ },
186
+ },
187
+ },
188
+ };
189
+
190
+ // Historia: Modal sin botón de cerrar por defecto
191
+ export const NoDefaultCloseButton: Story = {
192
+ args: {
193
+ ...Default.args,
194
+ title: 'Modal sin botón de cerrar',
195
+ showCloseButton: false,
196
+ actions: [
197
+ { text: 'Entendido', onClick: fn(), variant: 'contained' },
198
+ ],
199
+ },
200
+ parameters: {
201
+ docs: {
202
+ description: {
203
+ story: 'Un modal que no muestra el botón "Cerrar" por defecto, forzando al usuario a usar las acciones personalizadas.',
204
+ },
205
+ },
206
+ },
207
+ };
208
+
209
+ // Historia: Modal con botón de cerrar deshabilitado
210
+ export const DisabledCloseButton: Story = {
211
+ args: {
212
+ ...Default.args,
213
+ title: 'Modal con botón de cerrar deshabilitado',
214
+ closeButtonDisabled: true,
215
+ actions: [
216
+ { text: 'Habilitar', onClick: fn(), variant: 'contained' },
217
+ ],
218
+ },
219
+ parameters: {
220
+ docs: {
221
+ description: {
222
+ story: 'Muestra un modal donde el botón "Cerrar" por defecto está deshabilitado.',
223
+ },
224
+ },
225
+ },
226
+ };
227
+
228
+ // Historia: Modal con diferentes tamaños (maxWidth)
229
+ export const Sizing: Story = {
230
+ render: (args: any) => {
231
+ const [openXs, setOpenXs] = useState(false);
232
+ const [openLg, setOpenLg] = useState(false);
233
+ const { ref, SnackbarComponent } = useClipboard();
234
+
235
+
236
+
237
+ return (
238
+ <Box sx={{ display: 'flex', gap: 2 }}>
239
+ <Button onClick={() => setOpenXs(true)} variant="outlined">Abrir XS</Button>
240
+ <Button onClick={() => setOpenLg(true)} variant="outlined">Abrir LG</Button>
241
+
242
+ <Modal {...args} open={openXs} onClose={() => setOpenXs(false)} title="Modal XS" maxWidth="xs">
243
+ <Modal.Body><Typography>Este es un modal de tamaño extra pequeño.</Typography></Modal.Body>
244
+ </Modal>
245
+
246
+ <Modal {...args} open={openLg} onClose={() => setOpenLg(false)} title="Modal LG" maxWidth="lg">
247
+ <Modal.Body>
248
+ <Typography ref={ref}>Este es un modal de tamaño grande.</Typography>
249
+ <SnackbarComponent />
250
+ </Modal.Body>
251
+ </Modal>
252
+ </Box>
253
+ );
254
+ },
255
+ args: {
256
+ open: false,
257
+ onClose: fn(),
258
+ },
259
+ parameters: {
260
+ docs: {
261
+ description: {
262
+ story: 'Demuestra cómo el modal se ajusta a diferentes tamaños (`maxWidth`) definidos por las propiedades de Material-UI.',
263
+ },
264
+ },
265
+ },
266
+ };
267
+
268
+ // Historia: Modal con texto largo en el cuerpo (para probar el scroll)
269
+ export const LongContent: Story = {
270
+ args: {
271
+ open: true,
272
+ onClose: fn(),
273
+ title: 'Modal con Contenido Largo',
274
+ maxWidth: 'sm',
275
+ children: (
276
+ <Modal.Body>
277
+ {Array.from({ length: 30 }, (_, i) => (
278
+ <Typography key={i} sx={{ mb: 1 }}>
279
+ Este es un párrafo de contenido largo para probar el scroll del modal. Línea {i + 1}.
280
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
281
+ </Typography>
282
+ ))}
283
+ </Modal.Body>
284
+ ),
285
+ },
286
+ parameters: {
287
+ docs: {
288
+ description: {
289
+ story: 'Muestra un modal con un cuerpo que contiene mucho texto, demostrando la funcionalidad de scroll automático.',
290
+ },
291
+ },
292
+ },
293
+ };
@@ -0,0 +1,173 @@
1
+ import React, { useState, useImperativeHandle, forwardRef } from 'react'; // 👈 Importa useImperativeHandle y forwardRef
2
+ import { Modal as MuiModal, Box, Paper, useTheme, useMediaQuery } from '@mui/material';
3
+
4
+ import { DialogProps } from '@mui/material/Dialog';
5
+ import { ModalAction, ModalFooter, ModalFooterProps } from './ModalFooter';
6
+ import { ModalHeader } from './ModalHeader';
7
+ import { ModalBody } from './ModalBody';
8
+
9
+ // Define la interfaz para los métodos que el padre puede llamar a través de la ref
10
+ export interface ModalRef {
11
+ open: () => void;
12
+ close: () => void;
13
+ }
14
+
15
+ interface ModalProps {
16
+ // La prop 'open' ahora es opcional si se usa con ref, pero aún puede ser controlada externamente
17
+ open?: boolean;
18
+ onClose?: () => void; // 'onClose' ahora es opcional ya que el modal puede cerrarse internamente
19
+ title?: string;
20
+ children: React.ReactNode;
21
+ showCloseButton?: boolean;
22
+ closeButtonText?: string;
23
+ closeButtonDisabled?: boolean;
24
+ actions?: ModalAction[];
25
+ maxWidth?: DialogProps['maxWidth'];
26
+ hiddenFooter?: boolean
27
+ }
28
+
29
+ const modalStyle = {
30
+ position: 'absolute' as 'absolute',
31
+ top: '50%',
32
+ left: '50%',
33
+ transform: 'translate(-50%, -50%)',
34
+ width: '90%',
35
+ maxHeight: '90vh',
36
+ display: 'flex',
37
+ flexDirection: 'column',
38
+ outline: 'none',
39
+ };
40
+
41
+ // Envuelve el componente en forwardRef
42
+ export const Modal = forwardRef<ModalRef, ModalProps>(({
43
+ open: controlledOpen, // Renombra la prop 'open' si se pasa externamente
44
+ onClose: controlledOnClose, // Renombra la prop 'onClose' si se pasa externamente
45
+ title,
46
+ children,
47
+ showCloseButton = true,
48
+ closeButtonText = "Cerrar",
49
+ closeButtonDisabled = false,
50
+ actions = [],
51
+ maxWidth = 'sm',
52
+ hiddenFooter = false,
53
+ }, ref) => { // Recibe la ref
54
+ // Estado interno para gestionar la visibilidad si no es controlado externamente
55
+ const [internalOpen, setInternalOpen] = useState(false);
56
+
57
+ // Determina si el modal está abierto, priorizando la prop externa
58
+ const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;
59
+
60
+ // Expone métodos 'open' y 'close' a través de la ref
61
+ useImperativeHandle(ref, () => ({
62
+ open: () => setInternalOpen(true),
63
+ close: () => {
64
+ setInternalOpen(false);
65
+ controlledOnClose?.(); // Llama al onClose externo si existe
66
+ },
67
+ }));
68
+
69
+ const handleCloseInternal = () => {
70
+ setInternalOpen(false);
71
+ controlledOnClose?.(); // Llama al onClose externo si existe
72
+ };
73
+
74
+ const theme = useTheme();
75
+ const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
76
+
77
+ const getWidth = () => {
78
+ if (isMobile) return '95%';
79
+ switch (maxWidth) {
80
+ case 'xs': return 300;
81
+ case 'sm': return 500;
82
+ case 'md': return 700;
83
+ case 'lg': return 900;
84
+ case 'xl': return 1100;
85
+ case false: return 'auto';
86
+ default: return 500;
87
+ }
88
+ };
89
+
90
+ const renderChildren = () => {
91
+ let header: React.ReactNode | null = null;
92
+ let body: React.ReactNode | null = null;
93
+ let footer: React.ReactNode | null = null;
94
+
95
+ React.Children.forEach(children, (child) => {
96
+ if (React.isValidElement(child)) {
97
+ if (child.type === ModalHeader) {
98
+ header = child;
99
+ } else if (child.type === ModalBody) {
100
+ body = child;
101
+ } else if (child.type === ModalFooter) {
102
+ const footerChild = child as React.ReactElement<ModalFooterProps>;
103
+ const {
104
+ showCloseButton: childShowCloseButton,
105
+ closeButtonText: childCloseButtonText,
106
+ closeButtonDisabled: childCloseButtonDisabled,
107
+ onClose: childOnClose,
108
+ actions: childActions,
109
+ ...restOfFooterProps
110
+ } = footerChild.props;
111
+
112
+ footer = React.cloneElement(footerChild, {
113
+ showCloseButton,
114
+ closeButtonText,
115
+ closeButtonDisabled,
116
+ onClose: handleCloseInternal, // Usa la función de cierre interna
117
+ actions,
118
+ ...restOfFooterProps,
119
+ });
120
+ }
121
+ }
122
+ });
123
+
124
+ if (!footer && !hiddenFooter) {
125
+ footer = (
126
+ <ModalFooter
127
+ showCloseButton={showCloseButton}
128
+ closeButtonText={closeButtonText}
129
+ closeButtonDisabled={closeButtonDisabled}
130
+ onClose={handleCloseInternal} // Usa la función de cierre interna
131
+ actions={actions}
132
+ />
133
+ );
134
+ }
135
+
136
+ return (
137
+ <>
138
+ {header || (title && <ModalHeader>{title}</ModalHeader>)}
139
+ {body}
140
+ {footer}
141
+ </>
142
+ );
143
+ };
144
+
145
+ return (
146
+ <MuiModal
147
+ open={isOpen} // Usa el estado de visibilidad determinado
148
+ onClose={handleCloseInternal} // Usa la función de cierre interna
149
+ aria-labelledby="modal-title"
150
+ aria-describedby="modal-description"
151
+ closeAfterTransition
152
+ >
153
+ <Paper sx={{ ...modalStyle, width: getWidth() }}>
154
+ {renderChildren()}
155
+ </Paper>
156
+ </MuiModal>
157
+ );
158
+ });
159
+
160
+ // Define los sub-componentes como propiedades estáticas con tipos explícitos
161
+ type ModalComponent = React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<ModalRef>> & {
162
+ Header: typeof ModalHeader;
163
+ Body: typeof ModalBody;
164
+ Footer: typeof ModalFooter;
165
+ };
166
+
167
+ const ModalWithStatics = Modal as ModalComponent;
168
+
169
+ ModalWithStatics.Header = ModalHeader;
170
+ ModalWithStatics.Body = ModalBody;
171
+ ModalWithStatics.Footer = ModalFooter;
172
+
173
+ export default ModalWithStatics;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { Box } from '@mui/material';
3
+
4
+ interface ModalBodyProps { // Renombrado
5
+ children: React.ReactNode;
6
+ }
7
+
8
+ export const ModalBody: React.FC<ModalBodyProps> = ({ children }) => { // Renombrado
9
+ return (
10
+ <Box sx={{ padding: 2, overflowY: 'auto', flexGrow: 1 }}>
11
+ {children}
12
+ </Box>
13
+ );
14
+ };
15
+
16
+ export default ModalBody;
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import { Box, Button, Stack } from '@mui/material';
3
+ import { ButtonProps } from '@mui/material/Button';
4
+
5
+ // Interfaz para acciones personalizadas (se mantiene aquí)
6
+ export interface ModalAction {
7
+ text: string;
8
+ onClick: () => void;
9
+ disabled?: boolean;
10
+ variant?: ButtonProps['variant'];
11
+ color?: ButtonProps['color'];
12
+ }
13
+
14
+ export interface ModalFooterProps { // Renombrado
15
+ children?: React.ReactNode;
16
+ showCloseButton?: boolean;
17
+ closeButtonText?: string;
18
+ closeButtonDisabled?: boolean;
19
+ onClose: () => void;
20
+ actions?: ModalAction[];
21
+ }
22
+
23
+ export const ModalFooter: React.FC<ModalFooterProps> = ({ // Renombrado
24
+ children,
25
+ showCloseButton = true,
26
+ closeButtonText = "Cerrar",
27
+ closeButtonDisabled = false,
28
+ onClose,
29
+ actions = [],
30
+ }) => {
31
+ return (
32
+ <Box sx={{ padding: 2, borderTop: '1px solid #e0e0e0', display: 'flex', justifyContent: 'flex-end', gap: 1 }}>
33
+ {children}
34
+ <Stack direction="row" spacing={1}>
35
+ {showCloseButton && (
36
+ <Button
37
+ onClick={onClose}
38
+ disabled={closeButtonDisabled}
39
+ variant="outlined"
40
+ color="secondary"
41
+ >
42
+ {closeButtonText}
43
+ </Button>
44
+ )}
45
+ {actions.map((action, index) => (
46
+ <Button
47
+ key={index}
48
+ onClick={action.onClick}
49
+ disabled={action.disabled}
50
+ variant={action.variant || 'contained'}
51
+ color={action.color || 'primary'}
52
+ >
53
+ {action.text}
54
+ </Button>
55
+ ))}
56
+ </Stack>
57
+ </Box>
58
+ );
59
+ };
60
+
61
+ export default ModalFooter;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { Box, Typography } from '@mui/material';
3
+
4
+ interface ModalHeaderProps { // Renombrado
5
+ children: React.ReactNode;
6
+ }
7
+
8
+ export const ModalHeader: React.FC<ModalHeaderProps> = ({ children }) => { // Renombrado
9
+ return (
10
+ <Box sx={{ padding: 2, borderBottom: '1px solid #e0e0e0', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
11
+ <Typography variant="h6" component="h2">
12
+ {children}
13
+ </Typography>
14
+ </Box>
15
+ );
16
+ };
17
+
18
+ export default ModalHeader;
@@ -0,0 +1 @@
1
+ export {default as Modal } from './Modal';