@misael703/ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +462 -0
- package/dist/brand.d.mts +46 -0
- package/dist/brand.d.ts +46 -0
- package/dist/brand.js +24 -0
- package/dist/brand.js.map +1 -0
- package/dist/brand.mjs +3 -0
- package/dist/brand.mjs.map +1 -0
- package/dist/chunk-26KJA67X.js +166 -0
- package/dist/chunk-26KJA67X.js.map +1 -0
- package/dist/chunk-2JTBLDMK.js +274 -0
- package/dist/chunk-2JTBLDMK.js.map +1 -0
- package/dist/chunk-2RVSLQEA.mjs +171 -0
- package/dist/chunk-2RVSLQEA.mjs.map +1 -0
- package/dist/chunk-2UV37SEN.mjs +78 -0
- package/dist/chunk-2UV37SEN.mjs.map +1 -0
- package/dist/chunk-33PU6AH7.mjs +123 -0
- package/dist/chunk-33PU6AH7.mjs.map +1 -0
- package/dist/chunk-3PXYCXDW.js +32 -0
- package/dist/chunk-3PXYCXDW.js.map +1 -0
- package/dist/chunk-3TNBETXR.js +116 -0
- package/dist/chunk-3TNBETXR.js.map +1 -0
- package/dist/chunk-3UHX7ITQ.mjs +76 -0
- package/dist/chunk-3UHX7ITQ.mjs.map +1 -0
- package/dist/chunk-4REALDR3.js +4 -0
- package/dist/chunk-4REALDR3.js.map +1 -0
- package/dist/chunk-55TOQMS2.js +142 -0
- package/dist/chunk-55TOQMS2.js.map +1 -0
- package/dist/chunk-5GEWIK4T.mjs +27 -0
- package/dist/chunk-5GEWIK4T.mjs.map +1 -0
- package/dist/chunk-5VMZMDJF.js +145 -0
- package/dist/chunk-5VMZMDJF.js.map +1 -0
- package/dist/chunk-6II4NJQM.js +127 -0
- package/dist/chunk-6II4NJQM.js.map +1 -0
- package/dist/chunk-6LOJIU3C.js +84 -0
- package/dist/chunk-6LOJIU3C.js.map +1 -0
- package/dist/chunk-6MEOR4YO.mjs +45 -0
- package/dist/chunk-6MEOR4YO.mjs.map +1 -0
- package/dist/chunk-6PEC4RRO.mjs +94 -0
- package/dist/chunk-6PEC4RRO.mjs.map +1 -0
- package/dist/chunk-7AKN7FDA.mjs +103 -0
- package/dist/chunk-7AKN7FDA.mjs.map +1 -0
- package/dist/chunk-AAQ7KUZH.mjs +352 -0
- package/dist/chunk-AAQ7KUZH.mjs.map +1 -0
- package/dist/chunk-ADIKHOEG.js +212 -0
- package/dist/chunk-ADIKHOEG.js.map +1 -0
- package/dist/chunk-ADQM725E.js +141 -0
- package/dist/chunk-ADQM725E.js.map +1 -0
- package/dist/chunk-AWYCGJJX.js +102 -0
- package/dist/chunk-AWYCGJJX.js.map +1 -0
- package/dist/chunk-AZBX7UFI.js +100 -0
- package/dist/chunk-AZBX7UFI.js.map +1 -0
- package/dist/chunk-BCIZLGM3.mjs +78 -0
- package/dist/chunk-BCIZLGM3.mjs.map +1 -0
- package/dist/chunk-BMZQ6L2C.js +294 -0
- package/dist/chunk-BMZQ6L2C.js.map +1 -0
- package/dist/chunk-CHVTPN3K.mjs +3 -0
- package/dist/chunk-CHVTPN3K.mjs.map +1 -0
- package/dist/chunk-CIBJKJV3.mjs +314 -0
- package/dist/chunk-CIBJKJV3.mjs.map +1 -0
- package/dist/chunk-CPMQ2DFS.js +197 -0
- package/dist/chunk-CPMQ2DFS.js.map +1 -0
- package/dist/chunk-CVXS7IHA.js +376 -0
- package/dist/chunk-CVXS7IHA.js.map +1 -0
- package/dist/chunk-DHCJMYFD.mjs +76 -0
- package/dist/chunk-DHCJMYFD.mjs.map +1 -0
- package/dist/chunk-DW3XAXHR.mjs +146 -0
- package/dist/chunk-DW3XAXHR.mjs.map +1 -0
- package/dist/chunk-E2XOUDAH.js +215 -0
- package/dist/chunk-E2XOUDAH.js.map +1 -0
- package/dist/chunk-EJJDJJEM.js +505 -0
- package/dist/chunk-EJJDJJEM.js.map +1 -0
- package/dist/chunk-FXM7OKDQ.js +146 -0
- package/dist/chunk-FXM7OKDQ.js.map +1 -0
- package/dist/chunk-GCW5JYWQ.js +69 -0
- package/dist/chunk-GCW5JYWQ.js.map +1 -0
- package/dist/chunk-GDFYAUHT.mjs +192 -0
- package/dist/chunk-GDFYAUHT.mjs.map +1 -0
- package/dist/chunk-GT2KVC2P.mjs +267 -0
- package/dist/chunk-GT2KVC2P.mjs.map +1 -0
- package/dist/chunk-GVYZAOWU.mjs +142 -0
- package/dist/chunk-GVYZAOWU.mjs.map +1 -0
- package/dist/chunk-HI3JT6SI.mjs +174 -0
- package/dist/chunk-HI3JT6SI.mjs.map +1 -0
- package/dist/chunk-HPFJ2A24.js +125 -0
- package/dist/chunk-HPFJ2A24.js.map +1 -0
- package/dist/chunk-HVUNNL3A.mjs +244 -0
- package/dist/chunk-HVUNNL3A.mjs.map +1 -0
- package/dist/chunk-HYUINOPJ.js +173 -0
- package/dist/chunk-HYUINOPJ.js.map +1 -0
- package/dist/chunk-IEPCH3JB.mjs +8 -0
- package/dist/chunk-IEPCH3JB.mjs.map +1 -0
- package/dist/chunk-IIYQO6BL.js +98 -0
- package/dist/chunk-IIYQO6BL.js.map +1 -0
- package/dist/chunk-IMFQ55KO.js +131 -0
- package/dist/chunk-IMFQ55KO.js.map +1 -0
- package/dist/chunk-IVL7P3MF.mjs +105 -0
- package/dist/chunk-IVL7P3MF.mjs.map +1 -0
- package/dist/chunk-JDOXRLZW.js +138 -0
- package/dist/chunk-JDOXRLZW.js.map +1 -0
- package/dist/chunk-JMFDIN5R.mjs +64 -0
- package/dist/chunk-JMFDIN5R.mjs.map +1 -0
- package/dist/chunk-KKOJI25C.mjs +11 -0
- package/dist/chunk-KKOJI25C.mjs.map +1 -0
- package/dist/chunk-L353APIO.js +131 -0
- package/dist/chunk-L353APIO.js.map +1 -0
- package/dist/chunk-LIGJBHXU.js +13 -0
- package/dist/chunk-LIGJBHXU.js.map +1 -0
- package/dist/chunk-LUXTZOTJ.js +204 -0
- package/dist/chunk-LUXTZOTJ.js.map +1 -0
- package/dist/chunk-ML5IYW5D.mjs +82 -0
- package/dist/chunk-ML5IYW5D.mjs.map +1 -0
- package/dist/chunk-NLCKWF3Y.mjs +88 -0
- package/dist/chunk-NLCKWF3Y.mjs.map +1 -0
- package/dist/chunk-NU4GAGUV.js +86 -0
- package/dist/chunk-NU4GAGUV.js.map +1 -0
- package/dist/chunk-NUURPO3J.mjs +120 -0
- package/dist/chunk-NUURPO3J.mjs.map +1 -0
- package/dist/chunk-O6FCBNWN.mjs +191 -0
- package/dist/chunk-O6FCBNWN.mjs.map +1 -0
- package/dist/chunk-OCE4ODTM.mjs +116 -0
- package/dist/chunk-OCE4ODTM.mjs.map +1 -0
- package/dist/chunk-ORUQ5GCU.mjs +120 -0
- package/dist/chunk-ORUQ5GCU.mjs.map +1 -0
- package/dist/chunk-PASF6T4H.js +10 -0
- package/dist/chunk-PASF6T4H.js.map +1 -0
- package/dist/chunk-PCRNKITV.mjs +106 -0
- package/dist/chunk-PCRNKITV.mjs.map +1 -0
- package/dist/chunk-PSJVU4E4.js +72 -0
- package/dist/chunk-PSJVU4E4.js.map +1 -0
- package/dist/chunk-PXCH5Z76.mjs +82 -0
- package/dist/chunk-PXCH5Z76.mjs.map +1 -0
- package/dist/chunk-QHRP73CS.js +106 -0
- package/dist/chunk-QHRP73CS.js.map +1 -0
- package/dist/chunk-QI6TVWWF.js +121 -0
- package/dist/chunk-QI6TVWWF.js.map +1 -0
- package/dist/chunk-QSCJ2CER.mjs +480 -0
- package/dist/chunk-QSCJ2CER.mjs.map +1 -0
- package/dist/chunk-R76YER7O.js +458 -0
- package/dist/chunk-R76YER7O.js.map +1 -0
- package/dist/chunk-RBJRQ44B.mjs +108 -0
- package/dist/chunk-RBJRQ44B.mjs.map +1 -0
- package/dist/chunk-RQOTH7I7.js +401 -0
- package/dist/chunk-RQOTH7I7.js.map +1 -0
- package/dist/chunk-SYX4GZ7E.mjs +134 -0
- package/dist/chunk-SYX4GZ7E.mjs.map +1 -0
- package/dist/chunk-T4R2LSRL.js +148 -0
- package/dist/chunk-T4R2LSRL.js.map +1 -0
- package/dist/chunk-TB6EHWRF.mjs +92 -0
- package/dist/chunk-TB6EHWRF.mjs.map +1 -0
- package/dist/chunk-TEQ67JKX.js +181 -0
- package/dist/chunk-TEQ67JKX.js.map +1 -0
- package/dist/chunk-TXKFCVCN.mjs +426 -0
- package/dist/chunk-TXKFCVCN.mjs.map +1 -0
- package/dist/chunk-TZG34EYW.js +74 -0
- package/dist/chunk-TZG34EYW.js.map +1 -0
- package/dist/chunk-UB2XEZ7C.mjs +72 -0
- package/dist/chunk-UB2XEZ7C.mjs.map +1 -0
- package/dist/chunk-UIKCTWKG.js +116 -0
- package/dist/chunk-UIKCTWKG.js.map +1 -0
- package/dist/chunk-UNOPDYA7.js +107 -0
- package/dist/chunk-UNOPDYA7.js.map +1 -0
- package/dist/chunk-V26K66NP.mjs +49 -0
- package/dist/chunk-V26K66NP.mjs.map +1 -0
- package/dist/chunk-W6YOBPL5.js +110 -0
- package/dist/chunk-W6YOBPL5.js.map +1 -0
- package/dist/chunk-X2DBGT7M.mjs +117 -0
- package/dist/chunk-X2DBGT7M.mjs.map +1 -0
- package/dist/chunk-YBOTLQ3G.mjs +99 -0
- package/dist/chunk-YBOTLQ3G.mjs.map +1 -0
- package/dist/chunk-Z3FAKG3E.mjs +125 -0
- package/dist/chunk-Z3FAKG3E.mjs.map +1 -0
- package/dist/chunk-Z4GRQHIG.mjs +177 -0
- package/dist/chunk-Z4GRQHIG.mjs.map +1 -0
- package/dist/chunk-ZRBVYPKN.js +169 -0
- package/dist/chunk-ZRBVYPKN.js.map +1 -0
- package/dist/chunk-ZRFSTYRL.mjs +157 -0
- package/dist/chunk-ZRFSTYRL.mjs.map +1 -0
- package/dist/chunk-ZXSSOEIM.js +197 -0
- package/dist/chunk-ZXSSOEIM.js.map +1 -0
- package/dist/components/AdvancedPickers.d.mts +77 -0
- package/dist/components/AdvancedPickers.d.ts +77 -0
- package/dist/components/AdvancedPickers.js +30 -0
- package/dist/components/AdvancedPickers.js.map +1 -0
- package/dist/components/AdvancedPickers.mjs +9 -0
- package/dist/components/AdvancedPickers.mjs.map +1 -0
- package/dist/components/AppShell.d.mts +55 -0
- package/dist/components/AppShell.d.ts +55 -0
- package/dist/components/AppShell.js +19 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/AppShell.mjs +6 -0
- package/dist/components/AppShell.mjs.map +1 -0
- package/dist/components/Button.d.mts +16 -0
- package/dist/components/Button.d.ts +16 -0
- package/dist/components/Button.js +17 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Button.mjs +4 -0
- package/dist/components/Button.mjs.map +1 -0
- package/dist/components/Carousel.d.mts +17 -0
- package/dist/components/Carousel.d.ts +17 -0
- package/dist/components/Carousel.js +14 -0
- package/dist/components/Carousel.js.map +1 -0
- package/dist/components/Carousel.mjs +5 -0
- package/dist/components/Carousel.mjs.map +1 -0
- package/dist/components/Charts.d.mts +96 -0
- package/dist/components/Charts.d.ts +96 -0
- package/dist/components/Charts.js +29 -0
- package/dist/components/Charts.js.map +1 -0
- package/dist/components/Charts.mjs +4 -0
- package/dist/components/Charts.mjs.map +1 -0
- package/dist/components/Code.d.mts +18 -0
- package/dist/components/Code.d.ts +18 -0
- package/dist/components/Code.js +18 -0
- package/dist/components/Code.js.map +1 -0
- package/dist/components/Code.mjs +5 -0
- package/dist/components/Code.mjs.map +1 -0
- package/dist/components/Collapsible.d.mts +12 -0
- package/dist/components/Collapsible.d.ts +12 -0
- package/dist/components/Collapsible.js +21 -0
- package/dist/components/Collapsible.js.map +1 -0
- package/dist/components/Collapsible.mjs +4 -0
- package/dist/components/Collapsible.mjs.map +1 -0
- package/dist/components/Comments.d.mts +41 -0
- package/dist/components/Comments.d.ts +41 -0
- package/dist/components/Comments.js +25 -0
- package/dist/components/Comments.js.map +1 -0
- package/dist/components/Comments.mjs +8 -0
- package/dist/components/Comments.mjs.map +1 -0
- package/dist/components/Commerce.d.mts +159 -0
- package/dist/components/Commerce.d.ts +159 -0
- package/dist/components/Commerce.js +58 -0
- package/dist/components/Commerce.js.map +1 -0
- package/dist/components/Commerce.mjs +9 -0
- package/dist/components/Commerce.mjs.map +1 -0
- package/dist/components/ContextMenu.d.mts +22 -0
- package/dist/components/ContextMenu.d.ts +22 -0
- package/dist/components/ContextMenu.js +13 -0
- package/dist/components/ContextMenu.js.map +1 -0
- package/dist/components/ContextMenu.mjs +4 -0
- package/dist/components/ContextMenu.mjs.map +1 -0
- package/dist/components/DataTable.d.mts +121 -0
- package/dist/components/DataTable.d.ts +121 -0
- package/dist/components/DataTable.js +38 -0
- package/dist/components/DataTable.js.map +1 -0
- package/dist/components/DataTable.mjs +9 -0
- package/dist/components/DataTable.mjs.map +1 -0
- package/dist/components/Display.d.mts +56 -0
- package/dist/components/Display.d.ts +56 -0
- package/dist/components/Display.js +55 -0
- package/dist/components/Display.js.map +1 -0
- package/dist/components/Display.mjs +6 -0
- package/dist/components/Display.mjs.map +1 -0
- package/dist/components/Display2.d.mts +54 -0
- package/dist/components/Display2.d.ts +54 -0
- package/dist/components/Display2.js +26 -0
- package/dist/components/Display2.js.map +1 -0
- package/dist/components/Display2.mjs +5 -0
- package/dist/components/Display2.mjs.map +1 -0
- package/dist/components/Display3.d.mts +58 -0
- package/dist/components/Display3.d.ts +58 -0
- package/dist/components/Display3.js +36 -0
- package/dist/components/Display3.js.map +1 -0
- package/dist/components/Display3.mjs +7 -0
- package/dist/components/Display3.mjs.map +1 -0
- package/dist/components/Editing.d.mts +52 -0
- package/dist/components/Editing.d.ts +52 -0
- package/dist/components/Editing.js +33 -0
- package/dist/components/Editing.js.map +1 -0
- package/dist/components/Editing.mjs +8 -0
- package/dist/components/Editing.mjs.map +1 -0
- package/dist/components/Filters.d.mts +37 -0
- package/dist/components/Filters.d.ts +37 -0
- package/dist/components/Filters.js +28 -0
- package/dist/components/Filters.js.map +1 -0
- package/dist/components/Filters.mjs +7 -0
- package/dist/components/Filters.mjs.map +1 -0
- package/dist/components/Form.d.mts +55 -0
- package/dist/components/Form.d.ts +55 -0
- package/dist/components/Form.js +50 -0
- package/dist/components/Form.js.map +1 -0
- package/dist/components/Form.mjs +5 -0
- package/dist/components/Form.mjs.map +1 -0
- package/dist/components/Gallery.d.mts +28 -0
- package/dist/components/Gallery.d.ts +28 -0
- package/dist/components/Gallery.js +20 -0
- package/dist/components/Gallery.js.map +1 -0
- package/dist/components/Gallery.mjs +7 -0
- package/dist/components/Gallery.mjs.map +1 -0
- package/dist/components/HoverCard.d.mts +17 -0
- package/dist/components/HoverCard.d.ts +17 -0
- package/dist/components/HoverCard.js +13 -0
- package/dist/components/HoverCard.js.map +1 -0
- package/dist/components/HoverCard.mjs +4 -0
- package/dist/components/HoverCard.mjs.map +1 -0
- package/dist/components/Icons.d.mts +84 -0
- package/dist/components/Icons.d.ts +84 -0
- package/dist/components/Icons.js +272 -0
- package/dist/components/Icons.js.map +1 -0
- package/dist/components/Icons.mjs +3 -0
- package/dist/components/Icons.mjs.map +1 -0
- package/dist/components/InputOTP.d.mts +17 -0
- package/dist/components/InputOTP.d.ts +17 -0
- package/dist/components/InputOTP.js +13 -0
- package/dist/components/InputOTP.js.map +1 -0
- package/dist/components/InputOTP.mjs +4 -0
- package/dist/components/InputOTP.mjs.map +1 -0
- package/dist/components/Inputs.d.mts +45 -0
- package/dist/components/Inputs.d.ts +45 -0
- package/dist/components/Inputs.js +28 -0
- package/dist/components/Inputs.js.map +1 -0
- package/dist/components/Inputs.mjs +7 -0
- package/dist/components/Inputs.mjs.map +1 -0
- package/dist/components/InputsExtra.d.mts +98 -0
- package/dist/components/InputsExtra.d.ts +98 -0
- package/dist/components/InputsExtra.js +49 -0
- package/dist/components/InputsExtra.js.map +1 -0
- package/dist/components/InputsExtra.mjs +8 -0
- package/dist/components/InputsExtra.mjs.map +1 -0
- package/dist/components/Layout.d.mts +83 -0
- package/dist/components/Layout.d.ts +83 -0
- package/dist/components/Layout.js +78 -0
- package/dist/components/Layout.js.map +1 -0
- package/dist/components/Layout.mjs +5 -0
- package/dist/components/Layout.mjs.map +1 -0
- package/dist/components/Logo.d.mts +38 -0
- package/dist/components/Logo.d.ts +38 -0
- package/dist/components/Logo.js +14 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/Logo.mjs +5 -0
- package/dist/components/Logo.mjs.map +1 -0
- package/dist/components/Marketing.d.mts +46 -0
- package/dist/components/Marketing.d.ts +46 -0
- package/dist/components/Marketing.js +22 -0
- package/dist/components/Marketing.js.map +1 -0
- package/dist/components/Marketing.mjs +5 -0
- package/dist/components/Marketing.mjs.map +1 -0
- package/dist/components/Menubar.d.mts +24 -0
- package/dist/components/Menubar.d.ts +24 -0
- package/dist/components/Menubar.js +13 -0
- package/dist/components/Menubar.js.map +1 -0
- package/dist/components/Menubar.mjs +4 -0
- package/dist/components/Menubar.mjs.map +1 -0
- package/dist/components/NavigationMenu.d.mts +28 -0
- package/dist/components/NavigationMenu.d.ts +28 -0
- package/dist/components/NavigationMenu.js +14 -0
- package/dist/components/NavigationMenu.js.map +1 -0
- package/dist/components/NavigationMenu.mjs +5 -0
- package/dist/components/NavigationMenu.mjs.map +1 -0
- package/dist/components/Notifications.d.mts +25 -0
- package/dist/components/Notifications.d.ts +25 -0
- package/dist/components/Notifications.js +16 -0
- package/dist/components/Notifications.js.map +1 -0
- package/dist/components/Notifications.mjs +7 -0
- package/dist/components/Notifications.mjs.map +1 -0
- package/dist/components/Overlay.d.mts +20 -0
- package/dist/components/Overlay.d.ts +20 -0
- package/dist/components/Overlay.js +19 -0
- package/dist/components/Overlay.js.map +1 -0
- package/dist/components/Overlay.mjs +6 -0
- package/dist/components/Overlay.mjs.map +1 -0
- package/dist/components/Permissions.d.mts +23 -0
- package/dist/components/Permissions.d.ts +23 -0
- package/dist/components/Permissions.js +17 -0
- package/dist/components/Permissions.js.map +1 -0
- package/dist/components/Permissions.mjs +8 -0
- package/dist/components/Permissions.mjs.map +1 -0
- package/dist/components/Pickers.d.mts +54 -0
- package/dist/components/Pickers.d.ts +54 -0
- package/dist/components/Pickers.js +25 -0
- package/dist/components/Pickers.js.map +1 -0
- package/dist/components/Pickers.mjs +8 -0
- package/dist/components/Pickers.mjs.map +1 -0
- package/dist/components/Popover.d.mts +23 -0
- package/dist/components/Popover.d.ts +23 -0
- package/dist/components/Popover.js +13 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Popover.mjs +4 -0
- package/dist/components/Popover.mjs.map +1 -0
- package/dist/components/Primitives.d.mts +18 -0
- package/dist/components/Primitives.d.ts +18 -0
- package/dist/components/Primitives.js +21 -0
- package/dist/components/Primitives.js.map +1 -0
- package/dist/components/Primitives.mjs +4 -0
- package/dist/components/Primitives.mjs.map +1 -0
- package/dist/components/Resizable.d.mts +27 -0
- package/dist/components/Resizable.d.ts +27 -0
- package/dist/components/Resizable.js +21 -0
- package/dist/components/Resizable.js.map +1 -0
- package/dist/components/Resizable.mjs +4 -0
- package/dist/components/Resizable.mjs.map +1 -0
- package/dist/components/Toast.d.mts +21 -0
- package/dist/components/Toast.d.ts +21 -0
- package/dist/components/Toast.js +19 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toast.mjs +6 -0
- package/dist/components/Toast.mjs.map +1 -0
- package/dist/components/Toggle.d.mts +42 -0
- package/dist/components/Toggle.d.ts +42 -0
- package/dist/components/Toggle.js +21 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/Toggle.mjs +4 -0
- package/dist/components/Toggle.mjs.map +1 -0
- package/dist/fonts/DMSans-VariableFont_wght.woff2 +0 -0
- package/dist/fonts/OFL.txt +98 -0
- package/dist/fonts/Outfit-VariableFont_wght.woff2 +0 -0
- package/dist/fonts.css +1 -0
- package/dist/index.d.mts +43 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +926 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +45 -0
- package/dist/index.mjs.map +1 -0
- package/dist/locale/index.d.mts +174 -0
- package/dist/locale/index.d.ts +174 -0
- package/dist/locale/index.js +26 -0
- package/dist/locale/index.js.map +1 -0
- package/dist/locale/index.mjs +5 -0
- package/dist/locale/index.mjs.map +1 -0
- package/dist/presets/elalba/defaults.d.mts +24 -0
- package/dist/presets/elalba/defaults.d.ts +24 -0
- package/dist/presets/elalba/defaults.js +13 -0
- package/dist/presets/elalba/defaults.js.map +1 -0
- package/dist/presets/elalba/defaults.mjs +11 -0
- package/dist/presets/elalba/defaults.mjs.map +1 -0
- package/dist/presets/elalba/logos/logo-horizontal-dark.png +0 -0
- package/dist/presets/elalba/logos/logo-horizontal-dark.svg +58 -0
- package/dist/presets/elalba/logos/logo-horizontal-light.png +0 -0
- package/dist/presets/elalba/logos/logo-horizontal-light.svg +68 -0
- package/dist/presets/elalba/logos/logo-vertical-dark.png +0 -0
- package/dist/presets/elalba/logos/logo-vertical-dark.svg +58 -0
- package/dist/presets/elalba/logos/logo-vertical-light.png +0 -0
- package/dist/presets/elalba/logos/logo-vertical-light.svg +68 -0
- package/dist/presets/elalba/logos/mark-dark.png +0 -0
- package/dist/presets/elalba/logos/mark-dark.svg +27 -0
- package/dist/presets/elalba/logos/mark-light.png +0 -0
- package/dist/presets/elalba/logos/mark-light.svg +27 -0
- package/dist/presets/elalba/logos/wordmark-dark.png +0 -0
- package/dist/presets/elalba/logos/wordmark-dark.svg +36 -0
- package/dist/presets/elalba/logos/wordmark-light.png +0 -0
- package/dist/presets/elalba/logos/wordmark-light.svg +36 -0
- package/dist/presets/elalba/styles.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/tokens.css +1 -0
- package/dist/utils/cx.d.mts +3 -0
- package/dist/utils/cx.d.ts +3 -0
- package/dist/utils/cx.js +12 -0
- package/dist/utils/cx.js.map +1 -0
- package/dist/utils/cx.mjs +3 -0
- package/dist/utils/cx.mjs.map +1 -0
- package/dist/utils/dateFormat.d.mts +35 -0
- package/dist/utils/dateFormat.d.ts +35 -0
- package/dist/utils/dateFormat.js +29 -0
- package/dist/utils/dateFormat.js.map +1 -0
- package/dist/utils/dateFormat.mjs +4 -0
- package/dist/utils/dateFormat.mjs.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Carousel.tsx"],"names":[],"mappings":"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","file":"chunk-ORUQ5GCU.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight } from './Icons';\n\nexport interface CarouselProps {\n children: React.ReactNode;\n loop?: boolean;\n autoplay?: boolean;\n autoplayInterval?: number;\n showControls?: boolean;\n showDots?: boolean;\n ariaLabel?: string;\n className?: string;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n children,\n loop = false,\n autoplay = false,\n autoplayInterval = 4000,\n showControls = true,\n showDots = true,\n ariaLabel = 'Carrusel',\n className,\n onIndexChange,\n}: CarouselProps) {\n const slides = React.Children.toArray(children);\n const total = slides.length;\n const [index, setIndex] = React.useState(0);\n\n // Stable handlers: use the functional setIndex form so the callbacks\n // don't have to close over `index`. They re-create only when `loop`,\n // `total`, or `onIndexChange` change — meaning carousel arrow buttons\n // and autoplay can rely on referential stability across navigations.\n const go = React.useCallback(\n (target: number) => {\n const clamped = loop ? (target + total) % total : Math.max(0, Math.min(target, total - 1));\n setIndex(clamped);\n onIndexChange?.(clamped);\n },\n [loop, total, onIndexChange]\n );\n\n const next = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i + 1) % total : Math.min(i + 1, total - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n const prev = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i - 1 + total) % total : Math.max(0, i - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n React.useEffect(() => {\n if (!autoplay || total <= 1) return;\n const id = setInterval(next, autoplayInterval);\n return () => clearInterval(id);\n }, [autoplay, autoplayInterval, total, next]);\n\n const onKey = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n },\n [next, prev]\n );\n\n return (\n <div\n className={cx('carousel', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={onKey}\n >\n <div className=\"carousel__viewport\">\n <div className=\"carousel__track\" style={{ transform: `translateX(-${index * 100}%)` }}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className=\"carousel__slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} de ${total}`}\n aria-hidden={i !== index}\n >\n {slide}\n </div>\n ))}\n </div>\n {showControls && total > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--prev\"\n aria-label=\"Anterior\"\n onClick={prev}\n disabled={!loop && index === 0}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--next\"\n aria-label=\"Siguiente\"\n onClick={next}\n disabled={!loop && index === total - 1}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {showDots && total > 1 && (\n <ul className=\"carousel__dots\" role=\"tablist\">\n {slides.map((_, i) => (\n <li key={i}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={i === index}\n aria-label={`Ir a la diapositiva ${i + 1}`}\n className={cx('carousel__dot', i === index && 'is-active')}\n onClick={() => go(i)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/cx.ts"],"names":[],"mappings":";;;AACO,SAAS,MAAM,OAAA,EAA2D;AAC/E,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACzC","file":"chunk-PASF6T4H.js","sourcesContent":["// Utility — merge class names, dropping falsy values\nexport function cx(...classes: Array<string | false | null | undefined>): string {\n return classes.filter(Boolean).join(' ');\n}\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { format } from './chunk-KKOJI25C.mjs';
|
|
2
|
+
import { useLocale } from './chunk-ZRFSTYRL.mjs';
|
|
3
|
+
import { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './chunk-CIBJKJV3.mjs';
|
|
4
|
+
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var NumberInput = React.forwardRef(function NumberInput2({ value, onChange, min, max, step = 1, invalid, prefix, suffix, className, disabled, ...rest }, ref) {
|
|
9
|
+
const t = useLocale();
|
|
10
|
+
const set = (next) => {
|
|
11
|
+
if (next == null) return onChange?.(null);
|
|
12
|
+
let v = next;
|
|
13
|
+
if (typeof min === "number") v = Math.max(min, v);
|
|
14
|
+
if (typeof max === "number") v = Math.min(max, v);
|
|
15
|
+
onChange?.(v);
|
|
16
|
+
};
|
|
17
|
+
const incr = (mult) => set((value ?? 0) + step * mult);
|
|
18
|
+
return /* @__PURE__ */ jsxs("div", { className: cx("number-input", invalid && "is-invalid", disabled && "is-disabled", className), children: [
|
|
19
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "number-input__btn", tabIndex: -1, "aria-label": t["numberInput.decrement"], onClick: () => incr(-1), disabled, children: "\u2212" }),
|
|
20
|
+
prefix && /* @__PURE__ */ jsx("span", { className: "number-input__affix", children: prefix }),
|
|
21
|
+
/* @__PURE__ */ jsx(
|
|
22
|
+
"input",
|
|
23
|
+
{
|
|
24
|
+
ref,
|
|
25
|
+
type: "number",
|
|
26
|
+
className: "number-input__field",
|
|
27
|
+
value: value ?? "",
|
|
28
|
+
min,
|
|
29
|
+
max,
|
|
30
|
+
step,
|
|
31
|
+
disabled,
|
|
32
|
+
onChange: (e) => set(e.target.value === "" ? null : Number(e.target.value)),
|
|
33
|
+
"aria-invalid": invalid || void 0,
|
|
34
|
+
...rest
|
|
35
|
+
}
|
|
36
|
+
),
|
|
37
|
+
suffix && /* @__PURE__ */ jsx("span", { className: "number-input__affix", children: suffix }),
|
|
38
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "number-input__btn", tabIndex: -1, "aria-label": t["numberInput.increment"], onClick: () => incr(1), disabled, children: "+" })
|
|
39
|
+
] });
|
|
40
|
+
});
|
|
41
|
+
function pageList(current, total, siblings) {
|
|
42
|
+
if (total <= 1) return [1];
|
|
43
|
+
const range = (s, e) => Array.from({ length: e - s + 1 }, (_, i) => s + i);
|
|
44
|
+
const start = Math.max(2, current - siblings);
|
|
45
|
+
const end = Math.min(total - 1, current + siblings);
|
|
46
|
+
const out = [1];
|
|
47
|
+
if (start > 2) out.push("...");
|
|
48
|
+
out.push(...range(start, end));
|
|
49
|
+
if (end < total - 1) out.push("...");
|
|
50
|
+
if (total > 1) out.push(total);
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }) {
|
|
54
|
+
const t = useLocale();
|
|
55
|
+
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
56
|
+
const pages = pageList(page, totalPages, siblings);
|
|
57
|
+
const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
58
|
+
const to = Math.min(total, page * pageSize);
|
|
59
|
+
return /* @__PURE__ */ jsxs("nav", { className: cx("pagination", className), "aria-label": t["pagination.label"], children: [
|
|
60
|
+
/* @__PURE__ */ jsx("span", { className: "pagination__info", children: format(t["pagination.range"], { from, to, total }) }),
|
|
61
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "pagination__btn", onClick: () => onPageChange(Math.max(1, page - 1)), disabled: page <= 1, "aria-label": t["pagination.prev"], children: /* @__PURE__ */ jsx(ChevronLeft, { size: 14 }) }),
|
|
62
|
+
pages.map(
|
|
63
|
+
(p, i) => p === "..." ? /* @__PURE__ */ jsx("span", { className: "pagination__ellipsis", children: "\u2026" }, `e${i}`) : /* @__PURE__ */ jsx(
|
|
64
|
+
"button",
|
|
65
|
+
{
|
|
66
|
+
type: "button",
|
|
67
|
+
className: cx("pagination__btn", p === page && "is-active"),
|
|
68
|
+
"aria-current": p === page ? "page" : void 0,
|
|
69
|
+
onClick: () => onPageChange(p),
|
|
70
|
+
children: p
|
|
71
|
+
},
|
|
72
|
+
p
|
|
73
|
+
)
|
|
74
|
+
),
|
|
75
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "pagination__btn", onClick: () => onPageChange(Math.min(totalPages, page + 1)), disabled: page >= totalPages, "aria-label": t["pagination.next"], children: /* @__PURE__ */ jsx(ChevronRight, { size: 14 }) })
|
|
76
|
+
] });
|
|
77
|
+
}
|
|
78
|
+
function EmptyState({ icon, title, description, action, className }) {
|
|
79
|
+
return /* @__PURE__ */ jsxs("div", { className: cx("empty", className), role: "status", children: [
|
|
80
|
+
icon && /* @__PURE__ */ jsx("div", { className: "empty__icon", "aria-hidden": "true", children: icon }),
|
|
81
|
+
/* @__PURE__ */ jsx("div", { className: "empty__title", children: title }),
|
|
82
|
+
description && /* @__PURE__ */ jsx("div", { className: "empty__desc", children: description }),
|
|
83
|
+
action
|
|
84
|
+
] });
|
|
85
|
+
}
|
|
86
|
+
function Kpi({ label, value, delta, hint, icon, className }) {
|
|
87
|
+
return /* @__PURE__ */ jsxs("div", { className: cx("kpi", className), children: [
|
|
88
|
+
/* @__PURE__ */ jsxs("div", { className: "kpi__head", children: [
|
|
89
|
+
/* @__PURE__ */ jsx("span", { className: "kpi__label", children: label }),
|
|
90
|
+
icon && /* @__PURE__ */ jsx("span", { className: "kpi__icon", "aria-hidden": "true", children: icon })
|
|
91
|
+
] }),
|
|
92
|
+
/* @__PURE__ */ jsx("div", { className: "kpi__value", children: value }),
|
|
93
|
+
/* @__PURE__ */ jsxs("div", { className: "kpi__foot", children: [
|
|
94
|
+
delta && /* @__PURE__ */ jsxs("span", { className: cx("kpi__delta", `kpi__delta--${delta.trend}`), children: [
|
|
95
|
+
delta.trend === "up" ? /* @__PURE__ */ jsx(ChevronUp, { size: 12 }) : delta.trend === "down" ? /* @__PURE__ */ jsx(ChevronDown, { size: 12 }) : "\u2013",
|
|
96
|
+
" ",
|
|
97
|
+
delta.value
|
|
98
|
+
] }),
|
|
99
|
+
hint && /* @__PURE__ */ jsx("span", { className: "kpi__hint", children: hint })
|
|
100
|
+
] })
|
|
101
|
+
] });
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { EmptyState, Kpi, NumberInput, Pagination };
|
|
105
|
+
//# sourceMappingURL=chunk-PCRNKITV.mjs.map
|
|
106
|
+
//# sourceMappingURL=chunk-PCRNKITV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Inputs.tsx"],"names":["NumberInput"],"mappings":"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","file":"chunk-PCRNKITV.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- NumberInput --------------------------------------------------\nexport interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type' | 'prefix'> {\n value?: number | null;\n onChange?: (v: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n invalid?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n { value, onChange, min, max, step = 1, invalid, prefix, suffix, className, disabled, ...rest },\n ref\n) {\n const t = useLocale();\n const set = (next: number | null) => {\n if (next == null) return onChange?.(null);\n let v = next;\n if (typeof min === 'number') v = Math.max(min, v);\n if (typeof max === 'number') v = Math.min(max, v);\n onChange?.(v);\n };\n const incr = (mult: number) => set((value ?? 0) + step * mult);\n return (\n <div className={cx('number-input', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.decrement']} onClick={() => incr(-1)} disabled={disabled}>−</button>\n {prefix && <span className=\"number-input__affix\">{prefix}</span>}\n <input\n ref={ref}\n type=\"number\"\n className=\"number-input__field\"\n value={value ?? ''}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => set(e.target.value === '' ? null : Number(e.target.value))}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {suffix && <span className=\"number-input__affix\">{suffix}</span>}\n <button type=\"button\" className=\"number-input__btn\" tabIndex={-1} aria-label={t['numberInput.increment']} onClick={() => incr(1)} disabled={disabled}>+</button>\n </div>\n );\n});\n\n// ---------- Pagination ---------------------------------------------------\nexport interface PaginationProps {\n page: number; // 1-indexed\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n siblings?: number;\n className?: string;\n}\n\nfunction pageList(current: number, total: number, siblings: number): (number | '...')[] {\n if (total <= 1) return [1];\n const range = (s: number, e: number) => Array.from({ length: e - s + 1 }, (_, i) => s + i);\n const start = Math.max(2, current - siblings);\n const end = Math.min(total - 1, current + siblings);\n const out: (number | '...')[] = [1];\n if (start > 2) out.push('...');\n out.push(...range(start, end));\n if (end < total - 1) out.push('...');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function Pagination({ page, pageSize, total, onPageChange, siblings = 1, className }: PaginationProps) {\n const t = useLocale();\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const pages = pageList(page, totalPages, siblings);\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = Math.min(total, page * pageSize);\n return (\n <nav className={cx('pagination', className)} aria-label={t['pagination.label']}>\n <span className=\"pagination__info\">{format(t['pagination.range'], { from, to, total })}</span>\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.max(1, page - 1))} disabled={page <= 1} aria-label={t['pagination.prev']}><ChevronLeft size={14} /></button>\n {pages.map((p, i) =>\n p === '...' ? (\n <span key={`e${i}`} className=\"pagination__ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={cx('pagination__btn', p === page && 'is-active')}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => onPageChange(p)}\n >\n {p}\n </button>\n )\n )}\n <button type=\"button\" className=\"pagination__btn\" onClick={() => onPageChange(Math.min(totalPages, page + 1))} disabled={page >= totalPages} aria-label={t['pagination.next']}><ChevronRight size={14} /></button>\n </nav>\n );\n}\n\n// ---------- EmptyState ---------------------------------------------------\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cx('empty', className)} role=\"status\">\n {icon && <div className=\"empty__icon\" aria-hidden=\"true\">{icon}</div>}\n <div className=\"empty__title\">{title}</div>\n {description && <div className=\"empty__desc\">{description}</div>}\n {action}\n </div>\n );\n}\n\n// ---------- KPI / Stat card ----------------------------------------------\nexport interface KpiProps {\n label: React.ReactNode;\n value: React.ReactNode;\n delta?: { value: string; trend: 'up' | 'down' | 'flat' };\n hint?: React.ReactNode;\n icon?: React.ReactNode;\n className?: string;\n}\n\nexport function Kpi({ label, value, delta, hint, icon, className }: KpiProps) {\n return (\n <div className={cx('kpi', className)}>\n <div className=\"kpi__head\">\n <span className=\"kpi__label\">{label}</span>\n {icon && <span className=\"kpi__icon\" aria-hidden=\"true\">{icon}</span>}\n </div>\n <div className=\"kpi__value\">{value}</div>\n <div className=\"kpi__foot\">\n {delta && (\n <span className={cx('kpi__delta', `kpi__delta--${delta.trend}`)}>\n {delta.trend === 'up' ? <ChevronUp size={12} /> : delta.trend === 'down' ? <ChevronDown size={12} /> : '–'} {delta.value}\n </span>\n )}\n {hint && <span className=\"kpi__hint\">{hint}</span>}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
26
|
+
|
|
27
|
+
var Button = React__namespace.forwardRef(function Button2({
|
|
28
|
+
variant = "primary",
|
|
29
|
+
size = "md",
|
|
30
|
+
loading = false,
|
|
31
|
+
iconLeft,
|
|
32
|
+
iconRight,
|
|
33
|
+
fullWidth = false,
|
|
34
|
+
className,
|
|
35
|
+
disabled,
|
|
36
|
+
children,
|
|
37
|
+
...rest
|
|
38
|
+
}, ref) {
|
|
39
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
40
|
+
"button",
|
|
41
|
+
{
|
|
42
|
+
ref,
|
|
43
|
+
className: chunkPASF6T4H_js.cx(
|
|
44
|
+
"btn",
|
|
45
|
+
`btn--${variant}`,
|
|
46
|
+
`btn--${size}`,
|
|
47
|
+
fullWidth && "btn--block",
|
|
48
|
+
loading && "is-loading",
|
|
49
|
+
className
|
|
50
|
+
),
|
|
51
|
+
disabled: disabled || loading,
|
|
52
|
+
"aria-busy": loading || void 0,
|
|
53
|
+
...rest,
|
|
54
|
+
children: [
|
|
55
|
+
loading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "spinner spinner--inverse", "aria-hidden": "true" }),
|
|
56
|
+
!loading && iconLeft,
|
|
57
|
+
children,
|
|
58
|
+
!loading && iconRight
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
var ButtonGroup = React__namespace.forwardRef(
|
|
64
|
+
function ButtonGroup2({ className, role = "group", ...rest }, ref) {
|
|
65
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, role, className: chunkPASF6T4H_js.cx("btn-group", className), ...rest });
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
exports.Button = Button;
|
|
70
|
+
exports.ButtonGroup = ButtonGroup;
|
|
71
|
+
//# sourceMappingURL=chunk-PSJVU4E4.js.map
|
|
72
|
+
//# sourceMappingURL=chunk-PSJVU4E4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Button.tsx"],"names":["React","Button","jsxs","cx","jsx","ButtonGroup"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,IAAM,MAAA,GAAeA,gBAAA,CAAA,UAAA,CAA2C,SAASC,OAAAA,CAC9E;AAAA,EACE,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,uBACEC,eAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAWC,mBAAA;AAAA,QACT,KAAA;AAAA,QACA,QAAQ,OAAO,CAAA,CAAA;AAAA,QACf,QAAQ,IAAI,CAAA,CAAA;AAAA,QACZ,SAAA,IAAa,YAAA;AAAA,QACb,OAAA,IAAW,YAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,aAAW,OAAA,IAAW,MAAA;AAAA,MACrB,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,OAAA,oBAAWC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,eAAY,MAAA,EAAO,CAAA;AAAA,QACzE,CAAC,OAAA,IAAW,QAAA;AAAA,QACZ,QAAA;AAAA,QACA,CAAC,OAAA,IAAW;AAAA;AAAA;AAAA,GACf;AAEJ,CAAC;AAGM,IAAM,WAAA,GAAoBJ,gBAAA,CAAA,UAAA;AAAA,EAC/B,SAASK,aAAY,EAAE,SAAA,EAAW,OAAO,OAAA,EAAS,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAChE,IAAA,uBAAOD,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,IAAA,EAAY,SAAA,EAAWD,oBAAG,WAAA,EAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EACrF;AACF","file":"chunk-PSJVU4E4.js","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'subtle'\n | 'danger'\n | 'success'\n | 'warning'\n | 'link';\n\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n fullWidth?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n iconLeft,\n iconRight,\n fullWidth = false,\n className,\n disabled,\n children,\n ...rest\n },\n ref\n) {\n return (\n <button\n ref={ref}\n className={cx(\n 'btn',\n `btn--${variant}`,\n `btn--${size}`,\n fullWidth && 'btn--block',\n loading && 'is-loading',\n className\n )}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...rest}\n >\n {loading && <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" />}\n {!loading && iconLeft}\n {children}\n {!loading && iconRight}\n </button>\n );\n});\n\n// ---------- ButtonGroup --------------------------------------------------\nexport const ButtonGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ButtonGroup({ className, role = 'group', ...rest }, ref) {\n return <div ref={ref} role={role} className={cx('btn-group', className)} {...rest} />;\n }\n);\n"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { format } from './chunk-KKOJI25C.mjs';
|
|
2
|
+
import { useLocale } from './chunk-ZRFSTYRL.mjs';
|
|
3
|
+
import { ChevronUp, ChevronDown, X } from './chunk-CIBJKJV3.mjs';
|
|
4
|
+
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }) {
|
|
9
|
+
const t = useLocale();
|
|
10
|
+
const heading = title ?? t["filters.panel"];
|
|
11
|
+
return /* @__PURE__ */ jsxs("aside", { className: cx("filter-panel", className), "aria-label": t["filters.panel"], ...rest, children: [
|
|
12
|
+
/* @__PURE__ */ jsxs("div", { className: "filter-panel__head", children: [
|
|
13
|
+
/* @__PURE__ */ jsxs("span", { className: "filter-panel__title", children: [
|
|
14
|
+
heading,
|
|
15
|
+
typeof activeCount === "number" && activeCount > 0 && /* @__PURE__ */ jsx("span", { className: "filter-panel__count", children: activeCount })
|
|
16
|
+
] }),
|
|
17
|
+
onClearAll && activeCount !== void 0 && activeCount > 0 && /* @__PURE__ */ jsx("button", { type: "button", className: "filter-panel__clear", onClick: onClearAll, children: t["filters.clear"] })
|
|
18
|
+
] }),
|
|
19
|
+
/* @__PURE__ */ jsx("div", { className: "filter-panel__body", children })
|
|
20
|
+
] });
|
|
21
|
+
}
|
|
22
|
+
function FilterSection({ title, defaultOpen = true, children, className, ...rest }) {
|
|
23
|
+
const [open, setOpen] = React.useState(defaultOpen);
|
|
24
|
+
return /* @__PURE__ */ jsxs("div", { className: cx("filter-section", className), ...rest, children: [
|
|
25
|
+
/* @__PURE__ */ jsxs(
|
|
26
|
+
"button",
|
|
27
|
+
{
|
|
28
|
+
type: "button",
|
|
29
|
+
className: "filter-section__head",
|
|
30
|
+
"aria-expanded": open,
|
|
31
|
+
onClick: () => setOpen((o) => !o),
|
|
32
|
+
children: [
|
|
33
|
+
/* @__PURE__ */ jsx("span", { children: title }),
|
|
34
|
+
open ? /* @__PURE__ */ jsx(ChevronUp, { size: 14 }) : /* @__PURE__ */ jsx(ChevronDown, { size: 14 })
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
open && /* @__PURE__ */ jsx("div", { className: "filter-section__body", children })
|
|
39
|
+
] });
|
|
40
|
+
}
|
|
41
|
+
function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }) {
|
|
42
|
+
const t = useLocale();
|
|
43
|
+
if (selectedCount <= 0) return null;
|
|
44
|
+
const countText = format(
|
|
45
|
+
selectedCount === 1 ? t["filters.selectedOne"] : t["filters.selectedMany"],
|
|
46
|
+
{ n: selectedCount }
|
|
47
|
+
);
|
|
48
|
+
return /* @__PURE__ */ jsxs("div", { className: cx("bulk-bar", className), role: "region", "aria-label": t["filters.bulkActions"], ...rest, children: [
|
|
49
|
+
/* @__PURE__ */ jsxs("div", { className: "bulk-bar__count", children: [
|
|
50
|
+
label ?? countText,
|
|
51
|
+
onClear && /* @__PURE__ */ jsx("button", { type: "button", className: "bulk-bar__clear", "aria-label": t["filters.deselectAll"], onClick: onClear, children: /* @__PURE__ */ jsx(X, { size: 14 }) })
|
|
52
|
+
] }),
|
|
53
|
+
/* @__PURE__ */ jsx("div", { className: "bulk-bar__actions", children })
|
|
54
|
+
] });
|
|
55
|
+
}
|
|
56
|
+
function SortDropdown({
|
|
57
|
+
value,
|
|
58
|
+
options,
|
|
59
|
+
onChange,
|
|
60
|
+
label,
|
|
61
|
+
className,
|
|
62
|
+
id
|
|
63
|
+
}) {
|
|
64
|
+
const t = useLocale();
|
|
65
|
+
return /* @__PURE__ */ jsxs("label", { className: cx("sort-dropdown", className), children: [
|
|
66
|
+
/* @__PURE__ */ jsx("span", { className: "sort-dropdown__label", children: label ?? t["filters.sortBy"] }),
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
"select",
|
|
69
|
+
{
|
|
70
|
+
id,
|
|
71
|
+
className: "sort-dropdown__select select",
|
|
72
|
+
value,
|
|
73
|
+
onChange: (e) => onChange(e.target.value),
|
|
74
|
+
children: options.map((o) => /* @__PURE__ */ jsx("option", { value: String(o.value), children: typeof o.label === "string" ? o.label : String(o.value) }, String(o.value)))
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export { BulkActionBar, FilterPanel, FilterSection, SortDropdown };
|
|
81
|
+
//# sourceMappingURL=chunk-PXCH5Z76.mjs.map
|
|
82
|
+
//# sourceMappingURL=chunk-PXCH5Z76.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Filters.tsx"],"names":[],"mappings":"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","file":"chunk-PXCH5Z76.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, ChevronUp, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- FilterPanel -------------------------------------------------\nexport interface FilterPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n onClearAll?: () => void;\n activeCount?: number;\n}\n\nexport function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }: FilterPanelProps) {\n const t = useLocale();\n const heading = title ?? t['filters.panel'];\n return (\n <aside className={cx('filter-panel', className)} aria-label={t['filters.panel']} {...rest}>\n <div className=\"filter-panel__head\">\n <span className=\"filter-panel__title\">\n {heading}\n {typeof activeCount === 'number' && activeCount > 0 && (\n <span className=\"filter-panel__count\">{activeCount}</span>\n )}\n </span>\n {onClearAll && activeCount !== undefined && activeCount > 0 && (\n <button type=\"button\" className=\"filter-panel__clear\" onClick={onClearAll}>\n {t['filters.clear']}\n </button>\n )}\n </div>\n <div className=\"filter-panel__body\">{children}</div>\n </aside>\n );\n}\n\nexport interface FilterSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function FilterSection({ title, defaultOpen = true, children, className, ...rest }: FilterSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n return (\n <div className={cx('filter-section', className)} {...rest}>\n <button\n type=\"button\"\n className=\"filter-section__head\"\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n >\n <span>{title}</span>\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n {open && <div className=\"filter-section__body\">{children}</div>}\n </div>\n );\n}\n\n// ---------- BulkActionBar ----------------------------------------------\nexport interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Cantidad de items seleccionados. La barra se oculta si es 0. */\n selectedCount: number;\n /** Texto opcional, default: \"{N} seleccionado(s)\". */\n label?: React.ReactNode;\n onClear?: () => void;\n}\n\nexport function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }: BulkActionBarProps) {\n const t = useLocale();\n if (selectedCount <= 0) return null;\n const countText = format(\n selectedCount === 1 ? t['filters.selectedOne'] : t['filters.selectedMany'],\n { n: selectedCount }\n );\n return (\n <div className={cx('bulk-bar', className)} role=\"region\" aria-label={t['filters.bulkActions']} {...rest}>\n <div className=\"bulk-bar__count\">\n {label ?? countText}\n {onClear && (\n <button type=\"button\" className=\"bulk-bar__clear\" aria-label={t['filters.deselectAll']} onClick={onClear}>\n <X size={14} />\n </button>\n )}\n </div>\n <div className=\"bulk-bar__actions\">{children}</div>\n </div>\n );\n}\n\n// ---------- SortDropdown -----------------------------------------------\nexport interface SortOption<T = string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SortDropdownProps<T = string> {\n value: T;\n options: SortOption<T>[];\n onChange: (value: T) => void;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function SortDropdown<T extends string = string>({\n value, options, onChange, label, className, id,\n}: SortDropdownProps<T>) {\n const t = useLocale();\n return (\n <label className={cx('sort-dropdown', className)}>\n <span className=\"sort-dropdown__label\">{label ?? t['filters.sortBy']}</span>\n <select\n id={id}\n className=\"sort-dropdown__select select\"\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n >\n {options.map((o) => (\n <option key={String(o.value)} value={String(o.value)}>\n {typeof o.label === 'string' ? o.label : String(o.value)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
26
|
+
|
|
27
|
+
var ResizableContext = React__namespace.createContext(null);
|
|
28
|
+
function ResizableGroup({ direction = "horizontal", className, children, ariaLabel }) {
|
|
29
|
+
const containerRef = React__namespace.useRef(null);
|
|
30
|
+
const [sizes, setSizes] = React__namespace.useState({});
|
|
31
|
+
const minsRef = React__namespace.useRef({});
|
|
32
|
+
const orderRef = React__namespace.useRef([]);
|
|
33
|
+
const registerPanel = React__namespace.useCallback((id, defaultSize, minSize) => {
|
|
34
|
+
minsRef.current[id] = minSize;
|
|
35
|
+
setSizes((s) => s[id] !== void 0 ? s : { ...s, [id]: defaultSize });
|
|
36
|
+
if (!orderRef.current.includes(id)) orderRef.current = [...orderRef.current, id];
|
|
37
|
+
}, []);
|
|
38
|
+
const startDrag = (panelId, e) => {
|
|
39
|
+
e.preventDefault();
|
|
40
|
+
const idx = orderRef.current.indexOf(panelId);
|
|
41
|
+
const nextId = orderRef.current[idx + 1];
|
|
42
|
+
if (!nextId || !containerRef.current) return;
|
|
43
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
44
|
+
const total = direction === "horizontal" ? rect.width : rect.height;
|
|
45
|
+
const startSize = sizes[panelId] ?? 0;
|
|
46
|
+
const startNextSize = sizes[nextId] ?? 0;
|
|
47
|
+
const startCoord = direction === "horizontal" ? e.clientX : e.clientY;
|
|
48
|
+
const onMove = (ev) => {
|
|
49
|
+
const coord = direction === "horizontal" ? ev.clientX : ev.clientY;
|
|
50
|
+
const deltaPx = coord - startCoord;
|
|
51
|
+
const deltaPct = deltaPx / total * 100;
|
|
52
|
+
const minA = minsRef.current[panelId] ?? 5;
|
|
53
|
+
const minB = minsRef.current[nextId] ?? 5;
|
|
54
|
+
const newA = Math.max(minA, Math.min(startSize + startNextSize - minB, startSize + deltaPct));
|
|
55
|
+
const newB = startSize + startNextSize - newA;
|
|
56
|
+
setSizes((s) => ({ ...s, [panelId]: newA, [nextId]: newB }));
|
|
57
|
+
};
|
|
58
|
+
const onUp = () => {
|
|
59
|
+
window.removeEventListener("pointermove", onMove);
|
|
60
|
+
window.removeEventListener("pointerup", onUp);
|
|
61
|
+
};
|
|
62
|
+
window.addEventListener("pointermove", onMove);
|
|
63
|
+
window.addEventListener("pointerup", onUp);
|
|
64
|
+
};
|
|
65
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ResizableContext.Provider, { value: { direction, registerPanel, sizes, startDrag }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
ref: containerRef,
|
|
69
|
+
role: "group",
|
|
70
|
+
"aria-label": ariaLabel,
|
|
71
|
+
className: chunkPASF6T4H_js.cx("resizable", `resizable--${direction}`, className),
|
|
72
|
+
children
|
|
73
|
+
}
|
|
74
|
+
) });
|
|
75
|
+
}
|
|
76
|
+
function ResizablePanel({ id, defaultSize = 50, minSize = 10, className, children }) {
|
|
77
|
+
const ctx = React__namespace.useContext(ResizableContext);
|
|
78
|
+
if (!ctx) throw new Error("ResizablePanel must be inside ResizableGroup");
|
|
79
|
+
React__namespace.useEffect(() => {
|
|
80
|
+
ctx.registerPanel(id, defaultSize, minSize);
|
|
81
|
+
}, [id, defaultSize, minSize, ctx]);
|
|
82
|
+
const size = ctx.sizes[id] ?? defaultSize;
|
|
83
|
+
const sizeStyle = ctx.direction === "horizontal" ? { width: `${size}%` } : { height: `${size}%` };
|
|
84
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkPASF6T4H_js.cx("resizable__panel", className), style: sizeStyle, children });
|
|
85
|
+
}
|
|
86
|
+
function ResizableHandle({ panelId, className, ariaLabel = "Redimensionar" }) {
|
|
87
|
+
const ctx = React__namespace.useContext(ResizableContext);
|
|
88
|
+
if (!ctx) throw new Error("ResizableHandle must be inside ResizableGroup");
|
|
89
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
90
|
+
"div",
|
|
91
|
+
{
|
|
92
|
+
role: "separator",
|
|
93
|
+
tabIndex: 0,
|
|
94
|
+
"aria-orientation": ctx.direction === "horizontal" ? "vertical" : "horizontal",
|
|
95
|
+
"aria-label": ariaLabel,
|
|
96
|
+
className: chunkPASF6T4H_js.cx("resizable__handle", `resizable__handle--${ctx.direction}`, className),
|
|
97
|
+
onPointerDown: (e) => ctx.startDrag(panelId, e)
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
exports.ResizableGroup = ResizableGroup;
|
|
103
|
+
exports.ResizableHandle = ResizableHandle;
|
|
104
|
+
exports.ResizablePanel = ResizablePanel;
|
|
105
|
+
//# sourceMappingURL=chunk-QHRP73CS.js.map
|
|
106
|
+
//# sourceMappingURL=chunk-QHRP73CS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Resizable.tsx"],"names":["React","jsx","cx"],"mappings":"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","file":"chunk-QHRP73CS.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ResizableDirection = 'horizontal' | 'vertical';\n\ninterface ResizableContextValue {\n direction: ResizableDirection;\n registerPanel: (id: string, defaultSize: number, minSize: number) => void;\n sizes: Record<string, number>;\n startDrag: (panelId: string, e: React.PointerEvent) => void;\n}\nconst ResizableContext = React.createContext<ResizableContextValue | null>(null);\n\nexport interface ResizableGroupProps {\n direction?: ResizableDirection;\n className?: string;\n children: React.ReactNode;\n ariaLabel?: string;\n}\n\nexport function ResizableGroup({ direction = 'horizontal', className, children, ariaLabel }: ResizableGroupProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [sizes, setSizes] = React.useState<Record<string, number>>({});\n const minsRef = React.useRef<Record<string, number>>({});\n const orderRef = React.useRef<string[]>([]);\n\n const registerPanel = React.useCallback((id: string, defaultSize: number, minSize: number) => {\n minsRef.current[id] = minSize;\n setSizes((s) => (s[id] !== undefined ? s : { ...s, [id]: defaultSize }));\n if (!orderRef.current.includes(id)) orderRef.current = [...orderRef.current, id];\n }, []);\n\n const startDrag = (panelId: string, e: React.PointerEvent) => {\n e.preventDefault();\n const idx = orderRef.current.indexOf(panelId);\n const nextId = orderRef.current[idx + 1];\n if (!nextId || !containerRef.current) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n const total = direction === 'horizontal' ? rect.width : rect.height;\n const startSize = sizes[panelId] ?? 0;\n const startNextSize = sizes[nextId] ?? 0;\n const startCoord = direction === 'horizontal' ? e.clientX : e.clientY;\n\n const onMove = (ev: PointerEvent) => {\n const coord = direction === 'horizontal' ? ev.clientX : ev.clientY;\n const deltaPx = coord - startCoord;\n const deltaPct = (deltaPx / total) * 100;\n const minA = minsRef.current[panelId] ?? 5;\n const minB = minsRef.current[nextId] ?? 5;\n const newA = Math.max(minA, Math.min(startSize + startNextSize - minB, startSize + deltaPct));\n const newB = startSize + startNextSize - newA;\n setSizes((s) => ({ ...s, [panelId]: newA, [nextId]: newB }));\n };\n const onUp = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n };\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n };\n\n return (\n <ResizableContext.Provider value={{ direction, registerPanel, sizes, startDrag }}>\n <div\n ref={containerRef}\n role=\"group\"\n aria-label={ariaLabel}\n className={cx('resizable', `resizable--${direction}`, className)}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n}\n\nexport interface ResizablePanelProps {\n id: string;\n defaultSize?: number;\n minSize?: number;\n className?: string;\n children: React.ReactNode;\n}\n\nexport function ResizablePanel({ id, defaultSize = 50, minSize = 10, className, children }: ResizablePanelProps) {\n const ctx = React.useContext(ResizableContext);\n if (!ctx) throw new Error('ResizablePanel must be inside ResizableGroup');\n\n React.useEffect(() => {\n ctx.registerPanel(id, defaultSize, minSize);\n }, [id, defaultSize, minSize, ctx]);\n\n const size = ctx.sizes[id] ?? defaultSize;\n const sizeStyle =\n ctx.direction === 'horizontal' ? { width: `${size}%` } : { height: `${size}%` };\n\n return (\n <div className={cx('resizable__panel', className)} style={sizeStyle}>\n {children}\n </div>\n );\n}\n\nexport interface ResizableHandleProps {\n panelId: string;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function ResizableHandle({ panelId, className, ariaLabel = 'Redimensionar' }: ResizableHandleProps) {\n const ctx = React.useContext(ResizableContext);\n if (!ctx) throw new Error('ResizableHandle must be inside ResizableGroup');\n return (\n <div\n role=\"separator\"\n tabIndex={0}\n aria-orientation={ctx.direction === 'horizontal' ? 'vertical' : 'horizontal'}\n aria-label={ariaLabel}\n className={cx('resizable__handle', `resizable__handle--${ctx.direction}`, className)}\n onPointerDown={(e) => ctx.startDrag(panelId, e)}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var reactDom = require('react-dom');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function _interopNamespace(e) {
|
|
9
|
+
if (e && e.__esModule) return e;
|
|
10
|
+
var n = Object.create(null);
|
|
11
|
+
if (e) {
|
|
12
|
+
Object.keys(e).forEach(function (k) {
|
|
13
|
+
if (k !== 'default') {
|
|
14
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return e[k]; }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
27
|
+
|
|
28
|
+
function Menubar({ menus, className, ariaLabel = "Barra de men\xFAs" }) {
|
|
29
|
+
const [openId, setOpenId] = React__namespace.useState(null);
|
|
30
|
+
const [coords, setCoords] = React__namespace.useState(null);
|
|
31
|
+
const rootRef = React__namespace.useRef(null);
|
|
32
|
+
const panelRef = React__namespace.useRef(null);
|
|
33
|
+
React__namespace.useEffect(() => {
|
|
34
|
+
if (!openId) return;
|
|
35
|
+
const onClick = (e) => {
|
|
36
|
+
const target = e.target;
|
|
37
|
+
if (rootRef.current?.contains(target)) return;
|
|
38
|
+
if (panelRef.current?.contains(target)) return;
|
|
39
|
+
setOpenId(null);
|
|
40
|
+
};
|
|
41
|
+
const onKey = (e) => {
|
|
42
|
+
if (e.key === "Escape") setOpenId(null);
|
|
43
|
+
};
|
|
44
|
+
document.addEventListener("mousedown", onClick);
|
|
45
|
+
document.addEventListener("keydown", onKey);
|
|
46
|
+
return () => {
|
|
47
|
+
document.removeEventListener("mousedown", onClick);
|
|
48
|
+
document.removeEventListener("keydown", onKey);
|
|
49
|
+
};
|
|
50
|
+
}, [openId]);
|
|
51
|
+
const positionPanel = (trigger) => {
|
|
52
|
+
const t = trigger.getBoundingClientRect();
|
|
53
|
+
setCoords({ top: t.bottom + window.scrollY, left: t.left + window.scrollX });
|
|
54
|
+
};
|
|
55
|
+
const handleSelect = (item) => {
|
|
56
|
+
if (item.disabled || item.separator) return;
|
|
57
|
+
item.onSelect?.();
|
|
58
|
+
setOpenId(null);
|
|
59
|
+
};
|
|
60
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: rootRef, role: "menubar", "aria-label": ariaLabel, className: chunkPASF6T4H_js.cx("menubar", className), children: menus.map((menu) => {
|
|
61
|
+
const isOpen = openId === menu.id;
|
|
62
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "menubar__menu", children: [
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
"button",
|
|
65
|
+
{
|
|
66
|
+
type: "button",
|
|
67
|
+
role: "menuitem",
|
|
68
|
+
"aria-haspopup": "menu",
|
|
69
|
+
"aria-expanded": isOpen,
|
|
70
|
+
className: chunkPASF6T4H_js.cx("menubar__trigger", isOpen && "is-open"),
|
|
71
|
+
onClick: (e) => {
|
|
72
|
+
if (isOpen) {
|
|
73
|
+
setOpenId(null);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
positionPanel(e.currentTarget);
|
|
77
|
+
setOpenId(menu.id);
|
|
78
|
+
},
|
|
79
|
+
onMouseEnter: (e) => {
|
|
80
|
+
if (!openId) return;
|
|
81
|
+
positionPanel(e.currentTarget);
|
|
82
|
+
setOpenId(menu.id);
|
|
83
|
+
},
|
|
84
|
+
children: menu.label
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
isOpen && typeof document !== "undefined" && reactDom.createPortal(
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
"ul",
|
|
90
|
+
{
|
|
91
|
+
ref: panelRef,
|
|
92
|
+
role: "menu",
|
|
93
|
+
className: "menubar__list",
|
|
94
|
+
style: coords ? { position: "absolute", top: coords.top, left: coords.left } : { position: "absolute", visibility: "hidden" },
|
|
95
|
+
children: menu.items.map(
|
|
96
|
+
(item) => item.separator ? /* @__PURE__ */ jsxRuntime.jsx("li", { className: "menubar__separator", role: "separator" }, item.id) : /* @__PURE__ */ jsxRuntime.jsx("li", { role: "none", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
97
|
+
"button",
|
|
98
|
+
{
|
|
99
|
+
type: "button",
|
|
100
|
+
role: "menuitem",
|
|
101
|
+
disabled: item.disabled,
|
|
102
|
+
className: chunkPASF6T4H_js.cx("menubar__item", item.disabled && "is-disabled"),
|
|
103
|
+
onClick: () => handleSelect(item),
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "menubar__label", children: item.label }),
|
|
106
|
+
item.shortcut && /* @__PURE__ */ jsxRuntime.jsx("kbd", { className: "menubar__shortcut", children: item.shortcut })
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
) }, item.id)
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
document.body
|
|
114
|
+
)
|
|
115
|
+
] }, menu.id);
|
|
116
|
+
}) });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
exports.Menubar = Menubar;
|
|
120
|
+
//# sourceMappingURL=chunk-QI6TVWWF.js.map
|
|
121
|
+
//# sourceMappingURL=chunk-QI6TVWWF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Menubar.tsx"],"names":["React","cx","jsxs","jsx","createPortal"],"mappings":"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","file":"chunk-QI6TVWWF.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cx } from '../utils/cx';\n\nexport interface MenubarItem {\n id: string;\n label?: React.ReactNode;\n onSelect?: () => void;\n disabled?: boolean;\n separator?: boolean;\n shortcut?: string;\n}\n\nexport interface MenubarMenu {\n id: string;\n label: React.ReactNode;\n items: MenubarItem[];\n}\n\nexport interface MenubarProps {\n menus: MenubarMenu[];\n className?: string;\n ariaLabel?: string;\n}\n\nexport function Menubar({ menus, className, ariaLabel = 'Barra de menús' }: MenubarProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n const [coords, setCoords] = React.useState<{ top: number; left: number } | null>(null);\n const rootRef = React.useRef<HTMLDivElement>(null);\n const panelRef = React.useRef<HTMLUListElement>(null);\n\n React.useEffect(() => {\n if (!openId) return;\n const onClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (rootRef.current?.contains(target)) return;\n if (panelRef.current?.contains(target)) return;\n setOpenId(null);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpenId(null);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [openId]);\n\n const positionPanel = (trigger: HTMLElement) => {\n const t = trigger.getBoundingClientRect();\n setCoords({ top: t.bottom + window.scrollY, left: t.left + window.scrollX });\n };\n\n const handleSelect = (item: MenubarItem) => {\n if (item.disabled || item.separator) return;\n item.onSelect?.();\n setOpenId(null);\n };\n\n return (\n <div ref={rootRef} role=\"menubar\" aria-label={ariaLabel} className={cx('menubar', className)}>\n {menus.map((menu) => {\n const isOpen = openId === menu.id;\n return (\n <div key={menu.id} className=\"menubar__menu\">\n <button\n type=\"button\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n className={cx('menubar__trigger', isOpen && 'is-open')}\n onClick={(e) => {\n if (isOpen) { setOpenId(null); return; }\n positionPanel(e.currentTarget);\n setOpenId(menu.id);\n }}\n onMouseEnter={(e) => {\n if (!openId) return;\n positionPanel(e.currentTarget);\n setOpenId(menu.id);\n }}\n >\n {menu.label}\n </button>\n {isOpen && typeof document !== 'undefined' && createPortal(\n <ul\n ref={panelRef}\n role=\"menu\"\n className=\"menubar__list\"\n style={coords ? { position: 'absolute', top: coords.top, left: coords.left } : { position: 'absolute', visibility: 'hidden' }}\n >\n {menu.items.map((item) =>\n item.separator ? (\n <li key={item.id} className=\"menubar__separator\" role=\"separator\" />\n ) : (\n <li key={item.id} role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n disabled={item.disabled}\n className={cx('menubar__item', item.disabled && 'is-disabled')}\n onClick={() => handleSelect(item)}\n >\n <span className=\"menubar__label\">{item.label}</span>\n {item.shortcut && <kbd className=\"menubar__shortcut\">{item.shortcut}</kbd>}\n </button>\n </li>\n )\n )}\n </ul>,\n document.body\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
|