@soyfri/shared-library 2.0.0-beta.0 → 2.0.0-beta.10

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 (211) hide show
  1. package/dist/README.md +243 -0
  2. package/dist/components/Drawer/Drawer.cjs +14 -17
  3. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  4. package/dist/components/Drawer/Drawer.d.ts +8 -1
  5. package/dist/components/Drawer/Drawer.js +14 -17
  6. package/dist/components/Drawer/Drawer.js.map +1 -1
  7. package/dist/components/Input/Input.definitions.d.ts +1 -0
  8. package/dist/components/RadioGroup/RadioGroup.cjs +202 -0
  9. package/dist/components/RadioGroup/RadioGroup.cjs.map +1 -0
  10. package/dist/components/RadioGroup/RadioGroup.d.ts +53 -0
  11. package/dist/components/RadioGroup/RadioGroup.definitions.d.ts +6 -0
  12. package/dist/components/RadioGroup/RadioGroup.js +202 -0
  13. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  14. package/dist/components/RadioGroup/RadioGroup.sx.d.ts +20 -0
  15. package/dist/components/RadioGroup/RadioGroup.types.d.ts +1 -0
  16. package/dist/components/RadioGroup/index.d.ts +2 -0
  17. package/dist/components/RadioGroup.d.ts +6 -0
  18. package/dist/components/Stepper/Stepper.cjs +136 -23
  19. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  20. package/dist/components/Stepper/Stepper.js +137 -24
  21. package/dist/components/Stepper/Stepper.js.map +1 -1
  22. package/dist/components/Switch/Switch.cjs +181 -0
  23. package/dist/components/Switch/Switch.cjs.map +1 -0
  24. package/dist/components/Switch/Switch.d.ts +43 -0
  25. package/dist/components/Switch/Switch.definitions.d.ts +7 -0
  26. package/dist/components/Switch/Switch.js +181 -0
  27. package/dist/components/Switch/Switch.js.map +1 -0
  28. package/dist/components/Switch/Switch.sx.d.ts +22 -0
  29. package/dist/components/Switch/Switch.types.d.ts +1 -0
  30. package/dist/components/Switch/index.d.ts +2 -0
  31. package/dist/components/Switch.d.ts +6 -0
  32. package/dist/index.cjs +24 -0
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.js +7 -1
  35. package/dist/mui.d.ts +1 -0
  36. package/dist/package.json +207 -0
  37. package/dist/theme/componentStyles.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/src/components/Drawer/Drawer.stories.tsx +168 -0
  40. package/src/components/Drawer/Drawer.tsx +26 -18
  41. package/src/components/Input/Input.definitions.ts +24 -0
  42. package/src/components/Input/Input.stories.tsx +29 -0
  43. package/src/components/RadioGroup/RadioGroup.definitions.ts +177 -0
  44. package/src/components/RadioGroup/RadioGroup.stories.tsx +231 -0
  45. package/src/components/RadioGroup/RadioGroup.sx.ts +75 -0
  46. package/src/components/RadioGroup/RadioGroup.tsx +196 -0
  47. package/src/components/RadioGroup/RadioGroup.types.ts +10 -0
  48. package/src/components/RadioGroup/index.ts +9 -0
  49. package/src/components/Stepper/Stepper.stories.tsx +72 -0
  50. package/src/components/Stepper/Stepper.tsx +139 -4
  51. package/src/components/Switch/Switch.definitions.ts +134 -0
  52. package/src/components/Switch/Switch.stories.tsx +213 -0
  53. package/src/components/Switch/Switch.sx.ts +81 -0
  54. package/src/components/Switch/Switch.tsx +172 -0
  55. package/src/components/Switch/Switch.types.ts +10 -0
  56. package/src/components/Switch/index.ts +9 -0
  57. package/src/mui.ts +10 -0
  58. package/src/theme/componentStyles.ts +3 -1
  59. package/storybook-static/addon-visual-tests-assets/visual-test-illustration.mp4 +0 -0
  60. package/storybook-static/assets/AccountCircle-BDZFsbTw.js +1 -0
  61. package/storybook-static/assets/ActionMenu-EynP8yU1.js +19 -0
  62. package/storybook-static/assets/ActionMenu.stories-DqSqRGix.js +185 -0
  63. package/storybook-static/assets/Alert-3zvTPc0p.js +1 -0
  64. package/storybook-static/assets/AppBar.stories-DcX3M5th.js +172 -0
  65. package/storybook-static/assets/Autocomplete.stories-CXJm8FOT.js +788 -0
  66. package/storybook-static/assets/Avatar-NbFfkZws.js +1 -0
  67. package/storybook-static/assets/Avatar.stories-CwOYCzqU.js +390 -0
  68. package/storybook-static/assets/Box-BnhEcfFm.js +1 -0
  69. package/storybook-static/assets/Button-D9h7OggD.js +1 -0
  70. package/storybook-static/assets/Button-DBpqmVB_.js +1 -0
  71. package/storybook-static/assets/Button.stories-F20dmnjq.js +320 -0
  72. package/storybook-static/assets/ButtonBase-qyaMEhe4.js +74 -0
  73. package/storybook-static/assets/Card.stories-B3NpAhO0.js +154 -0
  74. package/storybook-static/assets/CheckCircleOutline-CEj5mDsl.js +1 -0
  75. package/storybook-static/assets/Chip-C3vKPpzR.js +1 -0
  76. package/storybook-static/assets/Chip.stories-sxcfHVo9.js +333 -0
  77. package/storybook-static/assets/CircularProgress-DC7ZNWwl.js +28 -0
  78. package/storybook-static/assets/Clear-4kYcKvT3.js +1 -0
  79. package/storybook-static/assets/ClipBoard-DvLBdNHe.js +1 -0
  80. package/storybook-static/assets/ClipBoard.stories-BGUo47r6.js +108 -0
  81. package/storybook-static/assets/Close-CgHeRgmh.js +1 -0
  82. package/storybook-static/assets/Close-Cy8nELYU.js +1 -0
  83. package/storybook-static/assets/Color-AVL7NMMY-BJKvwERm.js +1 -0
  84. package/storybook-static/assets/ContentCopy-BfLTDb10.js +1 -0
  85. package/storybook-static/assets/DatePicker-Clkpr-Ku.js +1 -0
  86. package/storybook-static/assets/DatePicker.stories-EaUCMkh3.js +444 -0
  87. package/storybook-static/assets/DateRangePicker.stories-BMlkj-8K.js +390 -0
  88. package/storybook-static/assets/DateTimePicker.stories-B6gdzKq5.js +555 -0
  89. package/storybook-static/assets/DefaultPropsProvider-BGoQxtDa.js +16 -0
  90. package/storybook-static/assets/Delete-D2SMMmIA.js +1 -0
  91. package/storybook-static/assets/DialogContent-BeCDKgax.js +1 -0
  92. package/storybook-static/assets/Divider-BbCj9wT4.js +1 -0
  93. package/storybook-static/assets/DocsRenderer-PQXLIZUC-BebLK5Y_.js +1243 -0
  94. package/storybook-static/assets/Drawer-DcFwy73r.js +1 -0
  95. package/storybook-static/assets/Drawer.stories-C5AZkJBk.js +173 -0
  96. package/storybook-static/assets/EmptyTable-B-RKtgVs.png +0 -0
  97. package/storybook-static/assets/ErrorOutline-D9gM7ART.js +1 -0
  98. package/storybook-static/assets/Fade-Ll96CvH8.js +1 -0
  99. package/storybook-static/assets/Flyout.stories-Cf7z6MNw.js +163 -0
  100. package/storybook-static/assets/Gallery.stories-DdpWVTF6.js +127 -0
  101. package/storybook-static/assets/Grow-8y4FglGK.js +1 -0
  102. package/storybook-static/assets/Home-BRvJEp2L.js +1 -0
  103. package/storybook-static/assets/Icon.stories-D0mUiW_t.js +78 -0
  104. package/storybook-static/assets/IconButton-9OYSTH58.js +1 -0
  105. package/storybook-static/assets/Input-CjX0t4h-.js +1 -0
  106. package/storybook-static/assets/Input.stories-BRxekliy.js +650 -0
  107. package/storybook-static/assets/InputGroup.stories-DH6gUfmn.js +306 -0
  108. package/storybook-static/assets/KeyboardArrowRight-WO_attK2.js +1 -0
  109. package/storybook-static/assets/KeyboardArrowUp-DsyVef-i.js +1 -0
  110. package/storybook-static/assets/ListItem-D3O0103N.js +1 -0
  111. package/storybook-static/assets/ListItemIcon-hca6xN79.js +1 -0
  112. package/storybook-static/assets/ListItemText-BFLAwLdl.js +1 -0
  113. package/storybook-static/assets/Logout-gj-P3AfU.js +1 -0
  114. package/storybook-static/assets/Menu-ClzfjLc3.js +1 -0
  115. package/storybook-static/assets/MenuButton.stories-B-W_QVDt.js +162 -0
  116. package/storybook-static/assets/MenuItem-iU6tAqJI.js +1 -0
  117. package/storybook-static/assets/Modal-3okp9H2i.js +1 -0
  118. package/storybook-static/assets/Modal.stories-DIWzm4qR.js +468 -0
  119. package/storybook-static/assets/MoreVert-BoIVG4gh.js +1 -0
  120. package/storybook-static/assets/Notifications-DY_A-Sho.js +1 -0
  121. package/storybook-static/assets/PageLoader.stories-DmtO1mlm.js +158 -0
  122. package/storybook-static/assets/Paper-SwQBhqI7.js +1 -0
  123. package/storybook-static/assets/Person-CkQl-mpq.js +1 -0
  124. package/storybook-static/assets/PickersModalDialog-Tjnr_cu5.js +10 -0
  125. package/storybook-static/assets/PickersToolbarButton-Tt185-si.js +1 -0
  126. package/storybook-static/assets/Popper-CnCTYXxy.js +1 -0
  127. package/storybook-static/assets/Portal-Cj8XF9Lf.js +1 -0
  128. package/storybook-static/assets/ScrollTopButton.stories-BflQCwNP.js +90 -0
  129. package/storybook-static/assets/Select-CjcuMAY0.js +4 -0
  130. package/storybook-static/assets/Select-DJh2biEb.js +3 -0
  131. package/storybook-static/assets/Select.stories-DU1Gb3I2.js +1103 -0
  132. package/storybook-static/assets/Settings-BLKc1CnO.js +1 -0
  133. package/storybook-static/assets/Snackbar-BtVeKTw6.js +1 -0
  134. package/storybook-static/assets/Stack-D01OUIXi.js +1 -0
  135. package/storybook-static/assets/Stat.stories-Bn9-iuPT.js +60 -0
  136. package/storybook-static/assets/StatusMessage.stories-hnfX8FeU.js +73 -0
  137. package/storybook-static/assets/Stepper-BtKB5ykn.js +2 -0
  138. package/storybook-static/assets/Stepper.stories-CTEZbgPc.js +165 -0
  139. package/storybook-static/assets/Table.stories-CTn2Ktmn.js +1260 -0
  140. package/storybook-static/assets/TableContainer-CzLNaEU-.js +1 -0
  141. package/storybook-static/assets/TableRow-CS88-1HF.js +2 -0
  142. package/storybook-static/assets/Tabs-DLpDOu_n.js +1 -0
  143. package/storybook-static/assets/Tabs.stories-BFVuFy_5.js +159 -0
  144. package/storybook-static/assets/TextField-22T-xHBm.js +1 -0
  145. package/storybook-static/assets/Timeline.stories-DJU_U2Hv.js +97 -0
  146. package/storybook-static/assets/Tooltip-DbnHUxNj.js +1 -0
  147. package/storybook-static/assets/Tooltip.stories-B7tA3dnV.js +66 -0
  148. package/storybook-static/assets/Typography-BgntX2Ep.js +1 -0
  149. package/storybook-static/assets/Wizard.stories-CVrJLK_D.js +23 -0
  150. package/storybook-static/assets/createSimplePaletteValueFilter-bm0fmN_7.js +1 -0
  151. package/storybook-static/assets/createSvgIcon-D_Gca4vA.js +1 -0
  152. package/storybook-static/assets/debounce-Be36O1Ab.js +1 -0
  153. package/storybook-static/assets/emotion-react.browser.esm--g-C9cX9.js +8 -0
  154. package/storybook-static/assets/extendSxProp-CEpa30hT.js +1 -0
  155. package/storybook-static/assets/formField.sx-DMCmZIAa.js +1 -0
  156. package/storybook-static/assets/getReactElementRef-BQ3ANZdy.js +1 -0
  157. package/storybook-static/assets/iframe-BAJnc_4n.js +1079 -0
  158. package/storybook-static/assets/index-B1tlhOpe.js +240 -0
  159. package/storybook-static/assets/index-BF3FAXTk.js +9 -0
  160. package/storybook-static/assets/index-CIeucmOB.js +2 -0
  161. package/storybook-static/assets/index-CY7j4a7o.js +1 -0
  162. package/storybook-static/assets/index-CxkKctw5.js +1 -0
  163. package/storybook-static/assets/isFocusVisible-B8k4qzLc.js +1 -0
  164. package/storybook-static/assets/isMuiElement-CTZSFcY5.js +1 -0
  165. package/storybook-static/assets/jsx-runtime-D_zvdyIk.js +9 -0
  166. package/storybook-static/assets/listItemTextClasses-CC_rwJam.js +1 -0
  167. package/storybook-static/assets/mergeSlotProps-B0UBKBMe.js +1 -0
  168. package/storybook-static/assets/ownerDocument-DW-IO8s5.js +1 -0
  169. package/storybook-static/assets/ownerWindow-HkKU3E4x.js +1 -0
  170. package/storybook-static/assets/preload-helper-PPVm8Dsz.js +1 -0
  171. package/storybook-static/assets/react-18-BUJ64QCV.js +25 -0
  172. package/storybook-static/assets/resolvePreset-CN2aOJJr.js +1 -0
  173. package/storybook-static/assets/useControlled-DsVh1a5j.js +1 -0
  174. package/storybook-static/assets/useForkRef-0ANIrxcF.js +1 -0
  175. package/storybook-static/assets/useId-b4fZxjOL.js +1 -0
  176. package/storybook-static/assets/useMobilePicker-DK-c8xbD.js +1 -0
  177. package/storybook-static/assets/usePreviousProps-WR0rG4aR.js +1 -0
  178. package/storybook-static/assets/useSlot-b6pXgp5_.js +1 -0
  179. package/storybook-static/assets/useSlotProps-C0uMfuBt.js +1 -0
  180. package/storybook-static/assets/useTheme-BmOJK7ra.js +1 -0
  181. package/storybook-static/assets/useThemeProps-DYtxXiUU.js +1 -0
  182. package/storybook-static/assets/useThemeProps-U4yXiZ_5.js +1 -0
  183. package/storybook-static/assets/useTimeout-DNjRaOWc.js +1 -0
  184. package/storybook-static/assets/visuallyHidden-Dan1xhjv.js +1 -0
  185. package/storybook-static/favicon-wrapper.svg +46 -0
  186. package/storybook-static/favicon.svg +1 -0
  187. package/storybook-static/iframe.html +686 -0
  188. package/storybook-static/index.html +160 -0
  189. package/storybook-static/index.json +1 -0
  190. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  191. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  192. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  193. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  194. package/storybook-static/project.json +1 -0
  195. package/storybook-static/sb-addons/chromatic-com-storybook-2/manager-bundle.js +356 -0
  196. package/storybook-static/sb-addons/chromatic-com-storybook-2/manager-bundle.js.LEGAL.txt +40 -0
  197. package/storybook-static/sb-addons/docs-4/manager-bundle.js +151 -0
  198. package/storybook-static/sb-addons/onboarding-1/manager-bundle.js +127 -0
  199. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +971 -0
  200. package/storybook-static/sb-addons/vitest-3/manager-bundle.js +3 -0
  201. package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
  202. package/storybook-static/sb-common-assets/favicon.svg +1 -0
  203. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  204. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  205. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  206. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  207. package/storybook-static/sb-manager/globals-module-info.js +797 -0
  208. package/storybook-static/sb-manager/globals-runtime.js +69679 -0
  209. package/storybook-static/sb-manager/globals.js +34 -0
  210. package/storybook-static/sb-manager/runtime.js +13195 -0
  211. package/storybook-static/vite-inject-mocker-entry.js +18 -0
@@ -0,0 +1,1260 @@
1
+ import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{r as T,R as pa}from"./iframe-BAJnc_4n.js";import{c as le}from"./createSvgIcon-D_Gca4vA.js";import{K as ua,a as ga}from"./KeyboardArrowRight-WO_attK2.js";import{T as ha}from"./TableContainer-CzLNaEU-.js";import{T as xa,a as ya,b as ea,c as Te,d as fa}from"./TableRow-CS88-1HF.js";import{g as $e,a as Ue,s as ie,b as te,d as Me,r as na,u as Ye,c as xe,m as Oe,h as he,e as ba,i as va,j as Ca}from"./DefaultPropsProvider-BGoQxtDa.js";import{u as Sa,S as Ta}from"./Select-DJh2biEb.js";import{u as re}from"./useSlot-b6pXgp5_.js";import{u as la}from"./useControlled-DsVh1a5j.js";import{B as Ea}from"./ButtonBase-qyaMEhe4.js";import{c as Ze}from"./createSimplePaletteValueFilter-bm0fmN_7.js";import{m as ja}from"./mergeSlotProps-B0UBKBMe.js";import{T as s}from"./Typography-BgntX2Ep.js";import{B as w}from"./Box-BnhEcfFm.js";import{M as wa}from"./MenuItem-iU6tAqJI.js";import{I as Ee}from"./IconButton-9OYSTH58.js";import{B as ge}from"./Button-DBpqmVB_.js";import{S as Ia}from"./Snackbar-BtVeKTw6.js";import{A as ka}from"./Alert-3zvTPc0p.js";import{A as We}from"./Avatar-NbFfkZws.js";import{C as $}from"./Chip-C3vKPpzR.js";import{a as Pa}from"./useSlotProps-C0uMfuBt.js";import{u as ia}from"./useId-b4fZxjOL.js";import{u as za}from"./useForkRef-0ANIrxcF.js";import{v as Ba}from"./visuallyHidden-Dan1xhjv.js";import{i as Le}from"./isFocusVisible-B8k4qzLc.js";import{u as Ra}from"./useTheme-BmOJK7ra.js";import"./preload-helper-PPVm8Dsz.js";import"./Menu-ClzfjLc3.js";import"./Paper-SwQBhqI7.js";import"./ownerDocument-DW-IO8s5.js";import"./ownerWindow-HkKU3E4x.js";import"./debounce-Be36O1Ab.js";import"./Grow-8y4FglGK.js";import"./getReactElementRef-BQ3ANZdy.js";import"./useTimeout-DNjRaOWc.js";import"./index-CY7j4a7o.js";import"./index-BF3FAXTk.js";import"./Modal-3okp9H2i.js";import"./Portal-Cj8XF9Lf.js";import"./Fade-Ll96CvH8.js";import"./emotion-react.browser.esm--g-C9cX9.js";import"./extendSxProp-CEpa30hT.js";import"./listItemTextClasses-CC_rwJam.js";import"./CircularProgress-DC7ZNWwl.js";import"./Close-Cy8nELYU.js";function Da(o){return $e("PrivateSwitchBase",o)}Ue("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]);const Fa=o=>{const{classes:a,checked:t,disabled:r,edge:l}=o,p={root:["root",t&&"checked",r&&"disabled",l&&`edge${te(l)}`],input:["input"]};return Me(p,Da,a)},Aa=ie(Ea,{name:"MuiSwitchBase"})({padding:9,borderRadius:"50%",variants:[{props:{edge:"start",size:"small"},style:{marginLeft:-3}},{props:({edge:o,ownerState:a})=>o==="start"&&a.size!=="small",style:{marginLeft:-12}},{props:{edge:"end",size:"small"},style:{marginRight:-3}},{props:({edge:o,ownerState:a})=>o==="end"&&a.size!=="small",style:{marginRight:-12}}]}),Va=ie("input",{name:"MuiSwitchBase",shouldForwardProp:na})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),Na=T.forwardRef(function(a,t){const{autoFocus:r,checked:l,checkedIcon:p,defaultChecked:n,disabled:u,disableFocusRipple:f=!1,edge:h=!1,icon:x,id:y,inputProps:E,inputRef:j,name:v,onBlur:R,onChange:D,onFocus:z,readOnly:A,required:S=!1,tabIndex:g,type:P,value:J,slots:se={},slotProps:H={},...ee}=a,[M,ae]=la({controlled:l,default:!!n,name:"SwitchBase",state:"checked"}),V=Sa(),oe=C=>{z&&z(C),V&&V.onFocus&&V.onFocus(C)},_=C=>{R&&R(C),V&&V.onBlur&&V.onBlur(C)},ce=C=>{if(C.nativeEvent.defaultPrevented)return;const F=C.target.checked;ae(F),D&&D(C,F)};let B=u;V&&typeof B>"u"&&(B=V.disabled);const k=P==="checkbox"||P==="radio",N={...a,checked:M,disabled:B,disableFocusRipple:f,edge:h},O=Fa(N),X={slots:se,slotProps:{input:E,...H}},[de,me]=re("root",{ref:t,elementType:Aa,className:O.root,shouldForwardComponentProp:!0,externalForwardedProps:{...X,component:"span",...ee},getSlotProps:C=>({...C,onFocus:F=>{C.onFocus?.(F),oe(F)},onBlur:F=>{C.onBlur?.(F),_(F)}}),ownerState:N,additionalProps:{centerRipple:!0,focusRipple:!f,disabled:B,role:void 0,tabIndex:null}}),[ye,fe]=re("input",{ref:j,elementType:Va,className:O.input,externalForwardedProps:X,getSlotProps:C=>({...C,onChange:F=>{C.onChange?.(F),ce(F)}}),ownerState:N,additionalProps:{autoFocus:r,checked:l,defaultChecked:n,disabled:B,id:k?y:void 0,name:v,readOnly:A,required:S,tabIndex:g,type:P,...P==="checkbox"&&J===void 0?{}:{value:J}}});return e.jsxs(de,{...me,children:[e.jsx(ye,{...fe}),M?p:x]})}),La=le(e.jsx("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"})),$a=le(e.jsx("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})),Ua=le(e.jsx("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}));function Ma(o){return $e("MuiCheckbox",o)}const Ke=Ue("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]),Oa=o=>{const{classes:a,indeterminate:t,color:r,size:l}=o,p={root:["root",t&&"indeterminate",`color${te(r)}`,`size${te(l)}`]},n=Me(p,Ma,a);return{...a,...n}},Wa=ie(Na,{shouldForwardProp:o=>na(o)||o==="classes",name:"MuiCheckbox",slot:"Root",overridesResolver:(o,a)=>{const{ownerState:t}=o;return[a.root,t.indeterminate&&a.indeterminate,a[`size${te(t.size)}`],t.color!=="default"&&a[`color${te(t.color)}`]]}})(Oe(({theme:o})=>({color:(o.vars||o).palette.text.secondary,variants:[{props:{color:"default",disableRipple:!1},style:{"&:hover":{backgroundColor:o.alpha((o.vars||o).palette.action.active,(o.vars||o).palette.action.hoverOpacity)}}},...Object.entries(o.palette).filter(Ze()).map(([a])=>({props:{color:a,disableRipple:!1},style:{"&:hover":{backgroundColor:o.alpha((o.vars||o).palette[a].main,(o.vars||o).palette.action.hoverOpacity)}}})),...Object.entries(o.palette).filter(Ze()).map(([a])=>({props:{color:a},style:{[`&.${Ke.checked}, &.${Ke.indeterminate}`]:{color:(o.vars||o).palette[a].main},[`&.${Ke.disabled}`]:{color:(o.vars||o).palette.action.disabled}}})),{props:{disableRipple:!1},style:{"&:hover":{"@media (hover: none)":{backgroundColor:"transparent"}}}}]}))),qa=e.jsx($a,{}),Ha=e.jsx(La,{}),_a=e.jsx(Ua,{}),aa=T.forwardRef(function(a,t){const r=Ye({props:a,name:"MuiCheckbox"}),{checkedIcon:l=qa,color:p="primary",icon:n=Ha,indeterminate:u=!1,indeterminateIcon:f=_a,inputProps:h,size:x="medium",disableRipple:y=!1,className:E,slots:j={},slotProps:v={},...R}=r,D=u?f:n,z=u?f:l,A={...r,disableRipple:y,color:p,indeterminate:u,size:x},S=Oa(A),g=v.input??h,[P,J]=re("root",{ref:t,elementType:Wa,className:xe(S.root,E),shouldForwardComponentProp:!0,externalForwardedProps:{slots:j,slotProps:v,...R},ownerState:A,additionalProps:{type:"checkbox",icon:T.cloneElement(D,{fontSize:D.props.fontSize??x}),checkedIcon:T.cloneElement(z,{fontSize:z.props.fontSize??x}),disableRipple:y,slots:j,slotProps:{input:ja(typeof g=="function"?g(A):g,{"data-indeterminate":u})}}});return e.jsx(P,{...J,classes:S})});function Xa(o){return $e("MuiLink",o)}const Ga=Ue("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]),Ka=({theme:o,ownerState:a})=>{const t=a.color;if("colorSpace"in o&&o.colorSpace){const p=he(o,`palette.${t}.main`)||he(o,`palette.${t}`)||a.color;return o.alpha(p,.4)}const r=he(o,`palette.${t}.main`,!1)||he(o,`palette.${t}`,!1)||a.color,l=he(o,`palette.${t}.mainChannel`)||he(o,`palette.${t}Channel`);return"vars"in o&&l?`rgba(${l} / 0.4)`:ba(r,.4)},oa={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},Ja=o=>{const{classes:a,component:t,focusVisible:r,underline:l}=o,p={root:["root",`underline${te(l)}`,t==="button"&&"button",r&&"focusVisible"]};return Me(p,Xa,a)},Za=ie(s,{name:"MuiLink",slot:"Root",overridesResolver:(o,a)=>{const{ownerState:t}=o;return[a.root,a[`underline${te(t.underline)}`],t.component==="button"&&a.button]}})(Oe(({theme:o})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:a,ownerState:t})=>a==="always"&&t.color!=="inherit",style:{textDecorationColor:"var(--Link-underlineColor)"}},{props:({underline:a,ownerState:t})=>a==="always"&&t.color==="inherit",style:o.colorSpace?{textDecorationColor:o.alpha("currentColor",.4)}:null},...Object.entries(o.palette).filter(Ze()).map(([a])=>({props:{underline:"always",color:a},style:{"--Link-underlineColor":o.alpha((o.vars||o).palette[a].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":o.alpha((o.vars||o).palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":o.alpha((o.vars||o).palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(o.vars||o).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${Ga.focusVisible}`]:{outline:"auto"}}}]}))),Ya=T.forwardRef(function(a,t){const r=Ye({props:a,name:"MuiLink"}),l=Ra(),{className:p,color:n="primary",component:u="a",onBlur:f,onFocus:h,TypographyClasses:x,underline:y="always",variant:E="inherit",sx:j,...v}=r,[R,D]=T.useState(!1),z=P=>{Le(P.target)||D(!1),f&&f(P)},A=P=>{Le(P.target)&&D(!0),h&&h(P)},S={...r,color:n,component:u,focusVisible:R,underline:y,variant:E},g=Ja(S);return e.jsx(Za,{color:n,className:xe(g.root,p),classes:x,component:u,onBlur:z,onFocus:A,ref:t,ownerState:S,variant:E,...v,sx:[...oa[n]===void 0?[{color:n}]:[],...Array.isArray(j)?j:[j]],style:{...v.style,...y==="always"&&n!=="inherit"&&!oa[n]&&{"--Link-underlineColor":Ka({theme:l,ownerState:S})}}})}),Qa=le(e.jsx("path",{d:"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"})),eo=le(e.jsx("path",{d:"M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"}));function ao(o){return $e("MuiRating",o)}const Ce=Ue("MuiRating",["root","sizeSmall","sizeMedium","sizeLarge","readOnly","disabled","focusVisible","visuallyHidden","pristine","label","labelEmptyValueActive","icon","iconEmpty","iconFilled","iconHover","iconFocus","iconActive","decimal"]);function oo(o){const a=o.toString().split(".")[1];return a?a.length:0}function Je(o,a){if(o==null)return o;const t=Math.round(o/a)*a;return Number(t.toFixed(oo(a)))}const to=o=>{const{classes:a,size:t,readOnly:r,disabled:l,emptyValueFocused:p,focusVisible:n}=o,u={root:["root",`size${te(t)}`,l&&"disabled",n&&"focusVisible",r&&"readOnly"],label:["label","pristine"],labelEmptyValue:[p&&"labelEmptyValueActive"],icon:["icon"],iconEmpty:["iconEmpty"],iconFilled:["iconFilled"],iconHover:["iconHover"],iconFocus:["iconFocus"],iconActive:["iconActive"],decimal:["decimal"],visuallyHidden:["visuallyHidden"]};return Me(u,ao,a)},ro=ie("span",{name:"MuiRating",slot:"Root",overridesResolver:(o,a)=>{const{ownerState:t}=o;return[{[`& .${Ce.visuallyHidden}`]:a.visuallyHidden},a.root,a[`size${te(t.size)}`],t.readOnly&&a.readOnly]}})(Oe(({theme:o})=>({display:"inline-flex",position:"relative",fontSize:o.typography.pxToRem(24),color:"#faaf00",cursor:"pointer",textAlign:"left",width:"min-content",WebkitTapHighlightColor:"transparent",[`&.${Ce.disabled}`]:{opacity:(o.vars||o).palette.action.disabledOpacity,pointerEvents:"none"},[`&.${Ce.focusVisible} .${Ce.iconActive}`]:{outline:"1px solid #999"},[`& .${Ce.visuallyHidden}`]:Ba,variants:[{props:{size:"small"},style:{fontSize:o.typography.pxToRem(18)}},{props:{size:"large"},style:{fontSize:o.typography.pxToRem(30)}},{props:({ownerState:a})=>a.readOnly,style:{pointerEvents:"none"}}]}))),sa=ie("label",{name:"MuiRating",slot:"Label",overridesResolver:({ownerState:o},a)=>[a.label,o.emptyValueFocused&&a.labelEmptyValueActive]})({cursor:"inherit",variants:[{props:({ownerState:o})=>o.emptyValueFocused,style:{top:0,bottom:0,position:"absolute",outline:"1px solid #999",width:"100%"}}]}),no=ie("span",{name:"MuiRating",slot:"Icon",overridesResolver:(o,a)=>{const{ownerState:t}=o;return[a.icon,t.iconEmpty&&a.iconEmpty,t.iconFilled&&a.iconFilled,t.iconHover&&a.iconHover,t.iconFocus&&a.iconFocus,t.iconActive&&a.iconActive]}})(Oe(({theme:o})=>({display:"flex",transition:o.transitions.create("transform",{duration:o.transitions.duration.shortest}),pointerEvents:"none",variants:[{props:({ownerState:a})=>a.iconActive,style:{transform:"scale(1.2)"}},{props:({ownerState:a})=>a.iconEmpty,style:{color:(o.vars||o).palette.action.disabled}}]}))),lo=ie("span",{name:"MuiRating",slot:"Decimal",shouldForwardProp:o=>va(o)&&o!=="iconActive",overridesResolver:(o,a)=>{const{iconActive:t}=o;return[a.decimal,t&&a.iconActive]}})({position:"relative",variants:[{props:({iconActive:o})=>o,style:{transform:"scale(1.2)"}}]});function io(o){const{value:a,...t}=o;return e.jsx("span",{...t})}function ta(o){const{classes:a,disabled:t,emptyIcon:r,focus:l,getLabelText:p,highlightSelectedOnly:n,hover:u,icon:f,IconContainerComponent:h,isActive:x,itemValue:y,labelProps:E,name:j,onBlur:v,onChange:R,onClick:D,onFocus:z,readOnly:A,ownerState:S,ratingValue:g,ratingValueRounded:P,slots:J={},slotProps:se={}}=o,H=n?y===g:y<=g,ee=y<=u,M=y<=l,ae=y===P,V=`${j}-${ia()}`,oe={slots:J,slotProps:se},[_,ce]=re("icon",{elementType:no,className:xe(a.icon,H?a.iconFilled:a.iconEmpty,ee&&a.iconHover,M&&a.iconFocus,x&&a.iconActive),externalForwardedProps:oe,ownerState:{...S,iconEmpty:!H,iconFilled:H,iconHover:ee,iconFocus:M,iconActive:x},additionalProps:{value:y},internalForwardedProps:{as:h}}),[B,k]=re("label",{elementType:sa,externalForwardedProps:oe,ownerState:{...S,emptyValueFocused:void 0},additionalProps:{style:E?.style,htmlFor:V}}),N=e.jsx(_,{...ce,children:r&&!H?r:f});return A?e.jsx("span",{...E,children:N}):e.jsxs(T.Fragment,{children:[e.jsxs(B,{...k,children:[N,e.jsx("span",{className:a.visuallyHidden,children:p(y)})]}),e.jsx("input",{className:a.visuallyHidden,onFocus:z,onBlur:v,onChange:R,onClick:D,disabled:t,value:y,id:V,type:"radio",name:j,checked:ae})]})}const so=e.jsx(Qa,{fontSize:"inherit"}),co=e.jsx(eo,{fontSize:"inherit"});function mo(o){return`${o||"0"} Star${o!==1?"s":""}`}const Qe=T.forwardRef(function(a,t){const r=Ye({name:"MuiRating",props:a}),{component:l="span",className:p,defaultValue:n=null,disabled:u=!1,emptyIcon:f=co,emptyLabelText:h="Empty",getLabelText:x=mo,highlightSelectedOnly:y=!1,icon:E=so,IconContainerComponent:j=io,max:v=5,name:R,onChange:D,onChangeActive:z,onMouseLeave:A,onMouseMove:S,precision:g=1,readOnly:P=!1,size:J="medium",value:se,slots:H={},slotProps:ee={},...M}=r,ae=ia(R),[V,oe]=la({controlled:se,default:n,name:"Rating"}),_=Je(V,g),ce=Pa(),[{hover:B,focus:k},N]=T.useState({hover:-1,focus:-1});let O=_;B!==-1&&(O=B),k!==-1&&(O=k);const[X,de]=T.useState(!1),me=T.useRef(),ye=za(me,t),fe=m=>{S&&S(m);const c=me.current,{right:b,left:L,width:W}=c.getBoundingClientRect();let K;ce?K=(b-m.clientX)/W:K=(m.clientX-L)/W;let q=Je(v*K+g/2,g);q=Ca(q,g,v),N(Q=>Q.hover===q&&Q.focus===q?Q:{hover:q,focus:q}),de(!1),z&&B!==q&&z(m,q)},C=m=>{A&&A(m);const c=-1;N({hover:c,focus:c}),z&&B!==c&&z(m,c)},F=m=>{let c=m.target.value===""?null:parseFloat(m.target.value);B!==-1&&(c=B),oe(c),D&&D(m,c)},G=m=>{m.clientX===0&&m.clientY===0||(N({hover:-1,focus:-1}),oe(null),D&&parseFloat(m.target.value)===_&&D(m,null))},Z=m=>{Le(m.target)&&de(!0);const c=parseFloat(m.target.value);N(b=>({hover:b.hover,focus:c}))},pe=m=>{if(B!==-1)return;Le(m.target)||de(!1);const c=-1;N(b=>({hover:b.hover,focus:c}))},[qe,He]=T.useState(!1),ue={...r,component:l,defaultValue:n,disabled:u,emptyIcon:f,emptyLabelText:h,emptyValueFocused:qe,focusVisible:X,getLabelText:x,icon:E,IconContainerComponent:j,max:v,precision:g,readOnly:P,size:J},Y=to(ue),be={slots:H,slotProps:ee},[Se,ve]=re("root",{ref:ye,className:xe(Y.root,p),elementType:ro,externalForwardedProps:{...be,...M,component:l},getSlotProps:m=>({...m,onMouseMove:c=>{fe(c),m.onMouseMove?.(c)},onMouseLeave:c=>{C(c),m.onMouseLeave?.(c)}}),ownerState:ue,additionalProps:{role:P?"img":null,"aria-label":P?x(O):null}}),[_e,Xe]=re("label",{className:xe(Y.label,Y.labelEmptyValue),elementType:sa,externalForwardedProps:be,ownerState:ue}),[d,I]=re("decimal",{className:Y.decimal,elementType:lo,externalForwardedProps:be,ownerState:ue});return e.jsxs(Se,{...ve,children:[Array.from(new Array(v)).map((m,c)=>{const b=c+1,L={classes:Y,disabled:u,emptyIcon:f,focus:k,getLabelText:x,highlightSelectedOnly:y,hover:B,icon:E,IconContainerComponent:j,name:ae,onBlur:pe,onChange:F,onClick:G,onFocus:Z,ratingValue:O,ratingValueRounded:_,readOnly:P,ownerState:ue,slots:H,slotProps:ee},W=b===Math.ceil(O)&&(B!==-1||k!==-1);if(g<1){const K=Array.from(new Array(1/g));return T.createElement(d,{...I,key:b,className:xe(I.className,W&&Y.iconActive),iconActive:W},K.map((q,Q)=>{const Ge=Je(b-1+(Q+1)*g,g);return e.jsx(ta,{...L,isActive:!1,itemValue:Ge,labelProps:{style:K.length-1===Q?{}:{width:Ge===O?`${(Q+1)*g*100}%`:"0%",overflow:"hidden",position:"absolute"}}},Ge)}))}return e.jsx(ta,{...L,isActive:W,itemValue:b},b)}),!P&&!u&&e.jsxs(_e,{...Xe,children:[e.jsx("input",{className:Y.visuallyHidden,value:"",id:`${ae}-empty`,type:"radio",name:ae,checked:_==null,onFocus:()=>He(!0),onBlur:()=>He(!1),onChange:F}),e.jsx("span",{className:Y.visuallyHidden,children:h})]})]})}),ra=le(e.jsx("path",{d:"M19 9h-4V3H9v6H5l7 7zm-8 2V5h2v6h1.17L12 13.17 9.83 11zm-6 7h14v2H5z"})),po=le(e.jsx("path",{d:"M18.41 16.59 13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"})),uo=le(e.jsx("path",{d:"M5.59 7.41 10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"})),go=o=>{const{data:a,columns:t,fileName:r,exportColumns:l,setSnackbarOpen:p,setSnackbarMessage:n,setSnackbarSeverity:u}=o;if(!a||a.length===0){n("No hay datos para exportar a CSV."),u("warning"),p(!0);return}n("Exportando datos a CSV..."),u("info"),p(!0);try{const f=l?t.filter(v=>l.includes(v.props.name)):t,h=f.map(v=>`"${v.props.name.replace(/"/g,'""')}"`).join(","),x=a.map(v=>f.map(D=>{const z=D.props.field;let A;Array.isArray(z)?A=v[z[0]]:A=v[z];let S=String(A||"");return(S.includes(",")||S.includes('"')||S.includes(`
2
+ `))&&(S=`"${S.replace(/"/g,'""')}"`),S}).join(",")),y=[h,...x].join(`
3
+ `),E=new Blob([y],{type:"text/csv;charset=utf-8;"}),j=document.createElement("a");if(j.download!==void 0){const v=URL.createObjectURL(E);j.setAttribute("href",v),j.setAttribute("download",r+".csv"),j.style.visibility="hidden",document.body.appendChild(j),j.click(),document.body.removeChild(j),URL.revokeObjectURL(v),n("¡Exportación a CSV completada!"),u("success")}else n("Tu navegador no soporta la descarga directa para CSV. Por favor, copia el contenido manualmente."),u("error")}catch(f){console.error("Error al exportar los datos a CSV:",f),n("Error al exportar los datos a CSV."),u("error")}finally{p(!0)}},ho=o=>{const{data:a,columns:t,fileName:r,exportColumns:l,setSnackbarOpen:p,setSnackbarMessage:n,setSnackbarSeverity:u}=o;if(!a||a.length===0){n("No hay datos para exportar a Excel."),u("warning"),p(!0);return}n("Exportando datos a Excel (XLSX)..."),u("info"),p(!0);try{const f=l?t.filter(E=>l.includes(E.props.name)):t;let h=`
4
+ <html xmlns:o="urn:schemas-microsoft-com:office:office"
5
+ xmlns:x="urn:schemas-microsoft-com:office:excel"
6
+ xmlns="http://www.w3.org/TR/REC-html40">
7
+ <head>
8
+ <meta charset="utf-8" />
9
+ <!--[if gte mso 9]><xml>
10
+ <x:ExcelWorkbook>
11
+ <x:ExcelWorksheets>
12
+ <x:ExcelWorksheet>
13
+ <x:Name>Hoja1</x:Name>
14
+ <x:WorksheetOptions>
15
+ <x:DisplayGridlines/>
16
+ </x:WorksheetOptions>
17
+ </x:ExcelWorksheet>
18
+ </x:ExcelWorksheets>
19
+ </x:ExcelWorkbook>
20
+ </xml><![endif]-->
21
+ </head>
22
+ <body>
23
+ <table>
24
+ <thead>
25
+ <tr>
26
+ ${f.map(E=>`<th>${E.props.name}</th>`).join("")}
27
+ </tr>
28
+ </thead>
29
+ <tbody>
30
+ ${a.map(E=>`
31
+ <tr>
32
+ ${f.map(j=>{const v=j.props.field;let R;return Array.isArray(v)?R=E[v[0]]:R=E[v],`<td>${String(R||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}</td>`}).join("")}
33
+ </tr>
34
+ `).join("")}
35
+ </tbody>
36
+ </table>
37
+ </body>
38
+ </html>
39
+ `;const x=new Blob([h],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8;"}),y=document.createElement("a");if(y.download!==void 0){const E=URL.createObjectURL(x);y.setAttribute("href",E),y.setAttribute("download",r+".xlsx"),y.style.visibility="hidden",document.body.appendChild(y),y.click(),document.body.removeChild(y),URL.revokeObjectURL(E),n("¡Exportación a Excel (XLSX) completada!"),u("success")}else n("Tu navegador no soporta la descarga directa para Excel (XLSX). Por favor, copia el contenido manualmente."),u("error")}catch(f){console.error("Error al exportar los datos a Excel (XLSX):",f),n("Error al exportar los datos a Excel (XLSX)."),u("error")}finally{p(!0)}},xo=""+new URL("EmptyTable-B-RKtgVs.png",import.meta.url).href,yo=pa.forwardRef(function(a,t){return e.jsx(ka,{elevation:6,ref:t,variant:"filled",...a})});function U({data:o,children:a,currentPage:t,pageSize:r,totalPages:l,previousPage:p,nextPage:n,pageSizeSelectorValue:u=10,onPageChange:f,onPageSizeChange:h,visiblePageNumbers:x=5,enableCSVExport:y=!1,csvExportFileName:E="data.csv",csvExportButtonText:j="Exportar CSV",csvExportColumns:v,enableExcelExport:R=!1,excelExportFileName:D="data.xlsx",excelExportButtonText:z="Exportar Excel",excelExportColumns:A,enableRowSelection:S=!1,rowIdentifier:g,onSelectionChange:P,showPageSizeSelector:J=!0,emptyTitle:se="No hay datos disponibles",emptyMessage:H,emptyImageSrc:ee=e.jsx(w,{mb:2,children:e.jsx("img",{src:xo,alt:"No data",style:{maxWidth:"150px",opacity:.6}})})}){const M=T.Children.toArray(a).filter(d=>T.isValidElement(d)&&d.type.displayName==="Column"),[ae,V]=T.useState(!1),[oe,_]=T.useState(""),[ce,B]=T.useState("info"),[k,N]=T.useState([]);T.useEffect(()=>{N([])},[o,t,r]),T.useEffect(()=>{P?.(k)},[k,P]);const O=(d,I)=>{I!=="clickaway"&&V(!1)},X=typeof f=="function"&&typeof t=="number",[de,me]=T.useState(1),[ye,fe]=T.useState(u),C=X?t:de,F=X?r:ye,G=X?o:o.slice((C-1)*F,C*F),Z=X?l:Math.ceil(o.length/F),pe=d=>{d<1||d>Z||(X?f?.(d):me(d))},qe=d=>{X?(h?.(d),f?.(1)):(fe(d),me(1))},ue=(()=>{const d=[],I=Z,m=C,c=Math.floor(x/2);let b=Math.max(1,m-c),L=Math.min(I,m+c);L-b+1<x&&(b===1?L=Math.min(I,b+x-1):L===I&&(b=Math.max(1,I-x+1)));for(let W=b;W<=L;W++)d.push(W);return d})(),Y=d=>{if(!g){console.warn("`rowIdentifier` prop is required for row selection.");return}if(d.target.checked){const I=[...k];G.forEach(m=>{const c=m[g];I.some(b=>b[g]===c)||I.push(m)}),N(I)}else{const I=k.filter(m=>!G.some(c=>c[g]===m[g]));N(I)}},be=(d,I)=>{if(!g){console.warn("`rowIdentifier` prop is required for row selection.");return}const m=I[g],c=k.findIndex(L=>L[g]===m);let b=[];c===-1?b=b.concat(k,I):c===0?b=b.concat(k.slice(1)):c===k.length-1?b=b.concat(k.slice(0,-1)):c>0&&(b=b.concat(k.slice(0,c),k.slice(c+1))),N(b)},Se=d=>g?k.some(I=>I[g]===d[g]):!1,ve=G.filter(Se).length,_e=G.length>0&&ve===G.length,Xe=ve>0&&ve<G.length;return e.jsxs(ha,{children:[e.jsxs(xa,{sx:{minWidth:650},"aria-label":"custom table",style:G.length===0?{display:"none"}:{},children:[e.jsx(ya,{sx:{backgroundColor:"#fff"},children:e.jsxs(ea,{children:[S&&e.jsxs(Te,{padding:"checkbox",sx:{width:"50px"},children:[" ",e.jsx(aa,{color:"primary",indeterminate:Xe,checked:_e,onChange:Y,inputProps:{"aria-label":"select all desserts"}})]}),M.map((d,I)=>e.jsx(Te,{sx:{fontSize:"12px",color:m=>m.palette.text.secondary,width:d.props.width||"auto",whiteSpace:"nowrap"},children:e.jsx(s,{sx:{fontSize:"12px"},children:d.props.name})},I))]})}),e.jsx(fa,{sx:{borderRadius:"10px",overflow:"hidden"},children:G.map((d,I)=>{const m=S&&Se(d);return e.jsxs(ea,{sx:{backgroundColor:"#F8F8F8","&:last-child td, &:last-child th":{border:0},"&:hover":{backgroundColor:c=>"#FFF"}},selected:m,children:[S&&e.jsxs(Te,{padding:"checkbox",sx:{width:"50px"},children:[" ",e.jsx(aa,{color:"primary",checked:m,onClick:c=>be(c,d),inputProps:{"aria-labelledby":`table-checkbox-${I}`}})]}),M.map((c,b)=>{const{field:L,children:W}=c.props;let K;return Array.isArray(L)?L.length===0?K={...d}:K=L.reduce((q,Q)=>(q[Q]=d[Q],q),{}):K={[L]:d[L]},e.jsx(Te,{sx:{fontSize:"14px",width:c.props.width||"auto",whiteSpace:"nowrap",padding:"12px 16px",borderBottom:"none"},children:W(K)},b)})]},I)})})]}),G.length===0&&e.jsxs(w,{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,children:[ee,e.jsx(s,{variant:"body2",color:"#878E9A",fontSize:"18px",fontWeight:"600",children:se||"No hay datos disponibles para mostrar."}),e.jsx(s,{variant:"body2",color:"#878E9A",fontSize:"14px",mt:1,children:H||"Intente ajustar sus filtros o agregar nuevos datos."})]}),(Z>0||y||R||S&&k.length>0)&&e.jsxs(w,{display:"flex",justifyContent:"space-between",alignItems:"center",p:2,children:[Z>0&&J&&e.jsx(Ta,{size:"small",value:F,onChange:d=>qe(Number(d.target.value)),children:[1,2,3,5,10,20,50,100].map(d=>e.jsxs(wa,{value:d,children:["Mostrar ",d]},d))}),Z>0&&e.jsxs(w,{display:"flex",alignItems:"center",gap:.5,sx:{flexGrow:1,justifyContent:"center"},children:[e.jsx(Ee,{onClick:()=>pe(1),disabled:C<=1,size:"small",color:"primary",children:e.jsx(po,{fontSize:"small"})}),e.jsx(Ee,{onClick:()=>pe(C-1),disabled:C<=1,size:"small",color:"primary",children:e.jsx(ua,{fontSize:"small"})}),ue.map(d=>e.jsx(ge,{onClick:()=>pe(d),variant:C===d?"contained":"text",size:"small",sx:{minWidth:"32px",height:"32px"},children:d},d)),e.jsx(Ee,{onClick:()=>pe(C+1),disabled:C>=Z,size:"small",color:"primary",children:e.jsx(ga,{fontSize:"small"})}),e.jsx(Ee,{onClick:()=>pe(Z),disabled:C>=Z,size:"small",color:"primary",children:e.jsx(uo,{fontSize:"small"})})]}),S&&k.length>0&&e.jsxs(s,{variant:"subtitle2",sx:{mr:2},children:[k.length," seleccionados"]}),(y||R)&&e.jsxs(w,{display:"flex",alignItems:"center",gap:1,children:[y&&e.jsx(ge,{variant:"text",color:"primary",onClick:()=>go({data:o,columns:M,fileName:E,exportColumns:v,setSnackbarOpen:V,setSnackbarMessage:_,setSnackbarSeverity:B}),size:"small",startIcon:e.jsx(ra,{}),children:j}),R&&e.jsx(ge,{variant:"text",color:"primary",onClick:()=>ho({data:o,columns:M,fileName:D,exportColumns:A,setSnackbarOpen:V,setSnackbarMessage:_,setSnackbarSeverity:B}),size:"small",startIcon:e.jsx(ra,{}),children:z})]})]}),e.jsx(Ia,{open:ae,autoHideDuration:3e3,onClose:O,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:e.jsx(yo,{onClose:O,severity:ce,sx:{width:"100%"},children:oe})})]})}U.__docgenInfo={description:"",methods:[],displayName:"Table",props:{data:{required:!0,tsType:{name:"Array",elements:[{name:"T"}],raw:"T[]"},description:""},children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},currentPage:{required:!1,tsType:{name:"number"},description:""},pageSize:{required:!1,tsType:{name:"number"},description:""},totalPages:{required:!1,tsType:{name:"number"},description:""},previousPage:{required:!1,tsType:{name:"number"},description:""},nextPage:{required:!1,tsType:{name:"number"},description:""},pageSizeSelectorValue:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"10",computed:!1}},onPageChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(newPage: number) => void",signature:{arguments:[{type:{name:"number"},name:"newPage"}],return:{name:"void"}}},description:""},onPageSizeChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(newSize: number) => void",signature:{arguments:[{type:{name:"number"},name:"newSize"}],return:{name:"void"}}},description:""},visiblePageNumbers:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"5",computed:!1}},enableCSVExport:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},csvExportFileName:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"'data.csv'",computed:!1}},csvExportButtonText:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"'Exportar CSV'",computed:!1}},csvExportColumns:{required:!1,tsType:{name:"Array",elements:[{name:"string"}],raw:"string[]"},description:""},enableExcelExport:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},excelExportFileName:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"'data.xlsx'",computed:!1}},excelExportButtonText:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"'Exportar Excel'",computed:!1}},excelExportColumns:{required:!1,tsType:{name:"Array",elements:[{name:"string"}],raw:"string[]"},description:""},enableRowSelection:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},rowIdentifier:{required:!1,tsType:{name:"T"},description:""},onSelectionChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(selectedItems: T[]) => void",signature:{arguments:[{type:{name:"Array",elements:[{name:"T"}],raw:"T[]"},name:"selectedItems"}],return:{name:"void"}}},description:""},showPageSizeSelector:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},emptyTitle:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"'No hay datos disponibles'",computed:!1}},emptyMessage:{required:!1,tsType:{name:"string"},description:""},emptyImageSrc:{required:!1,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:"",defaultValue:{value:`<Box mb={2}>
40
+ <img src={EmptyImage} alt="No data" style={{ maxWidth: '150px', opacity: 0.6 }} />
41
+ </Box>`,computed:!1}}}};function i(o){return null}i.displayName="Column";const ne=[{id:1,nombre:"Juan Pérez",email:"juan@example.com",avatar:"https://placehold.co/50x50/F0F8FF/333333?text=JP",edad:25,activo:!0,rol:"admin",fechaRegistro:"2023-01-15",puntuacion:4.5},{id:2,nombre:"Ana García",email:"ana@example.com",avatar:"https://placehold.co/50x50/FFF0F5/333333?text=AG",edad:30,activo:!1,rol:"usuario",fechaRegistro:"2023-02-20",puntuacion:3.8},{id:3,nombre:"Carlos López",email:"carlos@example.com",avatar:"https://placehold.co/50x50/F5FFFA/333333?text=CL",edad:28,activo:!0,rol:"moderador",fechaRegistro:"2023-03-10",puntuacion:4.2},{id:4,nombre:"María Rodríguez",email:"maria@example.com",avatar:"https://placehold.co/50x50/F8F8FF/333333?text=MR",edad:35,activo:!0,rol:"usuario",fechaRegistro:"2023-04-05",puntuacion:4.9},{id:5,nombre:"Luis Martínez",email:"luis@example.com",avatar:"https://placehold.co/50x50/E6E6FA/333333?text=LM",edad:22,activo:!1,rol:"usuario",fechaRegistro:"2023-05-12",puntuacion:3.2}],ca=[{id:1,nombre:"iPhone 15",precio:999,categoria:"Electrónicos",stock:15,imagen:"https://placehold.co/60x60/ADD8E6/000000?text=I15",enOferta:!0,rating:4.8},{id:2,nombre:"Samsung Galaxy S24",precio:899,categoria:"Electrónicos",stock:8,imagen:"https://placehold.co/60x60/90EE90/000000?text=S24",enOferta:!1,rating:4.6},{id:3,nombre:"MacBook Pro",precio:1999,categoria:"Computadoras",stock:3,imagen:"https://placehold.co/60x60/DDA0DD/000000?text=MBP",enOferta:!0,rating:4.9},{id:4,nombre:"Dell XPS 13",precio:1299,categoria:"Computadoras",stock:0,imagen:"https://placehold.co/60x60/FFB6C1/000000?text=DX13",enOferta:!1,rating:4.4}],da=[{id:1,nombre:"Roberto",apellido:"Silva",departamento:"Desarrollo",salario:75e3,fechaIngreso:"2022-01-15",activo:!0,avatar:"https://placehold.co/50x50/B0E0E6/000000?text=RS"},{id:2,nombre:"Sofía",apellido:"Herrera",departamento:"Diseño",salario:65e3,fechaIngreso:"2022-03-20",activo:!0,avatar:"https://placehold.co/50x50/F5DEB3/000000?text=SH"},{id:3,nombre:"Diego",apellido:"Morales",departamento:"Marketing",salario:55e3,fechaIngreso:"2021-11-10",activo:!1,avatar:"https://placehold.co/50x50/D8BFD8/000000?text=DM"}],fo=`
42
+ <Table data={data} visiblePageNumbers={5} pageSizeSelectorValue={1} pageSize={1}>
43
+ <Column name="Nombre" field="nombre">
44
+ {({ nombre }) => <Typography variant="body2">{nombre}</Typography>}
45
+ </Column>
46
+ <Column name="Email" field="email">
47
+ {({ email }) => <Typography variant="body2" color="text.secondary">{email}</Typography>}
48
+ </Column>
49
+ <Column name="Edad" field="edad">
50
+ {({ edad }) => <Typography variant="body2">{edad} años</Typography>}
51
+ </Column>
52
+ </Table>
53
+ `,bo=`
54
+ <Table data={data}>
55
+ <Column name="Usuario" field={['avatar', 'nombre']}>
56
+ {({ avatar, nombre }) => (
57
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
58
+ <Avatar src={avatar} alt={nombre} sx={{ width: 40, height: 40 }} />
59
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
60
+ </Box>
61
+ )}
62
+ </Column>
63
+ <Column name="Estado" field="activo">
64
+ {({ activo }) => (
65
+ <Chip
66
+ label={activo ? 'Activo' : 'Inactivo'}
67
+ color={activo ? 'success' : 'default'}
68
+ size="small"
69
+ />
70
+ )}
71
+ </Column>
72
+ <Column name="Rol" field="rol">
73
+ {({ rol }) => (
74
+ <Chip
75
+ label={rol!.charAt(0).toUpperCase() + rol!.slice(1)}
76
+ color={rol === 'admin' ? 'primary' : rol === 'moderador' ? 'secondary' : 'default'}
77
+ variant="outlined"
78
+ size="small"
79
+ />
80
+ )}
81
+ </Column>
82
+ <Column name="Puntuación" field="puntuacion">
83
+ {({ puntuacion }) => (
84
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
85
+ <Rating value={puntuacion} max={5} precision={0.1} size="small" readOnly />
86
+ <Typography variant="caption" color="text.secondary">
87
+ {puntuacion}
88
+ </Typography>
89
+ </Box>
90
+ )}
91
+ </Column>
92
+ </Table>
93
+ `,vo=`
94
+ const [currentPage, setCurrentPage] = useState(1);
95
+ const [pageSize, setPageSize] = useState(2);
96
+ const totalItems = usuarios.length;
97
+ const totalPages = Math.ceil(totalItems / pageSize);
98
+
99
+ const startIndex = (currentPage - 1) * pageSize;
100
+ const currentData = usuarios.slice(startIndex, startIndex + pageSize);
101
+
102
+ const previousPageNum = currentPage > 1 ? currentPage - 1 : 1;
103
+ const nextPageNum = currentPage < totalPages ? currentPage + 1 : totalPages;
104
+
105
+ return (
106
+ <Table
107
+ data={currentData} // Pasa solo los datos de la página actual
108
+ currentPage={currentPage}
109
+ pageSize={pageSize}
110
+ totalPages={totalPages}
111
+ previousPage={previousPageNum}
112
+ nextPage={nextPageNum}
113
+ onPageChange={setCurrentPage}
114
+ onPageSizeChange={setPageSize}
115
+ >
116
+ <Column name="Nombre" field="nombre">
117
+ {({ nombre }) => <Typography variant="body2" fontWeight="medium">{nombre}</Typography>}
118
+ </Column>
119
+ <Column name="Email" field="email">
120
+ {({ email }) => <Typography variant="body2" color="text.secondary">{email}</Typography>}
121
+ </Column>
122
+ <Column name="Estado" field="activo">
123
+ {({ activo }) => (
124
+ <Chip
125
+ label={activo ? 'Activo' : 'Inactivo'}
126
+ color={activo ? 'success' : 'default'}
127
+ size="small"
128
+ />
129
+ )}
130
+ </Column>
131
+ <Column name="Fecha de Registro" field="fechaRegistro">
132
+ {({ fechaRegistro }) => (
133
+ <Typography variant="body2">
134
+ {new Date(fechaRegistro!).toLocaleDateString('es-ES')}
135
+ </Typography>
136
+ )}
137
+ </Column>
138
+ </Table>
139
+ );
140
+ `,Co=`
141
+ <Table data={data} pageSizeSelectorValue={pageSizeSelectorValue}>
142
+ <Column name="Producto" field={['imagen', 'nombre']}>
143
+ {({ imagen, nombre }) => (
144
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
145
+ <Box
146
+ component="img"
147
+ src={imagen}
148
+ alt={nombre}
149
+ sx={{ width: 50, height: 50, borderRadius: 1, objectFit: 'cover' }}
150
+ />
151
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
152
+ </Box>
153
+ )}
154
+ </Column>
155
+ <Column name="Precio" field={['precio', 'enOferta']}>
156
+ {({ precio, enOferta }) => (
157
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
158
+ <Typography
159
+ variant="body2"
160
+ color={enOferta ? 'error.main' : 'text.primary'}
161
+ fontWeight={enOferta ? 'bold' : 'normal'}
162
+ >
163
+ \${precio!.toLocaleString()}
164
+ </Typography>
165
+ {enOferta && (
166
+ <Chip label="OFERTA" color="error" size="small" />
167
+ )}
168
+ </Box>
169
+ )}
170
+ </Column>
171
+ <Column name="Stock" field="stock">
172
+ {({ stock }) => (
173
+ <Chip
174
+ label={stock! > 0 ? \`\${stock} unidades\` : 'Sin stock'}
175
+ color={stock! > 5 ? 'success' : stock! > 0 ? 'warning' : 'error'}
176
+ size="small"
177
+ />
178
+ )}
179
+ </Column>
180
+ <Column name="Categoría" field="categoria">
181
+ {({ categoria }) => (
182
+ <Typography variant="body2">{categoria}</Typography>
183
+ )}
184
+ </Column>
185
+ <Column name="Rating" field="rating">
186
+ {({ rating }) => (
187
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
188
+ <Rating value={rating} max={5} precision={0.1} size="small" readOnly />
189
+ <Typography variant="caption">({rating})</Typography>
190
+ </Box>
191
+ )}
192
+ </Column>
193
+ </Table>
194
+ `,So=`
195
+ <Table data={data} pageSizeSelectorValue={pageSizeSelectorValue}>
196
+ <Column name="Empleado" field={['avatar', 'nombre', 'apellido']}>
197
+ {({ avatar, nombre, apellido }) => (
198
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
199
+ <Avatar src={avatar} sx={{ width: 40, height: 40 }}>
200
+ {avatar ? '' : \`\${nombre!.charAt(0)}\${apellido!.charAt(0)}\`}
201
+ </Avatar>
202
+ <Typography variant="body2" fontWeight="medium">
203
+ {nombre} {apellido}
204
+ </Typography>
205
+ </Box>
206
+ )}
207
+ </Column>
208
+ <Column name="Departamento" field="departamento">
209
+ {({ departamento }) => (
210
+ <Chip
211
+ label={departamento}
212
+ color="info"
213
+ variant="filled"
214
+ size="small"
215
+ />
216
+ )}
217
+ </Column>
218
+ <Column name="Salario" field="salario">
219
+ {({ salario }) => (
220
+ <Typography variant="body2" fontWeight="bold" color="success.dark">
221
+ \${salario!.toLocaleString('es-ES')}
222
+ </Typography>
223
+ )}
224
+ </Column>
225
+ <Column name="Estado" field={['activo', 'fechaIngreso']}>
226
+ {({ activo, fechaIngreso }) => (
227
+ <Box>
228
+ <Chip
229
+ label={activo ? 'Contratado' : 'Inactivo'}
230
+ color={activo ? 'success' : 'error'}
231
+ size="small"
232
+ />
233
+ <Typography variant="caption" display="block" color="text.secondary" sx={{ mt: 0.5 }}>
234
+ Desde: {new Date(fechaIngreso!).toLocaleDateString('es-ES')}
235
+ </Typography>
236
+ </Box>
237
+ )}
238
+ </Column>
239
+ </Table>
240
+ `,To=`
241
+ <Table data={data}>
242
+ <Column name="Nombre" field="nombre">
243
+ {({ nombre }) => <Typography variant="body2">{nombre}</Typography>}
244
+ </Column>
245
+ <Column name="Email" field="email">
246
+ {({ email }) => <Typography variant="body2">{email}</Typography>}
247
+ </Column>
248
+ <Column name="Estado" field="activo">
249
+ {({ activo }) => <Chip label={activo ? 'Activo' : 'Inactivo'} size="small" />}
250
+ </Column>
251
+ </Table>
252
+ `,Eo=`
253
+ <Table data={data}>
254
+ <Column name="Usuario" field={['avatar', 'nombre', 'email']}>
255
+ {({ avatar, nombre, email }) => (
256
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
257
+ <Avatar src={avatar} alt={nombre} />
258
+ <Box>
259
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
260
+ <Typography variant="caption" color="text.secondary">{email}</Typography>
261
+ </Box>
262
+ </Box>
263
+ )}
264
+ </Column>
265
+ <Column<Usuario> name="Información" field={[]}>
266
+ {(user) => (
267
+ <>
268
+ <Typography variant="body2">{user.edad} años</Typography>
269
+ <Box sx={{ display: 'flex', gap: 1, mt: 0.5 }}>
270
+ <Chip label={user.rol} size="small" color="primary" variant="outlined" />
271
+ <Chip
272
+ label={user.activo ? 'Activo' : 'Inactivo'}
273
+ size="small"
274
+ color={user.activo ? 'success' : 'default'}
275
+ />
276
+ </Box>
277
+ </>
278
+ )}
279
+ </Column>
280
+ </Table>
281
+ `,jo=`
282
+ <Table data={data}>
283
+ <Column name="Producto" field={['imagen', 'nombre']}>
284
+ {({ imagen, nombre }) => (
285
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
286
+ <Box
287
+ component="img"
288
+ src={imagen}
289
+ alt={nombre}
290
+ sx={{ width: 50, height: 50, borderRadius: 1, objectFit: 'cover' }}
291
+ />
292
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
293
+ </Box>
294
+ )}
295
+ </Column>
296
+ <Column name="Precio" field={['precio', 'enOferta']}>
297
+ {({ precio, enOferta }) => (
298
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
299
+ <Typography
300
+ variant="body2"
301
+ color={enOferta ? 'error.main' : 'text.primary'}
302
+ fontWeight={enOferta ? 'bold' : 'normal'}
303
+ >
304
+ \${precio!.toLocaleString()}
305
+ </Typography>
306
+ {enOferta && (
307
+ <Chip label="OFERTA" color="error" size="small" />
308
+ )}
309
+ </Box>
310
+ )}
311
+ </Column>
312
+ <Column name="Stock" field="stock">
313
+ {({ stock }) => (
314
+ <Chip
315
+ label={stock! > 0 ? \`\${stock} unidades\` : 'Sin stock'}
316
+ color={stock!> 5 ? 'success' : stock! > 0 ? 'warning' : 'error'}
317
+ size="small"
318
+ sx={{ backgroundColor: stock === 0 ? 'rgba(255, 0, 0, 0.1)' : undefined }}
319
+ />
320
+ )}
321
+ </Column>
322
+ <Column name="Rating" field="rating">
323
+ {({ rating }) => (
324
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
325
+ <Rating value={rating} max={5} precision={0.1} size="small" readOnly />
326
+ <Typography variant="caption">({rating})</Typography>
327
+ </Box>
328
+ )}
329
+ </Column>
330
+ </Table>
331
+ `,wo=`
332
+ <Table data={data}>
333
+ <Column name="Empleado" field={['nombre', 'apellido', 'avatar']}>
334
+ {({ nombre, apellido, avatar }) => (
335
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
336
+ <Avatar src={avatar} sx={{ width: 40, height: 40 }}>
337
+ {avatar ? '' : \`\${nombre!.charAt(0)}\${apellido!.charAt(0)}\`}
338
+ </Avatar>
339
+ <Typography variant="body2" fontWeight="medium">
340
+ {nombre} {apellido}
341
+ </Typography>
342
+ </Box>
343
+ )}
344
+ </Column>
345
+ <Column name="Departamento" field="departamento">
346
+ {({ departamento }) => (
347
+ <Chip
348
+ label={departamento}
349
+ color="info"
350
+ variant="filled"
351
+ size="small"
352
+ />
353
+ )}
354
+ </Column>
355
+ <Column name="Salario" field="salario">
356
+ {({ salario }) => (
357
+ <Typography variant="body2" fontWeight="bold" color="success.dark">
358
+ \${salario!.toLocaleString('es-ES')}
359
+ </Typography>
360
+ )}
361
+ </Column>
362
+ <Column name="Estado de Contratación" field={['activo', 'fechaIngreso']}>
363
+ {({ activo, fechaIngreso }) => (
364
+ <Box>
365
+ <Chip
366
+ label={activo ? 'Contratado' : 'Inactivo'}
367
+ color={activo ? 'success' : 'error'}
368
+ size="small"
369
+ />
370
+ <Typography variant="caption" display="block" color="text.secondary" sx={{ mt: 0.5 }}>
371
+ Desde: {new Date(fechaIngreso!).toLocaleDateString('es-ES')}
372
+ </Typography>
373
+ </Box>
374
+ )}
375
+ </Column>
376
+ </Table>
377
+ `,Io=`
378
+ <Table data={data}>
379
+ <Column name="Nombre" field="nombre">
380
+ {({ nombre }) => <Typography variant="body2">{nombre}</Typography>}
381
+ </Column>
382
+ <Column name="Email" field="email">
383
+ {({ email }) => <Typography variant="body2" color="text.secondary">{email}</Typography>}
384
+ </Column>
385
+ <Column name="Acciones" field="id">
386
+ {({ id }) => (
387
+ <Button
388
+ variant="contained"
389
+ color="primary"
390
+ size="small"
391
+ onClick={() => alert('ID del usuario: '+id )} // Log al hacer clic
392
+ >
393
+ Ver Detalles ({id})
394
+ </Button>
395
+ )}
396
+ </Column>
397
+ </Table>
398
+ `,ko=`
399
+ <Table<Usuario>
400
+ data={usuarios}
401
+ enableExport={enableExport}
402
+ exportFileName={exportFileName}
403
+ exportButtonText={exportButtonText}
404
+ exportColumns={exportColumns}
405
+ >
406
+ <Column<Usuario> name="ID" field="id">
407
+ {(row) => <Typography>{row.id}</Typography>}
408
+ </Column>
409
+ <Column<Usuario> name="Nombre" field="nombre">
410
+ {(row) => <Typography>{row.nombre}</Typography>}
411
+ </Column>
412
+ <Column<Usuario> name="Email" field="email">
413
+ {({ email }) => <Link href={\`mailto:\${email}\`}>{email}</Link>}
414
+ </Column>
415
+ <Column<Usuario> name="Edad" field="edad">
416
+ {(row) => <Typography>{row.edad}</Typography>}
417
+ </Column>
418
+ <Column<Usuario> name="Rol" field="rol">
419
+ {({ rol }) => <Chip label={rol} size="small" />}
420
+ </Column>
421
+ <Column<Usuario> name="Acciones" field="id">
422
+ {({ id }) => (
423
+ <Button variant="outlined" size="small" onClick={() => alert(\`Ver detalles de usuario \${id}\`)}>
424
+ Ver
425
+ </Button>
426
+ )}
427
+ </Column>
428
+ </Table>
429
+ `,Po=`
430
+
431
+ const [selectedItems, setSelectedItems] = useState<UserData[]>([]);
432
+
433
+ const handleSelectionChange = (items: UserData[]) => {
434
+ setSelectedItems(items);
435
+ args.onSelectionChange?.(items);
436
+ };
437
+
438
+ const handleBulkDelete = () => {
439
+ if (selectedItems.length > 0) {
440
+ alert(\`Eliminando \${selectedItems.length} usuarios: \${selectedItems.map(item => item.nombre).join(', ')}\`);
441
+ setSelectedItems([]);
442
+ } else {
443
+ alert('No hay elementos seleccionados para eliminar.');
444
+ }
445
+ };
446
+
447
+ const handleBulkUpdateCity = () => {
448
+ if (selectedItems.length > 0) {
449
+ const newCity = prompt('Ingresa la nueva ciudad para los seleccionados:');
450
+ if (newCity) {
451
+ alert(\`Actualizando ciudad de \${selectedItems.length} usuarios a \${newCity}\`);
452
+ setSelectedItems([]);
453
+ }
454
+ } else {
455
+ alert('No hay elementos seleccionados para actualizar.');
456
+ }
457
+ };
458
+
459
+ return (
460
+ <Box>
461
+ <Typography variant="h6" gutterBottom>
462
+ Tabla con Selección de Filas
463
+ </Typography>
464
+ {selectedItems.length > 0 && (
465
+ <Box sx={{ mb: 2, display: 'flex', gap: 1 }}>
466
+ <Button variant="contained" color="error" onClick={handleBulkDelete}>
467
+ Eliminar ({selectedItems.length})
468
+ </Button>
469
+ <Button variant="contained" color="primary" onClick={handleBulkUpdateCity}>
470
+ Actualizar Ciudad ({selectedItems.length})
471
+ </Button>
472
+ <Typography variant="body2" sx={{ alignSelf: 'center', ml: 2 }}>
473
+ Elementos seleccionados: {selectedItems.length}
474
+ </Typography>
475
+ </Box>
476
+ )}
477
+ <Table<UserData>
478
+ {...args}
479
+ data={sampleData} // Usamos sampleData para esta historia
480
+ enableRowSelection={true}
481
+ rowIdentifier="id" // Es crucial que coincida con una clave única en tus datos
482
+ onSelectionChange={handleSelectionChange}
483
+ pageSizeSelectorValue={5}
484
+ >
485
+ <Column<UserData>
486
+ name="ID"
487
+ field="id"
488
+ children={(row) => <Typography>{row.id}</Typography>}
489
+ />
490
+ <Column<UserData>
491
+ name="Nombre"
492
+ field="name"
493
+ children={(row) => <Typography>{row.name}</Typography>}
494
+ />
495
+ <Column<UserData>
496
+ name="Email"
497
+ field="email"
498
+ children={(row) => <Typography>{row.email}</Typography>}
499
+ />
500
+ <Column<UserData>
501
+ name="Ciudad"
502
+ field="city"
503
+ children={(row) => <Typography>{row.city}</Typography>}
504
+ />
505
+ </Table>
506
+ </Box>
507
+ );
508
+
509
+ `,zo=`
510
+ const [selectedItems, setSelectedItems] = useState<UserData[]>([]);
511
+
512
+ const handleSelectionChange = (items: UserData[]) => {
513
+ setSelectedItems(items);
514
+ args.onSelectionChange?.(items);
515
+ };
516
+
517
+ return (
518
+ <Box>
519
+ <Typography variant="h6" gutterBottom>
520
+ Tabla con Exportación y Selección de Filas
521
+ </Typography>
522
+ {selectedItems.length > 0 && (
523
+ <Box sx={{ mb: 2 }}>
524
+ <Typography variant="body2">
525
+ Elementos seleccionados: {selectedItems.length}
526
+ </Typography>
527
+ </Box>
528
+ )}
529
+ <Table<UserData>
530
+ {...args}
531
+ data={sampleData} // Usamos sampleData para esta historia
532
+ enableRowSelection={true}
533
+ rowIdentifier="id"
534
+ onSelectionChange={handleSelectionChange}
535
+ pageSizeSelectorValue={5}
536
+ enableCSVExport={true}
537
+ csvExportFileName="users_data_with_selection"
538
+ enableExcelExport={true}
539
+ excelExportFileName="users_data_with_selection"
540
+ >
541
+ <Column<UserData>
542
+ name="ID"
543
+ field="id"
544
+ children={(row) => <Typography>{row.id}</Typography>}
545
+ />
546
+ <Column<UserData>
547
+ name="Nombre"
548
+ field="name"
549
+ children={(row) => <Typography>{row.name}</Typography>}
550
+ />
551
+ <Column<UserData>
552
+ name="Email"
553
+ field="email"
554
+ children={(row) => <Typography>{row.email}</Typography>}
555
+ />
556
+ <Column<UserData>
557
+ name="Ciudad"
558
+ field="city"
559
+ children={(row) => <Typography>{row.city}</Typography>}
560
+ />
561
+ </Table>
562
+ </Box>
563
+ );
564
+ `,ma=[{id:1,name:"Alice Smith",age:28,city:"New York",email:"alice@example.com"},{id:2,name:"Bob Johnson",age:34,city:"London",email:"bob@example.com"},{id:3,name:"Charlie Brown",age:22,city:"Paris",email:"charlie@example.com"},{id:4,name:"Diana Prince",age:40,city:"Themyscira",email:"diana@example.com"},{id:5,name:"Eve Adams",age:19,city:"Berlin",email:"eve@example.com"},{id:6,name:"Frank White",age:55,city:"Tokyo",email:"frank@example.com"},{id:7,name:"Grace Lee",age:31,city:"Seoul",email:"grace@example.com"},{id:8,name:"Henry Ford",age:60,city:"Detroit",email:"henry@example.com"},{id:9,name:"Ivy Green",age:25,city:"Rome",email:"ivy@example.com"},{id:10,name:"Jack Black",age:45,city:"Los Angeles",email:"jack@example.com"},{id:11,name:"Karen Millen",age:33,city:"Madrid",email:"karen@example.com"},{id:12,name:"Leo Messi",age:37,city:"Miami",email:"leo@example.com"}],Et={title:"Components/Table",component:U,parameters:{layout:"padded",docs:{description:{component:"Componente de tabla flexible y tipado que permite definir columnas de forma declarativa con paginación interna o externa."}}},tags:["autodocs"],argTypes:{data:{control:"object",description:"Array de objetos de datos a mostrar en la tabla. Las columnas heredarán el tipo definido del arreglo de datos."},children:{control:!1,description:"Componentes `Column` que definen la estructura de las columnas. Las columnas definen requieren las propiedades: `name` que es el nombre que se verá en la columna y `field` que son los atributos a los cuales se podran acceder desde el scope interno de la columna. Si el atributo `field` tiene un arreglo vacio, se utilizará el objeto completo (todos los campos del objeto)."},currentPage:{control:"number",description:"Número de página actual (para paginación controlada).",if:{arg:"onPageChange",exists:!0}},pageSize:{control:"number",description:"Número de elementos por página (para paginación controlada).",if:{arg:"onPageChange",exists:!0}},totalPages:{control:"number",description:"Número total de páginas (para paginación controlada).",if:{arg:"onPageChange",exists:!0}},previousPage:{control:"number",description:"Página anterior (para paginación controlada).",if:{arg:"onPageChange",exists:!0}},nextPage:{control:"number",description:"Página siguiente (para paginación controlada).",if:{arg:"onPageChange",exists:!0}},pageSizeSelectorValue:{control:"number",description:"Valor por defecto para el selector de tamaño de página cuando la paginación es interna."},onPageChange:{action:"page changed",description:"Callback para manejar el cambio de página (activa paginación controlada)."},onPageSizeChange:{action:"page size changed",description:"Callback para manejar el cambio de tamaño de página (activa paginación controlada).",if:{arg:"onPageChange",exists:!0}},enableCSVExport:{control:"boolean",description:"Habilita o deshabilita la funcionalidad de exportación a CSV.",defaultValue:!1},csvExportFileName:{control:"text",description:"Nombre del archivo CSV al exportar.",defaultValue:"data.csv",if:{arg:"enableCSVExport",eq:!0}},enableExcelExport:{control:"boolean",description:"Habilita o deshabilita la funcionalidad de exportación a Excel.",defaultValue:!1},excelExportFileName:{control:"text",description:"Nombre del archivo Excel al exportar.",defaultValue:"data.xlsx",if:{arg:"enableExcelExport",eq:!0}},csvExportButtonText:{control:"text",description:"Texto del botón de exportar.",defaultValue:"Exportar CSV",if:{arg:"enableCSVExport",eq:!0}},excelExportButtonText:{control:"text",description:"Texto del botón de exportar.",defaultValue:"Exportar Excel",if:{arg:"enableExcelExport",eq:!0}},csvExportColumns:{control:"text",description:"Array de nombres de columnas a exportar. Si no se especifica, se exportan todas.",if:{arg:"enableCSVExport",eq:!0}},enableRowSelection:{control:"boolean",description:"Habilita o deshabilita la selección de filas con checkboxes.",defaultValue:!1},rowIdentifier:{control:"text",description:'La clave única en el objeto de datos utilizada como identificador para las filas seleccionables (ej. "id").',if:{arg:"enableRowSelection",eq:!0}},onSelectionChange:{action:"selectionChanged",description:"Callback que se dispara cuando cambia la selección de filas. Devuelve un array con los objetos seleccionados.",if:{arg:"enableRowSelection",eq:!0}}}},je={args:{data:ne},render:({data:o})=>e.jsxs(U,{data:o,pageSizeSelectorValue:1,pageSize:1,children:[e.jsx(i,{name:"Nombre",field:"nombre",children:({nombre:a})=>e.jsx(s,{children:a})}),e.jsx(i,{name:"Email",field:"email",children:({email:a})=>e.jsx(s,{color:"text.secondary",children:a})}),e.jsx(i,{width:"10%",name:"Edad",field:"edad",children:({edad:a})=>e.jsxs(s,{children:[a," años"]})})]}),parameters:{docs:{description:{story:"Tabla básica con datos simples y columnas de texto. La paginación es interna por defecto."},source:{code:fo.trim()}}}},we={args:{data:ne.slice(0,4)},render:({data:o})=>e.jsxs(U,{data:o,children:[e.jsx(i,{name:"Usuario",field:["avatar","nombre"],children:({avatar:a,nombre:t})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:2},children:[e.jsx(We,{src:a,alt:t,sx:{width:40,height:40}}),e.jsx(s,{variant:"body2",fontWeight:"medium",children:t})]})}),e.jsx(i,{name:"Estado",field:"activo",children:({activo:a})=>e.jsx($,{label:a?"Activo":"Inactivo",color:a?"success":"default",size:"small"})}),e.jsx(i,{name:"Rol",field:"rol",children:({rol:a})=>e.jsx($,{label:a.charAt(0).toUpperCase()+a.slice(1),color:a==="admin"?"primary":a==="moderador"?"secondary":"default",variant:"outlined",size:"small"})}),e.jsx(i,{name:"Puntuación",field:"puntuacion",children:({puntuacion:a})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx(Qe,{value:a,max:5,precision:.1,size:"small",readOnly:!0}),e.jsx(s,{variant:"caption",color:"text.secondary",children:a})]})})]}),parameters:{docs:{description:{story:"Tabla con componentes complejos como avatars, chips y ratings. La paginación es interna por defecto."},source:{code:bo.trim()}}}},Ie={render:()=>{const[o,a]=T.useState(1),[t,r]=T.useState(2),l=ne.length,p=Math.ceil(l/t),n=(o-1)*t,u=ne.slice(n,n+t),f=o>1?o-1:1,h=o<p?o+1:p;return e.jsxs(U,{data:u,currentPage:o,pageSize:t,totalPages:p,previousPage:f,nextPage:h,onPageChange:a,onPageSizeChange:r,children:[e.jsx(i,{name:"Nombre",field:"nombre",children:({nombre:x})=>e.jsx(s,{variant:"body2",fontWeight:"medium",children:x})}),e.jsx(i,{name:"Email",field:"email",children:({email:x})=>e.jsx(s,{variant:"body2",color:"text.secondary",children:x})}),e.jsx(i,{name:"Estado",field:"activo",children:({activo:x})=>e.jsx($,{label:x?"Activo":"Inactivo",color:x?"success":"default",size:"small"})}),e.jsx(i,{name:"Fecha de Registro",field:"fechaRegistro",children:({fechaRegistro:x})=>e.jsx(s,{variant:"body2",children:new Date(x).toLocaleDateString("es-ES")})})]})},parameters:{docs:{description:{story:"Tabla con paginación controlada externamente. El componente `Table` no gestiona el estado de la paginación, solo la UI."},source:{code:vo.trim()}}}},ke={args:{data:ca,pageSizeSelectorValue:1},render:({data:o,pageSizeSelectorValue:a})=>e.jsxs(U,{data:o,pageSizeSelectorValue:a,children:[e.jsx(i,{name:"Producto",field:["imagen","nombre"],children:({imagen:t,nombre:r})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:2},children:[e.jsx(w,{component:"img",src:t,alt:r,sx:{width:50,height:50,borderRadius:1,objectFit:"cover"}}),e.jsx(s,{variant:"body2",fontWeight:"medium",children:r})]})}),e.jsx(i,{name:"Precio",field:["precio","enOferta"],children:({precio:t,enOferta:r})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsxs(s,{variant:"body2",color:r?"error.main":"text.primary",fontWeight:r?"bold":"normal",children:["$",t.toLocaleString()]}),r&&e.jsx($,{label:"OFERTA",color:"error",size:"small"})]})}),e.jsx(i,{name:"Stock",field:"stock",children:({stock:t})=>e.jsx($,{label:t>0?`${t} unidades`:"Sin stock",color:t>5?"success":t>0?"warning":"error",size:"small"})}),e.jsx(i,{name:"Categoría",field:"categoria",children:({categoria:t})=>e.jsx(s,{variant:"body2",children:t})}),e.jsx(i,{name:"Rating",field:"rating",children:({rating:t})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx(Qe,{value:t,max:5,precision:.1,size:"small",readOnly:!0}),e.jsxs(s,{variant:"caption",children:["(",t,")"]})]})})]}),parameters:{docs:{description:{story:"Tabla de productos con imágenes, precios, stock y calificaciones. Paginación interna."},source:{code:Co.trim()}}}},Pe={args:{data:da,pageSizeSelectorValue:1},render:({data:o,pageSizeSelectorValue:a})=>e.jsxs(U,{data:o,pageSizeSelectorValue:a,children:[e.jsx(i,{name:"Empleado",field:["avatar","nombre","apellido"],children:({avatar:t,nombre:r,apellido:l})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:2},children:[e.jsx(We,{src:t,sx:{width:40,height:40},children:t?"":`${r.charAt(0)}${l.charAt(0)}`}),e.jsxs(s,{variant:"body2",fontWeight:"medium",children:[r," ",l]})]})}),e.jsx(i,{name:"Departamento",field:"departamento",children:({departamento:t})=>e.jsx($,{label:t,color:"info",variant:"filled",size:"small"})}),e.jsx(i,{name:"Salario",field:"salario",children:({salario:t})=>e.jsxs(s,{variant:"body2",fontWeight:"bold",color:"success.dark",children:["$",t.toLocaleString("es-ES")]})}),e.jsx(i,{name:"Estado",field:["activo","fechaIngreso"],children:({activo:t,fechaIngreso:r})=>e.jsxs(w,{children:[e.jsx($,{label:t?"Contratado":"Inactivo",color:t?"success":"error",size:"small"}),e.jsxs(s,{variant:"caption",display:"block",color:"text.secondary",sx:{mt:.5},children:["Desde: ",new Date(r).toLocaleDateString("es-ES")]})]})})]}),parameters:{docs:{description:{story:"Tabla de empleados con múltiples campos combinados en una sola columna. Paginación interna."},source:{code:So.trim()}}}},ze={args:{data:[]},render:({data:o})=>e.jsxs(U,{data:o,emptyTitle:"No se encontraron registros",emptyMessage:"Intente ajustar sus filtros o agregar nuevos datos.",children:[e.jsx(i,{name:"Nombre",field:"nombre",children:({nombre:a})=>e.jsx(s,{variant:"body2",children:a})}),e.jsx(i,{name:"Email",field:"email",children:({email:a})=>e.jsx(s,{variant:"body2",children:a})}),e.jsx(i,{name:"Estado",field:"activo",children:({activo:a})=>e.jsx($,{label:a?"Activo":"Inactivo",size:"small"})})]}),parameters:{docs:{description:{story:"Tabla sin datos para mostrar el estado vacío y el mensaje correspondiente."},source:{code:To.trim()}}}},Be={args:{data:[ne[0]]},render:({data:o})=>e.jsxs(U,{data:o,children:[e.jsx(i,{name:"Usuario",field:["avatar","nombre","email"],children:({avatar:a,nombre:t,email:r})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:2},children:[e.jsx(We,{src:a,alt:t}),e.jsxs(w,{children:[e.jsx(s,{variant:"body2",fontWeight:"medium",children:t}),e.jsx(s,{variant:"caption",color:"text.secondary",children:r})]})]})}),e.jsx(i,{name:"Información",field:[],children:a=>e.jsxs(e.Fragment,{children:[e.jsxs(s,{variant:"body2",children:[a.edad," años"]}),e.jsxs(w,{sx:{display:"flex",gap:1,mt:.5},children:[e.jsx($,{label:a.rol,size:"small",color:"primary",variant:"outlined"}),e.jsx($,{label:a.activo?"Activo":"Inactivo",size:"small",color:a.activo?"success":"default"})]})]})})]}),parameters:{docs:{description:{story:"Tabla con una sola fila de datos."},source:{code:Eo.trim()}}}},Re={args:{data:ca},render:({data:o})=>e.jsxs(U,{data:o,children:[e.jsx(i,{name:"Producto",field:["imagen","nombre"],children:({imagen:a,nombre:t})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:2},children:[e.jsx(w,{component:"img",src:a,alt:t,sx:{width:50,height:50,borderRadius:1,objectFit:"cover"}}),e.jsx(s,{variant:"body2",fontWeight:"medium",children:t})]})}),e.jsx(i,{name:"Precio",field:["precio","enOferta"],children:({precio:a,enOferta:t})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsxs(s,{variant:"body2",color:t?"error.main":"text.primary",fontWeight:t?"bold":"normal",children:["$",a.toLocaleString()]}),t&&e.jsx($,{label:"OFERTA",color:"error",size:"small"})]})}),e.jsx(i,{name:"Stock",field:"stock",children:({stock:a})=>e.jsx($,{label:a>0?`${a} unidades`:"Sin stock",color:a>5?"success":a>0?"warning":"error",size:"small",sx:{backgroundColor:a===0?"rgba(255, 0, 0, 0.1)":void 0}})}),e.jsx(i,{name:"Rating",field:"rating",children:({rating:a})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx(Qe,{value:a,max:5,precision:.1,size:"small",readOnly:!0}),e.jsxs(s,{variant:"caption",children:["(",a,")"]})]})})]}),parameters:{docs:{description:{story:"Muestra la tabla de productos resaltando visualmente los productos sin stock. Paginación interna."},source:{code:jo.trim()}}}},De={args:{data:da},render:({data:o})=>e.jsxs(U,{data:o,children:[e.jsx(i,{name:"Empleado",field:["nombre","apellido","avatar"],children:({nombre:a,apellido:t,avatar:r})=>e.jsxs(w,{sx:{display:"flex",alignItems:"center",gap:2},children:[e.jsx(We,{src:r,sx:{width:40,height:40},children:r?"":`${a.charAt(0)}${t.charAt(0)}`}),e.jsxs(s,{variant:"body2",fontWeight:"medium",children:[a," ",t]})]})}),e.jsx(i,{name:"Departamento",field:"departamento",children:({departamento:a})=>e.jsx($,{label:a,color:"info",variant:"filled",size:"small"})}),e.jsx(i,{name:"Salario",field:"salario",children:({salario:a})=>e.jsxs(s,{variant:"body2",fontWeight:"bold",color:"success.dark",children:["$",a.toLocaleString("es-ES")]})}),e.jsx(i,{name:"Estado de Contratación",field:["activo","fechaIngreso"],children:({activo:a,fechaIngreso:t})=>e.jsxs(w,{children:[e.jsx($,{label:a?"Contratado":"Inactivo",color:a?"success":"error",size:"small"}),e.jsxs(s,{variant:"caption",display:"block",color:"text.secondary",sx:{mt:.5},children:["Desde: ",new Date(t).toLocaleDateString("es-ES")]})]})})]}),parameters:{docs:{description:{story:"Muestra una tabla de empleados con un resumen detallado de su estado de contratación y fecha de ingreso. Paginación interna."},source:{code:wo.trim()}}}},Fe={args:{data:ne.slice(0,3)},render:({data:o})=>e.jsxs(U,{data:o,children:[e.jsx(i,{name:"Nombre",field:"nombre",children:({nombre:a})=>e.jsx(s,{variant:"body2",children:a})}),e.jsx(i,{name:"Email",field:"email",children:({email:a})=>e.jsx(s,{variant:"body2",color:"text.secondary",children:a})}),e.jsx(i,{name:"Acciones",field:"id",children:({id:a})=>e.jsxs(ge,{variant:"contained",color:"primary",size:"small",onClick:()=>alert("ID del usuario: "+a),children:["Ver Detalles (",a,")"]})})]}),parameters:{docs:{description:{story:"Ejemplo de tabla con una columna de acciones que, al hacer clic en un botón, registra el ID del elemento en la consola."},source:{code:Io.trim()}}}},Ae={args:{data:ne,enableCSVExport:!0,enableExcelExport:!0,csvExportFileName:"usuarios_data",csvExportButtonText:".csv",excelExportFileName:"usuarios_data",excelExportButtonText:".xlsx",csvExportColumns:["ID","Nombre","Email","Edad"],excelExportColumns:["ID","Nombre","Email","Edad"]},render:({data:o,enableCSVExport:a,enableExcelExport:t,csvExportFileName:r,csvExportButtonText:l,excelExportFileName:p,excelExportButtonText:n,csvExportColumns:u,excelExportColumns:f})=>e.jsxs(U,{data:ne,enableCSVExport:a,enableExcelExport:t,csvExportFileName:r,csvExportButtonText:l,excelExportFileName:p,excelExportButtonText:n,csvExportColumns:u,excelExportColumns:f,children:[e.jsx(i,{name:"ID",field:"id",children:h=>e.jsx(s,{children:h.id})}),e.jsx(i,{name:"Nombre",field:"nombre",children:h=>e.jsx(s,{children:h.nombre})}),e.jsx(i,{name:"Email",field:"email",children:({email:h})=>e.jsx(Ya,{href:`mailto:${h}`,children:h})}),e.jsx(i,{name:"Edad",field:"edad",children:h=>e.jsx(s,{children:h.edad})}),e.jsx(i,{name:"Rol",field:"rol",children:({rol:h})=>e.jsx($,{label:h,size:"small"})}),e.jsx(i,{name:"Acciones",field:"id",children:({id:h})=>e.jsx(ge,{variant:"outlined",size:"small",onClick:()=>alert(`Ver detalles de usuario ${h}`),children:"Ver"})})]}),parameters:{docs:{description:{story:"Tabla con la funcionalidad de exportar sus datos a un archivo CSV. Puedes especificar qué columnas incluir en la exportación y el nombre del archivo."},source:{code:ko.trim()}}}},Ve={render:o=>{const[a,t]=T.useState([]),r=n=>{t(n),o.onSelectionChange?.(n)},l=()=>{a.length>0?(alert(`Eliminando ${a.length} usuarios: ${a.map(n=>n.name).join(", ")}`),t([])):alert("No hay elementos seleccionados para eliminar.")},p=()=>{if(a.length>0){const n=prompt("Ingresa la nueva ciudad para los seleccionados:");n&&(alert(`Actualizando ciudad de ${a.length} usuarios a ${n}`),t([]))}else alert("No hay elementos seleccionados para actualizar.")};return e.jsxs(w,{children:[e.jsx(s,{variant:"h6",gutterBottom:!0,children:"Tabla con Selección de Filas"}),a.length>0&&e.jsxs(w,{sx:{mb:2,display:"flex",gap:1},children:[e.jsxs(ge,{variant:"contained",color:"error",onClick:l,children:["Eliminar (",a.length,")"]}),e.jsxs(ge,{variant:"contained",color:"primary",onClick:p,children:["Actualizar Ciudad (",a.length,")"]}),e.jsxs(s,{variant:"body2",sx:{alignSelf:"center",ml:2},children:["Elementos seleccionados: ",a.length]})]}),e.jsxs(U,{...o,data:ma,enableRowSelection:!0,rowIdentifier:"id",onSelectionChange:r,pageSizeSelectorValue:5,children:[e.jsx(i,{name:"ID",field:"id",children:n=>e.jsx(s,{children:n.id})}),e.jsx(i,{name:"Nombre",field:"name",children:n=>e.jsx(s,{children:n.name})}),e.jsx(i,{name:"Email",field:"email",children:n=>e.jsx(s,{children:n.email})}),e.jsx(i,{name:"Ciudad",field:"city",children:n=>e.jsx(s,{children:n.city})})]})]})},args:{},parameters:{docs:{description:{story:"Tabla con la funcionalidad de selección de filas. Puedes seleccionar una o muchas filas y realizar acciones en masa."},source:{code:Po.trim()}}}},Ne={render:o=>{const[a,t]=T.useState([]),r=l=>{t(l),o.onSelectionChange?.(l)};return e.jsxs(w,{children:[e.jsx(s,{variant:"h6",gutterBottom:!0,children:"Tabla con Exportación y Selección de Filas"}),a.length>0&&e.jsx(w,{sx:{mb:2},children:e.jsxs(s,{variant:"body2",children:["Elementos seleccionados: ",a.length]})}),e.jsxs(U,{...o,data:ma,enableRowSelection:!0,rowIdentifier:"id",onSelectionChange:r,pageSizeSelectorValue:5,enableCSVExport:!0,csvExportFileName:"users_data_with_selection",enableExcelExport:!0,excelExportFileName:"users_data_with_selection",children:[e.jsx(i,{name:"ID",field:"id",children:l=>e.jsx(s,{children:l.id})}),e.jsx(i,{name:"Nombre",field:"name",children:l=>e.jsx(s,{children:l.name})}),e.jsx(i,{name:"Email",field:"email",children:l=>e.jsx(s,{children:l.email})}),e.jsx(i,{name:"Ciudad",field:"city",children:l=>e.jsx(s,{children:l.city})})]})]})},args:{},parameters:{docs:{description:{story:"Tabla con la funcionalidad de exportar sus datos a un archivo CSV y Excel. Puedes especificar qué columnas incluir en la exportación y el nombre del archivo."},source:{code:zo.trim()}}}};je.parameters={...je.parameters,docs:{...je.parameters?.docs,source:{originalSource:`{
565
+ args: {
566
+ data: usuarios
567
+ },
568
+ render: ({
569
+ data
570
+ }) => <Table data={data} pageSizeSelectorValue={1} pageSize={1}>
571
+ <Column name="Nombre" field="nombre">
572
+ {({
573
+ nombre
574
+ }) => <Typography>{nombre}</Typography>}
575
+ </Column>
576
+ <Column name="Email" field="email">
577
+ {({
578
+ email
579
+ }) => <Typography color="text.secondary">{email}</Typography>}
580
+ </Column>
581
+ <Column width='10%' name="Edad" field="edad">
582
+ {({
583
+ edad
584
+ }) => <Typography>{edad} años</Typography>}
585
+ </Column>
586
+ </Table>,
587
+ parameters: {
588
+ docs: {
589
+ description: {
590
+ story: 'Tabla básica con datos simples y columnas de texto. La paginación es interna por defecto.'
591
+ },
592
+ source: {
593
+ code: BasicTableCode.trim()
594
+ }
595
+ }
596
+ }
597
+ }`,...je.parameters?.docs?.source}}};we.parameters={...we.parameters,docs:{...we.parameters?.docs,source:{originalSource:`{
598
+ args: {
599
+ data: usuarios.slice(0, 4)
600
+ },
601
+ render: ({
602
+ data
603
+ }) => <Table data={data}>
604
+ <Column name="Usuario" field={['avatar', 'nombre']}>
605
+ {({
606
+ avatar,
607
+ nombre
608
+ }) => <Box sx={{
609
+ display: 'flex',
610
+ alignItems: 'center',
611
+ gap: 2
612
+ }}>
613
+ <Avatar src={avatar} alt={nombre} sx={{
614
+ width: 40,
615
+ height: 40
616
+ }} />
617
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
618
+ </Box>}
619
+ </Column>
620
+ <Column name="Estado" field="activo">
621
+ {({
622
+ activo
623
+ }) => <Chip label={activo ? 'Activo' : 'Inactivo'} color={activo ? 'success' : 'default'} size="small" />}
624
+ </Column>
625
+ <Column name="Rol" field="rol">
626
+ {({
627
+ rol
628
+ }) => <Chip label={rol!.charAt(0).toUpperCase() + rol!.slice(1)} color={rol === 'admin' ? 'primary' : rol === 'moderador' ? 'secondary' : 'default'} variant="outlined" size="small" />}
629
+ </Column>
630
+ <Column name="Puntuación" field="puntuacion">
631
+ {({
632
+ puntuacion
633
+ }) => <Box sx={{
634
+ display: 'flex',
635
+ alignItems: 'center',
636
+ gap: 1
637
+ }}>
638
+ <Rating value={puntuacion} max={5} precision={0.1} size="small" readOnly />
639
+ <Typography variant="caption" color="text.secondary">
640
+ {puntuacion}
641
+ </Typography>
642
+ </Box>}
643
+ </Column>
644
+ </Table>,
645
+ parameters: {
646
+ docs: {
647
+ description: {
648
+ story: 'Tabla con componentes complejos como avatars, chips y ratings. La paginación es interna por defecto.'
649
+ },
650
+ source: {
651
+ code: ComplexComponentsCode.trim()
652
+ }
653
+ }
654
+ }
655
+ }`,...we.parameters?.docs?.source}}};Ie.parameters={...Ie.parameters,docs:{...Ie.parameters?.docs,source:{originalSource:`{
656
+ render: () => {
657
+ const [currentPage, setCurrentPage] = useState(1);
658
+ const [pageSize, setPageSize] = useState(2);
659
+ const totalItems = usuarios.length;
660
+ const totalPages = Math.ceil(totalItems / pageSize);
661
+ const startIndex = (currentPage - 1) * pageSize;
662
+ const currentData = usuarios.slice(startIndex, startIndex + pageSize);
663
+ const previousPageNum = currentPage > 1 ? currentPage - 1 : 1;
664
+ const nextPageNum = currentPage < totalPages ? currentPage + 1 : totalPages;
665
+ return <Table data={currentData} currentPage={currentPage} pageSize={pageSize} totalPages={totalPages} previousPage={previousPageNum} nextPage={nextPageNum} onPageChange={setCurrentPage} onPageSizeChange={setPageSize}>
666
+ <Column name="Nombre" field="nombre">
667
+ {({
668
+ nombre
669
+ }) => <Typography variant="body2" fontWeight="medium">{nombre}</Typography>}
670
+ </Column>
671
+ <Column name="Email" field="email">
672
+ {({
673
+ email
674
+ }) => <Typography variant="body2" color="text.secondary">{email}</Typography>}
675
+ </Column>
676
+ <Column name="Estado" field="activo">
677
+ {({
678
+ activo
679
+ }) => <Chip label={activo ? 'Activo' : 'Inactivo'} color={activo ? 'success' : 'default'} size="small" />}
680
+ </Column>
681
+ <Column name="Fecha de Registro" field="fechaRegistro">
682
+ {({
683
+ fechaRegistro
684
+ }) => <Typography variant="body2">
685
+ {new Date(fechaRegistro!).toLocaleDateString('es-ES')}
686
+ </Typography>}
687
+ </Column>
688
+ </Table>;
689
+ },
690
+ parameters: {
691
+ docs: {
692
+ description: {
693
+ story: 'Tabla con paginación controlada externamente. El componente \`Table\` no gestiona el estado de la paginación, solo la UI.'
694
+ },
695
+ source: {
696
+ code: WithExternalPaginationControlCode.trim()
697
+ }
698
+ }
699
+ }
700
+ }`,...Ie.parameters?.docs?.source}}};ke.parameters={...ke.parameters,docs:{...ke.parameters?.docs,source:{originalSource:`{
701
+ args: {
702
+ data: productos,
703
+ pageSizeSelectorValue: 1
704
+ },
705
+ render: ({
706
+ data,
707
+ pageSizeSelectorValue
708
+ }) => <Table data={data} pageSizeSelectorValue={pageSizeSelectorValue}>
709
+ <Column name="Producto" field={['imagen', 'nombre']}>
710
+ {({
711
+ imagen,
712
+ nombre
713
+ }) => <Box sx={{
714
+ display: 'flex',
715
+ alignItems: 'center',
716
+ gap: 2
717
+ }}>
718
+ <Box component="img" src={imagen} alt={nombre} sx={{
719
+ width: 50,
720
+ height: 50,
721
+ borderRadius: 1,
722
+ objectFit: 'cover'
723
+ }} />
724
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
725
+ </Box>}
726
+ </Column>
727
+ <Column name="Precio" field={['precio', 'enOferta']}>
728
+ {({
729
+ precio,
730
+ enOferta
731
+ }) => <Box sx={{
732
+ display: 'flex',
733
+ alignItems: 'center',
734
+ gap: 1
735
+ }}>
736
+ <Typography variant="body2" color={enOferta ? 'error.main' : 'text.primary'} fontWeight={enOferta ? 'bold' : 'normal'}>
737
+ \${precio!.toLocaleString()}
738
+ </Typography>
739
+ {enOferta && <Chip label="OFERTA" color="error" size="small" />}
740
+ </Box>}
741
+ </Column>
742
+ <Column name="Stock" field="stock">
743
+ {({
744
+ stock
745
+ }) => <Chip label={stock! > 0 ? \`\${stock} unidades\` : 'Sin stock'} color={stock! > 5 ? 'success' : stock! > 0 ? 'warning' : 'error'} size="small" />}
746
+ </Column>
747
+ <Column name="Categoría" field="categoria">
748
+ {({
749
+ categoria
750
+ }) => <Typography variant="body2">{categoria}</Typography>}
751
+ </Column>
752
+ <Column name="Rating" field="rating">
753
+ {({
754
+ rating
755
+ }) => <Box sx={{
756
+ display: 'flex',
757
+ alignItems: 'center',
758
+ gap: 1
759
+ }}>
760
+ <Rating value={rating} max={5} precision={0.1} size="small" readOnly />
761
+ <Typography variant="caption">({rating})</Typography>
762
+ </Box>}
763
+ </Column>
764
+ </Table>,
765
+ parameters: {
766
+ docs: {
767
+ description: {
768
+ story: 'Tabla de productos con imágenes, precios, stock y calificaciones. Paginación interna.'
769
+ },
770
+ source: {
771
+ code: ProductTableCode.trim()
772
+ }
773
+ }
774
+ }
775
+ }`,...ke.parameters?.docs?.source}}};Pe.parameters={...Pe.parameters,docs:{...Pe.parameters?.docs,source:{originalSource:`{
776
+ args: {
777
+ data: empleados,
778
+ pageSizeSelectorValue: 1
779
+ },
780
+ render: ({
781
+ data,
782
+ pageSizeSelectorValue
783
+ }) => <Table data={data} pageSizeSelectorValue={pageSizeSelectorValue}>
784
+ <Column name="Empleado" field={['avatar', 'nombre', 'apellido']}>
785
+ {({
786
+ avatar,
787
+ nombre,
788
+ apellido
789
+ }) => <Box sx={{
790
+ display: 'flex',
791
+ alignItems: 'center',
792
+ gap: 2
793
+ }}>
794
+ <Avatar src={avatar} sx={{
795
+ width: 40,
796
+ height: 40
797
+ }}>
798
+ {avatar ? '' : \`\${nombre!.charAt(0)}\${apellido!.charAt(0)}\`}
799
+ </Avatar>
800
+ <Typography variant="body2" fontWeight="medium">
801
+ {nombre} {apellido}
802
+ </Typography>
803
+ </Box>}
804
+ </Column>
805
+ <Column name="Departamento" field="departamento">
806
+ {({
807
+ departamento
808
+ }) => <Chip label={departamento} color="info" variant="filled" size="small" />}
809
+ </Column>
810
+ <Column name="Salario" field="salario">
811
+ {({
812
+ salario
813
+ }) => <Typography variant="body2" fontWeight="bold" color="success.dark">
814
+ \${salario!.toLocaleString('es-ES')}
815
+ </Typography>}
816
+ </Column>
817
+ <Column name="Estado" field={['activo', 'fechaIngreso']}>
818
+ {({
819
+ activo,
820
+ fechaIngreso
821
+ }) => <Box>
822
+ <Chip label={activo ? 'Contratado' : 'Inactivo'} color={activo ? 'success' : 'error'} size="small" />
823
+ <Typography variant="caption" display="block" color="text.secondary" sx={{
824
+ mt: 0.5
825
+ }}>
826
+ Desde: {new Date(fechaIngreso!).toLocaleDateString('es-ES')}
827
+ </Typography>
828
+ </Box>}
829
+ </Column>
830
+ </Table>,
831
+ parameters: {
832
+ docs: {
833
+ description: {
834
+ story: 'Tabla de empleados con múltiples campos combinados en una sola columna. Paginación interna.'
835
+ },
836
+ source: {
837
+ code: EmployeeTableCode.trim()
838
+ }
839
+ }
840
+ }
841
+ }`,...Pe.parameters?.docs?.source}}};ze.parameters={...ze.parameters,docs:{...ze.parameters?.docs,source:{originalSource:`{
842
+ args: {
843
+ data: []
844
+ },
845
+ render: ({
846
+ data
847
+ }) => <Table data={data} emptyTitle="No se encontraron registros" emptyMessage="Intente ajustar sus filtros o agregar nuevos datos."
848
+ // emptyImageSrc={<img src="path/to/empty/image.png" alt="No data" />}
849
+ >
850
+ <Column name="Nombre" field="nombre">
851
+ {({
852
+ nombre
853
+ }) => <Typography variant="body2">{nombre}</Typography>}
854
+ </Column>
855
+ <Column name="Email" field="email">
856
+ {({
857
+ email
858
+ }) => <Typography variant="body2">{email}</Typography>}
859
+ </Column>
860
+ <Column name="Estado" field="activo">
861
+ {({
862
+ activo
863
+ }) => <Chip label={activo ? 'Activo' : 'Inactivo'} size="small" />}
864
+ </Column>
865
+ </Table>,
866
+ parameters: {
867
+ docs: {
868
+ description: {
869
+ story: 'Tabla sin datos para mostrar el estado vacío y el mensaje correspondiente.'
870
+ },
871
+ source: {
872
+ code: EmptyTableCode.trim()
873
+ }
874
+ }
875
+ }
876
+ }`,...ze.parameters?.docs?.source}}};Be.parameters={...Be.parameters,docs:{...Be.parameters?.docs,source:{originalSource:`{
877
+ args: {
878
+ data: [usuarios[0]]
879
+ },
880
+ render: ({
881
+ data
882
+ }) => <Table data={data}>
883
+ <Column name="Usuario" field={['avatar', 'nombre', 'email']}>
884
+ {({
885
+ avatar,
886
+ nombre,
887
+ email
888
+ }) => <Box sx={{
889
+ display: 'flex',
890
+ alignItems: 'center',
891
+ gap: 2
892
+ }}>
893
+ <Avatar src={avatar} alt={nombre} />
894
+ <Box>
895
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
896
+ <Typography variant="caption" color="text.secondary">{email}</Typography>
897
+ </Box>
898
+ </Box>}
899
+ </Column>
900
+ <Column<Usuario> name="Información" field={[]}>
901
+ {user => <>
902
+ <Typography variant="body2">{user.edad} años</Typography>
903
+ <Box sx={{
904
+ display: 'flex',
905
+ gap: 1,
906
+ mt: 0.5
907
+ }}>
908
+ <Chip label={user.rol} size="small" color="primary" variant="outlined" />
909
+ <Chip label={user.activo ? 'Activo' : 'Inactivo'} size="small" color={user.activo ? 'success' : 'default'} />
910
+ </Box>
911
+ </>}
912
+ </Column>
913
+ </Table>,
914
+ parameters: {
915
+ docs: {
916
+ description: {
917
+ story: 'Tabla con una sola fila de datos.'
918
+ },
919
+ source: {
920
+ code: SingleRowCode.trim()
921
+ }
922
+ }
923
+ }
924
+ }`,...Be.parameters?.docs?.source}}};Re.parameters={...Re.parameters,docs:{...Re.parameters?.docs,source:{originalSource:`{
925
+ args: {
926
+ data: productos
927
+ },
928
+ render: ({
929
+ data
930
+ }) => <Table data={data}>
931
+ <Column name="Producto" field={['imagen', 'nombre']}>
932
+ {({
933
+ imagen,
934
+ nombre
935
+ }) => <Box sx={{
936
+ display: 'flex',
937
+ alignItems: 'center',
938
+ gap: 2
939
+ }}>
940
+ <Box component="img" src={imagen} alt={nombre} sx={{
941
+ width: 50,
942
+ height: 50,
943
+ borderRadius: 1,
944
+ objectFit: 'cover'
945
+ }} />
946
+ <Typography variant="body2" fontWeight="medium">{nombre}</Typography>
947
+ </Box>}
948
+ </Column>
949
+ <Column name="Precio" field={['precio', 'enOferta']}>
950
+ {({
951
+ precio,
952
+ enOferta
953
+ }) => <Box sx={{
954
+ display: 'flex',
955
+ alignItems: 'center',
956
+ gap: 1
957
+ }}>
958
+ <Typography variant="body2" color={enOferta ? 'error.main' : 'text.primary'} fontWeight={enOferta ? 'bold' : 'normal'}>
959
+ \${precio!.toLocaleString()}
960
+ </Typography>
961
+ {enOferta && <Chip label="OFERTA" color="error" size="small" />}
962
+ </Box>}
963
+ </Column>
964
+ <Column name="Stock" field="stock">
965
+ {({
966
+ stock
967
+ }) => <Chip label={stock! > 0 ? \`\${stock} unidades\` : 'Sin stock'} color={stock! > 5 ? 'success' : stock! > 0 ? 'warning' : 'error'} size="small" sx={{
968
+ backgroundColor: stock === 0 ? 'rgba(255, 0, 0, 0.1)' : undefined
969
+ }} />}
970
+ </Column>
971
+ <Column name="Rating" field="rating">
972
+ {({
973
+ rating
974
+ }) => <Box sx={{
975
+ display: 'flex',
976
+ alignItems: 'center',
977
+ gap: 1
978
+ }}>
979
+ <Rating value={rating} max={5} precision={0.1} size="small" readOnly />
980
+ <Typography variant="caption">({rating})</Typography>
981
+ </Box>}
982
+ </Column>
983
+ </Table>,
984
+ parameters: {
985
+ docs: {
986
+ description: {
987
+ story: 'Muestra la tabla de productos resaltando visualmente los productos sin stock. Paginación interna.'
988
+ },
989
+ source: {
990
+ code: ProductTableWithZeroStockHighlightedCode.trim()
991
+ }
992
+ }
993
+ }
994
+ }`,...Re.parameters?.docs?.source}}};De.parameters={...De.parameters,docs:{...De.parameters?.docs,source:{originalSource:`{
995
+ args: {
996
+ data: empleados
997
+ },
998
+ render: ({
999
+ data
1000
+ }) => <Table data={data}>
1001
+ <Column name="Empleado" field={['nombre', 'apellido', 'avatar']}>
1002
+ {({
1003
+ nombre,
1004
+ apellido,
1005
+ avatar
1006
+ }) => <Box sx={{
1007
+ display: 'flex',
1008
+ alignItems: 'center',
1009
+ gap: 2
1010
+ }}>
1011
+ <Avatar src={avatar} sx={{
1012
+ width: 40,
1013
+ height: 40
1014
+ }}>
1015
+ {avatar ? '' : \`\${nombre!.charAt(0)}\${apellido!.charAt(0)}\`}
1016
+ </Avatar>
1017
+ <Typography variant="body2" fontWeight="medium">
1018
+ {nombre} {apellido}
1019
+ </Typography>
1020
+ </Box>}
1021
+ </Column>
1022
+ <Column name="Departamento" field="departamento">
1023
+ {({
1024
+ departamento
1025
+ }) => <Chip label={departamento} color="info" variant="filled" size="small" />}
1026
+ </Column>
1027
+ <Column name="Salario" field="salario">
1028
+ {({
1029
+ salario
1030
+ }) => <Typography variant="body2" fontWeight="bold" color="success.dark">
1031
+ \${salario!.toLocaleString('es-ES')}
1032
+ </Typography>}
1033
+ </Column>
1034
+ <Column name="Estado de Contratación" field={['activo', 'fechaIngreso']}>
1035
+ {({
1036
+ activo,
1037
+ fechaIngreso
1038
+ }) => <Box>
1039
+ <Chip label={activo ? 'Contratado' : 'Inactivo'} color={activo ? 'success' : 'error'} size="small" />
1040
+ <Typography variant="caption" display="block" color="text.secondary" sx={{
1041
+ mt: 0.5
1042
+ }}>
1043
+ Desde: {new Date(fechaIngreso!).toLocaleDateString('es-ES')}
1044
+ </Typography>
1045
+ </Box>}
1046
+ </Column>
1047
+ </Table>,
1048
+ parameters: {
1049
+ docs: {
1050
+ description: {
1051
+ story: 'Muestra una tabla de empleados con un resumen detallado de su estado de contratación y fecha de ingreso. Paginación interna.'
1052
+ },
1053
+ source: {
1054
+ code: EmployeeDetailedStatusCode.trim()
1055
+ }
1056
+ }
1057
+ }
1058
+ }`,...De.parameters?.docs?.source}}};Fe.parameters={...Fe.parameters,docs:{...Fe.parameters?.docs,source:{originalSource:`{
1059
+ args: {
1060
+ data: usuarios.slice(0, 3)
1061
+ },
1062
+ render: ({
1063
+ data
1064
+ }) => <Table data={data}>
1065
+ <Column name="Nombre" field="nombre">
1066
+ {({
1067
+ nombre
1068
+ }) => <Typography variant="body2">{nombre}</Typography>}
1069
+ </Column>
1070
+ <Column name="Email" field="email">
1071
+ {({
1072
+ email
1073
+ }) => <Typography variant="body2" color="text.secondary">{email}</Typography>}
1074
+ </Column>
1075
+ <Column name="Acciones" field="id">
1076
+ {({
1077
+ id
1078
+ }) => <Button variant="contained" color="primary" size="small" onClick={() => alert('ID del usuario: ' + id)}>
1079
+ Ver Detalles ({id})
1080
+ </Button>}
1081
+ </Column>
1082
+ </Table>,
1083
+ parameters: {
1084
+ docs: {
1085
+ description: {
1086
+ story: 'Ejemplo de tabla con una columna de acciones que, al hacer clic en un botón, registra el ID del elemento en la consola.'
1087
+ },
1088
+ source: {
1089
+ code: ActionsColumnCode.trim()
1090
+ }
1091
+ }
1092
+ }
1093
+ }`,...Fe.parameters?.docs?.source}}};Ae.parameters={...Ae.parameters,docs:{...Ae.parameters?.docs,source:{originalSource:`{
1094
+ args: {
1095
+ data: usuarios,
1096
+ enableCSVExport: true,
1097
+ enableExcelExport: true,
1098
+ csvExportFileName: 'usuarios_data',
1099
+ csvExportButtonText: '.csv',
1100
+ excelExportFileName: 'usuarios_data',
1101
+ excelExportButtonText: '.xlsx',
1102
+ csvExportColumns: ['ID', 'Nombre', 'Email', 'Edad'],
1103
+ excelExportColumns: ['ID', 'Nombre', 'Email', 'Edad']
1104
+ },
1105
+ render: ({
1106
+ data,
1107
+ enableCSVExport,
1108
+ enableExcelExport,
1109
+ csvExportFileName,
1110
+ csvExportButtonText,
1111
+ excelExportFileName,
1112
+ excelExportButtonText,
1113
+ csvExportColumns,
1114
+ excelExportColumns
1115
+ }) => <Table<Usuario> data={usuarios} enableCSVExport={enableCSVExport} enableExcelExport={enableExcelExport} csvExportFileName={csvExportFileName} csvExportButtonText={csvExportButtonText} excelExportFileName={excelExportFileName} excelExportButtonText={excelExportButtonText} csvExportColumns={csvExportColumns} excelExportColumns={excelExportColumns}>
1116
+ <Column<Usuario> name="ID" field="id">
1117
+ {row => <Typography>{row.id}</Typography>}
1118
+ </Column>
1119
+ <Column<Usuario> name="Nombre" field="nombre">
1120
+ {row => <Typography>{row.nombre}</Typography>}
1121
+ </Column>
1122
+ <Column<Usuario> name="Email" field="email">
1123
+ {({
1124
+ email
1125
+ }) => <Link href={\`mailto:\${email}\`}>{email}</Link>}
1126
+ </Column>
1127
+ <Column<Usuario> name="Edad" field="edad">
1128
+ {row => <Typography>{row.edad}</Typography>}
1129
+ </Column>
1130
+ <Column<Usuario> name="Rol" field="rol">
1131
+ {({
1132
+ rol
1133
+ }) => <Chip label={rol} size="small" />}
1134
+ </Column>
1135
+ <Column<Usuario> name="Acciones" field="id">
1136
+ {({
1137
+ id
1138
+ }) => <Button variant="outlined" size="small" onClick={() => alert(\`Ver detalles de usuario \${id}\`)}>
1139
+ Ver
1140
+ </Button>}
1141
+ </Column>
1142
+ </Table>,
1143
+ parameters: {
1144
+ docs: {
1145
+ description: {
1146
+ story: 'Tabla con la funcionalidad de exportar sus datos a un archivo CSV. Puedes especificar qué columnas incluir en la exportación y el nombre del archivo.'
1147
+ },
1148
+ source: {
1149
+ code: TableWithExportCode.trim()
1150
+ }
1151
+ }
1152
+ }
1153
+ }`,...Ae.parameters?.docs?.source}}};Ve.parameters={...Ve.parameters,docs:{...Ve.parameters?.docs,source:{originalSource:`{
1154
+ render: args => {
1155
+ const [selectedItems, setSelectedItems] = useState<UserData[]>([]);
1156
+ const handleSelectionChange = (items: UserData[]) => {
1157
+ setSelectedItems(items);
1158
+ args.onSelectionChange?.(items);
1159
+ };
1160
+ const handleBulkDelete = () => {
1161
+ if (selectedItems.length > 0) {
1162
+ alert(\`Eliminando \${selectedItems.length} usuarios: \${selectedItems.map(item => item.name).join(', ')}\`);
1163
+ setSelectedItems([]);
1164
+ } else {
1165
+ alert('No hay elementos seleccionados para eliminar.');
1166
+ }
1167
+ };
1168
+ const handleBulkUpdateCity = () => {
1169
+ if (selectedItems.length > 0) {
1170
+ const newCity = prompt('Ingresa la nueva ciudad para los seleccionados:');
1171
+ if (newCity) {
1172
+ alert(\`Actualizando ciudad de \${selectedItems.length} usuarios a \${newCity}\`);
1173
+ setSelectedItems([]);
1174
+ }
1175
+ } else {
1176
+ alert('No hay elementos seleccionados para actualizar.');
1177
+ }
1178
+ };
1179
+ return <Box>
1180
+ <Typography variant="h6" gutterBottom>
1181
+ Tabla con Selección de Filas
1182
+ </Typography>
1183
+ {selectedItems.length > 0 && <Box sx={{
1184
+ mb: 2,
1185
+ display: 'flex',
1186
+ gap: 1
1187
+ }}>
1188
+ <Button variant="contained" color="error" onClick={handleBulkDelete}>
1189
+ Eliminar ({selectedItems.length})
1190
+ </Button>
1191
+ <Button variant="contained" color="primary" onClick={handleBulkUpdateCity}>
1192
+ Actualizar Ciudad ({selectedItems.length})
1193
+ </Button>
1194
+ <Typography variant="body2" sx={{
1195
+ alignSelf: 'center',
1196
+ ml: 2
1197
+ }}>
1198
+ Elementos seleccionados: {selectedItems.length}
1199
+ </Typography>
1200
+ </Box>}
1201
+ <Table<UserData> {...args} data={sampleData} // Usamos sampleData para esta historia
1202
+ enableRowSelection={true} rowIdentifier="id" // Es crucial que coincida con una clave única en tus datos
1203
+ onSelectionChange={handleSelectionChange} pageSizeSelectorValue={5}>
1204
+ <Column<UserData> name="ID" field="id" children={row => <Typography>{row.id}</Typography>} />
1205
+ <Column<UserData> name="Nombre" field="name" children={row => <Typography>{row.name}</Typography>} />
1206
+ <Column<UserData> name="Email" field="email" children={row => <Typography>{row.email}</Typography>} />
1207
+ <Column<UserData> name="Ciudad" field="city" children={row => <Typography>{row.city}</Typography>} />
1208
+ </Table>
1209
+ </Box>;
1210
+ },
1211
+ args: {},
1212
+ parameters: {
1213
+ docs: {
1214
+ description: {
1215
+ story: 'Tabla con la funcionalidad de selección de filas. Puedes seleccionar una o muchas filas y realizar acciones en masa.'
1216
+ },
1217
+ source: {
1218
+ code: WithRowSelectionCode.trim()
1219
+ }
1220
+ }
1221
+ }
1222
+ }`,...Ve.parameters?.docs?.source}}};Ne.parameters={...Ne.parameters,docs:{...Ne.parameters?.docs,source:{originalSource:`{
1223
+ render: args => {
1224
+ const [selectedItems, setSelectedItems] = useState<UserData[]>([]);
1225
+ const handleSelectionChange = (items: UserData[]) => {
1226
+ setSelectedItems(items);
1227
+ args.onSelectionChange?.(items);
1228
+ };
1229
+ return <Box>
1230
+ <Typography variant="h6" gutterBottom>
1231
+ Tabla con Exportación y Selección de Filas
1232
+ </Typography>
1233
+ {selectedItems.length > 0 && <Box sx={{
1234
+ mb: 2
1235
+ }}>
1236
+ <Typography variant="body2">
1237
+ Elementos seleccionados: {selectedItems.length}
1238
+ </Typography>
1239
+ </Box>}
1240
+ <Table<UserData> {...args} data={sampleData} // Usamos sampleData para esta historia
1241
+ enableRowSelection={true} rowIdentifier="id" onSelectionChange={handleSelectionChange} pageSizeSelectorValue={5} enableCSVExport={true} csvExportFileName="users_data_with_selection" enableExcelExport={true} excelExportFileName="users_data_with_selection">
1242
+ <Column<UserData> name="ID" field="id" children={row => <Typography>{row.id}</Typography>} />
1243
+ <Column<UserData> name="Nombre" field="name" children={row => <Typography>{row.name}</Typography>} />
1244
+ <Column<UserData> name="Email" field="email" children={row => <Typography>{row.email}</Typography>} />
1245
+ <Column<UserData> name="Ciudad" field="city" children={row => <Typography>{row.city}</Typography>} />
1246
+ </Table>
1247
+ </Box>;
1248
+ },
1249
+ args: {},
1250
+ parameters: {
1251
+ docs: {
1252
+ description: {
1253
+ story: 'Tabla con la funcionalidad de exportar sus datos a un archivo CSV y Excel. Puedes especificar qué columnas incluir en la exportación y el nombre del archivo.'
1254
+ },
1255
+ source: {
1256
+ code: WithExportAndSelectionCode.trim()
1257
+ }
1258
+ }
1259
+ }
1260
+ }`,...Ne.parameters?.docs?.source}}};const jt=["BasicTable","ComplexComponents","WithExternalPaginationControl","ProductTable","EmployeeTable","EmptyTable","SingleRow","ProductTableWithZeroStockHighlighted","EmployeeDetailedStatus","ActionsColumn","TableWithExport","WithRowSelection","WithExportAndSelection"];export{Fe as ActionsColumn,je as BasicTable,we as ComplexComponents,De as EmployeeDetailedStatus,Pe as EmployeeTable,ze as EmptyTable,ke as ProductTable,Re as ProductTableWithZeroStockHighlighted,Be as SingleRow,Ae as TableWithExport,Ne as WithExportAndSelection,Ie as WithExternalPaginationControl,Ve as WithRowSelection,jt as __namedExportsOrder,Et as default};