@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,569 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import React, { ReactElement, useMemo, useState, Children, isValidElement } from 'react';
3
+ import {
4
+ FormControl,
5
+ InputLabel,
6
+ MenuItem,
7
+
8
+ Chip,
9
+ Avatar,
10
+ Box,
11
+ Typography,
12
+ OutlinedInput,
13
+ TextField,
14
+ ListSubheader,
15
+ } from '@mui/material';
16
+ import ClearIcon from '@mui/icons-material/Clear'; // Icono de cerrar
17
+
18
+ // Importar las definiciones de las historias
19
+ import {
20
+ SimpleSelectDefinition,
21
+ MultiSelectDefinition,
22
+ WithPlaceholderDefinition,
23
+ WithFilterDefinition,
24
+ WithGroupDefinition,
25
+ CustomRenderWithAvatarDefinition,
26
+ MultiSelectCustomChipRenderDefinition,
27
+ MultiSelectCustomChipRenderFullLabelDefinition,
28
+ ConstrainedHeightDefinition,
29
+ ConstrainedWidthDefinition,
30
+ AllFeaturesCombinedDefinition,
31
+ EmptyOptionsDefinition,
32
+ SelectWithManyOptionsDefinition,
33
+ AsyncSelectDefinition,
34
+ } from "./Select.definitions";
35
+ import Select, { SelectOption, Option } from './Select';
36
+
37
+ // =============================================================================
38
+ // Datos de ejemplo para las historias
39
+ // =============================================================================
40
+ const basicOptions: SelectOption[] = [
41
+ { value: '10', label: '10' },
42
+ { value: '25', label: '25' },
43
+ { value: '50', label: '50' },
44
+ { value: '100', label: '100' },
45
+ ];
46
+
47
+ const groupedOptions: SelectOption[] = [
48
+ { value: 'gt', label: 'Guatemala', group: 'Centroamérica' },
49
+ { value: 'sv', label: 'El Salvador', group: 'Centroamérica' },
50
+ { value: 'mx', label: 'México', group: 'Norteamérica' },
51
+ { value: 'us', label: 'EE.UU.', group: 'Norteamérica' },
52
+ { value: 'ca', label: 'Canadá', group: 'Norteamérica' },
53
+ { value: 'br', label: 'Brasil', group: 'Sudamérica' },
54
+ { value: 'ar', label: 'Argentina', group: 'Sudamérica' },
55
+ ];
56
+
57
+ const userOptions: SelectOption[] = [
58
+ { value: 'admin', label: 'Administrador', img: 'https://placehold.co/40x40?text=A' },
59
+ { value: 'user', label: 'Usuario', img: 'https://placehold.co/40x40?text=U' },
60
+ { value: 'moderator', label: 'Moderador', img: 'https://placehold.co/40x40?text=M' },
61
+ { value: 'guest', label: 'Invitado', img: 'https://placehold.co/40x40?text=G', disabled: true },
62
+ ];
63
+
64
+ const transactionStatuses: SelectOption[] = [
65
+ { value: 'PENDING', label: 'Pendiente' },
66
+ { value: 'REJECTED', label: 'Rechazado' },
67
+ { value: 'CANCELED', label: 'Cancelado' },
68
+ { value: 'REFUNDED', label: 'Reembolsado' },
69
+ { value: 'COMPLETED', label: 'Completado' },
70
+ { value: 'EXPIRED', label: 'Expirado' },
71
+ ];
72
+
73
+ // =============================================================================
74
+ // Definición de las meta-propiedades para Storybook
75
+ // =============================================================================
76
+ const meta: Meta<typeof Select> = {
77
+ title: 'Components/Select',
78
+ component: Select,
79
+ tags: ['autodocs'],
80
+ parameters: {
81
+ layout: 'padded',
82
+ docs: {
83
+ description: {
84
+ component: 'Componente select personalizado con soporte para múltiples variantes como agrupación, chips, filtros, y renderizado personalizado.',
85
+ },
86
+ },
87
+ },
88
+ argTypes: {
89
+ label: { control: 'text', description: 'Etiqueta para el campo de selección.' },
90
+ options: { control: 'object', description: 'Array de objetos `SelectOption` para las opciones del menú.' },
91
+ value: { control: 'object', description: 'Valor(es) seleccionado(s) del select.' },
92
+ defaultValue: { control: 'object', description: 'Valor(es) por defecto del select.' },
93
+ onChange: { action: 'changed', description: 'Función de callback que se llama cuando el valor del select cambia.' },
94
+ size: { control: 'radio', options: ['small', 'medium'], description: 'Define el tamaño del componente Select.' },
95
+ multiple: { control: 'boolean', description: 'Si es verdadero, permite la selección de múltiples opciones.' },
96
+ filterable: { control: 'boolean', description: 'Si es verdadero, añade un campo de búsqueda para filtrar las opciones.' },
97
+ placeholder: { control: 'text', description: 'Texto que se muestra cuando no hay nada seleccionado.' },
98
+ children: { control: false, description: 'Componente `Option` para un renderizado personalizado de las opciones del menú.' },
99
+ maxHeight: { control: 'number', description: 'Altura máxima del menú desplegable.' },
100
+ maxWidth: { control: 'text', description: 'Ancho máximo del menú desplegable.' },
101
+ maxChipsToShow: { control: 'number', description: 'Número máximo de chips a mostrar en selección múltiple antes de agrupar.', if: { arg: 'multiple', eq: true } },
102
+ renderChipLabel: { control: false, description: 'Función para personalizar el contenido del label de cada chip seleccionado (para múltiple) o del valor mostrado (para individual).', },
103
+ }
104
+ };
105
+
106
+ export default meta;
107
+ type Story = StoryObj<typeof Select>;
108
+
109
+ // =============================================================================
110
+ // Historias existentes (proporcionadas por el usuario)
111
+ // =============================================================================
112
+ export const SimpleSelect: Story = {
113
+ render: () => {
114
+ const [value, setValue] = useState<string>('25');
115
+ return (
116
+ <Box sx={{ width: 200 }}>
117
+ <Select
118
+ label="Registros por página"
119
+ options={basicOptions}
120
+ value={value}
121
+ onChange={(val) => setValue(val as string)}
122
+ maxWidth={150}
123
+ />
124
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
125
+ </Box>
126
+ );
127
+ },
128
+ parameters: {
129
+ docs: {
130
+ description: {
131
+ story: "Select simple con opciones básicas y valor por defecto."
132
+ },
133
+ source: { code: SimpleSelectDefinition.trim() } // Referencia a la definición
134
+ }
135
+ }
136
+ };
137
+
138
+ export const MultiSelect: Story = {
139
+ render: () => {
140
+ const [value, setValue] = useState<string[]>([]);
141
+ return (
142
+ <Box sx={{ width: 400 }}>
143
+ <Select
144
+ label="Seleccionar estados"
145
+ multiple
146
+ maxChipsToShow={2}
147
+ options={[
148
+ { value: 'pending', label: 'Pendiente' },
149
+ { value: 'approved', label: 'Aprobado' },
150
+ { value: 'rejected', label: 'Rechazado' },
151
+ { value: 'canceled', label: 'Cancelado' },
152
+ { value: 'completed', label: 'Completado' },
153
+ { value: 'invoiced', label: 'Facturado' },
154
+ ]}
155
+ value={value}
156
+ onChange={(val) => setValue(val as string[])}
157
+ />
158
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>
159
+ </Box>
160
+ );
161
+ },
162
+ parameters: {
163
+ docs: {
164
+ description: {
165
+ story: "Select múltiple que permite seleccionar varias opciones, limitando a 2 chips."
166
+ },
167
+ source: { code: MultiSelectDefinition.trim() } // Referencia a la definición
168
+ }
169
+ }
170
+ };
171
+
172
+ export const WithPlaceholder: Story = {
173
+ render: () => {
174
+ const [value, setValue] = useState('');
175
+ return (
176
+ <Box sx={{ width: 300 }}>
177
+ <Select
178
+ label="Seleccione una opción"
179
+ options={basicOptions}
180
+ value={value}
181
+ onChange={(val) => setValue(val as string)}
182
+ placeholder="Ninguna opción seleccionada"
183
+ />
184
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value || 'Ninguno'}</Typography>
185
+ </Box>
186
+ );
187
+ },
188
+ parameters: {
189
+ docs: {
190
+ description: {
191
+ story: "Select con placeholder sin valor inicial seleccionado."
192
+ },
193
+ source: { code: WithPlaceholderDefinition.trim() } // Referencia a la definición
194
+ }
195
+ }
196
+ };
197
+
198
+ export const WithFilter: Story = {
199
+ render: () => {
200
+ const [value, setValue] = useState('');
201
+ return (
202
+ <Box sx={{ width: 300 }}>
203
+ <Select
204
+ label="Buscar país"
205
+ filterable
206
+ options={groupedOptions}
207
+ value={value}
208
+ onChange={(val) => setValue(val as string)}
209
+ />
210
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
211
+ </Box>
212
+ );
213
+ },
214
+ parameters: {
215
+ docs: {
216
+ description: {
217
+ story: "Select con capacidad de filtrado de opciones."
218
+ },
219
+ source: { code: WithFilterDefinition.trim() } // Referencia a la definición
220
+ }
221
+ }
222
+ };
223
+
224
+ export const WithGroup: Story = {
225
+ render: () => {
226
+ const [value, setValue] = useState('');
227
+ return (
228
+ <Box sx={{ width: 300 }}>
229
+ <Select
230
+ label="País por región"
231
+ options={groupedOptions}
232
+ value={value}
233
+ onChange={(val) => setValue(val as string)}
234
+ />
235
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
236
+ </Box>
237
+ );
238
+ },
239
+ parameters: {
240
+ docs: {
241
+ description: {
242
+ story: "Select con opciones agrupadas por categorías."
243
+ },
244
+ source: { code: WithGroupDefinition.trim() } // Referencia a la definición
245
+ }
246
+ }
247
+ };
248
+
249
+ export const CustomRenderWithAvatar: Story = {
250
+ render: () => {
251
+ const [value, setValue] = useState<string[]>([]);
252
+ return (
253
+ <Box sx={{ width: 300 }}>
254
+ <Select
255
+ options={userOptions}
256
+ multiple
257
+ value={value}
258
+ onChange={(val) => setValue(val as string[])}
259
+ label="Usuarios"
260
+ placeholder="Selecciona usuarios"
261
+ >
262
+ <Option>
263
+ {({ img, label }) => (
264
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
265
+ <Avatar src={img} sx={{ width: 24, height: 24 }} />
266
+ <Typography variant="body2">{label}</Typography>
267
+ </Box>
268
+ )}
269
+ </Option>
270
+ </Select>
271
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>
272
+ </Box>
273
+ );
274
+ },
275
+ parameters: {
276
+ docs: {
277
+ description: {
278
+ story: "Select con renderizado personalizado de opciones usando avatares."
279
+ },
280
+ source: { code: CustomRenderWithAvatarDefinition.trim() } // Referencia a la definición
281
+ }
282
+ }
283
+ };
284
+
285
+
286
+ // =============================================================================
287
+ // Nuevas historias (para cubrir más posibilidades)
288
+ // =============================================================================
289
+
290
+ export const MultiSelectCustomChipRender: Story = {
291
+ render: () => {
292
+ const [value, setValue] = useState<string[]>(['pending', 'approved', 'rejected', 'canceled']);
293
+ return (
294
+ <Box sx={{ width: 400 }}>
295
+ <Select
296
+ label="Estados de Transacción"
297
+ multiple
298
+ maxChipsToShow={3} // Muestra 3 chips, luego (+X más)
299
+ options={transactionStatuses}
300
+ value={value}
301
+ onChange={(val) => setValue(val as string[])}
302
+ placeholder="Selecciona estados"
303
+ renderChipLabel={(item) => ( // Renderizado personalizado para el chip
304
+ <Typography variant="caption" sx={{ fontWeight: 'bold' }}>
305
+ {item.label.charAt(0).toUpperCase()} {/* Solo la inicial */}
306
+ </Typography>
307
+ )}
308
+ />
309
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>
310
+ </Box>
311
+ );
312
+ },
313
+ parameters: {
314
+ docs: {
315
+ description: {
316
+ story: "Select múltiple con un número limitado de chips visibles y un renderizado personalizado para el label de cada chip (solo la inicial)."
317
+ },
318
+ source: { code: MultiSelectCustomChipRenderDefinition.trim() } // Referencia a la definición
319
+ }
320
+ }
321
+ };
322
+
323
+ export const MultiSelectCustomChipRenderFullLabel: Story = {
324
+ render: () => {
325
+ const [value, setValue] = useState<string[]>(['gt', 'mx', 'us', 'ca', 'br']);
326
+ return (
327
+ <Box sx={{ width: 400 }}>
328
+ <Select
329
+ label="Países seleccionados"
330
+ multiple
331
+ maxChipsToShow={3} // Muestra 3 chips, luego (+X más)
332
+ options={groupedOptions}
333
+ value={value}
334
+ onChange={(val) => setValue(val as string[])}
335
+ placeholder="Selecciona países"
336
+ renderChipLabel={(item) => ( // Renderizado personalizado para el chip
337
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
338
+ {item.img && <Avatar src={item.img} sx={{ width: 18, height: 18 }} />} {/* Opcional: avatar en el chip */}
339
+ <Typography variant="caption" sx={{ fontWeight: 'medium' }}>
340
+ {item.label}
341
+ </Typography>
342
+ </Box>
343
+ )}
344
+ />
345
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>
346
+ </Box>
347
+ );
348
+ },
349
+ parameters: {
350
+ docs: {
351
+ story: "Select múltiple con renderizado personalizado completo de los chips, incluyendo avatar y texto completo, y limitando el número de chips visibles."
352
+ },
353
+ source: { code: MultiSelectCustomChipRenderFullLabelDefinition.trim() } // Referencia a la definición
354
+ }
355
+ };
356
+
357
+
358
+ export const ConstrainedHeight: Story = {
359
+ render: () => {
360
+ const [value, setValue] = useState('');
361
+ return (
362
+ <Box sx={{ width: 300 }}>
363
+ <Select
364
+ label="Opciones (Altura Limitada)"
365
+ options={groupedOptions.concat(userOptions).concat(transactionStatuses)} // Muchas opciones
366
+ value={value}
367
+ onChange={(val) => setValue(val as string)}
368
+ maxHeight={150} // Altura máxima del menú
369
+ />
370
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
371
+ </Box>
372
+ );
373
+ },
374
+ parameters: {
375
+ docs: {
376
+ story: "Select con altura máxima limitada para el menú desplegable, mostrando scroll si es necesario."
377
+ },
378
+ source: { code: ConstrainedHeightDefinition.trim() } // Referencia a la definición
379
+ }
380
+ };
381
+
382
+ export const ConstrainedWidth: Story = {
383
+ render: () => {
384
+ const [value, setValue] = useState('');
385
+ return (
386
+ <Box sx={{ width: 200 }}> {/* El Select en sí es más angosto */}
387
+ <Select
388
+ label="Opciones (Ancho Limitado)"
389
+ options={basicOptions.concat(groupedOptions)}
390
+ value={value}
391
+ onChange={(val) => setValue(val as string)}
392
+ maxWidth={100} // Ancho máximo del menú
393
+ />
394
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
395
+ </Box>
396
+ );
397
+ },
398
+ parameters: {
399
+ docs: {
400
+ story: "Select con ancho máximo limitado para el menú desplegable."
401
+ },
402
+ source: { code: ConstrainedWidthDefinition.trim() } // Referencia a la definición
403
+ }
404
+ };
405
+
406
+ export const AllFeaturesCombined: Story = {
407
+ render: () => {
408
+ const [value, setValue] = useState<string[]>(['gt', 'admin', 'PENDING', 'ca', 'user', 'COMPLETED']);
409
+ return (
410
+ <Box sx={{ width: 500 }}>
411
+ <Select
412
+ label="Selección Completa"
413
+ multiple
414
+ filterable
415
+ maxChipsToShow={3}
416
+ maxHeight={250}
417
+ maxWidth="400px"
418
+ options={groupedOptions.concat(userOptions).concat(transactionStatuses)}
419
+ value={value}
420
+ onChange={(val) => setValue(val as string[])}
421
+ placeholder="Busca y selecciona todo tipo de elementos"
422
+ renderChipLabel={(item) => (
423
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
424
+ {item.img && <Avatar src={item.img} sx={{ width: 16, height: 16 }} />}
425
+ <Typography variant="caption" sx={{ fontWeight: 'bold' }}>
426
+ {item.label.length > 10 ? item.label.substring(0, 7) + '...' : item.label}
427
+ </Typography>
428
+ </Box>
429
+ )}
430
+ >
431
+ <Option>
432
+ {(item) => (
433
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, my: 0.5 }}>
434
+ {item.img && <Avatar src={item.img} sx={{ width: 28, height: 28 }} />}
435
+ <Box>
436
+ <Typography variant="body2" fontWeight="medium">{item.label}</Typography>
437
+ {item.group && (
438
+ <Typography variant="caption" color="text.secondary">
439
+ Grupo: {item.group}
440
+ </Typography>
441
+ )}
442
+ {item.disabled && <Chip label="No disponible" size="small" color="warning" sx={{ ml: 1 }} />}
443
+ </Box>
444
+ </Box>
445
+ )}
446
+ </Option>
447
+ </Select>
448
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>
449
+ </Box>
450
+ );
451
+ },
452
+ parameters: {
453
+ docs: {
454
+ description: {
455
+ story: "Un `Select` que demuestra una combinación de todas las características: selección múltiple, filtrado, opciones agrupadas, renderizado personalizado de opciones y chips, y límites de altura/ancho."
456
+ },
457
+ source: { code: AllFeaturesCombinedDefinition.trim() } // Referencia a la definición
458
+ }
459
+ }
460
+ };
461
+
462
+ export const EmptyOptions: Story = {
463
+ args: {
464
+ label: 'Seleccionar (Vacío)',
465
+ options: [],
466
+ value: undefined,
467
+ placeholder: 'No hay opciones disponibles',
468
+ },
469
+ render: (args) => {
470
+ const [value, setValue] = useState(args.value);
471
+ return (
472
+ <Box sx={{ width: 300 }}>
473
+ <Select {...args} value={value ?? ''} onChange={setValue} />
474
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value || 'Ninguno'}</Typography>
475
+ </Box>
476
+ );
477
+ },
478
+ parameters: {
479
+ docs: {
480
+ story: "Select que se muestra cuando no hay opciones disponibles."
481
+ },
482
+ source: { code: EmptyOptionsDefinition.trim() } // Referencia a la definición
483
+ }
484
+ };
485
+
486
+ export const SelectWithManyOptions: Story = {
487
+ render: () => {
488
+ const manyOptions = Array.from({ length: 50 }, (_, i) => ({
489
+ value: `option-${i}`,
490
+ label: `Opción ${i + 1}`,
491
+ group: i < 25 ? 'Grupo A' : 'Grupo B',
492
+ }));
493
+ const [value, setValue] = useState('');
494
+ return (
495
+ <Box sx={{ width: 300 }}>
496
+ <Select
497
+ label="Muchas Opciones"
498
+ options={manyOptions}
499
+ value={value}
500
+ onChange={(val) => setValue(val as string)}
501
+ filterable
502
+ maxHeight={200}
503
+ />
504
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
505
+ </Box>
506
+ );
507
+ },
508
+ parameters: {
509
+ docs: {
510
+ story: "Select con un gran número de opciones para demostrar el scroll y el filtrado eficiente."
511
+ },
512
+ source: { code: SelectWithManyOptionsDefinition.trim() } // Referencia a la definición
513
+ }
514
+ };
515
+
516
+ export const AsyncSelect: Story = {
517
+ render: () => {
518
+ const [value, setValue] = useState('');
519
+
520
+ const mockAsyncOptions = [
521
+ { value: 'apple', label: 'Apple' },
522
+ { value: 'banana', label: 'Banana' },
523
+ { value: 'orange', label: 'Orange' },
524
+ { value: 'grape', label: 'Grape' },
525
+ { value: 'strawberry', label: 'Strawberry' },
526
+ { value: 'blueberry', label: 'Blueberry' },
527
+ { value: 'pineapple', label: 'Pineapple' },
528
+ { value: 'watermelon', label: 'Watermelon' },
529
+ { value: 'kiwi', label: 'Kiwi' },
530
+ { value: 'lemon', label: 'Lemon' },
531
+ ];
532
+
533
+ // Simulate an API call
534
+ const simulatedLoadOptions = (inputValue: string): Promise<SelectOption[]> => {
535
+ return new Promise((resolve) => {
536
+ setTimeout(() => {
537
+ const filtered = mockAsyncOptions.filter(option =>
538
+ option.label.toLowerCase().includes(inputValue.toLowerCase())
539
+ );
540
+ resolve(filtered);
541
+ }, 800); // Simulate network delay
542
+ });
543
+ };
544
+
545
+ return (
546
+ <Box sx={{ width: 300 }}>
547
+ <Select
548
+
549
+ loadOptions={simulatedLoadOptions}
550
+ value={value}
551
+ onChange={(val) => setValue(val as string)}
552
+ placeholder="Escribe para buscar..."
553
+ loadingMessage="Buscando frutas..."
554
+ noOptionsMessage="No se encontraron frutas."
555
+ debounceTimeout={500} // tiempo que tardara el input en buscar despues de haber escrito la ultima letra
556
+ />
557
+ <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>
558
+ </Box>
559
+ );
560
+ },
561
+ parameters: {
562
+ docs: {
563
+ description: {
564
+ story: "Un `Select` que carga opciones de forma asíncrona a medida que el usuario escribe, con un retraso simulado."
565
+ },
566
+ source: { code: AsyncSelectDefinition.trim() }
567
+ }
568
+ }
569
+ };