@soyfri/shared-library 1.5.0-beta.4 → 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 (353) 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/components/Autocomplete/Autocomplete.cjs +109 -0
  12. package/dist/components/Autocomplete/Autocomplete.cjs.map +1 -0
  13. package/dist/components/Autocomplete/Autocomplete.js +109 -0
  14. package/dist/components/Autocomplete/Autocomplete.js.map +1 -0
  15. package/dist/styles.css +112 -0
  16. package/package.json +43 -134
  17. package/rollup.config.cjs +87 -0
  18. package/src/components/Autocomplete/Autocomplete.definitions.ts +254 -0
  19. package/src/components/Autocomplete/Autocomplete.stories.tsx +387 -0
  20. package/src/components/Autocomplete/Autocomplete.tsx +139 -0
  21. package/src/components/Autocomplete/index.ts +1 -0
  22. package/src/components/Avatar/Avatar.stories.tsx +54 -0
  23. package/src/components/Avatar/Avatar.tsx +143 -0
  24. package/src/components/Avatar/index.ts +1 -0
  25. package/src/components/Button/Button.definition.ts +97 -0
  26. package/src/components/Button/Button.stories.tsx +285 -0
  27. package/src/components/Button/Button.tsx +67 -0
  28. package/src/components/Button/index.ts +1 -0
  29. package/src/components/Card/Card.definition.ts +5 -0
  30. package/src/components/Card/Card.stories.tsx +32 -0
  31. package/src/components/Card/Card.tsx +44 -0
  32. package/src/components/Card/index.ts +1 -0
  33. package/src/components/Chip/Chip.definitions.ts +167 -0
  34. package/src/components/Chip/Chip.stories.tsx +265 -0
  35. package/src/components/Chip/Chip.tsx +61 -0
  36. package/src/components/Chip/index.ts +1 -0
  37. package/src/components/Column/Column.tsx +29 -0
  38. package/src/components/Column/index.ts +1 -0
  39. package/src/components/DatePicker/DatePicker.definitions.ts +205 -0
  40. package/src/components/DatePicker/DatePicker.stories.tsx +282 -0
  41. package/src/components/DatePicker/DatePicker.tsx +165 -0
  42. package/src/components/DatePicker/index.ts +1 -0
  43. package/src/components/DateRangePicker/DateRangePicker.definitions.ts +191 -0
  44. package/src/components/DateRangePicker/DateRangePicker.stories.tsx +252 -0
  45. package/src/components/DateRangePicker/DateRangePicker.tsx +56 -0
  46. package/src/components/DateRangePicker/index.ts +1 -0
  47. package/src/components/DateTimePicker/DateTimePicker.definitions.ts +232 -0
  48. package/src/components/DateTimePicker/DateTimePicker.stories.tsx +390 -0
  49. package/src/components/DateTimePicker/DateTimePicker.tsx +191 -0
  50. package/src/components/DateTimePicker/index.ts +1 -0
  51. package/src/components/Flyout/Flyout.stories.tsx +274 -0
  52. package/src/components/Flyout/Flyout.tsx +122 -0
  53. package/src/components/Flyout/index.ts +1 -0
  54. package/src/components/Gallery/Gallery.definition.tsx +37 -0
  55. package/src/components/Gallery/Gallery.stories.tsx +82 -0
  56. package/src/components/Gallery/Gallery.tsx +118 -0
  57. package/src/components/Gallery/GalleryLightbox.tsx +170 -0
  58. package/src/components/Gallery/GalleryMain.tsx +84 -0
  59. package/src/components/Gallery/GalleryThumbnails.tsx +106 -0
  60. package/src/components/Gallery/index.ts +1 -0
  61. package/src/components/Icon/Icon.stories.tsx +54 -0
  62. package/src/components/Icon/Icon.tsx +94 -0
  63. package/src/components/Icon/index.ts +2 -0
  64. package/src/components/Input/Input.definitions.ts +252 -0
  65. package/src/components/Input/Input.stories.tsx +387 -0
  66. package/src/components/Input/Input.tsx +186 -0
  67. package/src/components/Input/index.ts +1 -0
  68. package/src/components/InputGroup/InputGroup.stories.tsx +136 -0
  69. package/src/components/InputGroup/InputGroup.tsx +136 -0
  70. package/src/components/InputGroup/index.ts +1 -0
  71. package/src/components/MenuButton/MenuButton.stories.tsx +197 -0
  72. package/src/components/MenuButton/MenuButton.tsx +100 -0
  73. package/src/components/MenuButton/index.ts +1 -0
  74. package/src/components/Modal/Modal.stories.tsx +293 -0
  75. package/src/components/Modal/Modal.tsx +173 -0
  76. package/src/components/Modal/ModalBody.tsx +16 -0
  77. package/src/components/Modal/ModalFooter.tsx +61 -0
  78. package/src/components/Modal/ModalHeader.tsx +18 -0
  79. package/src/components/Modal/index.ts +1 -0
  80. package/src/components/Select/Select.definitions.ts +488 -0
  81. package/src/components/Select/Select.stories.tsx +569 -0
  82. package/src/components/Select/Select.tsx +468 -0
  83. package/src/components/Select/index.ts +1 -0
  84. package/src/components/Stat/Stat.stories.tsx +85 -0
  85. package/src/components/Stat/Stat.tsx +117 -0
  86. package/src/components/Stat/index.ts +2 -0
  87. package/src/components/StatusMessage/StatusMessage.stories.tsx +130 -0
  88. package/src/components/StatusMessage/StatusMessage.tsx +162 -0
  89. package/src/components/StatusMessage/index.ts +2 -0
  90. package/src/components/Stepper/Step.tsx +21 -0
  91. package/src/components/Stepper/Stepper.definition.ts +75 -0
  92. package/src/components/Stepper/Stepper.stories.tsx +122 -0
  93. package/src/components/Stepper/Stepper.tsx +59 -0
  94. package/src/components/Stepper/index.ts +2 -0
  95. package/src/components/Table/EmptyTable.png +0 -0
  96. package/src/components/Table/Table.definition.ts +580 -0
  97. package/src/components/Table/Table.stories.tsx +853 -0
  98. package/src/components/Table/Table.tsx +495 -0
  99. package/src/components/Table/data.ts +134 -0
  100. package/src/components/Table/exportsUtils.ts +195 -0
  101. package/src/components/Table/index.ts +3 -0
  102. package/src/components/Table/types.ts +34 -0
  103. package/src/components/Tabs/Tab.definition.ts +53 -0
  104. package/src/components/Tabs/Tab.tsx +19 -0
  105. package/src/components/Tabs/Tabs.stories.tsx +118 -0
  106. package/src/components/Tabs/Tabs.tsx +99 -0
  107. package/src/components/Tabs/_tabUtils.tsx +4 -0
  108. package/src/components/Tabs/index.ts +2 -0
  109. package/src/components/Timeline/Timeline.definition.ts +43 -0
  110. package/src/components/Timeline/Timeline.stories.tsx +108 -0
  111. package/src/components/Timeline/Timeline.tsx +49 -0
  112. package/src/components/Timeline/TimelineItem.tsx +31 -0
  113. package/src/components/Timeline/index.ts +2 -0
  114. package/src/components/Tooltip/Tooltip.stories.tsx +117 -0
  115. package/src/components/Tooltip/Tooltip.tsx +58 -0
  116. package/src/components/Tooltip/index.ts +1 -0
  117. package/src/hooks/ClipBoard/ClipBoard.stories.tsx +168 -0
  118. package/src/hooks/ClipBoard/ClipBoard.tsx +131 -0
  119. package/src/hooks/ClipBoard/ClipboardUnifiedDemo.tsx +111 -0
  120. package/src/hooks/ClipBoard/index.ts +1 -0
  121. package/src/index.ts +1 -0
  122. package/src/styles.css +3 -0
  123. package/tailwind.config.js +10 -0
  124. package/tsconfig.json +48 -0
  125. package/tsup.config.js +41 -0
  126. package/vite.config.js +132 -0
  127. package/vitest.config.ts +35 -0
  128. package/components/Autocomplete/Autocomplete.cjs +0 -132
  129. package/components/Autocomplete/Autocomplete.cjs.map +0 -1
  130. package/components/Autocomplete/Autocomplete.js +0 -132
  131. package/components/Autocomplete/Autocomplete.js.map +0 -1
  132. /package/{README.md → Readme.md} +0 -0
  133. /package/{Button-C17mExpd.cjs → dist/Button-C17mExpd.cjs} +0 -0
  134. /package/{Button-C17mExpd.cjs.map → dist/Button-C17mExpd.cjs.map} +0 -0
  135. /package/{Button-UkkP-bNw.js → dist/Button-UkkP-bNw.js} +0 -0
  136. /package/{Button-UkkP-bNw.js.map → dist/Button-UkkP-bNw.js.map} +0 -0
  137. /package/{DatePicker-BSNboVhN.js → dist/DatePicker-BSNboVhN.js} +0 -0
  138. /package/{DatePicker-BSNboVhN.js.map → dist/DatePicker-BSNboVhN.js.map} +0 -0
  139. /package/{DatePicker-BoqxWAhj.cjs → dist/DatePicker-BoqxWAhj.cjs} +0 -0
  140. /package/{DatePicker-BoqxWAhj.cjs.map → dist/DatePicker-BoqxWAhj.cjs.map} +0 -0
  141. /package/{Input-DFHs7cJ_.js → dist/Input-DFHs7cJ_.js} +0 -0
  142. /package/{Input-DFHs7cJ_.js.map → dist/Input-DFHs7cJ_.js.map} +0 -0
  143. /package/{Input-c8MwNNPg.cjs → dist/Input-c8MwNNPg.cjs} +0 -0
  144. /package/{Input-c8MwNNPg.cjs.map → dist/Input-c8MwNNPg.cjs.map} +0 -0
  145. /package/{Select-BO2N56sm.cjs → dist/Select-BO2N56sm.cjs} +0 -0
  146. /package/{Select-BO2N56sm.cjs.map → dist/Select-BO2N56sm.cjs.map} +0 -0
  147. /package/{Select-BcLkyHSE.js → dist/Select-BcLkyHSE.js} +0 -0
  148. /package/{Select-BcLkyHSE.js.map → dist/Select-BcLkyHSE.js.map} +0 -0
  149. /package/{components → dist/components}/Autocomplete/Autocomplete.d.ts +0 -0
  150. /package/{components → dist/components}/Autocomplete/Autocomplete.definitions.d.ts +0 -0
  151. /package/{components → dist/components}/Autocomplete/index.d.ts +0 -0
  152. /package/{components → dist/components}/Autocomplete.d.ts +0 -0
  153. /package/{components → dist/components}/Avatar/Avatar.cjs +0 -0
  154. /package/{components → dist/components}/Avatar/Avatar.cjs.map +0 -0
  155. /package/{components → dist/components}/Avatar/Avatar.d.ts +0 -0
  156. /package/{components → dist/components}/Avatar/Avatar.js +0 -0
  157. /package/{components → dist/components}/Avatar/Avatar.js.map +0 -0
  158. /package/{components → dist/components}/Avatar/index.d.ts +0 -0
  159. /package/{components → dist/components}/Avatar.d.ts +0 -0
  160. /package/{components → dist/components}/Button/Button.cjs +0 -0
  161. /package/{components → dist/components}/Button/Button.cjs.map +0 -0
  162. /package/{components → dist/components}/Button/Button.d.ts +0 -0
  163. /package/{components → dist/components}/Button/Button.definition.d.ts +0 -0
  164. /package/{components → dist/components}/Button/Button.js +0 -0
  165. /package/{components → dist/components}/Button/Button.js.map +0 -0
  166. /package/{components → dist/components}/Button/index.d.ts +0 -0
  167. /package/{components → dist/components}/Button.d.ts +0 -0
  168. /package/{components → dist/components}/Card/Card.cjs +0 -0
  169. /package/{components → dist/components}/Card/Card.cjs.map +0 -0
  170. /package/{components → dist/components}/Card/Card.d.ts +0 -0
  171. /package/{components → dist/components}/Card/Card.definition.d.ts +0 -0
  172. /package/{components → dist/components}/Card/Card.js +0 -0
  173. /package/{components → dist/components}/Card/Card.js.map +0 -0
  174. /package/{components → dist/components}/Card/index.d.ts +0 -0
  175. /package/{components → dist/components}/Card.d.ts +0 -0
  176. /package/{components → dist/components}/Chip/Chip.cjs +0 -0
  177. /package/{components → dist/components}/Chip/Chip.cjs.map +0 -0
  178. /package/{components → dist/components}/Chip/Chip.d.ts +0 -0
  179. /package/{components → dist/components}/Chip/Chip.definitions.d.ts +0 -0
  180. /package/{components → dist/components}/Chip/Chip.js +0 -0
  181. /package/{components → dist/components}/Chip/Chip.js.map +0 -0
  182. /package/{components → dist/components}/Chip/index.d.ts +0 -0
  183. /package/{components → dist/components}/Chip.d.ts +0 -0
  184. /package/{components → dist/components}/Column/Column.cjs +0 -0
  185. /package/{components → dist/components}/Column/Column.cjs.map +0 -0
  186. /package/{components → dist/components}/Column/Column.d.ts +0 -0
  187. /package/{components → dist/components}/Column/Column.js +0 -0
  188. /package/{components → dist/components}/Column/Column.js.map +0 -0
  189. /package/{components → dist/components}/Column/index.d.ts +0 -0
  190. /package/{components → dist/components}/Column.d.ts +0 -0
  191. /package/{components → dist/components}/DatePicker/DatePicker.cjs +0 -0
  192. /package/{components → dist/components}/DatePicker/DatePicker.cjs.map +0 -0
  193. /package/{components → dist/components}/DatePicker/DatePicker.d.ts +0 -0
  194. /package/{components → dist/components}/DatePicker/DatePicker.definitions.d.ts +0 -0
  195. /package/{components → dist/components}/DatePicker/DatePicker.js +0 -0
  196. /package/{components → dist/components}/DatePicker/DatePicker.js.map +0 -0
  197. /package/{components → dist/components}/DatePicker/index.d.ts +0 -0
  198. /package/{components → dist/components}/DatePicker.d.ts +0 -0
  199. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs +0 -0
  200. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs.map +0 -0
  201. /package/{components → dist/components}/DateRangePicker/DateRangePicker.d.ts +0 -0
  202. /package/{components → dist/components}/DateRangePicker/DateRangePicker.definitions.d.ts +0 -0
  203. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js +0 -0
  204. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js.map +0 -0
  205. /package/{components → dist/components}/DateRangePicker/index.d.ts +0 -0
  206. /package/{components → dist/components}/DateRangePicker.d.ts +0 -0
  207. /package/{components → dist/components}/DateTimePicker/DateTimePicker.cjs +0 -0
  208. /package/{components → dist/components}/DateTimePicker/DateTimePicker.cjs.map +0 -0
  209. /package/{components → dist/components}/DateTimePicker/DateTimePicker.d.ts +0 -0
  210. /package/{components → dist/components}/DateTimePicker/DateTimePicker.definitions.d.ts +0 -0
  211. /package/{components → dist/components}/DateTimePicker/DateTimePicker.js +0 -0
  212. /package/{components → dist/components}/DateTimePicker/DateTimePicker.js.map +0 -0
  213. /package/{components → dist/components}/DateTimePicker/index.d.ts +0 -0
  214. /package/{components → dist/components}/DateTimePicker.d.ts +0 -0
  215. /package/{components → dist/components}/Flyout/Flyout.cjs +0 -0
  216. /package/{components → dist/components}/Flyout/Flyout.cjs.map +0 -0
  217. /package/{components → dist/components}/Flyout/Flyout.d.ts +0 -0
  218. /package/{components → dist/components}/Flyout/Flyout.js +0 -0
  219. /package/{components → dist/components}/Flyout/Flyout.js.map +0 -0
  220. /package/{components → dist/components}/Flyout/index.d.ts +0 -0
  221. /package/{components → dist/components}/Flyout.d.ts +0 -0
  222. /package/{components → dist/components}/Gallery/Gallery.cjs +0 -0
  223. /package/{components → dist/components}/Gallery/Gallery.cjs.map +0 -0
  224. /package/{components → dist/components}/Gallery/Gallery.d.ts +0 -0
  225. /package/{components → dist/components}/Gallery/Gallery.definition.d.ts +0 -0
  226. /package/{components → dist/components}/Gallery/Gallery.js +0 -0
  227. /package/{components → dist/components}/Gallery/Gallery.js.map +0 -0
  228. /package/{components → dist/components}/Gallery/GalleryLightbox.d.ts +0 -0
  229. /package/{components → dist/components}/Gallery/GalleryMain.d.ts +0 -0
  230. /package/{components → dist/components}/Gallery/GalleryThumbnails.d.ts +0 -0
  231. /package/{components → dist/components}/Gallery/index.d.ts +0 -0
  232. /package/{components → dist/components}/Gallery.d.ts +0 -0
  233. /package/{components → dist/components}/Icon/Icon.cjs +0 -0
  234. /package/{components → dist/components}/Icon/Icon.cjs.map +0 -0
  235. /package/{components → dist/components}/Icon/Icon.d.ts +0 -0
  236. /package/{components → dist/components}/Icon/Icon.js +0 -0
  237. /package/{components → dist/components}/Icon/Icon.js.map +0 -0
  238. /package/{components → dist/components}/Icon/index.d.ts +0 -0
  239. /package/{components → dist/components}/Icon.d.ts +0 -0
  240. /package/{components → dist/components}/Input/Input.cjs +0 -0
  241. /package/{components → dist/components}/Input/Input.cjs.map +0 -0
  242. /package/{components → dist/components}/Input/Input.d.ts +0 -0
  243. /package/{components → dist/components}/Input/Input.definitions.d.ts +0 -0
  244. /package/{components → dist/components}/Input/Input.js +0 -0
  245. /package/{components → dist/components}/Input/Input.js.map +0 -0
  246. /package/{components → dist/components}/Input/index.d.ts +0 -0
  247. /package/{components → dist/components}/Input.d.ts +0 -0
  248. /package/{components → dist/components}/InputGroup/InputGroup.cjs +0 -0
  249. /package/{components → dist/components}/InputGroup/InputGroup.cjs.map +0 -0
  250. /package/{components → dist/components}/InputGroup/InputGroup.d.ts +0 -0
  251. /package/{components → dist/components}/InputGroup/InputGroup.js +0 -0
  252. /package/{components → dist/components}/InputGroup/InputGroup.js.map +0 -0
  253. /package/{components → dist/components}/InputGroup/index.d.ts +0 -0
  254. /package/{components → dist/components}/InputGroup.d.ts +0 -0
  255. /package/{components → dist/components}/MenuButton/MenuButton.cjs +0 -0
  256. /package/{components → dist/components}/MenuButton/MenuButton.cjs.map +0 -0
  257. /package/{components → dist/components}/MenuButton/MenuButton.d.ts +0 -0
  258. /package/{components → dist/components}/MenuButton/MenuButton.js +0 -0
  259. /package/{components → dist/components}/MenuButton/MenuButton.js.map +0 -0
  260. /package/{components → dist/components}/MenuButton/index.d.ts +0 -0
  261. /package/{components → dist/components}/MenuButton.d.ts +0 -0
  262. /package/{components → dist/components}/Modal/Modal.cjs +0 -0
  263. /package/{components → dist/components}/Modal/Modal.cjs.map +0 -0
  264. /package/{components → dist/components}/Modal/Modal.d.ts +0 -0
  265. /package/{components → dist/components}/Modal/Modal.js +0 -0
  266. /package/{components → dist/components}/Modal/Modal.js.map +0 -0
  267. /package/{components → dist/components}/Modal/ModalBody.d.ts +0 -0
  268. /package/{components → dist/components}/Modal/ModalFooter.d.ts +0 -0
  269. /package/{components → dist/components}/Modal/ModalHeader.d.ts +0 -0
  270. /package/{components → dist/components}/Modal/index.d.ts +0 -0
  271. /package/{components → dist/components}/Modal.d.ts +0 -0
  272. /package/{components → dist/components}/Select/Select.cjs +0 -0
  273. /package/{components → dist/components}/Select/Select.cjs.map +0 -0
  274. /package/{components → dist/components}/Select/Select.d.ts +0 -0
  275. /package/{components → dist/components}/Select/Select.definitions.d.ts +0 -0
  276. /package/{components → dist/components}/Select/Select.js +0 -0
  277. /package/{components → dist/components}/Select/Select.js.map +0 -0
  278. /package/{components → dist/components}/Select/index.d.ts +0 -0
  279. /package/{components → dist/components}/Select.d.ts +0 -0
  280. /package/{components → dist/components}/Stat/Stat.cjs +0 -0
  281. /package/{components → dist/components}/Stat/Stat.cjs.map +0 -0
  282. /package/{components → dist/components}/Stat/Stat.d.ts +0 -0
  283. /package/{components → dist/components}/Stat/Stat.js +0 -0
  284. /package/{components → dist/components}/Stat/Stat.js.map +0 -0
  285. /package/{components → dist/components}/Stat/index.d.ts +0 -0
  286. /package/{components → dist/components}/Stat.d.ts +0 -0
  287. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs +0 -0
  288. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs.map +0 -0
  289. /package/{components → dist/components}/StatusMessage/StatusMessage.d.ts +0 -0
  290. /package/{components → dist/components}/StatusMessage/StatusMessage.js +0 -0
  291. /package/{components → dist/components}/StatusMessage/StatusMessage.js.map +0 -0
  292. /package/{components → dist/components}/StatusMessage/index.d.ts +0 -0
  293. /package/{components → dist/components}/StatusMessage.d.ts +0 -0
  294. /package/{components → dist/components}/Stepper/Step.d.ts +0 -0
  295. /package/{components → dist/components}/Stepper/Stepper.cjs +0 -0
  296. /package/{components → dist/components}/Stepper/Stepper.cjs.map +0 -0
  297. /package/{components → dist/components}/Stepper/Stepper.d.ts +0 -0
  298. /package/{components → dist/components}/Stepper/Stepper.definition.d.ts +0 -0
  299. /package/{components → dist/components}/Stepper/Stepper.js +0 -0
  300. /package/{components → dist/components}/Stepper/Stepper.js.map +0 -0
  301. /package/{components → dist/components}/Stepper/index.d.ts +0 -0
  302. /package/{components → dist/components}/Stepper.d.ts +0 -0
  303. /package/{components → dist/components}/Table/Table.cjs +0 -0
  304. /package/{components → dist/components}/Table/Table.cjs.map +0 -0
  305. /package/{components → dist/components}/Table/Table.d.ts +0 -0
  306. /package/{components → dist/components}/Table/Table.definition.d.ts +0 -0
  307. /package/{components → dist/components}/Table/Table.js +0 -0
  308. /package/{components → dist/components}/Table/Table.js.map +0 -0
  309. /package/{components → dist/components}/Table/data.d.ts +0 -0
  310. /package/{components → dist/components}/Table/exportsUtils.d.ts +0 -0
  311. /package/{components → dist/components}/Table/index.d.ts +0 -0
  312. /package/{components → dist/components}/Table/types.d.ts +0 -0
  313. /package/{components → dist/components}/Table.d.ts +0 -0
  314. /package/{components → dist/components}/Tabs/Tab.d.ts +0 -0
  315. /package/{components → dist/components}/Tabs/Tab.definition.d.ts +0 -0
  316. /package/{components → dist/components}/Tabs/Tabs.cjs +0 -0
  317. /package/{components → dist/components}/Tabs/Tabs.cjs.map +0 -0
  318. /package/{components → dist/components}/Tabs/Tabs.d.ts +0 -0
  319. /package/{components → dist/components}/Tabs/Tabs.js +0 -0
  320. /package/{components → dist/components}/Tabs/Tabs.js.map +0 -0
  321. /package/{components → dist/components}/Tabs/_tabUtils.d.ts +0 -0
  322. /package/{components → dist/components}/Tabs/index.d.ts +0 -0
  323. /package/{components → dist/components}/Tabs.d.ts +0 -0
  324. /package/{components → dist/components}/Timeline/Timeline.cjs +0 -0
  325. /package/{components → dist/components}/Timeline/Timeline.cjs.map +0 -0
  326. /package/{components → dist/components}/Timeline/Timeline.d.ts +0 -0
  327. /package/{components → dist/components}/Timeline/Timeline.definition.d.ts +0 -0
  328. /package/{components → dist/components}/Timeline/Timeline.js +0 -0
  329. /package/{components → dist/components}/Timeline/Timeline.js.map +0 -0
  330. /package/{components → dist/components}/Timeline/TimelineItem.d.ts +0 -0
  331. /package/{components → dist/components}/Timeline/index.d.ts +0 -0
  332. /package/{components → dist/components}/Timeline.d.ts +0 -0
  333. /package/{components → dist/components}/Tooltip/Tooltip.cjs +0 -0
  334. /package/{components → dist/components}/Tooltip/Tooltip.cjs.map +0 -0
  335. /package/{components → dist/components}/Tooltip/Tooltip.d.ts +0 -0
  336. /package/{components → dist/components}/Tooltip/Tooltip.js +0 -0
  337. /package/{components → dist/components}/Tooltip/Tooltip.js.map +0 -0
  338. /package/{components → dist/components}/Tooltip/index.d.ts +0 -0
  339. /package/{components → dist/components}/Tooltip.d.ts +0 -0
  340. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs +0 -0
  341. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs.map +0 -0
  342. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.d.ts +0 -0
  343. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js +0 -0
  344. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js.map +0 -0
  345. /package/{hooks → dist/hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
  346. /package/{hooks → dist/hooks}/ClipBoard/index.d.ts +0 -0
  347. /package/{hooks → dist/hooks}/ClipBoard.d.ts +0 -0
  348. /package/{index.cjs → dist/index.cjs} +0 -0
  349. /package/{index.cjs.map → dist/index.cjs.map} +0 -0
  350. /package/{index.css → dist/index.css} +0 -0
  351. /package/{index.d.ts → dist/index.d.ts} +0 -0
  352. /package/{index.js → dist/index.js} +0 -0
  353. /package/{index.js.map → dist/index.js.map} +0 -0
@@ -0,0 +1,387 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import React, { useState } from "react";
3
+ import { Box, Typography, Avatar } from "@mui/material";
4
+
5
+ import Autocomplete, { SelectOption } from "./Autocomplete";
6
+ import {
7
+ CustomChipRenderAutocompleteDefinition,
8
+ CustomRenderOptionAutocompleteDefinition,
9
+ EmptyOptionsAutocompleteDefinition,
10
+ LoadingAutocompleteDefinition,
11
+ MultipleAutocompleteDefinition,
12
+ MultipleWithLimitAutocompleteDefinition,
13
+ SimpleAutocompleteDefinition,
14
+ WithPlaceholderAutocompleteDefinition,
15
+ } from "./Autocomplete.definitions";
16
+
17
+ // =============================================================================
18
+ // Datos de ejemplo
19
+ // =============================================================================
20
+ const basicOptions: SelectOption[] = [
21
+ { value: "10", label: "10" },
22
+ { value: "25", label: "25" },
23
+ { value: "50", label: "50" },
24
+ { value: "100", label: "100" },
25
+ ];
26
+
27
+ const userOptions: SelectOption[] = [
28
+ {
29
+ value: "admin",
30
+ label: "Administrador",
31
+ img: "https://placehold.co/40x40?text=A",
32
+ },
33
+ { value: "user", label: "Usuario", img: "https://placehold.co/40x40?text=U" },
34
+ {
35
+ value: "moderator",
36
+ label: "Moderador",
37
+ img: "https://placehold.co/40x40?text=M",
38
+ },
39
+ ];
40
+
41
+ const manyOptions = Array.from({ length: 50 }, (_, i) => ({
42
+ value: `option-${i}`,
43
+ label: `Opción ${i + 1}`,
44
+ }));
45
+
46
+ // =============================================================================
47
+ // META
48
+ // =============================================================================
49
+ const meta: Meta<typeof Autocomplete> = {
50
+ title: "Components/Autocomplete",
51
+ component: Autocomplete,
52
+ tags: ["autodocs"],
53
+ parameters: {
54
+ layout: "padded",
55
+ docs: {
56
+ description: {
57
+ component:
58
+ "Autocomplete personalizado basado en MUI con soporte para selección múltiple, chips, render custom y async.",
59
+ },
60
+ },
61
+ },
62
+ argTypes: {
63
+ label: {
64
+ control: "text",
65
+ description: "Etiqueta para el campo de selección.",
66
+ },
67
+ options: {
68
+ control: "object",
69
+ description:
70
+ "Array de objetos `SelectOption` para las opciones del menú.",
71
+ },
72
+ value: {
73
+ control: "object",
74
+ description: "Valor(es) seleccionado(s) del select.",
75
+ },
76
+ onChange: {
77
+ action: "changed",
78
+ description:
79
+ "Función de callback que se llama cuando el valor del select cambia.",
80
+ },
81
+ multiple: {
82
+ control: "boolean",
83
+ description:
84
+ "Si es verdadero, permite la selección de múltiples opciones.",
85
+ },
86
+ placeholder: {
87
+ control: "text",
88
+ description: "Texto que se muestra cuando no hay nada seleccionado.",
89
+ },
90
+ maxChipsToShow: {
91
+ control: "number",
92
+ description:
93
+ "Número máximo de chips a mostrar en selección múltiple antes de agrupar.",
94
+ if: { arg: "multiple", eq: true },
95
+ },
96
+ renderChipLabel: {
97
+ control: false,
98
+ description:
99
+ "Función para personalizar el contenido del label de cada chip seleccionado (para múltiple) o del valor mostrado (para individual).",
100
+ },
101
+ },
102
+ };
103
+
104
+ export default meta;
105
+ type Story = StoryObj<typeof Autocomplete>;
106
+
107
+ // =============================================================================
108
+ // STORIES
109
+ // =============================================================================
110
+
111
+ export const Simple: Story = {
112
+ render: () => {
113
+ const [value, setValue] = useState<string>("25");
114
+
115
+ return (
116
+ <Box sx={{ width: 250 }}>
117
+ <Autocomplete
118
+ label="Registros por página"
119
+ options={basicOptions}
120
+ value={value}
121
+ onChange={(val) => {
122
+ setValue(val as string);
123
+ }}
124
+ />
125
+ <Typography sx={{ mt: 2 }}>Valor: {value}</Typography>
126
+ </Box>
127
+ );
128
+ },
129
+ parameters: {
130
+ docs: {
131
+ description: {
132
+ story: "Autocomplete simple con opciones básicas y valor por defecto.",
133
+ },
134
+ source: { code: SimpleAutocompleteDefinition.trim() },
135
+ },
136
+ },
137
+ };
138
+
139
+ export const WithPlaceholder: Story = {
140
+ render: () => {
141
+ const [value, setValue] = useState<string>("");
142
+
143
+ return (
144
+ <Box sx={{ width: 300 }}>
145
+ <Autocomplete
146
+ label="Seleccione una opción"
147
+ options={basicOptions}
148
+ value={value}
149
+ onChange={(val) => {
150
+ setValue(val as string);
151
+ }}
152
+ placeholder="Ninguna opción seleccionada"
153
+ />
154
+ <Typography sx={{ mt: 2 }}>{value || "Ninguno"}</Typography>
155
+ </Box>
156
+ );
157
+ },
158
+ parameters: {
159
+ docs: {
160
+ description: {
161
+ story:
162
+ "Autocomplete sin valor inicial que muestra un placeholder cuando no hay selección.",
163
+ },
164
+ source: { code: WithPlaceholderAutocompleteDefinition.trim() },
165
+ },
166
+ },
167
+ };
168
+
169
+ export const Multiple: Story = {
170
+ render: () => {
171
+ const [value, setValue] = useState<string[]>([]);
172
+
173
+ return (
174
+ <Box sx={{ width: 400 }}>
175
+ <Autocomplete
176
+ label="Seleccionar valores"
177
+ multiple
178
+ options={basicOptions}
179
+ value={value}
180
+ onChange={(val) => {
181
+ setValue(val as string[]);
182
+ }}
183
+ />
184
+ <Typography sx={{ mt: 2 }}>
185
+ Valor seleccionado: {JSON.stringify(value)}
186
+ </Typography>
187
+ </Box>
188
+ );
189
+ },
190
+ parameters: {
191
+ docs: {
192
+ description: {
193
+ story:
194
+ "Autocomplete en modo múltiple que permite seleccionar varias opciones y las muestra como chips.",
195
+ },
196
+ source: { code: MultipleAutocompleteDefinition.trim() },
197
+ },
198
+ },
199
+ };
200
+
201
+ export const MultipleWithLimit: Story = {
202
+ render: () => {
203
+ const [value, setValue] = useState<string[]>(
204
+ manyOptions.slice(0, 5).map((opt) => opt.value),
205
+ );
206
+
207
+ return (
208
+ <Box sx={{ width: 400 }}>
209
+ <Autocomplete
210
+ label="Muchas selecciones"
211
+ multiple
212
+ maxChipsToShow={2}
213
+ options={manyOptions}
214
+ value={value}
215
+ onChange={(val) => {
216
+ setValue(val as string[]);
217
+ }}
218
+ />
219
+ </Box>
220
+ );
221
+ },
222
+ parameters: {
223
+ docs: {
224
+ description: {
225
+ story:
226
+ "Autocomplete múltiple con límite de chips visibles, agrupando el resto en un contador.",
227
+ },
228
+ source: { code: MultipleWithLimitAutocompleteDefinition.trim() },
229
+ },
230
+ },
231
+ };
232
+
233
+ export const CustomRenderOption: Story = {
234
+ render: () => {
235
+ const [value, setValue] = useState<string[]>([]);
236
+
237
+ return (
238
+ <Box sx={{ width: 300 }}>
239
+ <Autocomplete
240
+ label="Usuarios"
241
+ multiple
242
+ options={userOptions}
243
+ value={value}
244
+ onChange={(val) => {
245
+ setValue(val as string[]);
246
+ }}
247
+ renderOptionItem={(item) => (
248
+ <Box sx={{ display: "flex", gap: 1, alignItems: "center" }}>
249
+ <Avatar src={item.img} sx={{ width: 24, height: 24 }} />
250
+ {item.label}
251
+ </Box>
252
+ )}
253
+ />
254
+ </Box>
255
+ );
256
+ },
257
+ parameters: {
258
+ docs: {
259
+ description: {
260
+ story:
261
+ "Autocomplete con renderizado personalizado de opciones, incluyendo avatar e información adicional.",
262
+ },
263
+ source: { code: CustomRenderOptionAutocompleteDefinition.trim() },
264
+ },
265
+ },
266
+ };
267
+
268
+ export const CustomChipRender: Story = {
269
+ render: () => {
270
+ const [value, setValue] = useState<string[]>([]);
271
+
272
+ return (
273
+ <Box sx={{ width: 400 }}>
274
+ <Autocomplete
275
+ label="Usuarios seleccionados"
276
+ multiple
277
+ options={userOptions}
278
+ value={value}
279
+ onChange={(val) => {
280
+ setValue(val as string[]);
281
+ }}
282
+ maxChipsToShow={2}
283
+ renderChipLabel={(item) => (
284
+ <Typography variant="caption" fontWeight="bold">
285
+ {item.label.charAt(0)}
286
+ </Typography>
287
+ )}
288
+ />
289
+ </Box>
290
+ );
291
+ },
292
+ parameters: {
293
+ docs: {
294
+ description: {
295
+ story:
296
+ "Autocomplete múltiple con renderizado personalizado de chips, mostrando solo la inicial del label.",
297
+ },
298
+ source: { code: CustomChipRenderAutocompleteDefinition.trim() },
299
+ },
300
+ },
301
+ };
302
+
303
+ export const Loading: Story = {
304
+ render: () => {
305
+ const [value, setValue] = useState<string>("");
306
+
307
+ return (
308
+ <Box sx={{ width: 300 }}>
309
+ <Autocomplete
310
+ label="Cargando..."
311
+ options={[]}
312
+ loading
313
+ value={value}
314
+ onChange={(val) => {
315
+ setValue(val as string);
316
+ }}
317
+ />
318
+ </Box>
319
+ );
320
+ },
321
+ parameters: {
322
+ docs: {
323
+ description: {
324
+ story:
325
+ "Autocomplete en estado de carga, útil para integraciones con APIs o búsquedas asíncronas.",
326
+ },
327
+ source: { code: LoadingAutocompleteDefinition.trim() },
328
+ },
329
+ },
330
+ };
331
+
332
+ export const EmptyOptions: Story = {
333
+ render: () => {
334
+ const [value, setValue] = useState<string>("");
335
+
336
+ return (
337
+ <Box sx={{ width: 300 }}>
338
+ <Autocomplete
339
+ label="Sin opciones"
340
+ options={[]}
341
+ value={value}
342
+ onChange={(val) => {
343
+ setValue(val as string);
344
+ }}
345
+ placeholder="No hay opciones"
346
+ />
347
+ </Box>
348
+ );
349
+ },
350
+ parameters: {
351
+ docs: {
352
+ description: {
353
+ story:
354
+ "Autocomplete sin opciones disponibles, mostrando mensaje vacío al usuario.",
355
+ },
356
+ source: { code: EmptyOptionsAutocompleteDefinition.trim() },
357
+ },
358
+ },
359
+ };
360
+
361
+ export const ManyOptions: Story = {
362
+ render: () => {
363
+ const [value, setValue] = useState<string>("");
364
+
365
+ return (
366
+ <Box sx={{ width: 300 }}>
367
+ <Autocomplete
368
+ label="Muchas opciones"
369
+ options={manyOptions}
370
+ value={value}
371
+ onChange={(val) => {
372
+ setValue(val as string);
373
+ }}
374
+ />
375
+ </Box>
376
+ );
377
+ },
378
+ parameters: {
379
+ docs: {
380
+ description: {
381
+ story:
382
+ "Autocomplete sin opciones disponibles, mostrando mensaje vacío al usuario.",
383
+ },
384
+ source: { code: EmptyOptionsAutocompleteDefinition.trim() },
385
+ },
386
+ },
387
+ };
@@ -0,0 +1,139 @@
1
+ import React from "react";
2
+ import {
3
+ Autocomplete,
4
+ TextField,
5
+ Chip,
6
+ Avatar,
7
+ Box,
8
+ Typography,
9
+ CircularProgress,
10
+ } from "@mui/material";
11
+ import ClearIcon from "@mui/icons-material/Clear";
12
+
13
+ export interface SelectOption {
14
+ value: string | number;
15
+ label: string;
16
+ img?: string;
17
+ disabled?: boolean;
18
+ group?: string;
19
+ [key: string]: any;
20
+ }
21
+
22
+ type RenderOptionItem = (item: SelectOption) => React.ReactNode;
23
+ type RenderChipLabel = (item: SelectOption) => React.ReactNode;
24
+
25
+ interface AutocompleteProps<
26
+ TValue extends SelectOption["value"] = SelectOption["value"],
27
+ > {
28
+ label?: string;
29
+ value: TValue | TValue[];
30
+ onChange: (val: TValue | TValue[]) => void;
31
+ options?: SelectOption[];
32
+ placeholder?: string;
33
+ multiple?: boolean;
34
+ disabled?: boolean;
35
+ loading?: boolean;
36
+ error?: boolean;
37
+ helperText?: string;
38
+ maxChipsToShow?: number;
39
+ renderOptionItem?: RenderOptionItem;
40
+ renderChipLabel?: RenderChipLabel;
41
+ }
42
+
43
+ export function AutocompleteSelect<
44
+ TValue extends SelectOption["value"] = SelectOption["value"],
45
+ >(props: AutocompleteProps<TValue>) {
46
+ const {
47
+ label,
48
+ options = [],
49
+ value,
50
+ onChange,
51
+ placeholder,
52
+ multiple = false,
53
+ disabled = false,
54
+ loading = false,
55
+ error = false,
56
+ helperText,
57
+ renderOptionItem,
58
+ renderChipLabel,
59
+ maxChipsToShow = 3,
60
+ } = props;
61
+
62
+ const renderTags = (value: SelectOption[], getTagProps: any) => {
63
+ const displayed = value.slice(0, maxChipsToShow);
64
+ const hidden = value.length - maxChipsToShow;
65
+
66
+ return (
67
+ <>
68
+ {displayed.map((option, index) => (
69
+ <Chip
70
+ {...getTagProps({ index })}
71
+ key={option.value}
72
+ label={renderChipLabel ? renderChipLabel(option) : option.label}
73
+ avatar={option.img ? <Avatar src={option.img} /> : undefined}
74
+ deleteIcon={<ClearIcon />}
75
+ />
76
+ ))}
77
+
78
+ {hidden > 0 && <Chip label={`+${hidden} más`} />}
79
+ </>
80
+ );
81
+ };
82
+
83
+ const renderOption = (propsLi: any, option: SelectOption) => (
84
+ <li {...propsLi} key={option.value}>
85
+ {renderOptionItem ? renderOptionItem(option) : option.label}
86
+ </li>
87
+ );
88
+
89
+ const renderAutocomplete = (value: any, onChange: any) => (
90
+ <Autocomplete
91
+ multiple={multiple}
92
+ options={options}
93
+ value={
94
+ multiple
95
+ ? (options.filter((o) =>
96
+ (value as string[] | undefined)?.includes(o.value as string),
97
+ ) ?? [])
98
+ : (options.find((o) => o.value === value) ?? null)
99
+ }
100
+ disabled={disabled}
101
+ loading={loading}
102
+ getOptionLabel={(opt) => opt?.label ?? ""}
103
+ isOptionEqualToValue={(a, b) => a.value === b.value}
104
+ onChange={onChange}
105
+ renderOption={renderOption}
106
+ renderTags={multiple ? renderTags : undefined}
107
+ noOptionsText="No hay opciones"
108
+ loadingText={
109
+ <Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
110
+ <CircularProgress size={20} />
111
+ <Typography>Cargando...</Typography>
112
+ </Box>
113
+ }
114
+ renderInput={(params) => (
115
+ <TextField
116
+ {...params}
117
+ label={label}
118
+ placeholder={placeholder}
119
+ error={error}
120
+ helperText={helperText}
121
+ />
122
+ )}
123
+ />
124
+ );
125
+
126
+ const handleChangeInternal = (event: any, newValue: any) => {
127
+ if (multiple) {
128
+ const values = (newValue ?? []).map((opt: any) => opt.value);
129
+ (onChange as (val: TValue[]) => void)?.(values);
130
+ } else {
131
+ const value = newValue?.value ?? "";
132
+ (onChange as (val: TValue) => void)?.(value);
133
+ }
134
+ };
135
+
136
+ return renderAutocomplete(value, handleChangeInternal);
137
+ }
138
+
139
+ export default AutocompleteSelect;
@@ -0,0 +1 @@
1
+ export { default as Autocomplete} from './Autocomplete'
@@ -0,0 +1,54 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Avatar, AvatarProps } from './Avatar';
3
+ import { within, expect } from 'storybook/test';
4
+
5
+ const meta: Meta<typeof Avatar> = {
6
+ title: 'Components/Avatar',
7
+ component: Avatar,
8
+ parameters: {
9
+ layout: 'centered',
10
+ },
11
+ tags: ['autodocs'],
12
+ };
13
+
14
+ export default meta;
15
+ type Story = StoryObj<typeof Avatar>;
16
+
17
+ export const Default: Story = {
18
+ args: {
19
+ items: [
20
+ { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=1' },
21
+ { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=2' },
22
+ ],
23
+ },
24
+ };
25
+
26
+ export const WithTypeAndText: Story = {
27
+ args: {
28
+ type: 'Owner',
29
+ items: [{ text: 'Maria', imageUrl: 'https://i.pravatar.cc/150?img=5' }],
30
+ showText: true,
31
+ },
32
+ play: async ({ canvasElement }) => {
33
+ const canvas = within(canvasElement);
34
+ const text = await canvas.findByTestId('text');
35
+ const type = await canvas.findByTestId('type');
36
+ expect(text).toBeInTheDocument();
37
+ expect(type).toHaveTextContent('Owner:');
38
+ },
39
+ };
40
+
41
+ export const WithBadgesAndTooltip: Story = {
42
+ args: {
43
+ showTooltip: true,
44
+ items: [
45
+ { text: 'John D.', badge: 'JD', backgroundColor: '#EF5350', color: '#fff' },
46
+ { text: 'Alice B.', badge: 'AB', backgroundColor: '#AB47BC', color: '#fff' },
47
+ ],
48
+ },
49
+ play: async ({ canvasElement }) => {
50
+ const canvas = within(canvasElement);
51
+ const badges = await canvas.findAllByTestId('badge');
52
+ expect(badges.length).toBe(2);
53
+ },
54
+ };