@soyfri/shared-library 1.5.0-beta.4 → 2.0.0-beta.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 (564) 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/ActionMenu/ActionMenu.cjs +107 -0
  12. package/dist/components/ActionMenu/ActionMenu.cjs.map +1 -0
  13. package/dist/components/ActionMenu/ActionMenu.d.ts +60 -0
  14. package/dist/components/ActionMenu/ActionMenu.js +107 -0
  15. package/dist/components/ActionMenu/ActionMenu.js.map +1 -0
  16. package/dist/components/ActionMenu/index.d.ts +2 -0
  17. package/dist/components/ActionMenu.d.ts +6 -0
  18. package/dist/components/AppBar/AppBar.cjs +346 -0
  19. package/dist/components/AppBar/AppBar.cjs.map +1 -0
  20. package/dist/components/AppBar/AppBar.d.ts +55 -0
  21. package/dist/components/AppBar/AppBar.js +346 -0
  22. package/dist/components/AppBar/AppBar.js.map +1 -0
  23. package/dist/components/AppBar/AppBar.sx.d.ts +12 -0
  24. package/dist/components/AppBar/AppBarBrand.d.ts +31 -0
  25. package/dist/components/AppBar/AppBarContext.d.ts +18 -0
  26. package/dist/components/AppBar/AppBarMenuToggle.d.ts +39 -0
  27. package/dist/components/AppBar/AppBarUserMenu.d.ts +65 -0
  28. package/dist/components/AppBar/index.d.ts +12 -0
  29. package/dist/components/AppBar.d.ts +6 -0
  30. package/dist/components/Autocomplete/Autocomplete.cjs +314 -0
  31. package/dist/components/Autocomplete/Autocomplete.cjs.map +1 -0
  32. package/dist/components/Autocomplete/Autocomplete.d.ts +83 -0
  33. package/{components → dist/components}/Autocomplete/Autocomplete.definitions.d.ts +6 -0
  34. package/dist/components/Autocomplete/Autocomplete.helpers.d.ts +18 -0
  35. package/dist/components/Autocomplete/Autocomplete.js +314 -0
  36. package/dist/components/Autocomplete/Autocomplete.js.map +1 -0
  37. package/dist/components/Autocomplete/Autocomplete.sx.d.ts +7 -0
  38. package/dist/components/Autocomplete/Autocomplete.types.d.ts +1 -0
  39. package/dist/components/Autocomplete/_parts/AutocompleteChips.d.ts +19 -0
  40. package/dist/components/Autocomplete/_parts/AutocompleteLoader.d.ts +9 -0
  41. package/dist/components/Autocomplete/_parts/AutocompleteOption.d.ts +19 -0
  42. package/dist/components/Autocomplete/index.d.ts +2 -0
  43. package/dist/components/Autocomplete.d.ts +6 -0
  44. package/dist/components/Avatar/Avatar.cjs +163 -0
  45. package/dist/components/Avatar/Avatar.cjs.map +1 -0
  46. package/dist/components/Avatar/Avatar.d.ts +33 -0
  47. package/dist/components/Avatar/Avatar.definitions.d.ts +11 -0
  48. package/dist/components/Avatar/Avatar.js +163 -0
  49. package/dist/components/Avatar/Avatar.js.map +1 -0
  50. package/dist/components/Card/Card.cjs +187 -0
  51. package/dist/components/Card/Card.cjs.map +1 -0
  52. package/dist/components/Card/Card.d.ts +83 -0
  53. package/dist/components/Card/Card.js +187 -0
  54. package/dist/components/Card/Card.js.map +1 -0
  55. package/dist/components/Card/Card.sx.d.ts +17 -0
  56. package/dist/components/Card/index.d.ts +4 -0
  57. package/dist/components/Card.d.ts +6 -0
  58. package/dist/components/DatePicker/DatePicker.cjs +203 -0
  59. package/dist/components/DatePicker/DatePicker.cjs.map +1 -0
  60. package/dist/components/DatePicker/DatePicker.d.ts +56 -0
  61. package/{components → dist/components}/DatePicker/DatePicker.definitions.d.ts +1 -0
  62. package/dist/components/DatePicker/DatePicker.helpers.d.ts +7 -0
  63. package/dist/components/DatePicker/DatePicker.js +203 -0
  64. package/dist/components/DatePicker/DatePicker.js.map +1 -0
  65. package/dist/components/DatePicker/DatePicker.sx.d.ts +9 -0
  66. package/dist/components/DatePicker/DatePicker.types.d.ts +1 -0
  67. package/dist/components/DatePicker/index.d.ts +2 -0
  68. package/dist/components/DatePicker.d.ts +6 -0
  69. package/dist/components/DateTimePicker/DateTimePicker.cjs +222 -0
  70. package/dist/components/DateTimePicker/DateTimePicker.cjs.map +1 -0
  71. package/dist/components/DateTimePicker/DateTimePicker.d.ts +65 -0
  72. package/{components → dist/components}/DateTimePicker/DateTimePicker.definitions.d.ts +1 -0
  73. package/dist/components/DateTimePicker/DateTimePicker.helpers.d.ts +11 -0
  74. package/dist/components/DateTimePicker/DateTimePicker.js +222 -0
  75. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -0
  76. package/dist/components/DateTimePicker/DateTimePicker.sx.d.ts +7 -0
  77. package/dist/components/DateTimePicker/DateTimePicker.types.d.ts +1 -0
  78. package/dist/components/DateTimePicker/index.d.ts +2 -0
  79. package/dist/components/DateTimePicker.d.ts +6 -0
  80. package/dist/components/Drawer/Drawer.cjs +271 -0
  81. package/dist/components/Drawer/Drawer.cjs.map +1 -0
  82. package/dist/components/Drawer/Drawer.d.ts +51 -0
  83. package/dist/components/Drawer/Drawer.js +271 -0
  84. package/dist/components/Drawer/Drawer.js.map +1 -0
  85. package/dist/components/Drawer/Drawer.sx.d.ts +23 -0
  86. package/dist/components/Drawer/DrawerContext.d.ts +18 -0
  87. package/dist/components/Drawer/DrawerItem.d.ts +35 -0
  88. package/dist/components/Drawer/index.d.ts +6 -0
  89. package/dist/components/Drawer.d.ts +6 -0
  90. package/{components → dist/components}/Icon/Icon.cjs +44 -3
  91. package/dist/components/Icon/Icon.cjs.map +1 -0
  92. package/dist/components/Icon/Icon.d.ts +54 -0
  93. package/{components → dist/components}/Icon/Icon.js +44 -3
  94. package/dist/components/Icon/Icon.js.map +1 -0
  95. package/dist/components/Input/Input.cjs +175 -0
  96. package/dist/components/Input/Input.cjs.map +1 -0
  97. package/dist/components/Input/Input.d.ts +37 -0
  98. package/{components → dist/components}/Input/Input.definitions.d.ts +5 -2
  99. package/dist/components/Input/Input.helpers.d.ts +14 -0
  100. package/dist/components/Input/Input.js +175 -0
  101. package/dist/components/Input/Input.js.map +1 -0
  102. package/dist/components/Input/Input.sx.d.ts +8 -0
  103. package/dist/components/Input/Input.types.d.ts +1 -0
  104. package/dist/components/Input/index.d.ts +2 -0
  105. package/dist/components/Input.d.ts +6 -0
  106. package/dist/components/InputGroup/InputGroup.cjs +139 -0
  107. package/dist/components/InputGroup/InputGroup.cjs.map +1 -0
  108. package/dist/components/InputGroup/InputGroup.d.ts +42 -0
  109. package/dist/components/InputGroup/InputGroup.definitions.d.ts +6 -0
  110. package/dist/components/InputGroup/InputGroup.js +139 -0
  111. package/dist/components/InputGroup/InputGroup.js.map +1 -0
  112. package/dist/components/Modal/Modal.cjs +319 -0
  113. package/dist/components/Modal/Modal.cjs.map +1 -0
  114. package/dist/components/Modal/Modal.d.ts +65 -0
  115. package/dist/components/Modal/Modal.js +319 -0
  116. package/dist/components/Modal/Modal.js.map +1 -0
  117. package/{components → dist/components}/Modal/ModalFooter.d.ts +9 -1
  118. package/dist/components/Modal/index.d.ts +6 -0
  119. package/dist/components/PageLoader/PageLoader.cjs +61 -0
  120. package/dist/components/PageLoader/PageLoader.cjs.map +1 -0
  121. package/dist/components/PageLoader/PageLoader.d.ts +38 -0
  122. package/dist/components/PageLoader/PageLoader.js +61 -0
  123. package/dist/components/PageLoader/PageLoader.js.map +1 -0
  124. package/dist/components/PageLoader/index.d.ts +2 -0
  125. package/dist/components/PageLoader.d.ts +6 -0
  126. package/dist/components/ScrollTopButton/ScrollTopButton.cjs +79 -0
  127. package/dist/components/ScrollTopButton/ScrollTopButton.cjs.map +1 -0
  128. package/dist/components/ScrollTopButton/ScrollTopButton.d.ts +48 -0
  129. package/dist/components/ScrollTopButton/ScrollTopButton.js +79 -0
  130. package/dist/components/ScrollTopButton/ScrollTopButton.js.map +1 -0
  131. package/dist/components/ScrollTopButton/index.d.ts +4 -0
  132. package/dist/components/ScrollTopButton/scrollToTop.d.ts +29 -0
  133. package/dist/components/ScrollTopButton.d.ts +6 -0
  134. package/dist/components/Select/Select.cjs +448 -0
  135. package/dist/components/Select/Select.cjs.map +1 -0
  136. package/{components → dist/components}/Select/Select.d.ts +33 -13
  137. package/{components → dist/components}/Select/Select.definitions.d.ts +3 -0
  138. package/dist/components/Select/Select.helpers.d.ts +28 -0
  139. package/dist/components/Select/Select.js +448 -0
  140. package/dist/components/Select/Select.js.map +1 -0
  141. package/dist/components/Select/Select.sx.d.ts +7 -0
  142. package/dist/components/Select/Select.types.d.ts +1 -0
  143. package/dist/components/Select/_parts/SelectMenuItem.d.ts +20 -0
  144. package/dist/components/Select/_parts/SelectSearchHeader.d.ts +15 -0
  145. package/dist/components/Select/_parts/SelectValue.d.ts +22 -0
  146. package/dist/components/Select/index.d.ts +2 -0
  147. package/dist/components/Select.d.ts +6 -0
  148. package/{components → dist/components}/Stat/Stat.cjs +1 -1
  149. package/{components → dist/components}/Stat/Stat.js +1 -1
  150. package/{components → dist/components}/Stepper/Stepper.cjs +4 -1
  151. package/dist/components/Stepper/Stepper.cjs.map +1 -0
  152. package/{components → dist/components}/Stepper/Stepper.d.ts +5 -0
  153. package/{components → dist/components}/Stepper/Stepper.js +4 -1
  154. package/dist/components/Stepper/Stepper.js.map +1 -0
  155. package/dist/components/_shared/formField.sx.d.ts +33 -0
  156. package/dist/components/_shared/resolvePreset.d.ts +18 -0
  157. package/dist/formField.sx-CQ1mbk9M.cjs +76 -0
  158. package/dist/formField.sx-CQ1mbk9M.cjs.map +1 -0
  159. package/dist/formField.sx-DfVbMe0V.js +77 -0
  160. package/dist/formField.sx-DfVbMe0V.js.map +1 -0
  161. package/dist/hooks/Wizard/Wizard.cjs +7 -0
  162. package/dist/hooks/Wizard/Wizard.cjs.map +1 -0
  163. package/dist/hooks/Wizard/Wizard.js +7 -0
  164. package/dist/hooks/Wizard/Wizard.js.map +1 -0
  165. package/dist/hooks/Wizard/WizardContext.d.ts +67 -0
  166. package/dist/hooks/Wizard/index.d.ts +3 -0
  167. package/dist/hooks/Wizard/useWizard.d.ts +9 -0
  168. package/dist/hooks/Wizard.d.ts +2 -0
  169. package/dist/index.cjs +100 -0
  170. package/dist/index.cjs.map +1 -0
  171. package/dist/index.d.ts +3 -0
  172. package/dist/index.js +31 -0
  173. package/{index.js.map → dist/index.js.map} +1 -1
  174. package/dist/mui.d.ts +5 -0
  175. package/dist/resolvePreset-B-IB0ehH.js +15 -0
  176. package/dist/resolvePreset-B-IB0ehH.js.map +1 -0
  177. package/dist/resolvePreset-CT3kU-K2.cjs +14 -0
  178. package/dist/resolvePreset-CT3kU-K2.cjs.map +1 -0
  179. package/dist/theme/componentStyles.d.ts +32 -0
  180. package/dist/theme/tokens.d.ts +28 -0
  181. package/dist/useWizard-CWdIxZzX.cjs +94 -0
  182. package/dist/useWizard-CWdIxZzX.cjs.map +1 -0
  183. package/dist/useWizard-CWq--C3o.js +95 -0
  184. package/dist/useWizard-CWq--C3o.js.map +1 -0
  185. package/package.json +43 -134
  186. package/rollup.config.cjs +87 -0
  187. package/src/components/ActionMenu/ActionMenu.stories.tsx +230 -0
  188. package/src/components/ActionMenu/ActionMenu.tsx +174 -0
  189. package/src/components/ActionMenu/index.ts +2 -0
  190. package/src/components/AppBar/AppBar.stories.tsx +272 -0
  191. package/src/components/AppBar/AppBar.sx.ts +32 -0
  192. package/src/components/AppBar/AppBar.tsx +123 -0
  193. package/src/components/AppBar/AppBarBrand.tsx +120 -0
  194. package/src/components/AppBar/AppBarContext.ts +25 -0
  195. package/src/components/AppBar/AppBarMenuToggle.tsx +90 -0
  196. package/src/components/AppBar/AppBarUserMenu.tsx +217 -0
  197. package/src/components/AppBar/index.ts +25 -0
  198. package/src/components/Autocomplete/Autocomplete.definitions.ts +477 -0
  199. package/src/components/Autocomplete/Autocomplete.helpers.ts +60 -0
  200. package/src/components/Autocomplete/Autocomplete.stories.tsx +748 -0
  201. package/src/components/Autocomplete/Autocomplete.sx.ts +30 -0
  202. package/src/components/Autocomplete/Autocomplete.tsx +361 -0
  203. package/src/components/Autocomplete/Autocomplete.types.ts +13 -0
  204. package/src/components/Autocomplete/_parts/AutocompleteChips.tsx +55 -0
  205. package/src/components/Autocomplete/_parts/AutocompleteLoader.tsx +17 -0
  206. package/src/components/Autocomplete/_parts/AutocompleteOption.tsx +31 -0
  207. package/src/components/Autocomplete/index.ts +12 -0
  208. package/src/components/Avatar/Avatar.definitions.ts +162 -0
  209. package/src/components/Avatar/Avatar.stories.tsx +258 -0
  210. package/src/components/Avatar/Avatar.tsx +206 -0
  211. package/src/components/Avatar/index.ts +1 -0
  212. package/src/components/Button/Button.definition.ts +97 -0
  213. package/src/components/Button/Button.stories.tsx +285 -0
  214. package/src/components/Button/Button.tsx +67 -0
  215. package/src/components/Button/index.ts +1 -0
  216. package/src/components/Card/Card.definition.ts +5 -0
  217. package/src/components/Card/Card.stories.tsx +221 -0
  218. package/src/components/Card/Card.sx.ts +104 -0
  219. package/src/components/Card/Card.tsx +200 -0
  220. package/src/components/Card/index.ts +9 -0
  221. package/src/components/Chip/Chip.definitions.ts +167 -0
  222. package/src/components/Chip/Chip.stories.tsx +265 -0
  223. package/src/components/Chip/Chip.tsx +61 -0
  224. package/src/components/Chip/index.ts +1 -0
  225. package/src/components/Column/Column.tsx +29 -0
  226. package/src/components/Column/index.ts +1 -0
  227. package/src/components/DatePicker/DatePicker.definitions.ts +228 -0
  228. package/src/components/DatePicker/DatePicker.helpers.ts +24 -0
  229. package/src/components/DatePicker/DatePicker.stories.tsx +309 -0
  230. package/src/components/DatePicker/DatePicker.sx.ts +33 -0
  231. package/src/components/DatePicker/DatePicker.tsx +189 -0
  232. package/src/components/DatePicker/DatePicker.types.ts +10 -0
  233. package/src/components/DatePicker/index.ts +9 -0
  234. package/src/components/DateRangePicker/DateRangePicker.definitions.ts +191 -0
  235. package/src/components/DateRangePicker/DateRangePicker.stories.tsx +252 -0
  236. package/src/components/DateRangePicker/DateRangePicker.tsx +56 -0
  237. package/src/components/DateRangePicker/index.ts +1 -0
  238. package/src/components/DateTimePicker/DateTimePicker.definitions.ts +256 -0
  239. package/src/components/DateTimePicker/DateTimePicker.helpers.ts +38 -0
  240. package/src/components/DateTimePicker/DateTimePicker.stories.tsx +418 -0
  241. package/src/components/DateTimePicker/DateTimePicker.sx.ts +30 -0
  242. package/src/components/DateTimePicker/DateTimePicker.tsx +225 -0
  243. package/src/components/DateTimePicker/DateTimePicker.types.ts +10 -0
  244. package/src/components/DateTimePicker/index.ts +9 -0
  245. package/src/components/Drawer/Drawer.stories.tsx +270 -0
  246. package/src/components/Drawer/Drawer.sx.ts +106 -0
  247. package/src/components/Drawer/Drawer.tsx +214 -0
  248. package/src/components/Drawer/DrawerContext.ts +26 -0
  249. package/src/components/Drawer/DrawerItem.tsx +110 -0
  250. package/src/components/Drawer/index.ts +10 -0
  251. package/src/components/Flyout/Flyout.stories.tsx +282 -0
  252. package/src/components/Flyout/Flyout.tsx +122 -0
  253. package/src/components/Flyout/index.ts +1 -0
  254. package/src/components/Gallery/Gallery.definition.tsx +37 -0
  255. package/src/components/Gallery/Gallery.stories.tsx +82 -0
  256. package/src/components/Gallery/Gallery.tsx +118 -0
  257. package/src/components/Gallery/GalleryLightbox.tsx +170 -0
  258. package/src/components/Gallery/GalleryMain.tsx +84 -0
  259. package/src/components/Gallery/GalleryThumbnails.tsx +106 -0
  260. package/src/components/Gallery/index.ts +1 -0
  261. package/src/components/Icon/Icon.stories.tsx +121 -0
  262. package/src/components/Icon/Icon.tsx +175 -0
  263. package/src/components/Icon/index.ts +2 -0
  264. package/src/components/Input/Input.definitions.ts +324 -0
  265. package/src/components/Input/Input.helpers.ts +49 -0
  266. package/src/components/Input/Input.stories.tsx +499 -0
  267. package/src/components/Input/Input.sx.ts +42 -0
  268. package/src/components/Input/Input.tsx +141 -0
  269. package/src/components/Input/Input.types.ts +10 -0
  270. package/src/components/Input/index.ts +9 -0
  271. package/src/components/InputGroup/InputGroup.definitions.ts +158 -0
  272. package/src/components/InputGroup/InputGroup.stories.tsx +267 -0
  273. package/src/components/InputGroup/InputGroup.tsx +179 -0
  274. package/src/components/InputGroup/index.ts +1 -0
  275. package/src/components/MenuButton/MenuButton.stories.tsx +197 -0
  276. package/src/components/MenuButton/MenuButton.tsx +100 -0
  277. package/src/components/MenuButton/index.ts +1 -0
  278. package/src/components/Modal/Modal.stories.tsx +721 -0
  279. package/src/components/Modal/Modal.tsx +355 -0
  280. package/src/components/Modal/ModalBody.tsx +16 -0
  281. package/src/components/Modal/ModalFooter.tsx +71 -0
  282. package/src/components/Modal/ModalHeader.tsx +18 -0
  283. package/src/components/Modal/index.ts +6 -0
  284. package/src/components/PageLoader/PageLoader.stories.tsx +217 -0
  285. package/src/components/PageLoader/PageLoader.tsx +96 -0
  286. package/src/components/PageLoader/index.ts +2 -0
  287. package/src/components/ScrollTopButton/ScrollTopButton.stories.tsx +158 -0
  288. package/src/components/ScrollTopButton/ScrollTopButton.tsx +135 -0
  289. package/src/components/ScrollTopButton/index.ts +8 -0
  290. package/src/components/ScrollTopButton/scrollToTop.ts +37 -0
  291. package/src/components/Select/Select.definitions.ts +602 -0
  292. package/src/components/Select/Select.helpers.ts +71 -0
  293. package/src/components/Select/Select.stories.tsx +687 -0
  294. package/src/components/Select/Select.sx.ts +14 -0
  295. package/src/components/Select/Select.tsx +429 -0
  296. package/src/components/Select/Select.types.ts +15 -0
  297. package/src/components/Select/_parts/SelectMenuItem.tsx +40 -0
  298. package/src/components/Select/_parts/SelectSearchHeader.tsx +51 -0
  299. package/src/components/Select/_parts/SelectValue.tsx +96 -0
  300. package/src/components/Select/index.ts +14 -0
  301. package/src/components/Stat/Stat.stories.tsx +85 -0
  302. package/src/components/Stat/Stat.tsx +117 -0
  303. package/src/components/Stat/index.ts +2 -0
  304. package/src/components/StatusMessage/StatusMessage.stories.tsx +130 -0
  305. package/src/components/StatusMessage/StatusMessage.tsx +162 -0
  306. package/src/components/StatusMessage/index.ts +2 -0
  307. package/src/components/Stepper/Step.tsx +21 -0
  308. package/src/components/Stepper/Stepper.definition.ts +75 -0
  309. package/src/components/Stepper/Stepper.stories.tsx +122 -0
  310. package/src/components/Stepper/Stepper.tsx +75 -0
  311. package/src/components/Stepper/index.ts +2 -0
  312. package/src/components/Table/EmptyTable.png +0 -0
  313. package/src/components/Table/Table.definition.ts +580 -0
  314. package/src/components/Table/Table.stories.tsx +853 -0
  315. package/src/components/Table/Table.tsx +495 -0
  316. package/src/components/Table/data.ts +134 -0
  317. package/src/components/Table/exportsUtils.ts +195 -0
  318. package/src/components/Table/index.ts +3 -0
  319. package/src/components/Table/types.ts +34 -0
  320. package/src/components/Tabs/Tab.definition.ts +53 -0
  321. package/src/components/Tabs/Tab.tsx +19 -0
  322. package/src/components/Tabs/Tabs.stories.tsx +118 -0
  323. package/src/components/Tabs/Tabs.tsx +99 -0
  324. package/src/components/Tabs/_tabUtils.tsx +4 -0
  325. package/src/components/Tabs/index.ts +2 -0
  326. package/src/components/Timeline/Timeline.definition.ts +43 -0
  327. package/src/components/Timeline/Timeline.stories.tsx +108 -0
  328. package/src/components/Timeline/Timeline.tsx +49 -0
  329. package/src/components/Timeline/TimelineItem.tsx +31 -0
  330. package/src/components/Timeline/index.ts +2 -0
  331. package/src/components/Tooltip/Tooltip.stories.tsx +129 -0
  332. package/src/components/Tooltip/Tooltip.tsx +58 -0
  333. package/src/components/Tooltip/index.ts +1 -0
  334. package/src/components/_shared/formField.sx.ts +118 -0
  335. package/src/components/_shared/resolvePreset.ts +35 -0
  336. package/src/hooks/ClipBoard/ClipBoard.stories.tsx +168 -0
  337. package/src/hooks/ClipBoard/ClipBoard.tsx +131 -0
  338. package/src/hooks/ClipBoard/ClipboardUnifiedDemo.tsx +111 -0
  339. package/src/hooks/ClipBoard/index.ts +1 -0
  340. package/src/hooks/Wizard/Wizard.stories.tsx +301 -0
  341. package/src/hooks/Wizard/WizardContext.tsx +166 -0
  342. package/src/hooks/Wizard/index.ts +6 -0
  343. package/src/hooks/Wizard/useWizard.ts +13 -0
  344. package/src/index.ts +17 -0
  345. package/src/mui.ts +44 -0
  346. package/src/styles.css +3 -0
  347. package/src/theme/componentStyles.ts +47 -0
  348. package/src/theme/tokens.ts +43 -0
  349. package/tailwind.config.js +10 -0
  350. package/tsconfig.json +48 -0
  351. package/tsup.config.js +41 -0
  352. package/vite.config.js +132 -0
  353. package/vitest.config.ts +35 -0
  354. package/DatePicker-BSNboVhN.js +0 -201
  355. package/DatePicker-BSNboVhN.js.map +0 -1
  356. package/DatePicker-BoqxWAhj.cjs +0 -200
  357. package/DatePicker-BoqxWAhj.cjs.map +0 -1
  358. package/Input-DFHs7cJ_.js +0 -171
  359. package/Input-DFHs7cJ_.js.map +0 -1
  360. package/Input-c8MwNNPg.cjs +0 -170
  361. package/Input-c8MwNNPg.cjs.map +0 -1
  362. package/Select-BO2N56sm.cjs +0 -411
  363. package/Select-BO2N56sm.cjs.map +0 -1
  364. package/Select-BcLkyHSE.js +0 -412
  365. package/Select-BcLkyHSE.js.map +0 -1
  366. package/components/Autocomplete/Autocomplete.cjs +0 -132
  367. package/components/Autocomplete/Autocomplete.cjs.map +0 -1
  368. package/components/Autocomplete/Autocomplete.d.ts +0 -28
  369. package/components/Autocomplete/Autocomplete.js +0 -132
  370. package/components/Autocomplete/Autocomplete.js.map +0 -1
  371. package/components/Autocomplete/index.d.ts +0 -1
  372. package/components/Autocomplete.d.ts +0 -2
  373. package/components/Avatar/Avatar.cjs +0 -126
  374. package/components/Avatar/Avatar.cjs.map +0 -1
  375. package/components/Avatar/Avatar.d.ts +0 -19
  376. package/components/Avatar/Avatar.js +0 -126
  377. package/components/Avatar/Avatar.js.map +0 -1
  378. package/components/Card/Card.cjs +0 -28
  379. package/components/Card/Card.cjs.map +0 -1
  380. package/components/Card/Card.d.ts +0 -13
  381. package/components/Card/Card.js +0 -28
  382. package/components/Card/Card.js.map +0 -1
  383. package/components/Card/index.d.ts +0 -1
  384. package/components/Card.d.ts +0 -2
  385. package/components/DatePicker/DatePicker.cjs +0 -5
  386. package/components/DatePicker/DatePicker.cjs.map +0 -1
  387. package/components/DatePicker/DatePicker.d.ts +0 -18
  388. package/components/DatePicker/DatePicker.js +0 -5
  389. package/components/DatePicker/DatePicker.js.map +0 -1
  390. package/components/DatePicker/index.d.ts +0 -1
  391. package/components/DatePicker.d.ts +0 -2
  392. package/components/DateTimePicker/DateTimePicker.cjs +0 -208
  393. package/components/DateTimePicker/DateTimePicker.cjs.map +0 -1
  394. package/components/DateTimePicker/DateTimePicker.d.ts +0 -28
  395. package/components/DateTimePicker/DateTimePicker.js +0 -208
  396. package/components/DateTimePicker/DateTimePicker.js.map +0 -1
  397. package/components/DateTimePicker/index.d.ts +0 -1
  398. package/components/DateTimePicker.d.ts +0 -2
  399. package/components/Icon/Icon.cjs.map +0 -1
  400. package/components/Icon/Icon.d.ts +0 -21
  401. package/components/Icon/Icon.js.map +0 -1
  402. package/components/Input/Input.cjs +0 -5
  403. package/components/Input/Input.cjs.map +0 -1
  404. package/components/Input/Input.d.ts +0 -32
  405. package/components/Input/Input.js +0 -5
  406. package/components/Input/Input.js.map +0 -1
  407. package/components/Input/index.d.ts +0 -1
  408. package/components/Input.d.ts +0 -2
  409. package/components/InputGroup/InputGroup.cjs +0 -126
  410. package/components/InputGroup/InputGroup.cjs.map +0 -1
  411. package/components/InputGroup/InputGroup.d.ts +0 -6
  412. package/components/InputGroup/InputGroup.js +0 -126
  413. package/components/InputGroup/InputGroup.js.map +0 -1
  414. package/components/Modal/Modal.cjs +0 -209
  415. package/components/Modal/Modal.cjs.map +0 -1
  416. package/components/Modal/Modal.d.ts +0 -29
  417. package/components/Modal/Modal.js +0 -209
  418. package/components/Modal/Modal.js.map +0 -1
  419. package/components/Modal/index.d.ts +0 -1
  420. package/components/Select/Select.cjs +0 -6
  421. package/components/Select/Select.cjs.map +0 -1
  422. package/components/Select/Select.js +0 -6
  423. package/components/Select/Select.js.map +0 -1
  424. package/components/Select/index.d.ts +0 -1
  425. package/components/Select.d.ts +0 -2
  426. package/components/Stepper/Stepper.cjs.map +0 -1
  427. package/components/Stepper/Stepper.js.map +0 -1
  428. package/index.cjs +0 -2
  429. package/index.cjs.map +0 -1
  430. package/index.d.ts +0 -0
  431. package/index.js +0 -2
  432. /package/{README.md → Readme.md} +0 -0
  433. /package/{Button-C17mExpd.cjs → dist/Button-C17mExpd.cjs} +0 -0
  434. /package/{Button-C17mExpd.cjs.map → dist/Button-C17mExpd.cjs.map} +0 -0
  435. /package/{Button-UkkP-bNw.js → dist/Button-UkkP-bNw.js} +0 -0
  436. /package/{Button-UkkP-bNw.js.map → dist/Button-UkkP-bNw.js.map} +0 -0
  437. /package/{components → dist/components}/Avatar/index.d.ts +0 -0
  438. /package/{components → dist/components}/Avatar.d.ts +0 -0
  439. /package/{components → dist/components}/Button/Button.cjs +0 -0
  440. /package/{components → dist/components}/Button/Button.cjs.map +0 -0
  441. /package/{components → dist/components}/Button/Button.d.ts +0 -0
  442. /package/{components → dist/components}/Button/Button.definition.d.ts +0 -0
  443. /package/{components → dist/components}/Button/Button.js +0 -0
  444. /package/{components → dist/components}/Button/Button.js.map +0 -0
  445. /package/{components → dist/components}/Button/index.d.ts +0 -0
  446. /package/{components → dist/components}/Button.d.ts +0 -0
  447. /package/{components → dist/components}/Card/Card.definition.d.ts +0 -0
  448. /package/{components → dist/components}/Chip/Chip.cjs +0 -0
  449. /package/{components → dist/components}/Chip/Chip.cjs.map +0 -0
  450. /package/{components → dist/components}/Chip/Chip.d.ts +0 -0
  451. /package/{components → dist/components}/Chip/Chip.definitions.d.ts +0 -0
  452. /package/{components → dist/components}/Chip/Chip.js +0 -0
  453. /package/{components → dist/components}/Chip/Chip.js.map +0 -0
  454. /package/{components → dist/components}/Chip/index.d.ts +0 -0
  455. /package/{components → dist/components}/Chip.d.ts +0 -0
  456. /package/{components → dist/components}/Column/Column.cjs +0 -0
  457. /package/{components → dist/components}/Column/Column.cjs.map +0 -0
  458. /package/{components → dist/components}/Column/Column.d.ts +0 -0
  459. /package/{components → dist/components}/Column/Column.js +0 -0
  460. /package/{components → dist/components}/Column/Column.js.map +0 -0
  461. /package/{components → dist/components}/Column/index.d.ts +0 -0
  462. /package/{components → dist/components}/Column.d.ts +0 -0
  463. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs +0 -0
  464. /package/{components → dist/components}/DateRangePicker/DateRangePicker.cjs.map +0 -0
  465. /package/{components → dist/components}/DateRangePicker/DateRangePicker.d.ts +0 -0
  466. /package/{components → dist/components}/DateRangePicker/DateRangePicker.definitions.d.ts +0 -0
  467. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js +0 -0
  468. /package/{components → dist/components}/DateRangePicker/DateRangePicker.js.map +0 -0
  469. /package/{components → dist/components}/DateRangePicker/index.d.ts +0 -0
  470. /package/{components → dist/components}/DateRangePicker.d.ts +0 -0
  471. /package/{components → dist/components}/Flyout/Flyout.cjs +0 -0
  472. /package/{components → dist/components}/Flyout/Flyout.cjs.map +0 -0
  473. /package/{components → dist/components}/Flyout/Flyout.d.ts +0 -0
  474. /package/{components → dist/components}/Flyout/Flyout.js +0 -0
  475. /package/{components → dist/components}/Flyout/Flyout.js.map +0 -0
  476. /package/{components → dist/components}/Flyout/index.d.ts +0 -0
  477. /package/{components → dist/components}/Flyout.d.ts +0 -0
  478. /package/{components → dist/components}/Gallery/Gallery.cjs +0 -0
  479. /package/{components → dist/components}/Gallery/Gallery.cjs.map +0 -0
  480. /package/{components → dist/components}/Gallery/Gallery.d.ts +0 -0
  481. /package/{components → dist/components}/Gallery/Gallery.definition.d.ts +0 -0
  482. /package/{components → dist/components}/Gallery/Gallery.js +0 -0
  483. /package/{components → dist/components}/Gallery/Gallery.js.map +0 -0
  484. /package/{components → dist/components}/Gallery/GalleryLightbox.d.ts +0 -0
  485. /package/{components → dist/components}/Gallery/GalleryMain.d.ts +0 -0
  486. /package/{components → dist/components}/Gallery/GalleryThumbnails.d.ts +0 -0
  487. /package/{components → dist/components}/Gallery/index.d.ts +0 -0
  488. /package/{components → dist/components}/Gallery.d.ts +0 -0
  489. /package/{components → dist/components}/Icon/index.d.ts +0 -0
  490. /package/{components → dist/components}/Icon.d.ts +0 -0
  491. /package/{components → dist/components}/InputGroup/index.d.ts +0 -0
  492. /package/{components → dist/components}/InputGroup.d.ts +0 -0
  493. /package/{components → dist/components}/MenuButton/MenuButton.cjs +0 -0
  494. /package/{components → dist/components}/MenuButton/MenuButton.cjs.map +0 -0
  495. /package/{components → dist/components}/MenuButton/MenuButton.d.ts +0 -0
  496. /package/{components → dist/components}/MenuButton/MenuButton.js +0 -0
  497. /package/{components → dist/components}/MenuButton/MenuButton.js.map +0 -0
  498. /package/{components → dist/components}/MenuButton/index.d.ts +0 -0
  499. /package/{components → dist/components}/MenuButton.d.ts +0 -0
  500. /package/{components → dist/components}/Modal/ModalBody.d.ts +0 -0
  501. /package/{components → dist/components}/Modal/ModalHeader.d.ts +0 -0
  502. /package/{components → dist/components}/Modal.d.ts +0 -0
  503. /package/{components → dist/components}/Stat/Stat.cjs.map +0 -0
  504. /package/{components → dist/components}/Stat/Stat.d.ts +0 -0
  505. /package/{components → dist/components}/Stat/Stat.js.map +0 -0
  506. /package/{components → dist/components}/Stat/index.d.ts +0 -0
  507. /package/{components → dist/components}/Stat.d.ts +0 -0
  508. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs +0 -0
  509. /package/{components → dist/components}/StatusMessage/StatusMessage.cjs.map +0 -0
  510. /package/{components → dist/components}/StatusMessage/StatusMessage.d.ts +0 -0
  511. /package/{components → dist/components}/StatusMessage/StatusMessage.js +0 -0
  512. /package/{components → dist/components}/StatusMessage/StatusMessage.js.map +0 -0
  513. /package/{components → dist/components}/StatusMessage/index.d.ts +0 -0
  514. /package/{components → dist/components}/StatusMessage.d.ts +0 -0
  515. /package/{components → dist/components}/Stepper/Step.d.ts +0 -0
  516. /package/{components → dist/components}/Stepper/Stepper.definition.d.ts +0 -0
  517. /package/{components → dist/components}/Stepper/index.d.ts +0 -0
  518. /package/{components → dist/components}/Stepper.d.ts +0 -0
  519. /package/{components → dist/components}/Table/Table.cjs +0 -0
  520. /package/{components → dist/components}/Table/Table.cjs.map +0 -0
  521. /package/{components → dist/components}/Table/Table.d.ts +0 -0
  522. /package/{components → dist/components}/Table/Table.definition.d.ts +0 -0
  523. /package/{components → dist/components}/Table/Table.js +0 -0
  524. /package/{components → dist/components}/Table/Table.js.map +0 -0
  525. /package/{components → dist/components}/Table/data.d.ts +0 -0
  526. /package/{components → dist/components}/Table/exportsUtils.d.ts +0 -0
  527. /package/{components → dist/components}/Table/index.d.ts +0 -0
  528. /package/{components → dist/components}/Table/types.d.ts +0 -0
  529. /package/{components → dist/components}/Table.d.ts +0 -0
  530. /package/{components → dist/components}/Tabs/Tab.d.ts +0 -0
  531. /package/{components → dist/components}/Tabs/Tab.definition.d.ts +0 -0
  532. /package/{components → dist/components}/Tabs/Tabs.cjs +0 -0
  533. /package/{components → dist/components}/Tabs/Tabs.cjs.map +0 -0
  534. /package/{components → dist/components}/Tabs/Tabs.d.ts +0 -0
  535. /package/{components → dist/components}/Tabs/Tabs.js +0 -0
  536. /package/{components → dist/components}/Tabs/Tabs.js.map +0 -0
  537. /package/{components → dist/components}/Tabs/_tabUtils.d.ts +0 -0
  538. /package/{components → dist/components}/Tabs/index.d.ts +0 -0
  539. /package/{components → dist/components}/Tabs.d.ts +0 -0
  540. /package/{components → dist/components}/Timeline/Timeline.cjs +0 -0
  541. /package/{components → dist/components}/Timeline/Timeline.cjs.map +0 -0
  542. /package/{components → dist/components}/Timeline/Timeline.d.ts +0 -0
  543. /package/{components → dist/components}/Timeline/Timeline.definition.d.ts +0 -0
  544. /package/{components → dist/components}/Timeline/Timeline.js +0 -0
  545. /package/{components → dist/components}/Timeline/Timeline.js.map +0 -0
  546. /package/{components → dist/components}/Timeline/TimelineItem.d.ts +0 -0
  547. /package/{components → dist/components}/Timeline/index.d.ts +0 -0
  548. /package/{components → dist/components}/Timeline.d.ts +0 -0
  549. /package/{components → dist/components}/Tooltip/Tooltip.cjs +0 -0
  550. /package/{components → dist/components}/Tooltip/Tooltip.cjs.map +0 -0
  551. /package/{components → dist/components}/Tooltip/Tooltip.d.ts +0 -0
  552. /package/{components → dist/components}/Tooltip/Tooltip.js +0 -0
  553. /package/{components → dist/components}/Tooltip/Tooltip.js.map +0 -0
  554. /package/{components → dist/components}/Tooltip/index.d.ts +0 -0
  555. /package/{components → dist/components}/Tooltip.d.ts +0 -0
  556. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs +0 -0
  557. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.cjs.map +0 -0
  558. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.d.ts +0 -0
  559. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js +0 -0
  560. /package/{hooks → dist/hooks}/ClipBoard/ClipBoard.js.map +0 -0
  561. /package/{hooks → dist/hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
  562. /package/{hooks → dist/hooks}/ClipBoard/index.d.ts +0 -0
  563. /package/{hooks → dist/hooks}/ClipBoard.d.ts +0 -0
  564. /package/{index.css → dist/styles.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.cjs","sources":["../../../src/components/Select/Select.sx.ts","../../../src/components/Select/Select.helpers.ts","../../../src/components/Select/_parts/SelectSearchHeader.tsx","../../../src/components/Select/_parts/SelectValue.tsx","../../../src/components/Select/_parts/SelectMenuItem.tsx","../../../src/components/Select/Select.tsx"],"sourcesContent":["import type { SelectProps as MuiSelectProps } from '@mui/material';\n\nimport { buildFormFieldSx } from '../_shared/formField.sx';\nimport type { LabelPosition } from './Select';\n\n/**\n * Builder de sx para el Select. Usa el builder compartido\n * `buildFormFieldSx`. El Select no necesita overrides específicos.\n */\nexport const buildSelectSx = (\n borderRadius: number | string,\n labelPosition: LabelPosition,\n): MuiSelectProps['sx'] =>\n buildFormFieldSx({ borderRadius, labelPosition }) as MuiSelectProps['sx'];\n","import type { SelectOption } from './Select';\n\n/**\n * Filtra opciones por `label` (case-insensitive). Si `search` es vacío,\n * devuelve el array completo. Solo se usa en modo no-async.\n */\nexport const filterOptionsByLabel = (\n options: SelectOption[],\n search: string,\n): SelectOption[] => {\n if (!search) return options;\n const needle = search.toLowerCase();\n return options.filter((opt) => opt.label.toLowerCase().includes(needle));\n};\n\n/**\n * Agrupa opciones por la propiedad `group`. Las opciones sin group caen\n * bajo la key especial `__default`. Devuelve un Record para iterar en orden\n * de inserción con Object.entries.\n */\nexport const groupOptions = (\n options: SelectOption[],\n): Record<string, SelectOption[]> => {\n const groups: Record<string, SelectOption[]> = {};\n options.forEach((opt) => {\n const group = opt.group || '__default';\n if (!groups[group]) groups[group] = [];\n groups[group].push(opt);\n });\n return groups;\n};\n\n/**\n * Determina si un conjunto de grupos está efectivamente vacío\n * (no hay grupos o solo existe `__default` sin items).\n */\nexport const isGroupedOptionsEmpty = (\n groups: Record<string, SelectOption[]>,\n): boolean => {\n const keys = Object.keys(groups);\n if (keys.length === 0) return true;\n if (keys.length === 1 && groups['__default'] && groups['__default'].length === 0) {\n return true;\n }\n return false;\n};\n\n/**\n * Normaliza el valor actual al shape que espera el MUI Select:\n * - multiple: siempre array (aunque esté vacío).\n * - single: string vacío si null/undefined.\n */\nexport const normalizeSelectValue = <T>(\n value: T | T[] | null | undefined,\n multiple: boolean,\n): T | T[] | '' => {\n if (multiple) return (value ?? []) as T[];\n return (value ?? '') as T | '';\n};\n\n/**\n * Evalúa si el valor actual está vacío (para decidir shrink del label\n * y visibilidad del placeholder).\n */\nexport const isSelectValueEmpty = (\n normalizedValue: unknown,\n multiple: boolean,\n): boolean => {\n if (multiple) return Array.isArray(normalizedValue) && normalizedValue.length === 0;\n return normalizedValue === '' || normalizedValue === null || normalizedValue === undefined;\n};\n","import React from 'react';\nimport { ListSubheader, TextField } from '@mui/material';\n\ninterface SelectSearchHeaderProps {\n value: string;\n onChange: (next: string) => void;\n placeholder?: string;\n inputRef?: React.Ref<HTMLInputElement>;\n}\n\n/**\n * Header sticky del menu del Select que contiene el input de búsqueda.\n * Se usa cuando `filterable` es true o cuando el Select opera en modo async.\n * Detiene la propagación de click/keydown para que el menu no se cierre ni\n * intercepte las teclas al tipear.\n */\nexport const SelectSearchHeader: React.FC<SelectSearchHeaderProps> = ({\n value,\n onChange,\n placeholder = 'Buscar...',\n inputRef,\n}) => {\n return (\n <ListSubheader\n sx={{\n px: 2,\n pt: 1,\n pb: 1,\n backgroundColor: 'background.paper',\n zIndex: 1,\n position: 'sticky',\n top: 0,\n }}\n >\n <TextField\n inputRef={inputRef}\n placeholder={placeholder}\n variant=\"standard\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={(e) => onChange(e.target.value)}\n slotProps={{ htmlInput: { autoFocus: true } }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </ListSubheader>\n );\n};\n\nexport default SelectSearchHeader;\n","import React from 'react';\nimport { Avatar, Box, Chip, Typography } from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport type {\n SelectOption,\n RenderChipLabel,\n ChipVariant,\n} from '../Select';\n\ninterface SelectValueProps<TValue extends SelectOption['value']> {\n selected: TValue | TValue[] | null | undefined;\n options: SelectOption[];\n multiple: boolean;\n placeholder?: string;\n maxChipsToShow: number;\n chipVariant: ChipVariant;\n renderChipLabel?: RenderChipLabel;\n /** Solo relevante en modo multiple. Recibe el nuevo array de valores. */\n onDeleteChip?: (nextValues: TValue[]) => void;\n /** Array de valores actuales (para componer el nuevo array al borrar chips). */\n currentValues?: TValue[];\n}\n\n/**\n * Render del valor seleccionado del Select.\n * - single: texto (label) o lo que devuelva `renderChipLabel`.\n * - multiple: chips con delete. Trunca después de `maxChipsToShow` mostrando \"+N más\".\n * - empty: placeholder en color disabled.\n */\nexport function SelectValue<TValue extends SelectOption['value']>(\n props: SelectValueProps<TValue>,\n) {\n const {\n selected,\n options,\n multiple,\n placeholder,\n maxChipsToShow,\n chipVariant,\n renderChipLabel,\n onDeleteChip,\n currentValues,\n } = props;\n\n const isEmpty =\n !selected || (Array.isArray(selected) && selected.length === 0);\n\n if (isEmpty) {\n return (\n <Typography sx={{ color: 'text.disabled' }}>{placeholder || ''}</Typography>\n );\n }\n\n if (!multiple) {\n const item = options.find((opt) => opt.value === selected);\n if (renderChipLabel && item) return <>{renderChipLabel(item)}</>;\n return <>{item?.label ?? String(selected)}</>;\n }\n\n const selectedValuesArray = selected as TValue[];\n const displayedChips = selectedValuesArray.slice(0, maxChipsToShow);\n const hiddenChipsCount = selectedValuesArray.length - maxChipsToShow;\n\n const handleDelete = (chipValue: TValue) => {\n if (!onDeleteChip || !currentValues) return;\n onDeleteChip(currentValues.filter((v) => v !== chipValue));\n };\n\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {displayedChips.map((val) => {\n const item = options.find((o) => o.value === val);\n if (!item) return null;\n\n return (\n <Chip\n variant={chipVariant}\n color=\"primary\"\n size=\"small\"\n key={String(val)}\n label={renderChipLabel ? renderChipLabel(item) : item.label}\n avatar={item.img ? <Avatar src={item.img} /> : undefined}\n onDelete={() => handleDelete(val)}\n deleteIcon={<ClearIcon fontSize=\"small\" />}\n />\n );\n })}\n {hiddenChipsCount > 0 && (\n <Chip size=\"small\" variant={chipVariant} label={`+${hiddenChipsCount} más`} />\n )}\n </Box>\n );\n}\n\nexport default SelectValue;\n","import React from 'react';\nimport { ListItemIcon, MenuItem } from '@mui/material';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport type { SelectOption, RenderOptionItem } from '../Select';\n\ninterface RenderSelectMenuItemArgs {\n option: SelectOption;\n selected: boolean;\n customRender?: RenderOptionItem | null;\n}\n\n/**\n * Render helper (no componente) que devuelve un <MenuItem> listo para\n * colocarse como hijo directo del <MuiSelect>. Se implementa como función\n * y no como componente porque MUI Select inspecciona `props.value` de sus\n * children para resolver la selección, y envolverlo en un componente extra\n * rompe esa detección.\n *\n * Incluye el icono de check a la izquierda cuando `selected` es true. Si el\n * consumer pasó un `<Option>{(opt) => ...}</Option>`, usa ese render para el\n * contenido principal; de lo contrario muestra `option.label`.\n */\nexport const renderSelectMenuItem = ({\n option,\n selected,\n customRender,\n}: RenderSelectMenuItemArgs): React.ReactElement => (\n <MenuItem\n key={String(option.value)}\n value={option.value}\n disabled={option.disabled}\n selected={selected}\n >\n <ListItemIcon sx={{ minWidth: 32 }}>\n {selected && <CheckIcon color=\"success\" fontSize=\"small\" />}\n </ListItemIcon>\n {customRender ? customRender(option) : option.label}\n </MenuItem>\n);\n","import React, {\n isValidElement,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Box,\n CircularProgress,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n MenuItem,\n OutlinedInput,\n Select as MuiSelect,\n SelectChangeEvent,\n Typography,\n type SelectProps as MuiSelectProps,\n} from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildSelectSx } from './Select.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport {\n filterOptionsByLabel,\n groupOptions,\n isGroupedOptionsEmpty,\n isSelectValueEmpty,\n normalizeSelectValue,\n} from './Select.helpers';\nimport { SelectSearchHeader } from './_parts/SelectSearchHeader';\nimport { SelectValue } from './_parts/SelectValue';\nimport { renderSelectMenuItem } from './_parts/SelectMenuItem';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport interface SelectOption {\n value: string | number;\n label: string;\n img?: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n}\n\nexport type LabelPosition = 'outside' | 'floating';\nexport type ChipVariant = 'outlined' | 'filled';\nexport type SelectSize = 'small' | 'medium';\n\n// ── Render slots ─────────────────────────────────────────────────────────\nexport type RenderOptionItem = (item: SelectOption) => ReactNode;\nexport type RenderChipLabel = (item: SelectOption) => ReactNode;\n\n// ── Sub-componente declarativo <Option> ──────────────────────────────────\nexport interface OptionProps {\n children: RenderOptionItem;\n}\n\n// ── Props base ───────────────────────────────────────────────────────────\nexport interface BaseSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> {\n label?: string;\n options?: SelectOption[];\n defaultValue?: TValue | TValue[];\n size?: SelectSize;\n multiple?: boolean;\n filterable?: boolean;\n placeholder?: string;\n children?: ReactElement<{ children: RenderOptionItem }>;\n maxHeight?: number | string;\n maxWidth?: number | string;\n maxChipsToShow?: number;\n renderChipLabel?: RenderChipLabel;\n chipVariant?: ChipVariant;\n loadOptions?: (inputValue: string) => Promise<SelectOption[]>;\n loadingMessage?: ReactNode;\n noOptionsMessage?: ReactNode;\n debounceTimeout?: number;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Border radius del input (px o string CSS). Default: 10 */\n borderRadius?: number | string;\n /**\n * Posición del label.\n * - \"outside\" (default): label arriba del input, sin animación.\n * - \"floating\": label clásico de MUI (flota dentro del notched outline).\n */\n labelPosition?: LabelPosition;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.Select`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n * - Cualquier otro string = mergea el preset encima del estilo built-in.\n */\n preset?: string;\n sx?: MuiSelectProps['sx'];\n className?: string;\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> extends BaseSelectProps<TValue> {\n name: string;\n control: Control<any>;\n validation?: RegisterOptions;\n value?: TValue | TValue[];\n onChange?: (val: TValue | TValue[]) => void;\n}\n\nexport interface StandardSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> extends BaseSelectProps<TValue> {\n name?: string;\n control?: never;\n validation?: never;\n value: TValue | TValue[];\n onChange: (val: TValue | TValue[]) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type SelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> = RHFSelectProps<TValue> | StandardSelectProps<TValue>;\n\n// ── Sub-componente declarativo <Option> ──────────────────────────────────\nexport function Option(_props: OptionProps) {\n return null;\n}\nOption.displayName = 'Option';\n\n// ── Componente ───────────────────────────────────────────────────────────\nexport function Select<TValue extends SelectOption['value'] = SelectOption['value']>(\n props: SelectProps<TValue>,\n) {\n const {\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n size = 'small',\n multiple = false,\n filterable = false,\n placeholder,\n children,\n maxHeight = 300,\n maxWidth,\n maxChipsToShow = 3,\n renderChipLabel,\n chipVariant = 'outlined',\n loadOptions,\n loadingMessage = 'Cargando opciones...',\n noOptionsMessage = 'No hay opciones',\n debounceTimeout = 300,\n disabled = false,\n error = false,\n helperText,\n borderRadius = 10,\n labelPosition = 'outside',\n preset,\n sx,\n className,\n ...rest\n } = props;\n\n const theme = useTheme();\n const presetSx = resolvePreset('Select', preset, theme);\n\n const isRHFMode = 'control' in rest && (rest as any).control !== undefined;\n\n // Custom render opcional vía <Option>{item => ...}</Option>\n const customRender: RenderOptionItem | null = useMemo(() => {\n if (React.Children.count(children) === 1) {\n const child = React.Children.only(children);\n if (isValidElement(child) && (child.type as any)?.displayName === 'Option') {\n return (child.props as OptionProps).children;\n }\n }\n return null;\n }, [children]);\n\n // Búsqueda / async\n const [search, setSearch] = useState('');\n const [asyncOptions, setAsyncOptions] = useState<SelectOption[]>([]);\n const [loading, setLoading] = useState(false);\n const debounceTimerRef = useRef<number | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Focus/open tracking para el comportamiento del label \"outside\".\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const isAsync = typeof loadOptions === 'function';\n const currentOptions = isAsync ? asyncOptions : options;\n\n useEffect(() => {\n if (!isAsync) return;\n\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n if (search) {\n setLoading(true);\n debounceTimerRef.current = window.setTimeout(() => {\n loadOptions!(search)\n .then(setAsyncOptions)\n .finally(() => {\n setLoading(false);\n searchInputRef.current?.focus();\n });\n }, debounceTimeout);\n } else {\n setAsyncOptions([]);\n setLoading(false);\n searchInputRef.current?.focus();\n }\n }, [search, isAsync, loadOptions, debounceTimeout]);\n\n const filteredOptions = useMemo(() => {\n if (isAsync) return currentOptions;\n if (!filterable) return currentOptions;\n return filterOptionsByLabel(currentOptions, search);\n }, [search, filterable, currentOptions, isAsync]);\n\n const groupedOptions = useMemo(() => groupOptions(filteredOptions), [filteredOptions]);\n\n // Items del menu (search header + loading/empty + grupos + opciones)\n const menuItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n\n if (filterable || isAsync) {\n items.push(\n <SelectSearchHeader\n key=\"search-header\"\n value={search}\n onChange={setSearch}\n inputRef={searchInputRef}\n />,\n );\n }\n\n const noOptions = isGroupedOptionsEmpty(groupedOptions);\n\n if (loading) {\n items.push(\n <MenuItem key=\"loading-message\" disabled>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <CircularProgress size={20} />\n <Typography>{loadingMessage}</Typography>\n </Box>\n </MenuItem>,\n );\n } else if (noOptions) {\n items.push(\n <MenuItem key=\"no-options-message\" disabled>\n <Typography>{noOptionsMessage}</Typography>\n </MenuItem>,\n );\n } else {\n Object.entries(groupedOptions).forEach(([group, opts]) => {\n if (group !== '__default') {\n items.push(\n <ListSubheader key={group} disableSticky>\n {group}\n </ListSubheader>,\n );\n }\n opts.forEach((opt) => {\n const isSelected = multiple\n ? (value as TValue[] | undefined)?.includes(opt.value as TValue) ?? false\n : value === opt.value;\n\n items.push(\n renderSelectMenuItem({\n option: opt,\n selected: isSelected,\n customRender,\n }),\n );\n });\n });\n }\n return items;\n }, [\n groupedOptions,\n customRender,\n filterable,\n isAsync,\n search,\n loading,\n loadingMessage,\n noOptionsMessage,\n multiple,\n value,\n ]);\n\n // Handler de cambio\n const handleChangeInternal = (\n event: SelectChangeEvent<any>,\n rhfOnChange?: (...event: any[]) => void,\n ) => {\n const newValue = event.target.value;\n if (isRHFMode) {\n rhfOnChange?.(newValue);\n } else {\n (onChange as (val: TValue | TValue[]) => void)?.(newValue);\n }\n };\n\n // Sx mergeado (defaults + consumer)\n const mergedSx = [\n buildSelectSx(borderRadius, labelPosition),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : [sx]),\n ];\n\n // Render base\n const renderSelect = (\n selectValue: any,\n selectOnChange: any,\n onBlur?: any,\n inputRef?: any,\n rhfError?: boolean,\n rhfHelperText?: string,\n ) => {\n const finalError = rhfError ?? error;\n const finalHelperText = rhfHelperText ?? helperText;\n\n const inputElement =\n labelPosition === 'floating' ? (\n <OutlinedInput label={label} />\n ) : (\n <OutlinedInput />\n );\n\n const normalizedValue = normalizeSelectValue(selectValue, multiple);\n const isEmpty = isSelectValueEmpty(normalizedValue, multiple);\n\n // Shrink cuando hay valor, foco, o dropdown abierto.\n const shouldShrink = !isEmpty || isFocused || isOpen;\n // Placeholder solo cuando el label ya subió.\n const shouldDisplayPlaceholder = isEmpty && (isFocused || isOpen) && !!placeholder;\n\n return (\n <FormControl\n fullWidth\n size={size}\n error={finalError}\n disabled={disabled}\n className={className}\n sx={mergedSx}\n >\n {label && <InputLabel shrink={shouldShrink}>{label}</InputLabel>}\n <MuiSelect\n value={normalizedValue}\n defaultValue={defaultValue}\n multiple={multiple}\n onChange={selectOnChange}\n onBlur={(e) => {\n setIsFocused(false);\n onBlur?.(e);\n }}\n onFocus={() => setIsFocused(true)}\n onOpen={() => setIsOpen(true)}\n onClose={() => setIsOpen(false)}\n renderValue={(selected) => (\n <SelectValue<TValue>\n selected={selected as TValue | TValue[]}\n options={currentOptions}\n multiple={multiple}\n placeholder={placeholder}\n maxChipsToShow={maxChipsToShow}\n chipVariant={chipVariant}\n renderChipLabel={renderChipLabel}\n currentValues={(value as TValue[]) ?? []}\n onDeleteChip={(next) =>\n (onChange as (v: TValue | TValue[]) => void)?.(next)\n }\n />\n )}\n displayEmpty={shouldDisplayPlaceholder}\n input={inputElement}\n disabled={disabled}\n MenuProps={{\n PaperProps: {\n style: { maxHeight, maxWidth },\n },\n }}\n inputRef={inputRef}\n {...(rest as any)}\n >\n {menuItems}\n </MuiSelect>\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n };\n\n // Branch: RHF vs controlado\n if (isRHFMode) {\n const rhfProps = rest as RHFSelectProps<TValue>;\n return (\n <Controller\n name={rhfProps.name}\n control={rhfProps.control}\n rules={rhfProps.validation}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderSelect(\n field.value,\n (e: SelectChangeEvent<any>) => handleChangeInternal(e, field.onChange),\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n )\n }\n />\n );\n }\n\n return renderSelect(value, (e: SelectChangeEvent<any>) => handleChangeInternal(e));\n}\n\nexport default Select;\n"],"names":["buildFormFieldSx","jsx","ListSubheader","TextField","Typography","Fragment","jsxs","Box","Chip","Avatar","MenuItem","ListItemIcon","useTheme","resolvePreset","useMemo","isValidElement","_a","useState","useRef","useEffect","CircularProgress","OutlinedInput","FormControl","InputLabel","MuiSelect","FormHelperText","Controller"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { default as React, ReactElement } from 'react';
1
+ import { ReactElement, ReactNode } from 'react';
2
+ import { SelectProps as MuiSelectProps } from '@mui/material';
2
3
  import { Control, RegisterOptions } from 'react-hook-form';
3
4
  export interface SelectOption {
4
5
  value: string | number;
@@ -8,13 +9,19 @@ export interface SelectOption {
8
9
  group?: string;
9
10
  [key: string]: any;
10
11
  }
11
- type RenderOptionItem = (item: SelectOption) => React.ReactNode;
12
- type RenderChipLabel = (item: SelectOption) => React.ReactNode;
13
- interface BaseSelectProps<TValue extends SelectOption['value'] = SelectOption['value']> {
12
+ export type LabelPosition = 'outside' | 'floating';
13
+ export type ChipVariant = 'outlined' | 'filled';
14
+ export type SelectSize = 'small' | 'medium';
15
+ export type RenderOptionItem = (item: SelectOption) => ReactNode;
16
+ export type RenderChipLabel = (item: SelectOption) => ReactNode;
17
+ export interface OptionProps {
18
+ children: RenderOptionItem;
19
+ }
20
+ export interface BaseSelectProps<TValue extends SelectOption['value'] = SelectOption['value']> {
14
21
  label?: string;
15
22
  options?: SelectOption[];
16
23
  defaultValue?: TValue | TValue[];
17
- size?: 'small' | 'medium';
24
+ size?: SelectSize;
18
25
  multiple?: boolean;
19
26
  filterable?: boolean;
20
27
  placeholder?: string;
@@ -25,23 +32,39 @@ interface BaseSelectProps<TValue extends SelectOption['value'] = SelectOption['v
25
32
  maxWidth?: number | string;
26
33
  maxChipsToShow?: number;
27
34
  renderChipLabel?: RenderChipLabel;
28
- chipVariant?: 'outlined' | 'filled';
35
+ chipVariant?: ChipVariant;
29
36
  loadOptions?: (inputValue: string) => Promise<SelectOption[]>;
30
- loadingMessage?: React.ReactNode;
31
- noOptionsMessage?: React.ReactNode;
37
+ loadingMessage?: ReactNode;
38
+ noOptionsMessage?: ReactNode;
32
39
  debounceTimeout?: number;
33
40
  disabled?: boolean;
34
41
  error?: boolean;
35
42
  helperText?: string;
43
+ /** Border radius del input (px o string CSS). Default: 10 */
44
+ borderRadius?: number | string;
45
+ /**
46
+ * Posición del label.
47
+ * - "outside" (default): label arriba del input, sin animación.
48
+ * - "floating": label clásico de MUI (flota dentro del notched outline).
49
+ */
50
+ labelPosition?: LabelPosition;
51
+ /**
52
+ * Nombre del preset de estilo registrado en `theme.styles.Select`.
53
+ * - `"default"` (o ausente) = estilo built-in del paquete.
54
+ * - Cualquier otro string = mergea el preset encima del estilo built-in.
55
+ */
56
+ preset?: string;
57
+ sx?: MuiSelectProps['sx'];
58
+ className?: string;
36
59
  }
37
- interface RHFSelectProps<TValue extends SelectOption['value'] = SelectOption['value']> extends BaseSelectProps<TValue> {
60
+ export interface RHFSelectProps<TValue extends SelectOption['value'] = SelectOption['value']> extends BaseSelectProps<TValue> {
38
61
  name: string;
39
62
  control: Control<any>;
40
63
  validation?: RegisterOptions;
41
64
  value?: TValue | TValue[];
42
65
  onChange?: (val: TValue | TValue[]) => void;
43
66
  }
44
- interface StandardSelectProps<TValue extends SelectOption['value'] = SelectOption['value']> extends BaseSelectProps<TValue> {
67
+ export interface StandardSelectProps<TValue extends SelectOption['value'] = SelectOption['value']> extends BaseSelectProps<TValue> {
45
68
  name?: string;
46
69
  control?: never;
47
70
  validation?: never;
@@ -49,9 +72,6 @@ interface StandardSelectProps<TValue extends SelectOption['value'] = SelectOptio
49
72
  onChange: (val: TValue | TValue[]) => void;
50
73
  }
51
74
  export type SelectProps<TValue extends SelectOption['value'] = SelectOption['value']> = RHFSelectProps<TValue> | StandardSelectProps<TValue>;
52
- export interface OptionProps {
53
- children: RenderOptionItem;
54
- }
55
75
  export declare function Option(_props: OptionProps): null;
56
76
  export declare namespace Option {
57
77
  var displayName: string;
@@ -11,4 +11,7 @@ export declare const ConstrainedWidthDefinition = "\nimport React, { useState }
11
11
  export declare const AllFeaturesCombinedDefinition = "\nimport React, { useState } from 'react';\nimport { Select, Option } from './Select'; // Asumiendo que Select.tsx est\u00E1 en el mismo directorio\nimport { Avatar, Box, Typography, Chip } from '@mui/material';\n\nconst allOptions = [\n { value: 'gt', label: 'Guatemala', group: 'Centroam\u00E9rica' },\n { value: 'admin', label: 'Administrador', img: 'https://placehold.co/40x40?text=A' },\n { value: 'PENDING', label: 'Pendiente' },\n { value: 'ca', label: 'Canad\u00E1', group: 'Norteam\u00E9rica' },\n { value: 'user', label: 'Usuario', img: 'https://placehold.co/40x40?text=U' },\n { value: 'COMPLETED', label: 'Completado' },\n];\n\nexport const AllFeaturesCombinedExample = () => {\n const [value, setValue] = useState<string[]>(['gt', 'admin', 'PENDING', 'ca', 'user', 'COMPLETED']);\n return (\n <Box sx={{ width: 500 }}>\n <Select\n label=\"Selecci\u00F3n Completa\"\n multiple\n filterable\n maxChipsToShow={3}\n maxHeight={250}\n maxWidth=\"400px\"\n options={allOptions}\n value={value}\n onChange={(val) => setValue(val as string[])}\n placeholder=\"Busca y selecciona todo tipo de elementos\"\n renderChipLabel={(item) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n {item.img && <Avatar src={item.img} sx={{ width: 16, height: 16 }} />}\n <Typography variant=\"caption\" sx={{ fontWeight: 'bold' }}>\n {item.label.length > 10 ? item.label.substring(0, 7) + '...' : item.label}\n </Typography>\n </Box>\n )}\n >\n <Option>\n {(item) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, my: 0.5 }}>\n {item.img && <Avatar src={item.img} sx={{ width: 28, height: 28 }} />}\n <Box>\n <Typography variant=\"body2\" fontWeight=\"medium\">{item.label}</Typography>\n {item.group && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n Grupo: {item.group}\n </Typography>\n )}\n {item.disabled && <Chip label=\"No disponible\" size=\"small\" color=\"warning\" sx={{ ml: 1 }} />}\n </Box>\n </Box>\n )}\n </Option>\n </Select>\n <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>\n </Box>\n );\n};\n";
12
12
  export declare const EmptyOptionsDefinition = "\nimport React, { useState } from 'react';\nimport { Select } from './Select'; // Asumiendo que Select.tsx est\u00E1 en el mismo directorio\nimport { Box, Typography } from '@mui/material';\n\nexport const EmptyOptionsExample = () => {\n const [value, setValue] = useState(null);\n return (\n <Box sx={{ width: 300 }}>\n <Select\n label=\"Seleccionar (Vac\u00EDo)\"\n options={[]}\n value={value}\n onChange={setValue}\n placeholder=\"No hay opciones disponibles\"\n />\n <Typography sx={{ mt: 2 }}>Valor seleccionado: {value || 'Ninguno'}</Typography>\n </Box>\n );\n};\n";
13
13
  export declare const SelectWithManyOptionsDefinition = "\nimport React, { useState } from 'react';\nimport { Select } from './Select'; // Asumiendo que Select.tsx est\u00E1 en el mismo directorio\nimport { Box, Typography } from '@mui/material';\n\nconst manyOptions = Array.from({ length: 50 }, (_, i) => ({\n value: `option-${i}`,\n label: `Opci\u00F3n ${i + 1}`,\n group: i < 25 ? 'Grupo A' : 'Grupo B',\n}));\n\nexport const SelectWithManyOptionsExample = () => {\n const [value, setValue] = useState('');\n return (\n <Box sx={{ width: 300 }}>\n <Select\n label=\"Muchas Opciones\"\n options={manyOptions}\n value={value}\n onChange={(val) => setValue(val as string)}\n filterable\n maxHeight={200}\n />\n <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>\n </Box>\n );\n};\n";
14
+ export declare const LabelPositionFloatingDefinition = "\nimport React, { useState } from 'react';\nimport { Select } from './Select';\nimport { Box, Typography } from '@mui/material';\n\nconst basicOptions = [\n { value: '10', label: '10' },\n { value: '25', label: '25' },\n { value: '50', label: '50' },\n { value: '100', label: '100' },\n];\n\nexport const LabelPositionFloatingExample = () => {\n const [value, setValue] = useState('');\n return (\n <Box sx={{ width: 300 }}>\n <Select\n label=\"Label flotante (MUI nativo)\"\n options={basicOptions}\n value={value}\n onChange={(val) => setValue(val as string)}\n labelPosition=\"floating\"\n />\n <Typography sx={{ mt: 2 }}>Valor seleccionado: {value || 'Ninguno'}</Typography>\n </Box>\n );\n};\n";
15
+ export declare const CustomBorderRadiusDefinition = "\nimport React, { useState } from 'react';\nimport { Select } from './Select';\nimport { Box } from '@mui/material';\n\nconst basicOptions = [\n { value: '10', label: '10' },\n { value: '25', label: '25' },\n { value: '50', label: '50' },\n { value: '100', label: '100' },\n];\n\nexport const CustomBorderRadiusExample = () => {\n const [valueA, setValueA] = useState('25');\n const [valueB, setValueB] = useState('25');\n const [valueC, setValueC] = useState('25');\n return (\n <Box sx={{ width: 300, display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Select\n label=\"Sin border radius\"\n options={basicOptions}\n value={valueA}\n onChange={(val) => setValueA(val as string)}\n borderRadius={0}\n />\n <Select\n label=\"Border radius est\u00E1ndar\"\n options={basicOptions}\n value={valueB}\n onChange={(val) => setValueB(val as string)}\n borderRadius={10}\n />\n <Select\n label=\"Pill-shaped\"\n options={basicOptions}\n value={valueC}\n onChange={(val) => setValueC(val as string)}\n borderRadius={999}\n />\n </Box>\n );\n};\n";
16
+ export declare const CustomStylingDefinition = "\nimport React, { useState } from 'react';\nimport { Select } from './Select';\nimport { Box, Typography } from '@mui/material';\n\nconst userOptions = [\n { value: 'admin', label: 'Administrador', img: 'https://placehold.co/40x40?text=A' },\n { value: 'user', label: 'Usuario', img: 'https://placehold.co/40x40?text=U' },\n { value: 'moderator', label: 'Moderador', img: 'https://placehold.co/40x40?text=M' },\n];\n\nexport const CustomStylingExample = () => {\n const [value, setValue] = useState<string[]>(['admin']);\n return (\n <Box sx={{ width: 360 }}>\n <Select\n label=\"Select con estilos personalizados\"\n options={userOptions}\n multiple\n value={value}\n onChange={(val) => setValue(val as string[])}\n placeholder=\"Selecciona usuarios\"\n sx={{\n '& .MuiInputBase-root': {\n backgroundColor: 'action.hover',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: 'primary.main',\n borderWidth: '2px',\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: 'primary.dark',\n },\n }}\n />\n <Typography sx={{ mt: 2 }}>Valor seleccionado: {JSON.stringify(value)}</Typography>\n </Box>\n );\n};\n";
14
17
  export declare const AsyncSelectDefinition = "\nimport React, { useState } from 'react';\nimport { Select } from './Select';\nimport { Box, Typography } from '@mui/material';\n\nconst mockAsyncOptions = [\n { value: 'apple', label: 'Apple' },\n { value: 'banana', label: 'Banana' },\n { value: 'orange', label: 'Orange' },\n { value: 'grape', label: 'Grape' },\n { value: 'strawberry', label: 'Strawberry' },\n { value: 'blueberry', label: 'Blueberry' },\n { value: 'pineapple', label: 'Pineapple' },\n];\n\n// Simulate an API call\nconst simulatedLoadOptions = (inputValue: string): Promise<any[]> => {\n return new Promise((resolve) => {\n setTimeout(() => {\n const filtered = mockAsyncOptions.filter(option =>\n option.label.toLowerCase().includes(inputValue.toLowerCase())\n );\n resolve(filtered);\n }, 800); // Simulate network delay\n });\n};\n\nexport const AsyncSelectExample = () => {\n const [value, setValue] = useState('');\n return (\n <Box sx={{ width: 300 }}>\n <Select\n label=\"Buscar Frutas\"\n loadOptions={simulatedLoadOptions}\n value={value}\n onChange={(val) => setValue(val as string)}\n placeholder=\"Escribe para buscar...\"\n loadingMessage=\"Buscando frutas...\"\n noOptionsMessage=\"No se encontraron frutas.\"\n />\n <Typography sx={{ mt: 2 }}>Valor seleccionado: {value}</Typography>\n </Box>\n );\n};\n";
@@ -0,0 +1,28 @@
1
+ import { SelectOption } from './Select';
2
+ /**
3
+ * Filtra opciones por `label` (case-insensitive). Si `search` es vacío,
4
+ * devuelve el array completo. Solo se usa en modo no-async.
5
+ */
6
+ export declare const filterOptionsByLabel: (options: SelectOption[], search: string) => SelectOption[];
7
+ /**
8
+ * Agrupa opciones por la propiedad `group`. Las opciones sin group caen
9
+ * bajo la key especial `__default`. Devuelve un Record para iterar en orden
10
+ * de inserción con Object.entries.
11
+ */
12
+ export declare const groupOptions: (options: SelectOption[]) => Record<string, SelectOption[]>;
13
+ /**
14
+ * Determina si un conjunto de grupos está efectivamente vacío
15
+ * (no hay grupos o solo existe `__default` sin items).
16
+ */
17
+ export declare const isGroupedOptionsEmpty: (groups: Record<string, SelectOption[]>) => boolean;
18
+ /**
19
+ * Normaliza el valor actual al shape que espera el MUI Select:
20
+ * - multiple: siempre array (aunque esté vacío).
21
+ * - single: string vacío si null/undefined.
22
+ */
23
+ export declare const normalizeSelectValue: <T>(value: T | T[] | null | undefined, multiple: boolean) => T | T[] | "";
24
+ /**
25
+ * Evalúa si el valor actual está vacío (para decidir shrink del label
26
+ * y visibilidad del placeholder).
27
+ */
28
+ export declare const isSelectValueEmpty: (normalizedValue: unknown, multiple: boolean) => boolean;