@soyfri/shared-library 4.0.0 → 4.0.2

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 (209) hide show
  1. package/{ActionMenu-wNWkDZWh.cjs → ActionMenu-D81Xb35f.cjs} +3 -3
  2. package/ActionMenu-D81Xb35f.cjs.map +1 -0
  3. package/{ActionMenu-BXRVKopM.js → ActionMenu-DYPA_tYk.js} +3 -3
  4. package/ActionMenu-DYPA_tYk.js.map +1 -0
  5. package/{Select-BaY3zJhq.js → Select-BIUq3ZPy.js} +8 -3
  6. package/Select-BIUq3ZPy.js.map +1 -0
  7. package/{Select-WpHNCHHz.cjs → Select-C06gHRqZ.cjs} +8 -3
  8. package/Select-C06gHRqZ.cjs.map +1 -0
  9. package/components/ActionMenu/ActionMenu.cjs +1 -1
  10. package/components/ActionMenu/ActionMenu.js +1 -1
  11. package/components/ActionMenu.d.ts +3 -3
  12. package/components/Alert.d.ts +3 -3
  13. package/components/AppBar.d.ts +3 -3
  14. package/components/Autocomplete.d.ts +3 -3
  15. package/components/Avatar.d.ts +1 -1
  16. package/components/Breadcrumbs.d.ts +3 -3
  17. package/components/Button.d.ts +1 -1
  18. package/components/ButtonGroup.d.ts +3 -3
  19. package/components/Card.d.ts +3 -3
  20. package/components/Checkbox.d.ts +3 -3
  21. package/components/Chip.d.ts +3 -3
  22. package/components/Column.d.ts +1 -1
  23. package/components/DataRow.d.ts +3 -3
  24. package/components/DatePicker.d.ts +3 -3
  25. package/components/DateTimePicker.d.ts +3 -3
  26. package/components/Divider.d.ts +3 -3
  27. package/components/Drawer.d.ts +3 -3
  28. package/components/EmptyState.d.ts +3 -3
  29. package/components/Flyout.d.ts +1 -1
  30. package/components/Gallery.d.ts +3 -3
  31. package/components/Icon.d.ts +3 -3
  32. package/components/Input.d.ts +3 -3
  33. package/components/InputGroup.d.ts +3 -3
  34. package/components/MenuButton.d.ts +1 -1
  35. package/components/Modal.d.ts +3 -3
  36. package/components/PageHeader.d.ts +3 -3
  37. package/components/RadioGroup.d.ts +3 -3
  38. package/components/Select/Select.cjs +1 -1
  39. package/components/Select/Select.js +1 -1
  40. package/components/Select.d.ts +3 -3
  41. package/components/Spinner.d.ts +3 -3
  42. package/components/Stat.d.ts +3 -3
  43. package/components/StatusMessage/StatusMessageContext.d.ts +16 -0
  44. package/components/StatusMessage.d.ts +3 -3
  45. package/components/Stepper.d.ts +3 -3
  46. package/components/Switch.d.ts +3 -3
  47. package/components/Table.d.ts +1 -1
  48. package/components/Tabs.d.ts +3 -3
  49. package/components/Timeline.d.ts +3 -3
  50. package/components/Tooltip.d.ts +1 -1
  51. package/hooks/ClipBoard/ClipBoard.cjs +43 -24
  52. package/hooks/ClipBoard/ClipBoard.cjs.map +1 -1
  53. package/{src/hooks → hooks}/ClipBoard/ClipBoard.d.ts +1 -1
  54. package/hooks/ClipBoard/ClipBoard.js +43 -24
  55. package/hooks/ClipBoard/ClipBoard.js.map +1 -1
  56. package/hooks/ClipBoard.d.ts +1 -1
  57. package/index.cjs +34 -2
  58. package/index.cjs.map +1 -1
  59. package/index.d.ts +62 -2
  60. package/index.js +11 -3
  61. package/{src/mui.d.ts → mui.d.ts} +1 -0
  62. package/package.json +1 -1
  63. package/ActionMenu-BXRVKopM.js.map +0 -1
  64. package/ActionMenu-wNWkDZWh.cjs.map +0 -1
  65. package/Select-BaY3zJhq.js.map +0 -1
  66. package/Select-WpHNCHHz.cjs.map +0 -1
  67. package/src/components/Autocomplete/Autocomplete.definitions.d.ts +0 -15
  68. package/src/components/Avatar/Avatar.definitions.d.ts +0 -11
  69. package/src/components/Button/Button.definition.d.ts +0 -11
  70. package/src/components/Card/Card.definition.d.ts +0 -1
  71. package/src/components/Chip/Chip.definitions.d.ts +0 -10
  72. package/src/components/DatePicker/DatePicker.definitions.d.ts +0 -8
  73. package/src/components/DateTimePicker/DateTimePicker.definitions.d.ts +0 -12
  74. package/src/components/Input/Input.definitions.d.ts +0 -15
  75. package/src/components/InputGroup/InputGroup.definitions.d.ts +0 -6
  76. package/src/components/RadioGroup/RadioGroup.definitions.d.ts +0 -6
  77. package/src/components/Stepper/Stepper.definition.d.ts +0 -2
  78. package/src/components/Switch/Switch.definitions.d.ts +0 -7
  79. package/src/components/Table/Table.definition.d.ts +0 -14
  80. package/src/components/Tabs/Tab.definition.d.ts +0 -3
  81. package/src/components/Timeline/Timeline.definition.d.ts +0 -3
  82. package/src/index.d.ts +0 -62
  83. /package/{src/components → components}/ActionMenu/ActionMenu.d.ts +0 -0
  84. /package/{src/components → components}/ActionMenu/index.d.ts +0 -0
  85. /package/{src/components → components}/Alert/Alert.d.ts +0 -0
  86. /package/{src/components → components}/Alert/index.d.ts +0 -0
  87. /package/{src/components → components}/AppBar/AppBar.d.ts +0 -0
  88. /package/{src/components → components}/AppBar/AppBar.sx.d.ts +0 -0
  89. /package/{src/components → components}/AppBar/AppBarContext.d.ts +0 -0
  90. /package/{src/components → components}/AppBar/AppBarMenuToggle.d.ts +0 -0
  91. /package/{src/components → components}/AppBar/index.d.ts +0 -0
  92. /package/{src/components → components}/Autocomplete/Autocomplete.d.ts +0 -0
  93. /package/{src/components → components}/Autocomplete/Autocomplete.helpers.d.ts +0 -0
  94. /package/{src/components → components}/Autocomplete/Autocomplete.sx.d.ts +0 -0
  95. /package/{src/components → components}/Autocomplete/_parts/AutocompleteChips.d.ts +0 -0
  96. /package/{src/components → components}/Autocomplete/_parts/AutocompleteLoader.d.ts +0 -0
  97. /package/{src/components → components}/Autocomplete/_parts/AutocompleteOption.d.ts +0 -0
  98. /package/{src/components → components}/Autocomplete/index.d.ts +0 -0
  99. /package/{src/components → components}/Avatar/Avatar.d.ts +0 -0
  100. /package/{src/components → components}/Avatar/index.d.ts +0 -0
  101. /package/{src/components → components}/Breadcrumbs/Breadcrumbs.d.ts +0 -0
  102. /package/{src/components → components}/Breadcrumbs/index.d.ts +0 -0
  103. /package/{src/components → components}/Button/Button.d.ts +0 -0
  104. /package/{src/components → components}/Button/index.d.ts +0 -0
  105. /package/{src/components → components}/ButtonGroup/ButtonGroup.d.ts +0 -0
  106. /package/{src/components → components}/ButtonGroup/index.d.ts +0 -0
  107. /package/{src/components → components}/Card/Card.d.ts +0 -0
  108. /package/{src/components → components}/Card/Card.sx.d.ts +0 -0
  109. /package/{src/components → components}/Card/index.d.ts +0 -0
  110. /package/{src/components → components}/Checkbox/Checkbox.d.ts +0 -0
  111. /package/{src/components → components}/Checkbox/Checkbox.sx.d.ts +0 -0
  112. /package/{src/components → components}/Checkbox/index.d.ts +0 -0
  113. /package/{src/components → components}/Chip/Chip.d.ts +0 -0
  114. /package/{src/components → components}/Chip/index.d.ts +0 -0
  115. /package/{src/components → components}/Column/Column.d.ts +0 -0
  116. /package/{src/components → components}/Column/index.d.ts +0 -0
  117. /package/{src/components → components}/DataRow/DataRow.d.ts +0 -0
  118. /package/{src/components → components}/DataRow/index.d.ts +0 -0
  119. /package/{src/components → components}/DatePicker/DatePicker.d.ts +0 -0
  120. /package/{src/components → components}/DatePicker/DatePicker.helpers.d.ts +0 -0
  121. /package/{src/components → components}/DatePicker/DatePicker.sx.d.ts +0 -0
  122. /package/{src/components → components}/DatePicker/index.d.ts +0 -0
  123. /package/{src/components → components}/DateTimePicker/DateTimePicker.d.ts +0 -0
  124. /package/{src/components → components}/DateTimePicker/DateTimePicker.helpers.d.ts +0 -0
  125. /package/{src/components → components}/DateTimePicker/DateTimePicker.sx.d.ts +0 -0
  126. /package/{src/components → components}/DateTimePicker/index.d.ts +0 -0
  127. /package/{src/components → components}/Divider/Divider.d.ts +0 -0
  128. /package/{src/components → components}/Divider/index.d.ts +0 -0
  129. /package/{src/components → components}/Drawer/Drawer.d.ts +0 -0
  130. /package/{src/components → components}/Drawer/Drawer.sx.d.ts +0 -0
  131. /package/{src/components → components}/Drawer/DrawerContext.d.ts +0 -0
  132. /package/{src/components → components}/Drawer/DrawerItem.d.ts +0 -0
  133. /package/{src/components → components}/Drawer/index.d.ts +0 -0
  134. /package/{src/components → components}/EmptyState/EmptyState.d.ts +0 -0
  135. /package/{src/components → components}/EmptyState/index.d.ts +0 -0
  136. /package/{src/components → components}/Flyout/Flyout.d.ts +0 -0
  137. /package/{src/components → components}/Flyout/index.d.ts +0 -0
  138. /package/{src/components → components}/Gallery/Gallery.d.ts +0 -0
  139. /package/{src/components → components}/Gallery/Gallery.definition.d.ts +0 -0
  140. /package/{src/components → components}/Gallery/GalleryLightbox.d.ts +0 -0
  141. /package/{src/components → components}/Gallery/GalleryMain.d.ts +0 -0
  142. /package/{src/components → components}/Gallery/GalleryThumbnails.d.ts +0 -0
  143. /package/{src/components → components}/Gallery/index.d.ts +0 -0
  144. /package/{src/components → components}/Icon/Icon.d.ts +0 -0
  145. /package/{src/components → components}/Icon/index.d.ts +0 -0
  146. /package/{src/components → components}/Input/Input.d.ts +0 -0
  147. /package/{src/components → components}/Input/Input.helpers.d.ts +0 -0
  148. /package/{src/components → components}/Input/Input.sx.d.ts +0 -0
  149. /package/{src/components → components}/Input/index.d.ts +0 -0
  150. /package/{src/components → components}/InputGroup/InputGroup.d.ts +0 -0
  151. /package/{src/components → components}/InputGroup/index.d.ts +0 -0
  152. /package/{src/components → components}/MenuButton/MenuButton.d.ts +0 -0
  153. /package/{src/components → components}/MenuButton/index.d.ts +0 -0
  154. /package/{src/components → components}/Modal/Modal.d.ts +0 -0
  155. /package/{src/components → components}/Modal/ModalBody.d.ts +0 -0
  156. /package/{src/components → components}/Modal/ModalFooter.d.ts +0 -0
  157. /package/{src/components → components}/Modal/ModalHeader.d.ts +0 -0
  158. /package/{src/components → components}/Modal/index.d.ts +0 -0
  159. /package/{src/components → components}/PageHeader/PageHeader.d.ts +0 -0
  160. /package/{src/components → components}/PageHeader/index.d.ts +0 -0
  161. /package/{src/components → components}/RadioGroup/RadioGroup.d.ts +0 -0
  162. /package/{src/components → components}/RadioGroup/RadioGroup.sx.d.ts +0 -0
  163. /package/{src/components → components}/RadioGroup/index.d.ts +0 -0
  164. /package/{src/components → components}/Select/Select.d.ts +0 -0
  165. /package/{src/components → components}/Select/Select.helpers.d.ts +0 -0
  166. /package/{src/components → components}/Select/Select.sx.d.ts +0 -0
  167. /package/{src/components → components}/Select/_parts/SelectMenuItem.d.ts +0 -0
  168. /package/{src/components → components}/Select/_parts/SelectValue.d.ts +0 -0
  169. /package/{src/components → components}/Select/index.d.ts +0 -0
  170. /package/{src/components → components}/Spinner/Spinner.d.ts +0 -0
  171. /package/{src/components → components}/Spinner/index.d.ts +0 -0
  172. /package/{src/components → components}/Stat/Stat.d.ts +0 -0
  173. /package/{src/components → components}/Stat/index.d.ts +0 -0
  174. /package/{src/components → components}/StatusMessage/StatusMessage.d.ts +0 -0
  175. /package/{src/components → components}/StatusMessage/index.d.ts +0 -0
  176. /package/{src/components → components}/Stepper/Step.d.ts +0 -0
  177. /package/{src/components → components}/Stepper/Stepper.d.ts +0 -0
  178. /package/{src/components → components}/Stepper/StepperContext.d.ts +0 -0
  179. /package/{src/components → components}/Stepper/_hooks/useHorizontalScroll.d.ts +0 -0
  180. /package/{src/components → components}/Stepper/_parts/StepperScrollArrow.d.ts +0 -0
  181. /package/{src/components → components}/Stepper/index.d.ts +0 -0
  182. /package/{src/components → components}/Switch/Switch.d.ts +0 -0
  183. /package/{src/components → components}/Switch/Switch.sx.d.ts +0 -0
  184. /package/{src/components → components}/Switch/Switch.types.d.ts +0 -0
  185. /package/{src/components → components}/Switch/index.d.ts +0 -0
  186. /package/{src/components → components}/Table/Table.d.ts +0 -0
  187. /package/{src/components → components}/Table/data.d.ts +0 -0
  188. /package/{src/components → components}/Table/exportsUtils.d.ts +0 -0
  189. /package/{src/components → components}/Table/index.d.ts +0 -0
  190. /package/{src/components → components}/Table/types.d.ts +0 -0
  191. /package/{src/components → components}/Tabs/Tab.d.ts +0 -0
  192. /package/{src/components → components}/Tabs/Tabs.d.ts +0 -0
  193. /package/{src/components → components}/Tabs/_tabUtils.d.ts +0 -0
  194. /package/{src/components → components}/Tabs/index.d.ts +0 -0
  195. /package/{src/components → components}/Timeline/Timeline.d.ts +0 -0
  196. /package/{src/components → components}/Timeline/TimelineItem.d.ts +0 -0
  197. /package/{src/components → components}/Timeline/index.d.ts +0 -0
  198. /package/{src/components → components}/Tooltip/Tooltip.d.ts +0 -0
  199. /package/{src/components → components}/Tooltip/index.d.ts +0 -0
  200. /package/{src/components → components}/_shared/formField.sx.d.ts +0 -0
  201. /package/{src/components → components}/_shared/mergeSx.d.ts +0 -0
  202. /package/{src/components → components}/_shared/resolvePreset.d.ts +0 -0
  203. /package/{src/demos → demos}/themes.d.ts +0 -0
  204. /package/{src/hooks → hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
  205. /package/{src/hooks → hooks}/ClipBoard/index.d.ts +0 -0
  206. /package/{src/theme → theme}/componentStyles.d.ts +0 -0
  207. /package/{src/theme → theme}/tokens.d.ts +0 -0
  208. /package/{src/utils → utils}/index.d.ts +0 -0
  209. /package/{src/utils → utils}/scrollToTop.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionMenu-wNWkDZWh.cjs","sources":["../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useContext,\n useState,\n type ReactElement,\n type ReactNode,\n type MouseEvent,\n} from 'react';\nimport {\n IconButton,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n Tooltip,\n type MenuItemProps as MuiMenuItemProps,\n} from '@mui/material';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ActionMenuProps {\n /** Items del menú. Normalmente `<ActionMenuItem>` o `<Divider />`. */\n children: ReactNode;\n /**\n * Elemento disparador — cualquier componente clickeable (Button, Chip, IconButton…).\n * El ActionMenu le inyecta `onClick` automáticamente. Si se omite, se usa un\n * IconButton de tres puntos por defecto.\n */\n trigger?: ReactElement;\n /** Texto de tooltip sobre el trigger default. Default: \"Acciones\". */\n triggerTooltip?: string;\n /** Anchor origin del menu. Default: { vertical: 'bottom', horizontal: 'right' }. */\n anchorOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** Transform origin del menu. Default: { vertical: 'top', horizontal: 'right' }. */\n transformOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** sx del Menu (Paper interno). */\n menuSx?: SxProps<Theme>;\n /** Deshabilita el trigger entero. */\n disabled?: boolean;\n}\n\ninterface ActionMenuContextValue {\n close: () => void;\n}\n\nconst ActionMenuContext = createContext<ActionMenuContextValue | null>(null);\n\nexport const ActionMenu: React.FC<ActionMenuProps> = ({\n children,\n trigger,\n triggerTooltip,\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n menuSx,\n disabled = false,\n}) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleClose = () => setAnchorEl(null);\n\n // Abre el menú anclándolo al elemento que recibió el click.\n const openMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) return;\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n // Si el consumer pasó un trigger (ej. <Button>), le inyectamos onClick.\n // Si no, usamos el IconButton de tres puntos por defecto.\n const triggerElement = trigger ? (\n React.cloneElement(trigger as ReactElement<any>, {\n onClick: openMenu,\n disabled,\n })\n ) : (\n <Tooltip title={triggerTooltip} arrow>\n <IconButton\n size=\"small\"\n onClick={openMenu}\n disabled={disabled}\n aria-label={triggerTooltip}\n >\n <MoreVertIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n );\n\n const paperSx = [\n { minWidth: 180 },\n ...(Array.isArray(menuSx) ? menuSx : menuSx ? [menuSx] : []),\n ] as SxProps<Theme>;\n\n return (\n <>\n {triggerElement}\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{ paper: { sx: paperSx } }}\n >\n <ActionMenuContext.Provider value={{ close: handleClose }}>\n {children}\n </ActionMenuContext.Provider>\n </Menu>\n </>\n );\n};\n\nexport interface ActionMenuItemProps\n extends Omit<MuiMenuItemProps, 'children' | 'onClick'> {\n /** Icono opcional a la izquierda. */\n icon?: ReactNode;\n /** Texto (o nodo) del item. */\n children: ReactNode;\n /** Handler de click. El menú se cierra automáticamente después. */\n onClick?: (event: MouseEvent<HTMLLIElement>) => void;\n}\n\n/**\n * Item del `ActionMenu`. Se cierra automáticamente al hacer click.\n * Acepta todos los props de `MenuItem` de MUI (disabled, selected, sx, …).\n */\nexport const ActionMenuItem = forwardRef<HTMLLIElement, ActionMenuItemProps>(\n function ActionMenuItem({ icon, children, onClick, ...rest }, ref) {\n const ctx = useContext(ActionMenuContext);\n\n const handleClick = (event: MouseEvent<HTMLLIElement>) => {\n event.stopPropagation();\n onClick?.(event);\n ctx?.close();\n };\n\n return (\n <MenuItem ref={ref} onClick={handleClick} {...rest}>\n {icon && <ListItemIcon sx={{ minWidth: 32 }}>{icon}</ListItemIcon>}\n <ListItemText primary={children} />\n </MenuItem>\n );\n },\n);\n\nexport default ActionMenu;\n"],"names":["createContext","useState","jsx","Tooltip","IconButton","jsxs","Fragment","Menu","forwardRef","ActionMenuItem","useContext","MenuItem","ListItemIcon","ListItemText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,MAAM,oBAAoBA,MAAAA,cAA6C,IAAI;AAEpE,MAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,EAAE,UAAU,UAAU,YAAY,QAAA;AAAA,EACjD,kBAAkB,EAAE,UAAU,OAAO,YAAY,QAAA;AAAA,EACjD;AAAA,EACA,WAAW;AACb,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIC,MAAAA,SAA6B,IAAI;AACjE,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,cAAc,MAAM,YAAY,IAAI;AAG1C,QAAM,WAAW,CAAC,UAAmC;AACnD,QAAI,SAAU;AACd,UAAM,gBAAA;AACN,gBAAY,MAAM,aAAa;AAAA,EACjC;AAIA,QAAM,iBAAiB,UACrB,MAAM,aAAa,SAA8B;AAAA,IAC/C,SAAS;AAAA,IACT;AAAA,EAAA,CACD,IAEDC,2BAAAA,IAACC,SAAAA,WAAQ,OAAO,gBAAgB,OAAK,MACnC,UAAAD,2BAAAA;AAAAA,IAACE,SAAAA;AAAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,cAAY;AAAA,MAEZ,UAAAF,2BAAAA,IAAC,cAAA,EAAa,UAAS,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA,GAEnC;AAGF,QAAM,UAAU;AAAA,IACd,EAAE,UAAU,IAAA;AAAA,IACZ,GAAI,MAAM,QAAQ,MAAM,IAAI,SAAS,SAAS,CAAC,MAAM,IAAI,CAAA;AAAA,EAAC;AAG5D,SACEG,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,IAAA;AAAA,IACDJ,2BAAAA;AAAAA,MAACK,SAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,WAAW,EAAE,OAAO,EAAE,IAAI,UAAQ;AAAA,QAElC,UAAAL,2BAAAA,IAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAO,YAAA,GACzC,SAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAgBO,MAAM,iBAAiBM,MAAAA;AAAAA,EAC5B,SAASC,gBAAe,IAAsC,KAAK;AAA3C,iBAAE,QAAM,UAAU,YAAlB,IAA8B,iBAA9B,IAA8B,CAA5B,QAAM,YAAU;AACxC,UAAM,MAAMC,MAAAA,WAAW,iBAAiB;AAExC,UAAM,cAAc,CAAC,UAAqC;AACxD,YAAM,gBAAA;AACN,yCAAU;AACV,iCAAK;AAAA,IACP;AAEA,2CACGC,SAAAA,UAAA,+BAAS,KAAU,SAAS,eAAiB,OAA7C,EACE,UAAA;AAAA,MAAA,uCAASC,SAAAA,cAAA,EAAa,IAAI,EAAE,UAAU,GAAA,GAAO,UAAA,MAAK;AAAA,MACnDV,2BAAAA,IAACW,SAAAA,cAAA,EAAa,SAAS,SAAA,CAAU;AAAA,IAAA,IACnC;AAAA,EAEJ;AACF;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Select-BaY3zJhq.js","sources":["../src/components/Select/Select.sx.ts","../src/components/Select/Select.helpers.ts","../src/components/Select/_parts/SelectMenuItem.tsx","../src/components/Select/_parts/SelectValue.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 * 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 * Normaliza el valor single al shape que espera MUI Select: string vacío si\n * el valor es `null`/`undefined`.\n */\nexport const normalizeSelectValue = <T>(value: T | null | undefined): T | '' =>\n (value ?? '') as T | '';\n\n/** `true` si el valor está vacío (para shrink del label + placeholder). */\nexport const isSelectValueEmpty = (normalizedValue: unknown): boolean =>\n normalizedValue === '' ||\n normalizedValue === null ||\n normalizedValue === undefined;\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 { 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 {\n Children,\n isValidElement,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n FilledInput,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n OutlinedInput,\n Select as MuiSelect,\n TextField,\n InputAdornment,\n Box,\n type SelectChangeEvent,\n type SelectProps as MuiSelectProps,\n} from '@mui/material';\nimport SearchIcon from '@mui/icons-material/Search';\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 { FIELD_BORDER_RADIUS } from '../../theme/tokens';\nimport {\n groupOptions,\n isSelectValueEmpty,\n normalizeSelectValue,\n} from './Select.helpers';\nimport { renderSelectMenuItem } from './_parts/SelectMenuItem';\nimport { SelectValue } from './_parts/SelectValue';\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 SelectSize = 'small' | 'medium';\n\n// ── Render slots ─────────────────────────────────────────────────────────\nexport type RenderOptionItem = (item: SelectOption) => ReactNode;\n\n/** Variante visual de los chips en modo `multiple`. */\nexport type ChipVariant = 'filled' | 'outlined';\n/** Render custom del label de cada chip/valor seleccionado. */\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;\n size?: SelectSize;\n placeholder?: string;\n children?: ReactElement<{ children: RenderOptionItem }>;\n maxHeight?: number | string;\n maxWidth?: number | string;\n /** Si `true`, muestra un buscador arriba del menú para filtrar opciones. */\n filterable?: boolean;\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 /** MUI input variant. Default: 'outlined'. */\n variant?: 'outlined' | 'filled';\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 // `any` plano (no `Control<any>`): RHF tipa `Control<T>` con generics en\n // posiciones tanto contravariantes como covariantes (ej. `_subjects.state`).\n // Cuando el componente tiene generics propios (como `TValue` acá), TS se\n // confunde narroweando el discriminated union y `Control<any>` no logra\n // absorber `Control<MyForm>` en la comparación estructural profunda.\n // El `any` plano elimina ese ruido. RHF adentro sigue teniendo sus tipos\n // fuertes — solo degradamos la superficie del prop del Select.\n control: any;\n validation?: RegisterOptions;\n /**\n * Side-effect que corre después de que RHF actualiza el form state.\n * Útil para cascadas entre campos (ej. reset de municipio al cambiar\n * departamento). NO reemplaza al handler de RHF.\n */\n onValueChange?: (value: TValue) => void;\n multiple?: false;\n value?: never;\n onChange?: never;\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 multiple?: false;\n value: TValue;\n onChange: (val: TValue) => void;\n}\n\nexport interface MultipleSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> extends BaseSelectProps<TValue> {\n name?: string;\n control?: never;\n validation?: never;\n multiple: true;\n value: TValue[];\n onChange: (val: TValue[]) => void;\n /** Máximo de chips visibles antes de truncar con \"+N más\". Default: 3. */\n maxChipsToShow?: number;\n /** Variante visual de los chips. Default: 'filled'. */\n chipVariant?: ChipVariant;\n /** Render custom del label de cada chip. */\n renderChipLabel?: RenderChipLabel;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type SelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> =\n | RHFSelectProps<TValue>\n | StandardSelectProps<TValue>\n | MultipleSelectProps<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<\n TValue extends SelectOption['value'] = SelectOption['value'],\n>(props: SelectProps<TValue>) {\n const {\n label,\n options = [],\n defaultValue,\n size = 'small',\n placeholder,\n children,\n maxHeight = 300,\n maxWidth,\n disabled = false,\n error = false,\n helperText,\n borderRadius = FIELD_BORDER_RADIUS,\n labelPosition = 'outside',\n preset,\n variant = 'outlined',\n sx,\n className,\n multiple = false,\n maxChipsToShow = 3,\n chipVariant = 'filled',\n renderChipLabel,\n filterable = false,\n // Separamos estos aunque no se usen directamente acá — evita que lleguen\n // al DOM del MuiSelect via `{...rest}` y generen warnings de React.\n name: _nameIgnored,\n control: _controlIgnored,\n validation: _validationIgnored,\n value: _valueIgnored,\n onChange: _onChangeIgnored,\n ...rest\n } = props as StandardSelectProps<TValue> & {\n name?: string;\n control?: Control<any>;\n validation?: RegisterOptions;\n multiple?: boolean;\n maxChipsToShow?: number;\n chipVariant?: ChipVariant;\n renderChipLabel?: RenderChipLabel;\n filterable?: boolean;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('Select', preset, theme);\n\n const isRHFMode = 'control' in props && (props as RHFSelectProps<TValue>).control !== undefined;\n\n // Custom render opcional vía <Option>{item => ...}</Option>\n const customRender: RenderOptionItem | null = useMemo(() => {\n if (Children.count(children) === 1) {\n const child = 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 // Focus/open tracking para el comportamiento del label \"outside\".\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n // Texto del buscador (modo `filterable`).\n const [searchText, setSearchText] = useState('');\n\n const filteredOptions = useMemo(() => {\n if (!filterable || !searchText.trim()) return options;\n const q = searchText.trim().toLowerCase();\n return options.filter((opt) => opt.label.toLowerCase().includes(q));\n }, [options, filterable, searchText]);\n\n const groupedOptions = useMemo(\n () => groupOptions(filteredOptions),\n [filteredOptions],\n );\n\n // Items del menú (grupos + opciones). El buscador se inyecta aparte.\n const buildMenuItems = (currentValue: TValue | TValue[] | '') => {\n const items: ReactNode[] = [];\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 selected = Array.isArray(currentValue)\n ? currentValue.includes(opt.value as TValue)\n : currentValue === opt.value;\n items.push(\n renderSelectMenuItem({\n option: opt,\n selected,\n customRender,\n }),\n );\n });\n });\n return items;\n };\n\n const mergedSx = [\n ...(presetSx ? [presetSx] : [buildSelectSx(borderRadius, labelPosition)]),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n // Render base (común a RHF y controlled)\n const renderSelect = (\n selectValue: TValue | TValue[] | null | undefined,\n selectOnChange: (event: SelectChangeEvent<TValue | TValue[]>) => void,\n onBlur?: (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void,\n inputRef?: React.Ref<HTMLInputElement>,\n rhfError?: boolean,\n rhfHelperText?: string,\n onValuesChange?: (next: TValue[]) => void,\n ) => {\n const finalError = !!rhfError || !!error;\n const finalHelperText = rhfHelperText ?? helperText;\n\n const inputElement =\n variant === 'filled'\n ? <FilledInput />\n : labelPosition === 'floating'\n ? <OutlinedInput label={label} />\n : <OutlinedInput />;\n\n const normalizedValue = multiple\n ? ((selectValue as TValue[] | null | undefined) ?? [])\n : normalizeSelectValue(selectValue as TValue | null | undefined);\n const isEmpty = multiple\n ? (normalizedValue as TValue[]).length === 0\n : isSelectValueEmpty(normalizedValue);\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 =\n isEmpty && (isFocused || isOpen) && !!placeholder;\n\n return (\n <FormControl\n fullWidth\n size={size}\n variant={variant}\n error={finalError}\n disabled={disabled}\n className={className}\n sx={mergedSx}\n >\n {label && <InputLabel shrink={shouldShrink}>{label}</InputLabel>}\n <MuiSelect<TValue | TValue[]>\n multiple={multiple}\n value={normalizedValue as TValue | TValue[]}\n onChange={selectOnChange}\n onBlur={(e) => {\n setIsFocused(false);\n onBlur?.(e);\n }}\n onFocus={() => setIsFocused(true)}\n onOpen={() => setIsOpen(true)}\n onClose={() => {\n setIsOpen(false);\n if (filterable) setSearchText('');\n }}\n renderValue={(selected) => (\n <SelectValue<TValue>\n selected={selected as TValue | TValue[]}\n options={options}\n multiple={multiple}\n placeholder={placeholder}\n maxChipsToShow={maxChipsToShow}\n chipVariant={chipVariant}\n renderChipLabel={renderChipLabel}\n currentValues={multiple ? (selected as TValue[]) : undefined}\n onDeleteChip={onValuesChange}\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 {filterable && (\n <Box\n sx={{ px: 1.5, py: 1, position: 'sticky', top: 0, zIndex: 1, bgcolor: 'background.paper' }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <TextField\n size=\"small\"\n fullWidth\n autoFocus\n placeholder=\"Buscar...\"\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n )}\n {buildMenuItems(normalizedValue as TValue | TValue[] | '')}\n </MuiSelect>\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n };\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if (isRHFMode) {\n const { name, control, validation, onValueChange } = props as RHFSelectProps<TValue>;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultValue}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderSelect(\n field.value ?? null,\n (e) => {\n const next = e.target.value as TValue;\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n (nextVals) => {\n field.onChange(nextVals);\n onValueChange?.(nextVals as unknown as TValue);\n },\n )\n }\n />\n );\n }\n\n // ── Controlled mode (single o multiple) ───────────────────────────────\n const { value, onChange } = props as\n | StandardSelectProps<TValue>\n | MultipleSelectProps<TValue>;\n const handleChange = onChange as (val: TValue | TValue[]) => void;\n return renderSelect(\n value as TValue | TValue[],\n (e) => handleChange(e.target.value as TValue | TValue[]),\n undefined,\n undefined,\n undefined,\n undefined,\n (next) => (onChange as (val: TValue[]) => void)(next),\n );\n}\n\nexport default Select;\n"],"names":["_a","MuiSelect"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Select-WpHNCHHz.cjs","sources":["../src/components/Select/Select.sx.ts","../src/components/Select/Select.helpers.ts","../src/components/Select/_parts/SelectMenuItem.tsx","../src/components/Select/_parts/SelectValue.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 * 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 * Normaliza el valor single al shape que espera MUI Select: string vacío si\n * el valor es `null`/`undefined`.\n */\nexport const normalizeSelectValue = <T>(value: T | null | undefined): T | '' =>\n (value ?? '') as T | '';\n\n/** `true` si el valor está vacío (para shrink del label + placeholder). */\nexport const isSelectValueEmpty = (normalizedValue: unknown): boolean =>\n normalizedValue === '' ||\n normalizedValue === null ||\n normalizedValue === undefined;\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 { 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 {\n Children,\n isValidElement,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n FilledInput,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n OutlinedInput,\n Select as MuiSelect,\n TextField,\n InputAdornment,\n Box,\n type SelectChangeEvent,\n type SelectProps as MuiSelectProps,\n} from '@mui/material';\nimport SearchIcon from '@mui/icons-material/Search';\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 { FIELD_BORDER_RADIUS } from '../../theme/tokens';\nimport {\n groupOptions,\n isSelectValueEmpty,\n normalizeSelectValue,\n} from './Select.helpers';\nimport { renderSelectMenuItem } from './_parts/SelectMenuItem';\nimport { SelectValue } from './_parts/SelectValue';\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 SelectSize = 'small' | 'medium';\n\n// ── Render slots ─────────────────────────────────────────────────────────\nexport type RenderOptionItem = (item: SelectOption) => ReactNode;\n\n/** Variante visual de los chips en modo `multiple`. */\nexport type ChipVariant = 'filled' | 'outlined';\n/** Render custom del label de cada chip/valor seleccionado. */\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;\n size?: SelectSize;\n placeholder?: string;\n children?: ReactElement<{ children: RenderOptionItem }>;\n maxHeight?: number | string;\n maxWidth?: number | string;\n /** Si `true`, muestra un buscador arriba del menú para filtrar opciones. */\n filterable?: boolean;\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 /** MUI input variant. Default: 'outlined'. */\n variant?: 'outlined' | 'filled';\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 // `any` plano (no `Control<any>`): RHF tipa `Control<T>` con generics en\n // posiciones tanto contravariantes como covariantes (ej. `_subjects.state`).\n // Cuando el componente tiene generics propios (como `TValue` acá), TS se\n // confunde narroweando el discriminated union y `Control<any>` no logra\n // absorber `Control<MyForm>` en la comparación estructural profunda.\n // El `any` plano elimina ese ruido. RHF adentro sigue teniendo sus tipos\n // fuertes — solo degradamos la superficie del prop del Select.\n control: any;\n validation?: RegisterOptions;\n /**\n * Side-effect que corre después de que RHF actualiza el form state.\n * Útil para cascadas entre campos (ej. reset de municipio al cambiar\n * departamento). NO reemplaza al handler de RHF.\n */\n onValueChange?: (value: TValue) => void;\n multiple?: false;\n value?: never;\n onChange?: never;\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 multiple?: false;\n value: TValue;\n onChange: (val: TValue) => void;\n}\n\nexport interface MultipleSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> extends BaseSelectProps<TValue> {\n name?: string;\n control?: never;\n validation?: never;\n multiple: true;\n value: TValue[];\n onChange: (val: TValue[]) => void;\n /** Máximo de chips visibles antes de truncar con \"+N más\". Default: 3. */\n maxChipsToShow?: number;\n /** Variante visual de los chips. Default: 'filled'. */\n chipVariant?: ChipVariant;\n /** Render custom del label de cada chip. */\n renderChipLabel?: RenderChipLabel;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type SelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> =\n | RHFSelectProps<TValue>\n | StandardSelectProps<TValue>\n | MultipleSelectProps<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<\n TValue extends SelectOption['value'] = SelectOption['value'],\n>(props: SelectProps<TValue>) {\n const {\n label,\n options = [],\n defaultValue,\n size = 'small',\n placeholder,\n children,\n maxHeight = 300,\n maxWidth,\n disabled = false,\n error = false,\n helperText,\n borderRadius = FIELD_BORDER_RADIUS,\n labelPosition = 'outside',\n preset,\n variant = 'outlined',\n sx,\n className,\n multiple = false,\n maxChipsToShow = 3,\n chipVariant = 'filled',\n renderChipLabel,\n filterable = false,\n // Separamos estos aunque no se usen directamente acá — evita que lleguen\n // al DOM del MuiSelect via `{...rest}` y generen warnings de React.\n name: _nameIgnored,\n control: _controlIgnored,\n validation: _validationIgnored,\n value: _valueIgnored,\n onChange: _onChangeIgnored,\n ...rest\n } = props as StandardSelectProps<TValue> & {\n name?: string;\n control?: Control<any>;\n validation?: RegisterOptions;\n multiple?: boolean;\n maxChipsToShow?: number;\n chipVariant?: ChipVariant;\n renderChipLabel?: RenderChipLabel;\n filterable?: boolean;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('Select', preset, theme);\n\n const isRHFMode = 'control' in props && (props as RHFSelectProps<TValue>).control !== undefined;\n\n // Custom render opcional vía <Option>{item => ...}</Option>\n const customRender: RenderOptionItem | null = useMemo(() => {\n if (Children.count(children) === 1) {\n const child = 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 // Focus/open tracking para el comportamiento del label \"outside\".\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n // Texto del buscador (modo `filterable`).\n const [searchText, setSearchText] = useState('');\n\n const filteredOptions = useMemo(() => {\n if (!filterable || !searchText.trim()) return options;\n const q = searchText.trim().toLowerCase();\n return options.filter((opt) => opt.label.toLowerCase().includes(q));\n }, [options, filterable, searchText]);\n\n const groupedOptions = useMemo(\n () => groupOptions(filteredOptions),\n [filteredOptions],\n );\n\n // Items del menú (grupos + opciones). El buscador se inyecta aparte.\n const buildMenuItems = (currentValue: TValue | TValue[] | '') => {\n const items: ReactNode[] = [];\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 selected = Array.isArray(currentValue)\n ? currentValue.includes(opt.value as TValue)\n : currentValue === opt.value;\n items.push(\n renderSelectMenuItem({\n option: opt,\n selected,\n customRender,\n }),\n );\n });\n });\n return items;\n };\n\n const mergedSx = [\n ...(presetSx ? [presetSx] : [buildSelectSx(borderRadius, labelPosition)]),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n // Render base (común a RHF y controlled)\n const renderSelect = (\n selectValue: TValue | TValue[] | null | undefined,\n selectOnChange: (event: SelectChangeEvent<TValue | TValue[]>) => void,\n onBlur?: (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void,\n inputRef?: React.Ref<HTMLInputElement>,\n rhfError?: boolean,\n rhfHelperText?: string,\n onValuesChange?: (next: TValue[]) => void,\n ) => {\n const finalError = !!rhfError || !!error;\n const finalHelperText = rhfHelperText ?? helperText;\n\n const inputElement =\n variant === 'filled'\n ? <FilledInput />\n : labelPosition === 'floating'\n ? <OutlinedInput label={label} />\n : <OutlinedInput />;\n\n const normalizedValue = multiple\n ? ((selectValue as TValue[] | null | undefined) ?? [])\n : normalizeSelectValue(selectValue as TValue | null | undefined);\n const isEmpty = multiple\n ? (normalizedValue as TValue[]).length === 0\n : isSelectValueEmpty(normalizedValue);\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 =\n isEmpty && (isFocused || isOpen) && !!placeholder;\n\n return (\n <FormControl\n fullWidth\n size={size}\n variant={variant}\n error={finalError}\n disabled={disabled}\n className={className}\n sx={mergedSx}\n >\n {label && <InputLabel shrink={shouldShrink}>{label}</InputLabel>}\n <MuiSelect<TValue | TValue[]>\n multiple={multiple}\n value={normalizedValue as TValue | TValue[]}\n onChange={selectOnChange}\n onBlur={(e) => {\n setIsFocused(false);\n onBlur?.(e);\n }}\n onFocus={() => setIsFocused(true)}\n onOpen={() => setIsOpen(true)}\n onClose={() => {\n setIsOpen(false);\n if (filterable) setSearchText('');\n }}\n renderValue={(selected) => (\n <SelectValue<TValue>\n selected={selected as TValue | TValue[]}\n options={options}\n multiple={multiple}\n placeholder={placeholder}\n maxChipsToShow={maxChipsToShow}\n chipVariant={chipVariant}\n renderChipLabel={renderChipLabel}\n currentValues={multiple ? (selected as TValue[]) : undefined}\n onDeleteChip={onValuesChange}\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 {filterable && (\n <Box\n sx={{ px: 1.5, py: 1, position: 'sticky', top: 0, zIndex: 1, bgcolor: 'background.paper' }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <TextField\n size=\"small\"\n fullWidth\n autoFocus\n placeholder=\"Buscar...\"\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n }}\n />\n </Box>\n )}\n {buildMenuItems(normalizedValue as TValue | TValue[] | '')}\n </MuiSelect>\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n };\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if (isRHFMode) {\n const { name, control, validation, onValueChange } = props as RHFSelectProps<TValue>;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultValue}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderSelect(\n field.value ?? null,\n (e) => {\n const next = e.target.value as TValue;\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n (nextVals) => {\n field.onChange(nextVals);\n onValueChange?.(nextVals as unknown as TValue);\n },\n )\n }\n />\n );\n }\n\n // ── Controlled mode (single o multiple) ───────────────────────────────\n const { value, onChange } = props as\n | StandardSelectProps<TValue>\n | MultipleSelectProps<TValue>;\n const handleChange = onChange as (val: TValue | TValue[]) => void;\n return renderSelect(\n value as TValue | TValue[],\n (e) => handleChange(e.target.value as TValue | TValue[]),\n undefined,\n undefined,\n undefined,\n undefined,\n (next) => (onChange as (val: TValue[]) => void)(next),\n );\n}\n\nexport default Select;\n"],"names":["buildFormFieldSx","jsxs","MenuItem","jsx","ListItemIcon","Typography","Fragment","Box","Chip","Avatar","FIELD_BORDER_RADIUS","useTheme","resolvePreset","useMemo","Children","isValidElement","_a","useState","ListSubheader","FilledInput","OutlinedInput","FormControl","InputLabel","MuiSelect","TextField","InputAdornment","FormHelperText","Controller"],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export declare const SimpleAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box, Typography } from '@mui/material';\n\nconst options = [\n { value: '10', label: '10' },\n { value: '25', label: '25' },\n];\n\nexport const SimpleExample = () => {\n const [value, setValue] = useState(options[1]);\n\n return (\n <Box sx={{ width: 250 }}>\n <Autocomplete\n label=\"Registros por p\u00E1gina\"\n options={options}\n value={value}\n onChange={(val) => {\n setValue(val as string);\n }}\n />\n <Typography sx={{ mt: 2 }}>\n Valor: {value}\n </Typography>\n </Box>\n );\n};\n";
2
- export declare const WithPlaceholderAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box, Typography } from '@mui/material';\n\nexport const WithPlaceholderExample = () => {\n const [value, setValue] = useState(null);\n\n return (\n <Box sx={{ width: 300 }}>\n <Autocomplete\n label=\"Seleccione una opci\u00F3n\"\n options={[]}\n value={value}\n onChange={(val) => {\n setValue(val as string);\n }}\n placeholder=\"Ninguna opci\u00F3n seleccionada\"\n />\n <Typography sx={{ mt: 2 }}>\n {value || 'Ninguno'}\n </Typography>\n </Box>\n );\n};\n";
3
- export declare const MultipleAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: 'pending', label: 'Pendiente' },\n { value: 'approved', label: 'Aprobado' },\n];\n\nexport const MultipleExample = () => {\n const [value, setValue] = useState([]);\n\n return (\n <Box sx={{ width: 400 }}>\n <Autocomplete\n multiple\n options={options}\n value={value}\n onChange={(val) => {\n setValue(val as string[]);\n }}\n />\n </Box>\n );\n};\n";
4
- export declare const MultipleWithLimitAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\n\nexport const MultipleWithLimitExample = () => {\n const [value, setValue] = useState([]);\n\n return (\n <Autocomplete\n multiple\n maxChipsToShow={2}\n options={[]}\n value={value}\n onChange={(val) => {\n setValue(val as string[]);\n }}\n />\n );\n};\n";
5
- export declare const CustomRenderOptionAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Avatar, Box } from '@mui/material';\n\nconst users = [\n { value: 'admin', label: 'Administrador', img: '...' },\n];\n\nexport const CustomRenderExample = () => {\n const [value, setValue] = useState([]);\n\n return (\n <Autocomplete\n multiple\n options={users}\n value={value}\n onChange={(val) => {\n setValue(val as string[]);\n }}\n renderOptionItem={(item) => (\n <Box sx={{ display: 'flex', gap: 1 }}>\n <Avatar src={item.img} />\n {item.label}\n </Box>\n )}\n />\n );\n};\n";
6
- export declare const CustomChipRenderAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Typography } from '@mui/material';\n\nexport const CustomChipExample = () => {\n const [value, setValue] = useState([]);\n\n return (\n <Autocomplete\n multiple\n options={[]}\n value={value}\n onChange={(val) => {\n setValue(val as string[]);\n }}\n renderChipLabel={(item) => (\n <Typography variant=\"caption\">\n {item.label.charAt(0)}\n </Typography>\n )}\n />\n );\n};\n";
7
- export declare const LoadingAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\n\nexport const LoadingExample = () => {\n const [value, setValue] = useState(null);\n\n return (\n <Autocomplete\n loading\n options={[]}\n value={value}\n onChange={(val) => {\n\t\t\t\tsetValue(val as string);\n\t\t\t}}\n />\n );\n};\n";
8
- export declare const EmptyOptionsAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\n\nexport const EmptyExample = () => {\n const [value, setValue] = useState(null);\n\n return (\n <Autocomplete\n options={[]}\n value={value}\n onChange={(val) => {\n\t\t\t\tsetValue(val as string);\n\t\t\t}}\n placeholder=\"No hay opciones\"\n />\n );\n};\n";
9
- export declare const ManyOptionsAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\n\nconst options = Array.from({ length: 50 }, (_, i) => ({\n value: i,\n label: 'Opci\u00F3n ' + i,\n}));\n\nexport const ManyOptionsExample = () => {\n const [value, setValue] = useState(null);\n\n return (\n <Autocomplete\n options={options}\n value={value}\n onChange={(val) => {\n\t\t\t\tsetValue(val as string);\n\t\t\t}}\n />\n );\n};\n";
10
- export declare const WithErrorAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: '10', label: '10' },\n { value: '25', label: '25' },\n];\n\nexport const WithErrorExample = () => {\n const [value, setValue] = useState<string | null>(null);\n return (\n <Box sx={{ width: 300 }}>\n <Autocomplete\n label=\"Cantidad\"\n options={options}\n value={value}\n onChange={(val) => setValue(val as string | null)}\n error={!value}\n helperText={!value ? 'Debes seleccionar una cantidad' : ' '}\n />\n </Box>\n );\n};\n";
11
- export declare const LabelPositionAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box, Stack } from '@mui/material';\n\nconst options = [\n { value: 'a', label: 'Opci\u00F3n A' },\n { value: 'b', label: 'Opci\u00F3n B' },\n];\n\nexport const LabelPositionExample = () => {\n const [a, setA] = useState<string | null>(null);\n const [b, setB] = useState<string | null>(null);\n return (\n <Stack spacing={3} sx={{ width: 320 }}>\n <Autocomplete\n label=\"Outside (default)\"\n labelPosition=\"outside\"\n options={options}\n value={a}\n onChange={(val) => setA(val as string | null)}\n />\n <Autocomplete\n label=\"Floating\"\n labelPosition=\"floating\"\n options={options}\n value={b}\n onChange={(val) => setB(val as string | null)}\n />\n </Stack>\n );\n};\n";
12
- export declare const CustomBorderRadiusAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box, Stack } from '@mui/material';\n\nconst options = [\n { value: '10', label: '10' },\n { value: '25', label: '25' },\n];\n\nexport const CustomBorderRadiusExample = () => {\n const [a, setA] = useState<string | null>(null);\n const [b, setB] = useState<string | null>(null);\n const [c, setC] = useState<string | null>(null);\n return (\n <Stack spacing={2} sx={{ width: 300 }}>\n <Autocomplete label=\"0\" borderRadius={0} options={options} value={a} onChange={(v) => setA(v as string | null)} />\n <Autocomplete label=\"10 (default)\" borderRadius={10} options={options} value={b} onChange={(v) => setB(v as string | null)} />\n <Autocomplete label=\"24 (pill)\" borderRadius={24} options={options} value={c} onChange={(v) => setC(v as string | null)} />\n </Stack>\n );\n};\n";
13
- export declare const EmptyWithPlaceholderAutocompleteDefinition = "\nimport React, { useState } from 'react';\nimport Autocomplete from './Autocomplete';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: 'mx', label: 'M\u00E9xico' },\n { value: 'co', label: 'Colombia' },\n { value: 'ar', label: 'Argentina' },\n];\n\nexport const EmptyWithPlaceholderExample = () => {\n const [value, setValue] = useState<string | null>(null);\n return (\n <Box sx={{ width: 300 }}>\n <Autocomplete\n label=\"Pa\u00EDs\"\n placeholder=\"Buscar pa\u00EDs...\"\n options={options}\n value={value}\n onChange={(val) => setValue(val as string | null)}\n />\n </Box>\n );\n};\n";
14
- export declare const RHFAutocompleteDefinition = "\nimport React from 'react';\nimport { useForm } from 'react-hook-form';\nimport Autocomplete from './Autocomplete';\nimport { Box, Button, Stack } from '@mui/material';\n\nconst options = [\n { value: 'mx', label: 'M\u00E9xico' },\n { value: 'co', label: 'Colombia' },\n { value: 'ar', label: 'Argentina' },\n];\n\ntype FormValues = { country: string | null };\n\nexport const RHFExample = () => {\n const { control, handleSubmit, watch } = useForm<FormValues>({\n defaultValues: { country: null },\n });\n\n return (\n <Box component=\"form\" onSubmit={handleSubmit((data) => console.log(data))}>\n <Stack spacing={2} sx={{ width: 320 }}>\n <Autocomplete\n name=\"country\"\n control={control}\n validation={{ required: 'Campo requerido' }}\n label=\"Pa\u00EDs\"\n placeholder=\"Seleccione...\"\n options={options}\n />\n <Button type=\"submit\" variant=\"contained\">Guardar</Button>\n <Box>Valor actual: {JSON.stringify(watch('country'))}</Box>\n </Stack>\n </Box>\n );\n};\n";
15
- export declare const AsyncServiceAutocompleteDefinition: string;
@@ -1,11 +0,0 @@
1
- export declare const DefaultAvatarDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const DefaultAvatarExample = () => (\n <Avatar\n items={[\n { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=1' },\n { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=2' },\n ]}\n />\n);\n";
2
- export declare const WithTypeAndTextDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const WithTypeAndTextExample = () => (\n <Avatar\n type=\"Owner\"\n items={[{ text: 'Maria', imageUrl: 'https://i.pravatar.cc/150?img=5' }]}\n showText\n />\n);\n";
3
- export declare const WithBadgesAndTooltipDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const WithBadgesAndTooltipExample = () => (\n <Avatar\n showTooltip\n items={[\n { text: 'John D.', badge: 'JD', backgroundColor: '#EF5350', color: '#fff' },\n { text: 'Alice B.', badge: 'AB', backgroundColor: '#AB47BC', color: '#fff' },\n ]}\n />\n);\n";
4
- export declare const SizeSmallDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const SizeSmallExample = () => (\n <Avatar\n size=\"sm\"\n items={[\n { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=11' },\n { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=12' },\n { text: 'User Three', imageUrl: 'https://i.pravatar.cc/150?img=13' },\n ]}\n />\n);\n";
5
- export declare const SizeMediumDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const SizeMediumExample = () => (\n <Avatar\n size=\"md\"\n items={[\n { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=21' },\n { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=22' },\n { text: 'User Three', imageUrl: 'https://i.pravatar.cc/150?img=23' },\n ]}\n />\n);\n";
6
- export declare const SizeLargeDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const SizeLargeExample = () => (\n <Avatar\n size=\"lg\"\n items={[\n { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=31' },\n { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=32' },\n ]}\n />\n);\n";
7
- export declare const SizeExtraLargeDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const SizeExtraLargeExample = () => (\n <Avatar\n size=\"xl\"\n items={[{ text: 'Maria', imageUrl: 'https://i.pravatar.cc/150?img=5' }]}\n showText={false}\n />\n);\n";
8
- export declare const NumericSizeDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const NumericSizeExample = () => (\n <Avatar\n size={72}\n items={[\n { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=41' },\n { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=42' },\n ]}\n showText={false}\n />\n);\n";
9
- export declare const FallbackIconDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const FallbackIconExample = () => (\n <Avatar\n items={[\n { text: 'Without image' },\n { text: 'Broken image', imageUrl: 'https://example.invalid/broken.png' },\n ]}\n showTooltip\n />\n);\n";
10
- export declare const DisplayedAvatarsLimitDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const DisplayedAvatarsLimitExample = () => (\n <Avatar\n displayedAvatars={3}\n items={[\n { text: 'User 1', imageUrl: 'https://i.pravatar.cc/150?img=51' },\n { text: 'User 2', imageUrl: 'https://i.pravatar.cc/150?img=52' },\n { text: 'User 3', imageUrl: 'https://i.pravatar.cc/150?img=53' },\n { text: 'User 4', imageUrl: 'https://i.pravatar.cc/150?img=54' },\n { text: 'User 5', imageUrl: 'https://i.pravatar.cc/150?img=55' },\n ]}\n />\n);\n";
11
- export declare const CustomStylingDefinition = "\nimport { Avatar } from './Avatar';\n\nexport const CustomStylingExample = () => (\n <Avatar\n size=\"md\"\n items={[\n { text: 'User One', imageUrl: 'https://i.pravatar.cc/150?img=61' },\n { text: 'User Two', imageUrl: 'https://i.pravatar.cc/150?img=62' },\n ]}\n sx={{\n p: 1,\n borderRadius: 2,\n bgcolor: 'action.hover',\n }}\n avatarSx={{\n border: (theme) => '3px solid ' + theme.palette.primary.main,\n }}\n />\n);\n";
@@ -1,11 +0,0 @@
1
- export declare const DefaultButtonDefinition = "\n<Button variant=\"text\">\n Button\n</Button>\n";
2
- export declare const OutlinedButtonDefinition = "\n<Button variant=\"outlined\">\n Button\n</Button>\n";
3
- export declare const ContainedButtonDefinition = "\n<Button variant=\"contained\">\n Button\n</Button>\n";
4
- export declare const WithStartIconButtonDefinition = "\n<Button\n data-testid=\"button\"\n startIcon={<NotificationsIcon/>}\n variant=\"contained\"\n>\n Button\n</Button>\n";
5
- export declare const WithEndIconButtonDefinition = "\n<Button\n data-testid=\"button\"\n endIcon={<NotificationsIcon/>}\n variant=\"contained\"\n>\n Button\n</Button>\n";
6
- export declare const WithSmallSizeButtonDefinition = "\n<Button\n data-testid=\"button\"\n size=\"small\"\n variant=\"contained\"\n>\n Button\n</Button>\n";
7
- export declare const WithLargeSizeButtonDefinition = "\n<Button\n data-testid=\"button\"\n size=\"large\"\n variant=\"contained\"\n>\n Button\n</Button>\n";
8
- export declare const DisabledStateButtonDefinition = "\n<Button\n data-testid=\"button\"\n disabled\n variant=\"contained\"\n>\n Button\n</Button>";
9
- export declare const LoadingButtonDefinition = "\n<Button\n data-testid=\"button\"\n loading\n variant=\"contained\"\n>\n Button\n</Button>\n";
10
- export declare const LoadingIndicatorStartButtonDefinition = "\n<Button\n data-testid=\"button\"\n loading\n loadingPosition=\"start\"\n variant=\"contained\"\n>\n Button\n</Button>\n";
11
- export declare const LoadingIndicatorEndButtonDefinition = "\n<Button\n data-testid=\"button\"\n loading\n loadingPosition=\"end\"\n variant=\"contained\"\n>\n Button\n</Button>";
@@ -1 +0,0 @@
1
- export declare const DefaultCardDefinition = "\n<Card>\n Card\n</Card>\n";
@@ -1,10 +0,0 @@
1
- export declare const BasicChipDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const BasicChipExample = () => {\n return (\n <Chip label=\"Etiqueta B\u00E1sica\" />\n );\n};\n";
2
- export declare const ClickableChipDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const ClickableChipExample = () => {\n const handleClick = () => {\n alert('Chip clickeado!');\n };\n return (\n <Chip label=\"Clickeable\" onClick={handleClick} />\n );\n};\n";
3
- export declare const DeletableChipDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nexport const DeletableChipExample = () => {\n const handleDelete = () => {\n alert('Chip borrado!');\n };\n return (\n <Chip label=\"Borrable\" onDelete={handleDelete} deleteIcon={<DeleteIcon />} />\n );\n};\n";
4
- export declare const ChipWithAvatarDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Avatar, Box, Typography } from '@mui/material';\n\nexport const ChipWithAvatarExample = () => {\n return (\n <Chip\n label=\"Con Avatar\"\n avatar={<Avatar alt=\"Avatar\" src=\"https://placehold.co/40x40/FF7F50/FFFFFF?text=A\" />}\n />\n );\n};\n";
5
- export declare const ChipWithIconDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\nimport FaceIcon from '@mui/icons-material/Face';\n\nexport const ChipWithIconExample = () => {\n return (\n <Chip label=\"Con Icono\" icon={<FaceIcon />} />\n );\n};\n";
6
- export declare const DisabledChipDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const DisabledChipExample = () => {\n return (\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Chip label=\"Deshabilitado\" disabled />\n <Chip label=\"Deshabilitado Borrable\" onDelete={() => {}} disabled />\n </Box>\n );\n};\n";
7
- export declare const ChipVariantsDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const ChipVariantsExample = () => {\n return (\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Chip label=\"Filled (Default)\" />\n <Chip label=\"Outlined\" variant=\"outlined\" />\n </Box>\n );\n};\n";
8
- export declare const ChipColorsDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const ChipColorsExample = () => {\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>\n <Chip label=\"Default\" />\n <Chip label=\"Primary\" color=\"primary\" />\n <Chip label=\"Secondary\" color=\"secondary\" />\n <Chip label=\"Error\" color=\"error\" />\n <Chip label=\"Info\" color=\"info\" />\n <Chip label=\"Success\" color=\"success\" />\n <Chip label=\"Warning\" color=\"warning\" />\n <Chip label=\"Primary Outlined\" color=\"primary\" variant=\"outlined\" />\n <Chip label=\"Success Outlined\" color=\"success\" variant=\"outlined\" />\n </Box>\n );\n};\n";
9
- export declare const ChipSizesDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const ChipSizesExample = () => {\n return (\n <Box sx={{ display: 'flex', gap: 2, alignItems: 'center' }}>\n <Chip label=\"Peque\u00F1o\" size=\"small\" />\n <Chip label=\"Mediano (Default)\" size=\"medium\" />\n </Box>\n );\n};\n";
10
- export declare const CustomContentChipDefinition = "\nimport React from 'react';\nimport { Chip } from './Chip'; // Ajusta la ruta si es necesario\nimport { Box, Typography, Avatar } from '@mui/material';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\n\nexport const CustomContentChipExample = () => {\n const handleClick = () => alert('Perfil visto!');\n const handleDelete = () => alert('Perfil eliminado!');\n\n return (\n <Chip\n avatar={<Avatar src=\"https://placehold.co/40x40/87CEEB/FFFFFF?text=PR\" />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <CheckCircleOutlineIcon sx={{ fontSize: 16 }} />\n <Typography variant=\"body2\" sx={{ fontWeight: 'bold' }}>Perfil Completo</Typography>\n </Box>\n }\n onDelete={handleDelete}\n onClick={handleClick}\n color=\"info\"\n variant=\"outlined\"\n />\n );\n};\n";
@@ -1,8 +0,0 @@
1
- export declare const BasicDatePickerDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const BasicDatePickerExample = () => {\n const [selectedDate, setSelectedDate] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DatePicker\n label=\"Seleccionar Fecha\"\n selectedDate={selectedDate}\n onDateChange={setSelectedDate}\n />\n <Typography sx={{ mt: 2 }}>\n Fecha seleccionada: {selectedDate ? selectedDate.format('YYYY-MM-DD') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
2
- export declare const DatePickerWithMinMaxDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DatePickerWithMinMaxExample = () => {\n const [selectedDate, setSelectedDate] = useState(dayjs('2023-06-15'));\n const minDate = dayjs('2023-06-01');\n const maxDate = dayjs('2023-06-30');\n return (\n <Box sx={{ width: 300 }}>\n <DatePicker\n label=\"Fecha en Junio\"\n selectedDate={selectedDate}\n onDateChange={setSelectedDate}\n minDate={minDate}\n maxDate={maxDate}\n />\n <Typography sx={{ mt: 2 }}>\n Fecha seleccionada: {selectedDate ? selectedDate.format('YYYY-MM-DD') : 'Ninguna'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n (Rango: ${minDate.format('YYYY-MM-DD')} a ${maxDate.format('YYYY-MM-DD')})\n </Typography>\n </Box>\n );\n};\n";
3
- export declare const DateRangePickerDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateRangePickerExample = () => {\n const [startDate, setStartDate] = useState(dayjs('2023-01-01'));\n const [endDate, setEndDate] = useState(dayjs('2023-01-31'));\n\n const handleStartDateChange = (date) => {\n setStartDate(date);\n if (date && endDate && date.isAfter(endDate)) {\n setEndDate(date);\n }\n };\n\n const handleEndDateChange = (date) => {\n setEndDate(date);\n if (date && startDate && date.isBefore(startDate)) {\n setStartDate(date);\n }\n };\n\n return (\n <Box sx={{ display: 'flex', gap: 3, flexDirection: 'column' }}>\n <DatePicker\n label=\"Fecha de Inicio\"\n selectedDate={startDate}\n onDateChange={handleStartDateChange}\n maxDate={endDate || undefined}\n />\n <DatePicker\n label=\"Fecha de Fin\"\n selectedDate={endDate}\n onDateChange={handleEndDateChange}\n minDate={startDate || undefined}\n />\n <Typography>\n Inicio: {startDate ? startDate.format('YYYY-MM-DD') : 'N/A'} |\n Fin: {endDate ? endDate.format('YYYY-MM-DD') : 'N/A'}\n </Typography>\n </Box>\n );\n};\n";
4
- export declare const DatePickerWithErrorDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DatePickerWithErrorExample = () => {\n const [selectedDate, setSelectedDate] = useState(dayjs('2023-01-01'));\n // Intentamos establecer una fecha fuera de un rango muy restringido para forzar un error\n const minDate = dayjs('2023-01-05');\n const maxDate = dayjs('2023-01-10');\n\n return (\n <Box sx={{ width: 300 }}>\n <DatePicker\n label=\"Fecha (con error de rango)\"\n selectedDate={selectedDate}\n onDateChange={setSelectedDate}\n minDate={minDate}\n maxDate={maxDate}\n />\n <Typography sx={{ mt: 2 }}>\n Fecha seleccionada: {selectedDate ? selectedDate.format('YYYY-MM-DD') : 'Ninguna'}\n </Typography>\n <Typography variant=\"caption\" color=\"error\">\n (Intenta seleccionar una fecha fuera de ${minDate.format('YYYY-MM-DD')} - ${maxDate.format('YYYY-MM-DD')})\n </Typography>\n </Box>\n );\n};\n";
5
- export declare const DatePickerSmallSizeDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DatePickerSmallSizeExample = () => {\n const [selectedDate, setSelectedDate] = useState(dayjs());\n return (\n <Box sx={{ width: 250 }}>\n <DatePicker\n label=\"Fecha (Peque\u00F1o)\"\n selectedDate={selectedDate}\n onDateChange={setSelectedDate}\n slotProps={{ textField: { size: 'small' } }} // Prop para hacer el TextField peque\u00F1o\n />\n <Typography sx={{ mt: 2 }}>\n Fecha seleccionada: {selectedDate ? selectedDate.format('YYYY-MM-DD') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
6
- export declare const DatePickerDisabledDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DatePickerDisabledExample = () => {\n const [selectedDate, setSelectedDate] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DatePicker\n label=\"Fecha (Deshabilitado)\"\n selectedDate={selectedDate}\n onDateChange={setSelectedDate}\n disabled\n />\n <Typography sx={{ mt: 2 }}>\n Fecha seleccionada: {selectedDate ? selectedDate.format('YYYY-MM-DD') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
7
- export declare const DatePickerReadOnlyDefinition = "\n import React, { useState } from 'react';\n import { DatePicker } from '@soyfri/shared-library/DatePicker';\n import dayjs from 'dayjs';\n import { Box, Typography } from '@mui/material';\n\n export const DatePickerReadOnlyDefinition = () => {\n const [selectedDate, setSelectedDate] = useState<Dayjs | null>(dayjs('2024-07-24'));\n return (\n <Box sx={{ width: 300 }}>\n <DatePicker\n label=\"Fecha (Solo Lectura)\"\n selectedDate={selectedDate}\n onDateChange={() => {}} // No permite cambios\n readOnly\n />\n <Typography sx={{ mt: 2 }}>\n Fecha seleccionada: {selectedDate ? selectedDate.format('YYYY-MM-DD') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
8
- export declare const DatePickerEmptyWithMaskDefinition = "\nimport React, { useState } from 'react';\nimport { DatePicker } from '@soyfri/shared-library/DatePicker';\nimport { Dayjs } from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DatePickerEmptyWithMaskExample = () => {\n const [selectedDate, setSelectedDate] = useState<Dayjs | null>(null);\n return (\n <Box sx={{ width: 300 }}>\n <DatePicker\n label=\"Fecha\"\n selectedDate={selectedDate}\n onDateChange={setSelectedDate}\n format=\"DD/MM/YY\"\n />\n <Typography sx={{ mt: 2 }} variant=\"caption\" color=\"text.secondary\">\n Al estar vac\u00EDo, el campo muestra la m\u00E1scara del formato (DD/MM/AA).\n </Typography>\n </Box>\n );\n};\n";
@@ -1,12 +0,0 @@
1
- export declare const BasicDateTimePickerDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const BasicDateTimePickerExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Seleccionar Fecha y Hora\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
2
- export declare const DateTimePickerWithMinMaxDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerWithMinMaxExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs('2023-06-15T10:00'));\n const minDateTime = dayjs('2023-06-01T09:00');\n const maxDateTime = dayjs('2023-06-30T17:00');\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora en Junio\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n (Rango: ${minDateTime.format('YYYY-MM-DD HH:mm')} a ${maxDateTime.format('YYYY-MM-DD HH:mm')})\n </Typography>\n </Box>\n );\n};\n";
3
- export declare const DateTimePickerDisabledDefinition = "\nimport React, { useState } => from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerDisabledExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Deshabilitado)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n disabled\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
4
- export declare const DateTimePickerReadOnlyDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerReadOnlyExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs('2024-07-24T14:30'));\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Solo Lectura)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={() => {}} // No permite cambios\n readOnly\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
5
- export declare const DateTimePickerWithInitialNullDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerWithInitialNullExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(null);\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Sin Selecci\u00F3n Inicial)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
6
- export declare const DateTimePickerSmallSizeDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerSmallSizeExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs());\n return (\n <Box sx={{ width: 250 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Peque\u00F1o)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n slotProps={{ textField: { size: 'small' } }}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
7
- export declare const DateTimePickerWithButtonsDefinition = "\nimport React, { useState } => from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerWithButtonsExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Con Botones por Defecto)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n slotProps={{\n actionBar: {\n actions: ['clear', 'cancel', 'accept'],\n },\n }}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
8
- export declare const DateTimePickerWithCustomButtonTextDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerWithCustomButtonTextExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Botones Personalizados)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n clearButtonText=\"Limpiar Todo\"\n cancelButtonText=\"Descartar\"\n acceptButtonText=\"Confirmar Selecci\u00F3n\"\n slotProps={{\n actionBar: {\n actions: ['clear', 'cancel', 'accept'],\n },\n }}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
9
- export declare const DateTimePickerEmptyWithMaskDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport { Dayjs } from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerEmptyWithMaskExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState<Dayjs | null>(null);\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n inputFormat=\"DD/MM/YY HH:mm\"\n />\n <Typography sx={{ mt: 2 }} variant=\"caption\" color=\"text.secondary\">\n Al estar vac\u00EDo, el campo muestra la m\u00E1scara del formato (DD/MM/AA HH:MM).\n </Typography>\n </Box>\n );\n};\n";
10
- export declare const DateTimePickerWithAllMinutesDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { renderMultiSectionDigitalClockTimeView } from '@mui/x-date-pickers/timeViewRenderers';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerWithAllMinutesExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs('2023-06-15T10:00'));\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Todos los minutos)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n viewRenderers={{\n hours: renderMultiSectionDigitalClockTimeView,\n minutes: renderMultiSectionDigitalClockTimeView,\n }}\n minutesStep={1}\n timeSteps={{ minutes: 1 }}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
11
- export declare const DateTimePicker24hDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { renderMultiSectionDigitalClockTimeView } from '@mui/x-date-pickers/timeViewRenderers';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePicker24hExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs('2023-06-15T10:00'));\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Formato 24h)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n viewRenderers={{\n hours: renderMultiSectionDigitalClockTimeView,\n minutes: renderMultiSectionDigitalClockTimeView,\n }}\n minutesStep={1}\n timeSteps={{ minutes: 1 }}\n ampm={false}\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
12
- export declare const DateTimePickerWithCustomInputFormatDefinition = "\nimport React, { useState } from 'react';\nimport { DateTimePicker } from './DateTimePicker'; // Ajusta la ruta si es necesario\nimport dayjs from 'dayjs';\nimport { Box, Typography } from '@mui/material';\n\nexport const DateTimePickerWithCustomInputFormatExample = () => {\n const [selectedDateTime, setSelectedDateTime] = useState(dayjs());\n return (\n <Box sx={{ width: 300 }}>\n <DateTimePicker\n label=\"Fecha y Hora (Formato dd/MM/YYYY)\"\n selectedDateTime={selectedDateTime}\n onDateTimeChange={setSelectedDateTime}\n inputFormat=\"DD/MM/YYYY HH:mm\" // Formato de fecha personalizado\n />\n <Typography sx={{ mt: 2 }}>\n Seleccionado: ${selectedDateTime ? selectedDateTime.format('YYYY-MM-DD HH:mm') : 'Ninguna'}\n </Typography>\n </Box>\n );\n};\n";
@@ -1,15 +0,0 @@
1
- export declare const BasicTextInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const BasicTextInputExample = () => {\n const [value, setValue] = useState('Texto de ejemplo');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Nombre\"\n value={value}\n onChange={setValue}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
2
- export declare const NumberInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const NumberInputExample = () => {\n const [value, setValue] = useState(123);\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Cantidad\"\n type=\"number\"\n value={value}\n onChange={setValue}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
3
- export declare const EmailInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const EmailInputExample = () => {\n const [value, setValue] = useState('ejemplo@dominio.com');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Correo Electr\u00F3nico\"\n type=\"email\"\n value={value}\n onChange={setValue}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
4
- export declare const PasswordInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const PasswordInputExample = () => {\n const [value, setValue] = useState('micontrase\u00F1a');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Contrase\u00F1a\"\n type=\"password\"\n value={value}\n onChange={setValue}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
5
- export declare const InputWithPlaceholderDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const InputWithPlaceholderExample = () => {\n const [value, setValue] = useState('');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"B\u00FAsqueda\"\n placeholder=\"Escribe tu t\u00E9rmino de b\u00FAsqueda...\"\n value={value}\n onChange={setValue}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value || 'Vac\u00EDo'}</Typography>\n </Box>\n );\n};\n";
6
- export declare const InputWithErrorDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const InputWithErrorExample = () => {\n const [value, setValue] = useState('invalido');\n const hasError = value.length < 5 && value.length > 0;\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Nombre de usuario\"\n value={value}\n onChange={setValue}\n error={hasError}\n helperText={hasError ? 'M\u00EDnimo 5 caracteres' : ''}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
7
- export declare const DisabledInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const DisabledInputExample = () => {\n const [value, setValue] = useState('Campo deshabilitado');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Estado\"\n value={value}\n onChange={setValue}\n disabled\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
8
- export declare const ReadOnlyInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const ReadOnlyInputExample = () => {\n const [value, setValue] = useState('Valor de solo lectura');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Informaci\u00F3n\"\n value={value}\n onChange={setValue}\n readOnly\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
9
- export declare const InputVariantsDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const InputVariantsExample = () => {\n const [valueOutlined, setValueOutlined] = useState('Outlined');\n const [valueFilled, setValueFilled] = useState('Filled');\n const [valueStandard, setValueStandard] = useState('Standard');\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, width: 300 }}>\n <Input\n label=\"Esquema Outlined\"\n value={valueOutlined}\n onChange={setValueOutlined}\n variant=\"outlined\"\n />\n <Input\n label=\"Esquema Filled\"\n value={valueFilled}\n onChange={setValueFilled}\n variant=\"filled\"\n />\n <Input\n label=\"Esquema Standard\"\n value={valueStandard}\n onChange={setValueStandard}\n variant=\"standard\"\n />\n </Box>\n );\n};\n";
10
- export declare const InputSizesDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const InputSizesExample = () => {\n const [valueMedium, setValueMedium] = useState('Tama\u00F1o Mediano');\n const [valueSmall, setValueSmall] = useState('Tama\u00F1o Peque\u00F1o');\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, width: 300 }}>\n <Input\n label=\"Input Mediano\"\n value={valueMedium}\n onChange={setValueMedium}\n size=\"medium\"\n />\n <Input\n label=\"Input Peque\u00F1o\"\n value={valueSmall}\n onChange={setValueSmall}\n size=\"small\"\n />\n </Box>\n );\n};\n";
11
- export declare const FullWidthInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box, Typography } from '@mui/material';\n\nexport const FullWidthInputExample = () => {\n const [value, setValue] = useState('Ocupa todo el ancho');\n return (\n <Box sx={{ width: '100%' }}>\n <Input\n label=\"Input de Ancho Completo\"\n value={value}\n onChange={setValue}\n fullWidth\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
12
- export declare const LabelPositionFloatingDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box } from '@mui/material';\n\nexport const LabelPositionExample = () => {\n const [outside, setOutside] = useState('Outside (default)');\n const [floating, setFloating] = useState('Floating');\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, width: 300 }}>\n <Input\n label=\"Label outside\"\n value={outside}\n onChange={setOutside}\n labelPosition=\"outside\"\n />\n <Input\n label=\"Label floating (MUI cl\u00E1sico)\"\n value={floating}\n onChange={setFloating}\n labelPosition=\"floating\"\n />\n </Box>\n );\n};\n";
13
- export declare const CustomBorderRadiusDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box } from '@mui/material';\n\nexport const CustomBorderRadiusExample = () => {\n const [v, setV] = useState('Texto');\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, width: 300 }}>\n <Input label=\"Sin radius\" value={v} onChange={setV} borderRadius={0} />\n <Input label=\"Radius 4px\" value={v} onChange={setV} borderRadius={4} />\n <Input label=\"Default (10px)\" value={v} onChange={setV} />\n <Input label=\"Pill (24px)\" value={v} onChange={setV} borderRadius={24} />\n </Box>\n );\n};\n";
14
- export declare const CustomStylingDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input'; // Ajusta la ruta si es necesario\nimport { Box } from '@mui/material';\n\nexport const CustomStylingExample = () => {\n const [v, setV] = useState('Custom completo');\n return (\n <Box sx={{ width: 300 }}>\n <Input\n label=\"Combinado: bg + borderColor + label color\"\n value={v}\n onChange={setV}\n sx={{\n '& .MuiInputLabel-root': { color: 'primary.main' },\n '& .MuiOutlinedInput-root': { bgcolor: '#fff7e6' },\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: 'warning.main',\n borderWidth: 2,\n },\n }}\n />\n </Box>\n );\n};\n";
15
- export declare const MultilineInputDefinition = "\nimport React, { useState } from 'react';\nimport { Input } from './Input';\nimport { Box, Typography } from '@mui/material';\n\nexport const MultilineInputExample = () => {\n const [value, setValue] = useState('Escribe un comentario en varias l\u00EDneas...');\n return (\n <Box sx={{ width: 400 }}>\n <Input\n label=\"Comentario\"\n value={value}\n onChange={(v) => setValue(v.toString())}\n multiline\n minRows={3}\n maxRows={6}\n fullWidth\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
@@ -1,6 +0,0 @@
1
- export declare const BasicInputGroupDefinition = "\nimport { useState } from 'react';\nimport { Box, Typography } from '@mui/material';\nimport InputGroup from './InputGroup';\nimport { Input } from '../Input';\nimport { Button } from '../Button';\n\nexport const BasicInputGroupExample = () => {\n const [text, setText] = useState('');\n return (\n <Box>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Grupo de entrada b\u00E1sico\n </Typography>\n <InputGroup>\n <Input label=\"Buscar\" value={text} onChange={(val) => setText(val as string)} />\n <Button variant=\"outlined\">Buscar</Button>\n </InputGroup>\n </Box>\n );\n};\n";
2
- export declare const CombinedInputGroupDefinition = "\nimport { useState } from 'react';\nimport { Box, Typography } from '@mui/material';\nimport InputGroup from './InputGroup';\nimport { Input } from '../Input';\nimport Select, { SelectOption } from '../Select/Select';\nimport { Button } from '../Button';\n\nconst basicOptions: SelectOption[] = [\n { value: '10', label: '10' },\n { value: '25', label: '25' },\n { value: '50', label: '50' },\n { value: '100', label: '100' },\n];\n\nexport const CombinedInputGroupExample = () => {\n const [text, setText] = useState('');\n const [selectValue, setSelectValue] = useState('25');\n\n return (\n <Box>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Grupo de entrada combinado\n </Typography>\n <InputGroup>\n <Select\n label=\"Registros\"\n options={basicOptions}\n value={selectValue}\n onChange={(val) => setSelectValue(val as string)}\n />\n <Input\n label=\"Filtrar por nombre\"\n value={text}\n onChange={(val) => setText(val as string)}\n />\n <Button variant=\"contained\">Aplicar</Button>\n </InputGroup>\n </Box>\n );\n};\n";
3
- export declare const DatePickerInputGroupDefinition = "\nimport { useState } from 'react';\nimport { Box, Typography } from '@mui/material';\nimport dayjs, { Dayjs } from 'dayjs';\nimport InputGroup from './InputGroup';\nimport { DatePicker } from '../DatePicker';\nimport { Button } from '../Button';\n\nexport const DatePickerInputGroupExample = () => {\n const [selectedDate, setSelectedDate] = useState<Dayjs | null>(dayjs());\n\n return (\n <Box>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Grupo de entrada con DatePicker\n </Typography>\n <InputGroup>\n <DatePicker\n label=\"Fecha de inicio\"\n selectedDate={selectedDate}\n onDateChange={(date) => setSelectedDate(date)}\n />\n <Button variant=\"contained\">Ver calendario</Button>\n </InputGroup>\n </Box>\n );\n};\n";
4
- export declare const VerticalInputGroupDefinition = "\nimport { useState } from 'react';\nimport { Box } from '@mui/material';\nimport InputGroup from './InputGroup';\nimport { Input } from '../Input';\n\nexport const VerticalInputGroupExample = () => {\n const [nombre, setNombre] = useState('');\n const [email, setEmail] = useState('');\n\n return (\n <Box sx={{ width: 320 }}>\n <InputGroup orientation=\"vertical\">\n <Input label=\"Nombre\" value={nombre} onChange={(val) => setNombre(val as string)} />\n <Input label=\"Email\" value={email} onChange={(val) => setEmail(val as string)} />\n </InputGroup>\n </Box>\n );\n};\n";
5
- export declare const CustomStylingInputGroupDefinition = "\nimport { useState } from 'react';\nimport { Box } from '@mui/material';\nimport InputGroup from './InputGroup';\nimport { Input } from '../Input';\nimport { Button } from '../Button';\n\nexport const CustomStylingInputGroupExample = () => {\n const [q, setQ] = useState('');\n\n return (\n <Box sx={{ width: 500 }}>\n <InputGroup\n borderRadius={999}\n sx={{\n bgcolor: 'action.hover',\n borderColor: 'primary.main',\n }}\n >\n <Input label=\"B\u00FAsqueda avanzada\" value={q} onChange={(val) => setQ(val as string)} />\n <Button variant=\"contained\" color=\"primary\">Buscar</Button>\n </InputGroup>\n </Box>\n );\n};\n";
6
- export declare const DisabledInputGroupDefinition = "\nimport { Box } from '@mui/material';\nimport InputGroup from './InputGroup';\nimport { Input } from '../Input';\nimport { Button } from '../Button';\n\nexport const DisabledInputGroupExample = () => (\n <Box sx={{ width: 400 }}>\n <InputGroup disabled>\n <Input label=\"B\u00FAsqueda\" value=\"\" onChange={() => {}} disabled />\n <Button variant=\"outlined\" disabled>Buscar</Button>\n </InputGroup>\n </Box>\n);\n";
@@ -1,6 +0,0 @@
1
- export declare const BasicRadioGroupDefinition = "\nimport React, { useState } from 'react';\nimport { RadioGroup } from './RadioGroup';\nimport { Box, Typography } from '@mui/material';\n\nconst options = [\n { value: 'a', label: 'Opci\u00F3n A' },\n { value: 'b', label: 'Opci\u00F3n B' },\n { value: 'c', label: 'Opci\u00F3n C' },\n];\n\nexport const BasicRadioGroupExample = () => {\n const [value, setValue] = useState('a');\n return (\n <Box sx={{ width: 360 }}>\n <RadioGroup\n label=\"Selecciona una opci\u00F3n\"\n options={options}\n value={value}\n onChange={setValue}\n />\n <Typography sx={{ mt: 2 }}>Valor actual: {value}</Typography>\n </Box>\n );\n};\n";
2
- export declare const ColumnRadioGroupDefinition = "\nimport React, { useState } from 'react';\nimport { RadioGroup } from './RadioGroup';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: 'sm', label: 'Peque\u00F1o' },\n { value: 'md', label: 'Mediano' },\n { value: 'lg', label: 'Grande' },\n];\n\nexport const ColumnRadioGroupExample = () => {\n const [value, setValue] = useState('md');\n return (\n <Box sx={{ width: 360 }}>\n <RadioGroup\n label=\"Tama\u00F1o\"\n options={options}\n value={value}\n onChange={setValue}\n row={false}\n />\n </Box>\n );\n};\n";
3
- export declare const RadioGroupWithErrorDefinition = "\nimport React, { useState } from 'react';\nimport { RadioGroup } from './RadioGroup';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: 'yes', label: 'S\u00ED' },\n { value: 'no', label: 'No' },\n];\n\nexport const RadioGroupWithErrorExample = () => {\n const [value, setValue] = useState('');\n const hasError = !value;\n return (\n <Box sx={{ width: 360 }}>\n <RadioGroup\n label=\"\u00BFAceptas los t\u00E9rminos?\"\n options={options}\n value={value}\n onChange={setValue}\n error={hasError}\n helperText={hasError ? 'Este campo es obligatorio' : ''}\n />\n </Box>\n );\n};\n";
4
- export declare const DisabledRadioGroupDefinition = "\nimport React, { useState } from 'react';\nimport { RadioGroup } from './RadioGroup';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: 'a', label: 'Opci\u00F3n A' },\n { value: 'b', label: 'Opci\u00F3n B', disabled: true },\n { value: 'c', label: 'Opci\u00F3n C' },\n];\n\nexport const DisabledRadioGroupExample = () => {\n const [value, setValue] = useState('a');\n return (\n <Box sx={{ width: 360 }}>\n {/* Bloqueo total */}\n <RadioGroup\n label=\"Grupo deshabilitado\"\n options={options}\n value={value}\n onChange={setValue}\n disabled\n />\n {/* Bloqueo por opci\u00F3n */}\n <RadioGroup\n label=\"Opci\u00F3n B deshabilitada\"\n options={options}\n value={value}\n onChange={setValue}\n sx={{ mt: 3 }}\n />\n </Box>\n );\n};\n";
5
- export declare const UnborderedRadioGroupDefinition = "\nimport React, { useState } from 'react';\nimport { RadioGroup } from './RadioGroup';\nimport { Box } from '@mui/material';\n\nconst options = [\n { value: 'a', label: 'Opci\u00F3n A' },\n { value: 'b', label: 'Opci\u00F3n B' },\n];\n\nexport const UnborderedRadioGroupExample = () => {\n const [value, setValue] = useState('a');\n return (\n <Box sx={{ width: 360 }}>\n <RadioGroup\n options={options}\n value={value}\n onChange={setValue}\n bordered={false}\n />\n </Box>\n );\n};\n";
6
- export declare const RHFRadioGroupDefinition = "\nimport React from 'react';\nimport { useForm } from 'react-hook-form';\nimport { RadioGroup } from './RadioGroup';\nimport { Box, Button, Typography } from '@mui/material';\n\nconst options = [\n { value: 'paypal', label: 'PayPal' },\n { value: 'card', label: 'Tarjeta' },\n { value: 'transfer', label: 'Transferencia' },\n];\n\nexport const RHFRadioGroupExample = () => {\n const { control, handleSubmit, watch } = useForm({\n defaultValues: { paymentMethod: 'card' },\n });\n const value = watch('paymentMethod');\n return (\n <Box sx={{ width: 360 }} component=\"form\" onSubmit={handleSubmit(console.log)}>\n <RadioGroup\n label=\"M\u00E9todo de pago\"\n options={options}\n name=\"paymentMethod\"\n control={control}\n validation={{ required: 'Selecciona un m\u00E9todo' }}\n />\n <Typography sx={{ mt: 2 }}>Valor en el form: {value}</Typography>\n <Button type=\"submit\" sx={{ mt: 1 }}>Enviar</Button>\n </Box>\n );\n};\n";
@@ -1,2 +0,0 @@
1
- export declare const defaultStepper: string;
2
- export declare const stepperWithColorDots: string;
@@ -1,7 +0,0 @@
1
- export declare const BasicSwitchDefinition = "\nimport React, { useState } from 'react';\nimport { Switch } from './Switch';\nimport { Box, Typography } from '@mui/material';\n\nexport const BasicSwitchExample = () => {\n const [checked, setChecked] = useState(false);\n return (\n <Box sx={{ width: 280 }}>\n <Switch checked={checked} onChange={setChecked} />\n <Typography sx={{ mt: 2 }}>Estado: {checked ? 'ON' : 'OFF'}</Typography>\n </Box>\n );\n};\n";
2
- export declare const SwitchWithLabelDefinition = "\nimport React, { useState } from 'react';\nimport { Switch } from './Switch';\nimport { Box } from '@mui/material';\n\nexport const SwitchWithLabelExample = () => {\n const [checked, setChecked] = useState(true);\n return (\n <Box sx={{ width: 280 }}>\n <Switch\n label=\"Notificaciones por email\"\n checked={checked}\n onChange={setChecked}\n />\n </Box>\n );\n};\n";
3
- export declare const BorderedSwitchDefinition = "\nimport React, { useState } from 'react';\nimport { Switch } from './Switch';\nimport { Box } from '@mui/material';\n\nexport const BorderedSwitchExample = () => {\n const [checked, setChecked] = useState(true);\n return (\n <Box sx={{ width: 360 }}>\n <Switch\n label=\"Recibir reportes diarios\"\n checked={checked}\n onChange={setChecked}\n bordered\n />\n </Box>\n );\n};\n";
4
- export declare const SwitchSizesDefinition = "\nimport React, { useState } from 'react';\nimport { Switch } from './Switch';\nimport { Box } from '@mui/material';\n\nexport const SwitchSizesExample = () => {\n const [a, setA] = useState(false);\n const [b, setB] = useState(true);\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, width: 280 }}>\n <Switch label=\"Peque\u00F1o\" size=\"small\" checked={a} onChange={setA} />\n <Switch label=\"Mediano (default)\" size=\"medium\" checked={b} onChange={setB} />\n </Box>\n );\n};\n";
5
- export declare const SwitchWithErrorDefinition = "\nimport React, { useState } from 'react';\nimport { Switch } from './Switch';\nimport { Box } from '@mui/material';\n\nexport const SwitchWithErrorExample = () => {\n const [checked, setChecked] = useState(false);\n const hasError = !checked;\n return (\n <Box sx={{ width: 320 }}>\n <Switch\n label=\"Aceptar t\u00E9rminos y condiciones\"\n checked={checked}\n onChange={setChecked}\n error={hasError}\n helperText={hasError ? 'Debes aceptar los t\u00E9rminos para continuar' : ''}\n />\n </Box>\n );\n};\n";
6
- export declare const DisabledSwitchDefinition = "\nimport React from 'react';\nimport { Switch } from './Switch';\nimport { Box } from '@mui/material';\n\nexport const DisabledSwitchExample = () => (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, width: 280 }}>\n <Switch label=\"Off bloqueado\" checked={false} onChange={() => {}} disabled />\n <Switch label=\"On bloqueado\" checked={true} onChange={() => {}} disabled />\n </Box>\n);\n";
7
- export declare const RHFSwitchDefinition = "\nimport React from 'react';\nimport { useForm } from 'react-hook-form';\nimport { Switch } from './Switch';\nimport { Box, Button, Typography } from '@mui/material';\n\nexport const RHFSwitchExample = () => {\n const { control, handleSubmit, watch } = useForm({\n defaultValues: { darkMode: false },\n });\n const value = watch('darkMode');\n return (\n <Box sx={{ width: 320 }} component=\"form\" onSubmit={handleSubmit(console.log)}>\n <Switch\n label=\"Modo oscuro\"\n name=\"darkMode\"\n control={control}\n bordered\n />\n <Typography sx={{ mt: 2 }}>Valor en el form: {String(value)}</Typography>\n <Button type=\"submit\" sx={{ mt: 1 }}>Enviar</Button>\n </Box>\n );\n};\n";
@@ -1,14 +0,0 @@
1
- export declare const BasicTableCode = "\n <Table data={data} visiblePageNumbers={5} pageSizeSelectorValue={1} pageSize={1}>\n <Column name=\"Nombre\" field=\"nombre\">\n {({ nombre }) => <Typography variant=\"body2\">{nombre}</Typography>}\n </Column>\n <Column name=\"Email\" field=\"email\">\n {({ email }) => <Typography variant=\"body2\" color=\"text.secondary\">{email}</Typography>}\n </Column>\n <Column name=\"Edad\" field=\"edad\">\n {({ edad }) => <Typography variant=\"body2\">{edad} a\u00F1os</Typography>}\n </Column>\n </Table>\n";
2
- export declare const ComplexComponentsCode = "\n <Table data={data}>\n <Column name=\"Usuario\" field={['avatar', 'nombre']}>\n {({ avatar, nombre }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Avatar src={avatar} alt={nombre} sx={{ width: 40, height: 40 }} />\n <Typography variant=\"body2\" fontWeight=\"medium\">{nombre}</Typography>\n </Box>\n )}\n </Column>\n <Column name=\"Estado\" field=\"activo\">\n {({ activo }) => (\n <Chip\n label={activo ? 'Activo' : 'Inactivo'}\n color={activo ? 'success' : 'default'}\n size=\"small\"\n />\n )}\n </Column>\n <Column name=\"Rol\" field=\"rol\">\n {({ rol }) => (\n <Chip\n label={rol!.charAt(0).toUpperCase() + rol!.slice(1)}\n color={rol === 'admin' ? 'primary' : rol === 'moderador' ? 'secondary' : 'default'}\n variant=\"outlined\"\n size=\"small\"\n />\n )}\n </Column>\n <Column name=\"Puntuaci\u00F3n\" field=\"puntuacion\">\n {({ puntuacion }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Rating value={puntuacion} max={5} precision={0.1} size=\"small\" readOnly />\n <Typography variant=\"caption\" color=\"text.secondary\">\n {puntuacion}\n </Typography>\n </Box>\n )}\n </Column>\n </Table>\n ";
3
- export declare const WithExternalPaginationControlCode = "\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(2);\n const totalItems = usuarios.length;\n const totalPages = Math.ceil(totalItems / pageSize);\n\n const startIndex = (currentPage - 1) * pageSize;\n const currentData = usuarios.slice(startIndex, startIndex + pageSize);\n\n const previousPageNum = currentPage > 1 ? currentPage - 1 : 1;\n const nextPageNum = currentPage < totalPages ? currentPage + 1 : totalPages;\n\n return (\n <Table\n data={currentData} // Pasa solo los datos de la p\u00E1gina actual\n currentPage={currentPage}\n pageSize={pageSize}\n totalPages={totalPages}\n previousPage={previousPageNum}\n nextPage={nextPageNum}\n onPageChange={setCurrentPage}\n onPageSizeChange={setPageSize}\n >\n <Column name=\"Nombre\" field=\"nombre\">\n {({ nombre }) => <Typography variant=\"body2\" fontWeight=\"medium\">{nombre}</Typography>}\n </Column>\n <Column name=\"Email\" field=\"email\">\n {({ email }) => <Typography variant=\"body2\" color=\"text.secondary\">{email}</Typography>}\n </Column>\n <Column name=\"Estado\" field=\"activo\">\n {({ activo }) => (\n <Chip\n label={activo ? 'Activo' : 'Inactivo'}\n color={activo ? 'success' : 'default'}\n size=\"small\"\n />\n )}\n </Column>\n <Column name=\"Fecha de Registro\" field=\"fechaRegistro\">\n {({ fechaRegistro }) => (\n <Typography variant=\"body2\">\n {new Date(fechaRegistro!).toLocaleDateString('es-ES')}\n </Typography>\n )}\n </Column>\n </Table>\n );\n ";
4
- export declare const ProductTableCode = "\n <Table data={data} pageSizeSelectorValue={pageSizeSelectorValue}>\n <Column name=\"Producto\" field={['imagen', 'nombre']}>\n {({ imagen, nombre }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Box\n component=\"img\"\n src={imagen}\n alt={nombre}\n sx={{ width: 50, height: 50, borderRadius: 1, objectFit: 'cover' }}\n />\n <Typography variant=\"body2\" fontWeight=\"medium\">{nombre}</Typography>\n </Box>\n )}\n </Column>\n <Column name=\"Precio\" field={['precio', 'enOferta']}>\n {({ precio, enOferta }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography\n variant=\"body2\"\n color={enOferta ? 'error.main' : 'text.primary'}\n fontWeight={enOferta ? 'bold' : 'normal'}\n >\n ${precio!.toLocaleString()}\n </Typography>\n {enOferta && (\n <Chip label=\"OFERTA\" color=\"error\" size=\"small\" />\n )}\n </Box>\n )}\n </Column>\n <Column name=\"Stock\" field=\"stock\">\n {({ stock }) => (\n <Chip\n label={stock! > 0 ? `${stock} unidades` : 'Sin stock'}\n color={stock! > 5 ? 'success' : stock! > 0 ? 'warning' : 'error'}\n size=\"small\"\n />\n )}\n </Column>\n <Column name=\"Categor\u00EDa\" field=\"categoria\">\n {({ categoria }) => (\n <Typography variant=\"body2\">{categoria}</Typography>\n )}\n </Column>\n <Column name=\"Rating\" field=\"rating\">\n {({ rating }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Rating value={rating} max={5} precision={0.1} size=\"small\" readOnly />\n <Typography variant=\"caption\">({rating})</Typography>\n </Box>\n )}\n </Column>\n </Table>\n ";
5
- export declare const EmployeeTableCode = "\n <Table data={data} pageSizeSelectorValue={pageSizeSelectorValue}>\n <Column name=\"Empleado\" field={['avatar', 'nombre', 'apellido']}>\n {({ avatar, nombre, apellido }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Avatar src={avatar} sx={{ width: 40, height: 40 }}>\n {avatar ? '' : `${nombre!.charAt(0)}${apellido!.charAt(0)}`}\n </Avatar>\n <Typography variant=\"body2\" fontWeight=\"medium\">\n {nombre} {apellido}\n </Typography>\n </Box>\n )}\n </Column>\n <Column name=\"Departamento\" field=\"departamento\">\n {({ departamento }) => (\n <Chip\n label={departamento}\n color=\"info\"\n variant=\"filled\"\n size=\"small\"\n />\n )}\n </Column>\n <Column name=\"Salario\" field=\"salario\">\n {({ salario }) => (\n <Typography variant=\"body2\" fontWeight=\"bold\" color=\"success.dark\">\n ${salario!.toLocaleString('es-ES')}\n </Typography>\n )}\n </Column>\n <Column name=\"Estado\" field={['activo', 'fechaIngreso']}>\n {({ activo, fechaIngreso }) => (\n <Box>\n <Chip\n label={activo ? 'Contratado' : 'Inactivo'}\n color={activo ? 'success' : 'error'}\n size=\"small\"\n />\n <Typography variant=\"caption\" display=\"block\" color=\"text.secondary\" sx={{ mt: 0.5 }}>\n Desde: {new Date(fechaIngreso!).toLocaleDateString('es-ES')}\n </Typography>\n </Box>\n )}\n </Column>\n </Table>\n ";
6
- export declare const EmptyTableCode = "\n <Table data={data}>\n <Column name=\"Nombre\" field=\"nombre\">\n {({ nombre }) => <Typography variant=\"body2\">{nombre}</Typography>}\n </Column>\n <Column name=\"Email\" field=\"email\">\n {({ email }) => <Typography variant=\"body2\">{email}</Typography>}\n </Column>\n <Column name=\"Estado\" field=\"activo\">\n {({ activo }) => <Chip label={activo ? 'Activo' : 'Inactivo'} size=\"small\" />}\n </Column>\n </Table>\n ";
7
- export declare const SingleRowCode = "\n <Table data={data}>\n <Column name=\"Usuario\" field={['avatar', 'nombre', 'email']}>\n {({ avatar, nombre, email }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Avatar src={avatar} alt={nombre} />\n <Box>\n <Typography variant=\"body2\" fontWeight=\"medium\">{nombre}</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">{email}</Typography>\n </Box>\n </Box>\n )}\n </Column>\n <Column<Usuario> name=\"Informaci\u00F3n\" field={[]}>\n {(user) => (\n <>\n <Typography variant=\"body2\">{user.edad} a\u00F1os</Typography>\n <Box sx={{ display: 'flex', gap: 1, mt: 0.5 }}>\n <Chip label={user.rol} size=\"small\" color=\"primary\" variant=\"outlined\" />\n <Chip\n label={user.activo ? 'Activo' : 'Inactivo'}\n size=\"small\"\n color={user.activo ? 'success' : 'default'}\n />\n </Box>\n </>\n )}\n </Column>\n </Table>\n ";
8
- export declare const ProductTableWithZeroStockHighlightedCode = "\n <Table data={data}>\n <Column name=\"Producto\" field={['imagen', 'nombre']}>\n {({ imagen, nombre }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Box\n component=\"img\"\n src={imagen}\n alt={nombre}\n sx={{ width: 50, height: 50, borderRadius: 1, objectFit: 'cover' }}\n />\n <Typography variant=\"body2\" fontWeight=\"medium\">{nombre}</Typography>\n </Box>\n )}\n </Column>\n <Column name=\"Precio\" field={['precio', 'enOferta']}>\n {({ precio, enOferta }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography\n variant=\"body2\"\n color={enOferta ? 'error.main' : 'text.primary'}\n fontWeight={enOferta ? 'bold' : 'normal'}\n >\n ${precio!.toLocaleString()}\n </Typography>\n {enOferta && (\n <Chip label=\"OFERTA\" color=\"error\" size=\"small\" />\n )}\n </Box>\n )}\n </Column>\n <Column name=\"Stock\" field=\"stock\">\n {({ stock }) => (\n <Chip\n label={stock! > 0 ? `${stock} unidades` : 'Sin stock'}\n color={stock!> 5 ? 'success' : stock! > 0 ? 'warning' : 'error'}\n size=\"small\"\n sx={{ backgroundColor: stock === 0 ? 'rgba(255, 0, 0, 0.1)' : undefined }}\n />\n )}\n </Column>\n <Column name=\"Rating\" field=\"rating\">\n {({ rating }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Rating value={rating} max={5} precision={0.1} size=\"small\" readOnly />\n <Typography variant=\"caption\">({rating})</Typography>\n </Box>\n )}\n </Column>\n </Table>\n ";
9
- export declare const UserTableSortedByAgeCode = "\n const sortedUsers = [...usuarios].sort((a, b) => a.edad - b.edad);\n return (\n <Table {...args} data={sortedUsers.slice(0, 4)}>\n <Column name=\"Nombre\" field=\"nombre\">\n {({ nombre }) => <Typography variant=\"body2\">{nombre}</Typography>}\n </Column>\n <Column name=\"Edad\" field=\"edad\">\n {({ edad }) => <Typography variant=\"body2\" fontWeight=\"medium\">{edad} a\u00F1os</Typography>}\n </Column>\n <Column name=\"Rol\" field=\"rol\">\n {({ rol }) => (\n <Chip\n label={rol!.charAt(0).toUpperCase() + rol!.slice(1)}\n color={rol === 'admin' ? 'primary' : rol === 'moderador' ? 'secondary' : 'default'}\n variant=\"outlined\"\n size=\"small\"\n />\n )}\n </Column>\n <Column name=\"Puntuaci\u00F3n\" field=\"puntuacion\">\n {({ puntuacion }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Rating value={puntuacion} max={5} precision={0.1} size=\"small\" readOnly />\n <Typography variant=\"caption\" color=\"text.secondary\">\n {puntuacion!.toFixed(1)}\n </Typography>\n </Box>\n )}\n </Column>\n </Table>\n );\n ";
10
- export declare const EmployeeDetailedStatusCode = "\n<Table data={data}>\n<Column name=\"Empleado\" field={['nombre', 'apellido', 'avatar']}>\n {({ nombre, apellido, avatar }) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Avatar src={avatar} sx={{ width: 40, height: 40 }}>\n {avatar ? '' : `${nombre!.charAt(0)}${apellido!.charAt(0)}`}\n </Avatar>\n <Typography variant=\"body2\" fontWeight=\"medium\">\n {nombre} {apellido}\n </Typography>\n </Box>\n )}\n</Column>\n<Column name=\"Departamento\" field=\"departamento\">\n {({ departamento }) => (\n <Chip\n label={departamento}\n color=\"info\"\n variant=\"filled\"\n size=\"small\"\n />\n )}\n</Column>\n<Column name=\"Salario\" field=\"salario\">\n {({ salario }) => (\n <Typography variant=\"body2\" fontWeight=\"bold\" color=\"success.dark\">\n ${salario!.toLocaleString('es-ES')}\n </Typography>\n )}\n</Column>\n<Column name=\"Estado de Contrataci\u00F3n\" field={['activo', 'fechaIngreso']}>\n {({ activo, fechaIngreso }) => (\n <Box>\n <Chip\n label={activo ? 'Contratado' : 'Inactivo'}\n color={activo ? 'success' : 'error'}\n size=\"small\"\n />\n <Typography variant=\"caption\" display=\"block\" color=\"text.secondary\" sx={{ mt: 0.5 }}>\n Desde: {new Date(fechaIngreso!).toLocaleDateString('es-ES')}\n </Typography>\n </Box>\n )}\n</Column>\n</Table>\n";
11
- export declare const ActionsColumnCode = "\n <Table data={data}>\n <Column name=\"Nombre\" field=\"nombre\">\n {({ nombre }) => <Typography variant=\"body2\">{nombre}</Typography>}\n </Column>\n <Column name=\"Email\" field=\"email\">\n {({ email }) => <Typography variant=\"body2\" color=\"text.secondary\">{email}</Typography>}\n </Column>\n <Column name=\"Acciones\" field=\"id\"> \n {({ id }) => (\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n onClick={() => alert('ID del usuario: '+id )} // Log al hacer clic\n >\n Ver Detalles ({id})\n </Button>\n )}\n </Column>\n </Table>\n ";
12
- export declare const TableWithExportCode = "\n <Table<Usuario>\n data={usuarios}\n enableExport={enableExport}\n exportFileName={exportFileName}\n exportButtonText={exportButtonText}\n exportColumns={exportColumns}\n >\n <Column<Usuario> name=\"ID\" field=\"id\">\n {(row) => <Typography>{row.id}</Typography>}\n </Column>\n <Column<Usuario> name=\"Nombre\" field=\"nombre\">\n {(row) => <Typography>{row.nombre}</Typography>}\n </Column>\n <Column<Usuario> name=\"Email\" field=\"email\">\n {({ email }) => <Link href={`mailto:${email}`}>{email}</Link>}\n </Column>\n <Column<Usuario> name=\"Edad\" field=\"edad\">\n {(row) => <Typography>{row.edad}</Typography>}\n </Column>\n <Column<Usuario> name=\"Rol\" field=\"rol\">\n {({ rol }) => <Chip label={rol} size=\"small\" />}\n </Column>\n <Column<Usuario> name=\"Acciones\" field=\"id\">\n {({ id }) => (\n <Button variant=\"outlined\" size=\"small\" onClick={() => alert(`Ver detalles de usuario ${id}`)}>\n Ver\n </Button>\n )}\n </Column>\n </Table>\n ";
13
- export declare const WithRowSelectionCode = "\n\n const [selectedItems, setSelectedItems] = useState<UserData[]>([]);\n\n const handleSelectionChange = (items: UserData[]) => {\n setSelectedItems(items);\n args.onSelectionChange?.(items);\n };\n\n const handleBulkDelete = () => {\n if (selectedItems.length > 0) {\n alert(`Eliminando ${selectedItems.length} usuarios: ${selectedItems.map(item => item.nombre).join(', ')}`);\n setSelectedItems([]);\n } else {\n alert('No hay elementos seleccionados para eliminar.');\n }\n };\n\n const handleBulkUpdateCity = () => {\n if (selectedItems.length > 0) {\n const newCity = prompt('Ingresa la nueva ciudad para los seleccionados:');\n if (newCity) {\n alert(`Actualizando ciudad de ${selectedItems.length} usuarios a ${newCity}`);\n setSelectedItems([]);\n }\n } else {\n alert('No hay elementos seleccionados para actualizar.');\n }\n };\n\n return (\n <Box>\n <Typography variant=\"h6\" gutterBottom>\n Tabla con Selecci\u00F3n de Filas\n </Typography>\n {selectedItems.length > 0 && (\n <Box sx={{ mb: 2, display: 'flex', gap: 1 }}>\n <Button variant=\"contained\" color=\"error\" onClick={handleBulkDelete}>\n Eliminar ({selectedItems.length})\n </Button>\n <Button variant=\"contained\" color=\"primary\" onClick={handleBulkUpdateCity}>\n Actualizar Ciudad ({selectedItems.length})\n </Button>\n <Typography variant=\"body2\" sx={{ alignSelf: 'center', ml: 2 }}>\n Elementos seleccionados: {selectedItems.length}\n </Typography>\n </Box>\n )}\n <Table<UserData>\n {...args}\n data={sampleData} // Usamos sampleData para esta historia\n enableRowSelection={true}\n rowIdentifier=\"id\" // Es crucial que coincida con una clave \u00FAnica en tus datos\n onSelectionChange={handleSelectionChange}\n pageSizeSelectorValue={5}\n >\n <Column<UserData>\n name=\"ID\"\n field=\"id\"\n children={(row) => <Typography>{row.id}</Typography>}\n />\n <Column<UserData>\n name=\"Nombre\"\n field=\"name\"\n children={(row) => <Typography>{row.name}</Typography>}\n />\n <Column<UserData>\n name=\"Email\"\n field=\"email\"\n children={(row) => <Typography>{row.email}</Typography>}\n />\n <Column<UserData>\n name=\"Ciudad\"\n field=\"city\"\n children={(row) => <Typography>{row.city}</Typography>}\n />\n </Table>\n </Box>\n );\n\n";
14
- export declare const WithExportAndSelectionCode = "\n const [selectedItems, setSelectedItems] = useState<UserData[]>([]);\n\n const handleSelectionChange = (items: UserData[]) => {\n setSelectedItems(items);\n args.onSelectionChange?.(items);\n };\n\n return (\n <Box>\n <Typography variant=\"h6\" gutterBottom>\n Tabla con Exportaci\u00F3n y Selecci\u00F3n de Filas\n </Typography>\n {selectedItems.length > 0 && (\n <Box sx={{ mb: 2 }}>\n <Typography variant=\"body2\">\n Elementos seleccionados: {selectedItems.length}\n </Typography>\n </Box>\n )}\n <Table<UserData>\n {...args}\n data={sampleData} // Usamos sampleData para esta historia\n enableRowSelection={true}\n rowIdentifier=\"id\"\n onSelectionChange={handleSelectionChange}\n pageSizeSelectorValue={5}\n enableCSVExport={true}\n csvExportFileName=\"users_data_with_selection\"\n enableExcelExport={true}\n excelExportFileName=\"users_data_with_selection\"\n >\n <Column<UserData>\n name=\"ID\"\n field=\"id\"\n children={(row) => <Typography>{row.id}</Typography>}\n />\n <Column<UserData>\n name=\"Nombre\"\n field=\"name\"\n children={(row) => <Typography>{row.name}</Typography>}\n />\n <Column<UserData>\n name=\"Email\"\n field=\"email\"\n children={(row) => <Typography>{row.email}</Typography>}\n />\n <Column<UserData>\n name=\"Ciudad\"\n field=\"city\"\n children={(row) => <Typography>{row.city}</Typography>}\n />\n </Table>\n </Box>\n );\n";
@@ -1,3 +0,0 @@
1
- export declare const DefaultTabDefinition: string;
2
- export declare const ScrollTabDefinition: string;
3
- export declare const VeriticalTabDefinition = "\n <Tabs orientation=\"vertical\">\n <Tab label=\"Home\" >\n <div>\n hola 1\n </div>\n </Tab>\n <Tab label=\"Settings\" >\n <div>\n hola 2\n </div>\n </Tab>\n <Tab label=\"Profile\" >\n <div>\n hola 3\n </div>\n </Tab>\n </Tabs>\n";
@@ -1,3 +0,0 @@
1
- export declare const DefaultTimelineDefinition: string;
2
- export declare const ColorVariantTimelineDefinition: string;
3
- export declare const PositionVariantTimelineDefinition: string;