@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,204 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk5VMZMDJF_js = require('./chunk-5VMZMDJF.js');
|
|
4
|
+
var chunkTEQ67JKX_js = require('./chunk-TEQ67JKX.js');
|
|
5
|
+
var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
|
|
6
|
+
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
function _interopNamespace(e) {
|
|
11
|
+
if (e && e.__esModule) return e;
|
|
12
|
+
var n = Object.create(null);
|
|
13
|
+
if (e) {
|
|
14
|
+
Object.keys(e).forEach(function (k) {
|
|
15
|
+
if (k !== 'default') {
|
|
16
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
17
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return e[k]; }
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
n.default = e;
|
|
25
|
+
return Object.freeze(n);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
29
|
+
|
|
30
|
+
function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }) {
|
|
31
|
+
const initialsName = typeof name === "string" ? name : void 0;
|
|
32
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("user-cell", className), ...rest, children: [
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5VMZMDJF_js.Avatar, { src: avatarSrc, alt: avatarAlt, name: initialsName, size }),
|
|
34
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "user-cell__body", children: [
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "user-cell__name", children: name }),
|
|
36
|
+
meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "user-cell__meta", children: meta })
|
|
37
|
+
] })
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
function StatusIndicator({ tone = "success", pulse, label, className, ...rest }) {
|
|
41
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: chunkPASF6T4H_js.cx("status-indicator", className), role: "status", ...rest, children: [
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkPASF6T4H_js.cx("status-indicator__dot", `status-indicator__dot--${tone}`, pulse && "is-pulsing"), "aria-hidden": "true" }),
|
|
43
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "status-indicator__label", children: label })
|
|
44
|
+
] });
|
|
45
|
+
}
|
|
46
|
+
var Timeline = React__namespace.forwardRef(
|
|
47
|
+
function Timeline2({ className, ...rest }, ref) {
|
|
48
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ol", { ref, className: chunkPASF6T4H_js.cx("timeline", className), ...rest });
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
function TimelineItem({ icon, tone = "neutral", title, meta, children, className, ...rest }) {
|
|
52
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: chunkPASF6T4H_js.cx("timeline__item", className), ...rest, children: [
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkPASF6T4H_js.cx("timeline__marker", `timeline__marker--${tone}`), "aria-hidden": "true", children: icon }),
|
|
54
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "timeline__body", children: [
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline__title", children: title }),
|
|
56
|
+
meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline__meta", children: meta }),
|
|
57
|
+
children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline__content", children })
|
|
58
|
+
] })
|
|
59
|
+
] });
|
|
60
|
+
}
|
|
61
|
+
function Tree({ nodes, defaultExpanded = [], selectedId, onSelect, className, ...rest }) {
|
|
62
|
+
const [expanded, setExpanded] = React__namespace.useState(new Set(defaultExpanded));
|
|
63
|
+
const toggle = (id) => {
|
|
64
|
+
setExpanded((curr) => {
|
|
65
|
+
const next = new Set(curr);
|
|
66
|
+
if (next.has(id)) next.delete(id);
|
|
67
|
+
else next.add(id);
|
|
68
|
+
return next;
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ul", { role: "tree", className: chunkPASF6T4H_js.cx("tree", className), ...rest, children: nodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(TreeNode, { node: n, depth: 0, expanded, toggle, selectedId, onSelect }, n.id)) });
|
|
72
|
+
}
|
|
73
|
+
function TreeNode({ node, depth, expanded, toggle, selectedId, onSelect }) {
|
|
74
|
+
const hasChildren = !!(node.children && node.children.length);
|
|
75
|
+
const isOpen = expanded.has(node.id);
|
|
76
|
+
const isSelected = selectedId === node.id;
|
|
77
|
+
const t = chunkTEQ67JKX_js.useLocale();
|
|
78
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("li", { role: "treeitem", "aria-expanded": hasChildren ? isOpen : void 0, "aria-selected": isSelected, className: "tree__node", children: [
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
className: chunkPASF6T4H_js.cx("tree__row", isSelected && "is-selected"),
|
|
83
|
+
style: { paddingLeft: `calc(var(--space-2) + var(--space-4) * ${depth})` },
|
|
84
|
+
onClick: () => onSelect?.(node.id),
|
|
85
|
+
children: [
|
|
86
|
+
hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
87
|
+
"button",
|
|
88
|
+
{
|
|
89
|
+
type: "button",
|
|
90
|
+
className: "tree__chev",
|
|
91
|
+
"aria-label": isOpen ? t["calendar.collapse"] : t["calendar.expand"],
|
|
92
|
+
onClick: (e) => {
|
|
93
|
+
e.stopPropagation();
|
|
94
|
+
toggle(node.id);
|
|
95
|
+
},
|
|
96
|
+
children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronDown, { size: 14 }) : /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronRight, { size: 14 })
|
|
97
|
+
}
|
|
98
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tree__chev tree__chev--placeholder", "aria-hidden": "true" }),
|
|
99
|
+
node.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tree__icon", "aria-hidden": "true", children: node.icon }),
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tree__label", children: node.label }),
|
|
101
|
+
node.meta && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tree__meta", children: node.meta })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
),
|
|
105
|
+
hasChildren && isOpen && /* @__PURE__ */ jsxRuntime.jsx("ul", { role: "group", className: "tree__children", children: node.children.map((c) => /* @__PURE__ */ jsxRuntime.jsx(TreeNode, { node: c, depth: depth + 1, expanded, toggle, selectedId, onSelect }, c.id)) })
|
|
106
|
+
] });
|
|
107
|
+
}
|
|
108
|
+
function startOfMonth(d) {
|
|
109
|
+
return new Date(d.getFullYear(), d.getMonth(), 1);
|
|
110
|
+
}
|
|
111
|
+
function addMonths(d, n) {
|
|
112
|
+
return new Date(d.getFullYear(), d.getMonth() + n, 1);
|
|
113
|
+
}
|
|
114
|
+
function isSameDay(a, b) {
|
|
115
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
116
|
+
}
|
|
117
|
+
function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, className, ...rest }) {
|
|
118
|
+
const [internalMonth, setInternalMonth] = React__namespace.useState(() => startOfMonth(monthProp ?? /* @__PURE__ */ new Date()));
|
|
119
|
+
const month = monthProp ? startOfMonth(monthProp) : internalMonth;
|
|
120
|
+
const t = chunkTEQ67JKX_js.useLocale();
|
|
121
|
+
const weekdays = t["calendar.weekdays"];
|
|
122
|
+
const months = t["calendar.months"];
|
|
123
|
+
const setMonth = (m) => {
|
|
124
|
+
if (!monthProp) setInternalMonth(m);
|
|
125
|
+
onMonthChange?.(m);
|
|
126
|
+
};
|
|
127
|
+
const today = /* @__PURE__ */ new Date();
|
|
128
|
+
const firstDay = startOfMonth(month);
|
|
129
|
+
const firstWeekday = (firstDay.getDay() + 6) % 7;
|
|
130
|
+
const gridStart = new Date(firstDay);
|
|
131
|
+
gridStart.setDate(firstDay.getDate() - firstWeekday);
|
|
132
|
+
const days = Array.from({ length: 42 }, (_, i) => {
|
|
133
|
+
const d = new Date(gridStart);
|
|
134
|
+
d.setDate(gridStart.getDate() + i);
|
|
135
|
+
return d;
|
|
136
|
+
});
|
|
137
|
+
const eventsByDay = React__namespace.useMemo(() => {
|
|
138
|
+
const m = /* @__PURE__ */ new Map();
|
|
139
|
+
for (const ev of events) {
|
|
140
|
+
const key = `${ev.date.getFullYear()}-${ev.date.getMonth()}-${ev.date.getDate()}`;
|
|
141
|
+
const list = m.get(key) ?? [];
|
|
142
|
+
list.push(ev);
|
|
143
|
+
m.set(key, list);
|
|
144
|
+
}
|
|
145
|
+
return m;
|
|
146
|
+
}, [events]);
|
|
147
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("calendar", className), ...rest, children: [
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "calendar__head", children: [
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "calendar__nav", "aria-label": t["calendar.prevMonth"], onClick: () => setMonth(addMonths(month, -1)), children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronRight, { size: 16, style: { transform: "rotate(180deg)" } }) }),
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "calendar__title", children: [
|
|
151
|
+
months[month.getMonth()],
|
|
152
|
+
" ",
|
|
153
|
+
month.getFullYear()
|
|
154
|
+
] }),
|
|
155
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "calendar__nav", "aria-label": t["calendar.nextMonth"], onClick: () => setMonth(addMonths(month, 1)), children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.ChevronRight, { size: 16 }) })
|
|
156
|
+
] }),
|
|
157
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "calendar__grid calendar__weekdays", children: weekdays.map((w) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "calendar__weekday", children: w }, w)) }),
|
|
158
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "calendar__grid", children: days.map((d, i) => {
|
|
159
|
+
const inMonth = d.getMonth() === month.getMonth();
|
|
160
|
+
const isToday = isSameDay(d, today);
|
|
161
|
+
const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;
|
|
162
|
+
const dayEvents = eventsByDay.get(key) ?? [];
|
|
163
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
164
|
+
"button",
|
|
165
|
+
{
|
|
166
|
+
type: "button",
|
|
167
|
+
className: chunkPASF6T4H_js.cx("calendar__day", !inMonth && "is-out", isToday && "is-today"),
|
|
168
|
+
onClick: () => onDayClick?.(d),
|
|
169
|
+
children: [
|
|
170
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "calendar__daynum", children: d.getDate() }),
|
|
171
|
+
dayEvents.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "calendar__events", children: [
|
|
172
|
+
dayEvents.slice(0, 2).map((ev, idx) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
173
|
+
"span",
|
|
174
|
+
{
|
|
175
|
+
className: chunkPASF6T4H_js.cx("calendar__event", `calendar__event--${ev.tone ?? "neutral"}`),
|
|
176
|
+
onClick: (e) => {
|
|
177
|
+
e.stopPropagation();
|
|
178
|
+
ev.onClick?.();
|
|
179
|
+
},
|
|
180
|
+
children: ev.label
|
|
181
|
+
},
|
|
182
|
+
idx
|
|
183
|
+
)),
|
|
184
|
+
dayEvents.length > 2 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "calendar__more", children: [
|
|
185
|
+
"+",
|
|
186
|
+
dayEvents.length - 2
|
|
187
|
+
] })
|
|
188
|
+
] })
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
i
|
|
192
|
+
);
|
|
193
|
+
}) })
|
|
194
|
+
] });
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
exports.Calendar = Calendar;
|
|
198
|
+
exports.StatusIndicator = StatusIndicator;
|
|
199
|
+
exports.Timeline = Timeline;
|
|
200
|
+
exports.TimelineItem = TimelineItem;
|
|
201
|
+
exports.Tree = Tree;
|
|
202
|
+
exports.UserCell = UserCell;
|
|
203
|
+
//# sourceMappingURL=chunk-LUXTZOTJ.js.map
|
|
204
|
+
//# sourceMappingURL=chunk-LUXTZOTJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Display3.tsx"],"names":["jsxs","cx","jsx","Avatar","React","Timeline","useLocale","ChevronDown","ChevronRight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,IAAA,GAAO,EAAA,EAAI,SAAA,EAAW,GAAG,IAAA,EAAK,EAAkB;AAC3G,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,MAAA;AACvD,EAAA,uBACEA,eAAA,CAAC,SAAI,SAAA,EAAWC,mBAAA,CAAG,aAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAC9C,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,2BAAO,GAAA,EAAK,SAAA,EAAW,KAAK,SAAA,EAAW,IAAA,EAAM,cAAc,IAAA,EAAY,CAAA;AAAA,oBACxEH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MACtC,IAAA,oBAAQA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAmB,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EAClD;AAAA,GAAA,EACF,CAAA;AAEJ;AAWO,SAAS,eAAA,CAAgB,EAAE,IAAA,GAAO,SAAA,EAAW,OAAO,KAAA,EAAO,SAAA,EAAW,GAAG,IAAA,EAAK,EAAyB;AAC5G,EAAA,uBACEF,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWC,mBAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA,EAAG,IAAA,EAAK,QAAA,EAAU,GAAG,IAAA,EACpE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWD,mBAAA,CAAG,uBAAA,EAAyB,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAI,KAAA,IAAS,YAAY,CAAA,EAAG,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,IACzH,KAAA,oBAASC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC7D,CAAA;AAEJ;AAKO,IAAM,QAAA,GAAiBE,gBAAA,CAAA,UAAA;AAAA,EAC5B,SAASC,SAAAA,CAAS,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC7C,IAAA,uBAAOH,cAAA,CAAC,QAAG,GAAA,EAAU,SAAA,EAAWD,oBAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EACvE;AACF;AASO,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,GAAO,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAsB;AACrH,EAAA,uBACED,eAAA,CAAC,QAAG,SAAA,EAAWC,mBAAA,CAAG,kBAAkB,SAAS,CAAA,EAAI,GAAG,IAAA,EAClD,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWD,mBAAA,CAAG,kBAAA,EAAoB,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE,CAAA,EAAG,aAAA,EAAY,MAAA,EAC/E,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,oBACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACvC,IAAA,oBAAQA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAkB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MAC9C,QAAA,oBAAYA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAqB,QAAA,EAAS;AAAA,KAAA,EAC5D;AAAA,GAAA,EACF,CAAA;AAEJ;AAkBO,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,GAAkB,EAAC,EAAG,UAAA,EAAY,QAAA,EAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAc;AACzG,EAAA,MAAM,CAAC,UAAU,WAAW,CAAA,GAAUE,0BAAsB,IAAI,GAAA,CAAI,eAAe,CAAC,CAAA;AACpF,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAe;AAC7B,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,WAAQ,IAAA,CAAK,IAAI,EAAE,CAAA;AACnD,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,uBACEF,cAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,MAAA,EAAO,SAAA,EAAWD,mBAAA,CAAG,MAAA,EAAQ,SAAS,CAAA,EAAI,GAAG,IAAA,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBACVC,cAAA,CAAC,QAAA,EAAA,EAAoB,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,QAAA,EAAoB,MAAA,EAAgB,UAAA,EAAwB,QAAA,EAAA,EAArF,CAAA,CAAE,EAAuG,CACzH,CAAA,EACH,CAAA;AAEJ;AAWA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,KAAA,EAAO,UAAU,MAAA,EAAQ,UAAA,EAAY,UAAS,EAAkB;AACxF,EAAA,MAAM,cAAc,CAAC,EAAE,IAAA,CAAK,QAAA,IAAY,KAAK,QAAA,CAAS,MAAA,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,eAAe,IAAA,CAAK,EAAA;AACvC,EAAA,MAAM,IAAII,0BAAA,EAAU;AACpB,EAAA,uBACEN,eAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,UAAA,EAAW,eAAA,EAAe,WAAA,GAAc,MAAA,GAAS,MAAA,EAAW,eAAA,EAAe,UAAA,EAAY,SAAA,EAAU,YAAA,EACxG,QAAA,EAAA;AAAA,oBAAAA,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,mBAAA,CAAG,WAAA,EAAa,UAAA,IAAc,aAAa,CAAA;AAAA,QACtD,KAAA,EAAO,EAAE,WAAA,EAAa,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAA,CAAA,EAAI;AAAA,QACzE,OAAA,EAAS,MAAM,QAAA,GAAW,IAAA,CAAK,EAAE,CAAA;AAAA,QAEhC,QAAA,EAAA;AAAA,UAAA,WAAA,mBACCC,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,YAAA;AAAA,cACV,cAAY,MAAA,GAAS,CAAA,CAAE,mBAAmB,CAAA,GAAI,EAAE,iBAAiB,CAAA;AAAA,cACjE,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,gBAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,cAAG,CAAA;AAAA,cAEvD,QAAA,EAAA,MAAA,kCAAUK,4BAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA,mBAAKL,cAAA,CAACM,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,8BAGhEN,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,eAAY,MAAA,EAAO,CAAA;AAAA,UAEzE,IAAA,CAAK,wBAAQA,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,YAAA,EAAa,aAAA,EAAY,MAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,0BACzEA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,eAAK,KAAA,EAAM,CAAA;AAAA,UACzC,KAAK,IAAA,oBAAQA,cAAA,CAAC,UAAK,SAAA,EAAU,YAAA,EAAc,eAAK,IAAA,EAAK;AAAA;AAAA;AAAA,KACxD;AAAA,IACC,WAAA,IAAe,MAAA,oBACdA,cAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,gBAAA,EACxB,QAAA,EAAA,IAAA,CAAK,QAAA,CAAU,GAAA,CAAI,CAAC,CAAA,qBACnBA,cAAA,CAAC,QAAA,EAAA,EAAoB,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,KAAA,GAAQ,CAAA,EAAG,QAAA,EAAoB,MAAA,EAAgB,UAAA,EAAwB,QAAA,EAAA,EAA7F,CAAA,CAAE,EAA+G,CACjI,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAkBA,SAAS,aAAa,CAAA,EAAS;AAAE,EAAA,OAAO,IAAI,KAAK,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,QAAA,IAAY,CAAC,CAAA;AAAG;AACpF,SAAS,SAAA,CAAU,GAAS,CAAA,EAAW;AAAE,EAAA,OAAO,IAAI,KAAK,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,QAAA,EAAS,GAAI,CAAA,EAAG,CAAC,CAAA;AAAG;AAChG,SAAS,SAAA,CAAU,GAAS,CAAA,EAAS;AACnC,EAAA,OAAO,EAAE,WAAA,EAAY,KAAM,CAAA,CAAE,WAAA,MAAiB,CAAA,CAAE,QAAA,EAAS,KAAM,CAAA,CAAE,UAAS,IAAK,CAAA,CAAE,OAAA,EAAQ,KAAM,EAAE,OAAA,EAAQ;AAC3G;AAEO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,GAAS,EAAC,EAAG,aAAA,EAAe,UAAA,EAAY,SAAA,EAAW,GAAG,IAAA,EAAK,EAAkB;AACxH,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUE,gBAAA,CAAA,QAAA,CAAS,MAAM,YAAA,CAAa,SAAA,oBAAa,IAAI,IAAA,EAAM,CAAC,CAAA;AACpG,EAAA,MAAM,KAAA,GAAQ,SAAA,GAAY,YAAA,CAAa,SAAS,CAAA,GAAI,aAAA;AACpD,EAAA,MAAM,IAAIE,0BAAA,EAAU;AACpB,EAAA,MAAM,QAAA,GAAW,EAAE,mBAAmB,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,EAAE,iBAAiB,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAY;AAC5B,IAAA,IAAI,CAAC,SAAA,EAAW,gBAAA,CAAiB,CAAC,CAAA;AAClC,IAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,KAAA,uBAAY,IAAA,EAAK;AAGvB,EAAA,MAAM,QAAA,GAAW,aAAa,KAAK,CAAA;AACnC,EAAA,MAAM,YAAA,GAAA,CAAgB,QAAA,CAAS,MAAA,EAAO,GAAI,CAAA,IAAK,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,QAAQ,CAAA;AACnC,EAAA,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,OAAA,EAAQ,GAAI,YAAY,CAAA;AAEnD,EAAA,MAAM,IAAA,GAAe,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACxD,IAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,SAAS,CAAA;AAC5B,IAAA,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,OAAA,EAAQ,GAAI,CAAC,CAAA;AACjC,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAoBF,yBAAQ,MAAM;AACtC,IAAA,MAAM,CAAA,uBAAQ,GAAA,EAA6B;AAC3C,IAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,EAAA,CAAG,IAAA,CAAK,aAAa,CAAA,CAAA,EAAI,EAAA,CAAG,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,EAAA,CAAG,IAAA,CAAK,SAAS,CAAA,CAAA;AAC/E,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,GAAG,KAAK,EAAC;AAC5B,MAAA,IAAA,CAAK,KAAK,EAAE,CAAA;AACZ,MAAA,CAAA,CAAE,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACEJ,eAAA,CAAC,SAAI,SAAA,EAAWC,mBAAA,CAAG,YAAY,SAAS,CAAA,EAAI,GAAG,IAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAE,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,YAAA,EAAY,CAAA,CAAE,oBAAoB,CAAA,EAAG,OAAA,EAAS,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,EAAE,CAAC,CAAA,EAC/H,QAAA,kBAAAA,cAAA,CAACM,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,gBAAA,EAAiB,EAAG,CAAA,EAClE,CAAA;AAAA,sBACAR,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAAA,QAAE,GAAA;AAAA,QAAE,MAAM,WAAA;AAAY,OAAA,EAAE,CAAA;AAAA,sBACjFE,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,eAAA,EAAgB,YAAA,EAAY,CAAA,CAAE,oBAAoB,CAAA,EAAG,OAAA,EAAS,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,CAAC,CAAC,GAC9H,QAAA,kBAAAA,cAAA,CAACM,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B;AAAA,KAAA,EACF,CAAA;AAAA,oBACAN,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,mBAAS,GAAA,CAAI,CAAC,CAAA,qBAAMA,cAAA,CAAC,SAAY,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,CAAA,EAAA,EAAlC,CAAoC,CAAM,CAAA,EAC3E,CAAA;AAAA,oBACAA,cAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EACZ,eAAK,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AAClB,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,QAAA,EAAS,KAAM,MAAM,QAAA,EAAS;AAChD,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AAClC,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,EAAI,CAAA,CAAE,QAAA,EAAU,CAAA,CAAA,EAAI,CAAA,CAAE,OAAA,EAAS,CAAA,CAAA;AAC7D,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,CAAI,GAAG,KAAK,EAAC;AAC3C,MAAA,uBACEF,eAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,WAAWC,mBAAA,CAAG,eAAA,EAAiB,CAAC,OAAA,IAAW,QAAA,EAAU,WAAW,UAAU,CAAA;AAAA,UAC1E,OAAA,EAAS,MAAM,UAAA,GAAa,CAAC,CAAA;AAAA,UAE7B,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,CAAA,CAAE,SAAQ,EAAE,CAAA;AAAA,YAC/C,UAAU,MAAA,GAAS,CAAA,oBAClBF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,cAAA,SAAA,CAAU,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,IAAI,GAAA,qBAC9BE,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBAEC,WAAWD,mBAAA,CAAG,iBAAA,EAAmB,oBAAoB,EAAA,CAAG,IAAA,IAAQ,SAAS,CAAA,CAAE,CAAA;AAAA,kBAC3E,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,oBAAA,EAAA,CAAG,OAAA,IAAU;AAAA,kBAAG,CAAA;AAAA,kBAEtD,QAAA,EAAA,EAAA,CAAG;AAAA,iBAAA;AAAA,gBAJC;AAAA,eAMR,CAAA;AAAA,cACA,UAAU,MAAA,GAAS,CAAA,oBAAKD,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EAAiB,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAE,UAAU,MAAA,GAAS;AAAA,eAAA,EAAE;AAAA,aAAA,EACnF;AAAA;AAAA,SAAA;AAAA,QAlBG;AAAA,OAoBP;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-LUXTZOTJ.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Avatar } from './Display2';\nimport { ChevronRight, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\n\n// ---------- UserCell ----------------------------------------------------\nexport interface UserCellProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n meta?: React.ReactNode; // role / email / etc.\n avatarSrc?: string;\n avatarAlt?: string;\n size?: 24 | 32 | 40 | 48;\n}\n\nexport function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }: UserCellProps) {\n const initialsName = typeof name === 'string' ? name : undefined;\n return (\n <div className={cx('user-cell', className)} {...rest}>\n <Avatar src={avatarSrc} alt={avatarAlt} name={initialsName} size={size} />\n <div className=\"user-cell__body\">\n <div className=\"user-cell__name\">{name}</div>\n {meta && <div className=\"user-cell__meta\">{meta}</div>}\n </div>\n </div>\n );\n}\n\n// ---------- StatusIndicator (pulsing dot) ------------------------------\nexport type StatusTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: StatusTone;\n pulse?: boolean;\n label?: React.ReactNode;\n}\n\nexport function StatusIndicator({ tone = 'success', pulse, label, className, ...rest }: StatusIndicatorProps) {\n return (\n <span className={cx('status-indicator', className)} role=\"status\" {...rest}>\n <span className={cx('status-indicator__dot', `status-indicator__dot--${tone}`, pulse && 'is-pulsing')} aria-hidden=\"true\" />\n {label && <span className=\"status-indicator__label\">{label}</span>}\n </span>\n );\n}\n\n// ---------- Timeline ----------------------------------------------------\nexport interface TimelineProps extends React.HTMLAttributes<HTMLOListElement> {}\n\nexport const Timeline = React.forwardRef<HTMLOListElement, TimelineProps>(\n function Timeline({ className, ...rest }, ref) {\n return <ol ref={ref} className={cx('timeline', className)} {...rest} />;\n }\n);\n\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'title'> {\n icon?: React.ReactNode;\n tone?: StatusTone;\n title: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport function TimelineItem({ icon, tone = 'neutral', title, meta, children, className, ...rest }: TimelineItemProps) {\n return (\n <li className={cx('timeline__item', className)} {...rest}>\n <span className={cx('timeline__marker', `timeline__marker--${tone}`)} aria-hidden=\"true\">\n {icon}\n </span>\n <div className=\"timeline__body\">\n <div className=\"timeline__title\">{title}</div>\n {meta && <div className=\"timeline__meta\">{meta}</div>}\n {children && <div className=\"timeline__content\">{children}</div>}\n </div>\n </li>\n );\n}\n\n// ---------- Tree --------------------------------------------------------\nexport interface TreeNodeData {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n children?: TreeNodeData[];\n meta?: React.ReactNode;\n}\n\nexport interface TreeProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n nodes: TreeNodeData[];\n defaultExpanded?: string[];\n selectedId?: string;\n onSelect?: (id: string) => void;\n}\n\nexport function Tree({ nodes, defaultExpanded = [], selectedId, onSelect, className, ...rest }: TreeProps) {\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set(defaultExpanded));\n const toggle = (id: string) => {\n setExpanded((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id); else next.add(id);\n return next;\n });\n };\n return (\n <ul role=\"tree\" className={cx('tree', className)} {...rest}>\n {nodes.map((n) => (\n <TreeNode key={n.id} node={n} depth={0} expanded={expanded} toggle={toggle} selectedId={selectedId} onSelect={onSelect} />\n ))}\n </ul>\n );\n}\n\ninterface TreeNodeProps {\n node: TreeNodeData;\n depth: number;\n expanded: Set<string>;\n toggle: (id: string) => void;\n selectedId?: string;\n onSelect?: (id: string) => void;\n}\n\nfunction TreeNode({ node, depth, expanded, toggle, selectedId, onSelect }: TreeNodeProps) {\n const hasChildren = !!(node.children && node.children.length);\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const t = useLocale();\n return (\n <li role=\"treeitem\" aria-expanded={hasChildren ? isOpen : undefined} aria-selected={isSelected} className=\"tree__node\">\n <div\n className={cx('tree__row', isSelected && 'is-selected')}\n style={{ paddingLeft: `calc(var(--space-2) + var(--space-4) * ${depth})` }}\n onClick={() => onSelect?.(node.id)}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"tree__chev\"\n aria-label={isOpen ? t['calendar.collapse'] : t['calendar.expand']}\n onClick={(e) => { e.stopPropagation(); toggle(node.id); }}\n >\n {isOpen ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </button>\n ) : (\n <span className=\"tree__chev tree__chev--placeholder\" aria-hidden=\"true\" />\n )}\n {node.icon && <span className=\"tree__icon\" aria-hidden=\"true\">{node.icon}</span>}\n <span className=\"tree__label\">{node.label}</span>\n {node.meta && <span className=\"tree__meta\">{node.meta}</span>}\n </div>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"tree__children\">\n {node.children!.map((c) => (\n <TreeNode key={c.id} node={c} depth={depth + 1} expanded={expanded} toggle={toggle} selectedId={selectedId} onSelect={onSelect} />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\n// ---------- Calendar (vista mes completa, no picker) -------------------\nexport interface CalendarEvent {\n date: Date;\n label: React.ReactNode;\n tone?: StatusTone;\n onClick?: () => void;\n}\n\nexport interface CalendarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Mes a mostrar. Default: mes actual. */\n month?: Date;\n events?: CalendarEvent[];\n onMonthChange?: (m: Date) => void;\n onDayClick?: (d: Date) => void;\n}\n\nfunction startOfMonth(d: Date) { return new Date(d.getFullYear(), d.getMonth(), 1); }\nfunction addMonths(d: Date, n: number) { return new Date(d.getFullYear(), d.getMonth() + n, 1); }\nfunction isSameDay(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nexport function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, className, ...rest }: CalendarProps) {\n const [internalMonth, setInternalMonth] = React.useState(() => startOfMonth(monthProp ?? new Date()));\n const month = monthProp ? startOfMonth(monthProp) : internalMonth;\n const t = useLocale();\n const weekdays = t['calendar.weekdays'];\n const months = t['calendar.months'];\n const setMonth = (m: Date) => {\n if (!monthProp) setInternalMonth(m);\n onMonthChange?.(m);\n };\n\n const today = new Date();\n\n // primer día visible: lunes anterior al primer día del mes\n const firstDay = startOfMonth(month);\n const firstWeekday = (firstDay.getDay() + 6) % 7; // domingo=0 → 6, lunes=1 → 0\n const gridStart = new Date(firstDay);\n gridStart.setDate(firstDay.getDate() - firstWeekday);\n\n const days: Date[] = Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n\n const eventsByDay = React.useMemo(() => {\n const m = new Map<string, CalendarEvent[]>();\n for (const ev of events) {\n const key = `${ev.date.getFullYear()}-${ev.date.getMonth()}-${ev.date.getDate()}`;\n const list = m.get(key) ?? [];\n list.push(ev);\n m.set(key, list);\n }\n return m;\n }, [events]);\n\n return (\n <div className={cx('calendar', className)} {...rest}>\n <div className=\"calendar__head\">\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.prevMonth']} onClick={() => setMonth(addMonths(month, -1))}>\n <ChevronRight size={16} style={{ transform: 'rotate(180deg)' }} />\n </button>\n <div className=\"calendar__title\">{months[month.getMonth()]} {month.getFullYear()}</div>\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.nextMonth']} onClick={() => setMonth(addMonths(month, 1))}>\n <ChevronRight size={16} />\n </button>\n </div>\n <div className=\"calendar__grid calendar__weekdays\">\n {weekdays.map((w) => <div key={w} className=\"calendar__weekday\">{w}</div>)}\n </div>\n <div className=\"calendar__grid\">\n {days.map((d, i) => {\n const inMonth = d.getMonth() === month.getMonth();\n const isToday = isSameDay(d, today);\n const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n const dayEvents = eventsByDay.get(key) ?? [];\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('calendar__day', !inMonth && 'is-out', isToday && 'is-today')}\n onClick={() => onDayClick?.(d)}\n >\n <span className=\"calendar__daynum\">{d.getDate()}</span>\n {dayEvents.length > 0 && (\n <div className=\"calendar__events\">\n {dayEvents.slice(0, 2).map((ev, idx) => (\n <span\n key={idx}\n className={cx('calendar__event', `calendar__event--${ev.tone ?? 'neutral'}`)}\n onClick={(e) => { e.stopPropagation(); ev.onClick?.(); }}\n >\n {ev.label}\n </span>\n ))}\n {dayEvents.length > 2 && <span className=\"calendar__more\">+{dayEvents.length - 2}</span>}\n </div>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var ResizableContext = React.createContext(null);
|
|
6
|
+
function ResizableGroup({ direction = "horizontal", className, children, ariaLabel }) {
|
|
7
|
+
const containerRef = React.useRef(null);
|
|
8
|
+
const [sizes, setSizes] = React.useState({});
|
|
9
|
+
const minsRef = React.useRef({});
|
|
10
|
+
const orderRef = React.useRef([]);
|
|
11
|
+
const registerPanel = React.useCallback((id, defaultSize, minSize) => {
|
|
12
|
+
minsRef.current[id] = minSize;
|
|
13
|
+
setSizes((s) => s[id] !== void 0 ? s : { ...s, [id]: defaultSize });
|
|
14
|
+
if (!orderRef.current.includes(id)) orderRef.current = [...orderRef.current, id];
|
|
15
|
+
}, []);
|
|
16
|
+
const startDrag = (panelId, e) => {
|
|
17
|
+
e.preventDefault();
|
|
18
|
+
const idx = orderRef.current.indexOf(panelId);
|
|
19
|
+
const nextId = orderRef.current[idx + 1];
|
|
20
|
+
if (!nextId || !containerRef.current) return;
|
|
21
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
22
|
+
const total = direction === "horizontal" ? rect.width : rect.height;
|
|
23
|
+
const startSize = sizes[panelId] ?? 0;
|
|
24
|
+
const startNextSize = sizes[nextId] ?? 0;
|
|
25
|
+
const startCoord = direction === "horizontal" ? e.clientX : e.clientY;
|
|
26
|
+
const onMove = (ev) => {
|
|
27
|
+
const coord = direction === "horizontal" ? ev.clientX : ev.clientY;
|
|
28
|
+
const deltaPx = coord - startCoord;
|
|
29
|
+
const deltaPct = deltaPx / total * 100;
|
|
30
|
+
const minA = minsRef.current[panelId] ?? 5;
|
|
31
|
+
const minB = minsRef.current[nextId] ?? 5;
|
|
32
|
+
const newA = Math.max(minA, Math.min(startSize + startNextSize - minB, startSize + deltaPct));
|
|
33
|
+
const newB = startSize + startNextSize - newA;
|
|
34
|
+
setSizes((s) => ({ ...s, [panelId]: newA, [nextId]: newB }));
|
|
35
|
+
};
|
|
36
|
+
const onUp = () => {
|
|
37
|
+
window.removeEventListener("pointermove", onMove);
|
|
38
|
+
window.removeEventListener("pointerup", onUp);
|
|
39
|
+
};
|
|
40
|
+
window.addEventListener("pointermove", onMove);
|
|
41
|
+
window.addEventListener("pointerup", onUp);
|
|
42
|
+
};
|
|
43
|
+
return /* @__PURE__ */ jsx(ResizableContext.Provider, { value: { direction, registerPanel, sizes, startDrag }, children: /* @__PURE__ */ jsx(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
ref: containerRef,
|
|
47
|
+
role: "group",
|
|
48
|
+
"aria-label": ariaLabel,
|
|
49
|
+
className: cx("resizable", `resizable--${direction}`, className),
|
|
50
|
+
children
|
|
51
|
+
}
|
|
52
|
+
) });
|
|
53
|
+
}
|
|
54
|
+
function ResizablePanel({ id, defaultSize = 50, minSize = 10, className, children }) {
|
|
55
|
+
const ctx = React.useContext(ResizableContext);
|
|
56
|
+
if (!ctx) throw new Error("ResizablePanel must be inside ResizableGroup");
|
|
57
|
+
React.useEffect(() => {
|
|
58
|
+
ctx.registerPanel(id, defaultSize, minSize);
|
|
59
|
+
}, [id, defaultSize, minSize, ctx]);
|
|
60
|
+
const size = ctx.sizes[id] ?? defaultSize;
|
|
61
|
+
const sizeStyle = ctx.direction === "horizontal" ? { width: `${size}%` } : { height: `${size}%` };
|
|
62
|
+
return /* @__PURE__ */ jsx("div", { className: cx("resizable__panel", className), style: sizeStyle, children });
|
|
63
|
+
}
|
|
64
|
+
function ResizableHandle({ panelId, className, ariaLabel = "Redimensionar" }) {
|
|
65
|
+
const ctx = React.useContext(ResizableContext);
|
|
66
|
+
if (!ctx) throw new Error("ResizableHandle must be inside ResizableGroup");
|
|
67
|
+
return /* @__PURE__ */ jsx(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
role: "separator",
|
|
71
|
+
tabIndex: 0,
|
|
72
|
+
"aria-orientation": ctx.direction === "horizontal" ? "vertical" : "horizontal",
|
|
73
|
+
"aria-label": ariaLabel,
|
|
74
|
+
className: cx("resizable__handle", `resizable__handle--${ctx.direction}`, className),
|
|
75
|
+
onPointerDown: (e) => ctx.startDrag(panelId, e)
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export { ResizableGroup, ResizableHandle, ResizablePanel };
|
|
81
|
+
//# sourceMappingURL=chunk-ML5IYW5D.mjs.map
|
|
82
|
+
//# sourceMappingURL=chunk-ML5IYW5D.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Resizable.tsx"],"names":[],"mappings":";;;;AAYA,IAAM,gBAAA,GAAyB,oBAA4C,IAAI,CAAA;AASxE,SAAS,eAAe,EAAE,SAAA,GAAY,cAAc,SAAA,EAAW,QAAA,EAAU,WAAU,EAAwB;AAChH,EAAA,MAAM,YAAA,GAAqB,aAAuB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,KAAA,CAAA,QAAA,CAAiC,EAAE,CAAA;AACnE,EAAA,MAAM,OAAA,GAAgB,KAAA,CAAA,MAAA,CAA+B,EAAE,CAAA;AACvD,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,MAAA,CAAiB,EAAE,CAAA;AAE1C,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA,CAAY,CAAC,EAAA,EAAY,aAAqB,OAAA,KAAoB;AAC5F,IAAA,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAA,GAAI,OAAA;AACtB,IAAA,QAAA,CAAS,CAAC,CAAA,KAAO,CAAA,CAAE,EAAE,MAAM,MAAA,GAAY,CAAA,GAAI,EAAE,GAAG,CAAA,EAAG,CAAC,EAAE,GAAG,aAAc,CAAA;AACvE,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAA,EAAG,QAAA,CAAS,OAAA,GAAU,CAAC,GAAG,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAAA,EACjF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAAiB,CAAA,KAA0B;AAC5D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,GAAM,CAAC,CAAA;AACvC,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,CAAa,OAAA,EAAS;AAEtC,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AACxD,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,YAAA,GAAe,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAA;AAC7D,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAO,CAAA,IAAK,CAAA;AACpC,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAM,CAAA,IAAK,CAAA;AACvC,IAAA,MAAM,UAAA,GAAa,SAAA,KAAc,YAAA,GAAe,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AAE9D,IAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAqB;AACnC,MAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,YAAA,GAAe,EAAA,CAAG,UAAU,EAAA,CAAG,OAAA;AAC3D,MAAA,MAAM,UAAU,KAAA,GAAQ,UAAA;AACxB,MAAA,MAAM,QAAA,GAAY,UAAU,KAAA,GAAS,GAAA;AACrC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,IAAK,CAAA;AACzC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,IAAK,CAAA;AACxC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,SAAA,GAAY,aAAA,GAAgB,IAAA,EAAM,SAAA,GAAY,QAAQ,CAAC,CAAA;AAC5F,MAAA,MAAM,IAAA,GAAO,YAAY,aAAA,GAAgB,IAAA;AACzC,MAAA,QAAA,CAAS,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,OAAO,GAAG,IAAA,EAAM,CAAC,MAAM,GAAG,MAAK,CAAE,CAAA;AAAA,IAC7D,CAAA;AACA,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,MAAM,CAAA;AAChD,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,IAAI,CAAA;AAAA,IAC9C,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,MAAM,CAAA;AAC7C,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,IAAI,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,EAAE,SAAA,EAAW,aAAA,EAAe,KAAA,EAAO,SAAA,EAAU,EAC7E,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,WAAW,EAAA,CAAG,WAAA,EAAa,CAAA,WAAA,EAAc,SAAS,IAAI,SAAS,CAAA;AAAA,MAE9D;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAUO,SAAS,cAAA,CAAe,EAAE,EAAA,EAAI,WAAA,GAAc,IAAI,OAAA,GAAU,EAAA,EAAI,SAAA,EAAW,QAAA,EAAS,EAAwB;AAC/G,EAAA,MAAM,GAAA,GAAY,iBAAW,gBAAgB,CAAA;AAC7C,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAExE,EAAM,gBAAU,MAAM;AACpB,IAAA,GAAA,CAAI,aAAA,CAAc,EAAA,EAAI,WAAA,EAAa,OAAO,CAAA;AAAA,EAC5C,GAAG,CAAC,EAAA,EAAI,WAAA,EAAa,OAAA,EAAS,GAAG,CAAC,CAAA;AAElC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,IAAK,WAAA;AAC9B,EAAA,MAAM,SAAA,GACJ,GAAA,CAAI,SAAA,KAAc,YAAA,GAAe,EAAE,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA,EAAI,GAAI,EAAE,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA,EAAI;AAEhF,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,oBAAoB,SAAS,CAAA,EAAG,KAAA,EAAO,SAAA,EACvD,QAAA,EACH,CAAA;AAEJ;AAQO,SAAS,gBAAgB,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,GAAY,iBAAgB,EAAyB;AACzG,EAAA,MAAM,GAAA,GAAY,iBAAW,gBAAgB,CAAA;AAC7C,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,+CAA+C,CAAA;AACzE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,WAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,kBAAA,EAAkB,GAAA,CAAI,SAAA,KAAc,YAAA,GAAe,UAAA,GAAa,YAAA;AAAA,MAChE,YAAA,EAAY,SAAA;AAAA,MACZ,WAAW,EAAA,CAAG,mBAAA,EAAqB,sBAAsB,GAAA,CAAI,SAAS,IAAI,SAAS,CAAA;AAAA,MACnF,eAAe,CAAC,CAAA,KAAM,GAAA,CAAI,SAAA,CAAU,SAAS,CAAC;AAAA;AAAA,GAChD;AAEJ","file":"chunk-ML5IYW5D.mjs","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,88 @@
|
|
|
1
|
+
import { cx } from './chunk-IEPCH3JB.mjs';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function HoverCard({
|
|
7
|
+
trigger,
|
|
8
|
+
children,
|
|
9
|
+
placement = "bottom",
|
|
10
|
+
openDelay = 250,
|
|
11
|
+
closeDelay = 150,
|
|
12
|
+
offset = 8,
|
|
13
|
+
className,
|
|
14
|
+
contentClassName
|
|
15
|
+
}) {
|
|
16
|
+
const [open, setOpen] = React.useState(false);
|
|
17
|
+
const [coords, setCoords] = React.useState(null);
|
|
18
|
+
const triggerRef = React.useRef(null);
|
|
19
|
+
const contentRef = React.useRef(null);
|
|
20
|
+
const openTimer = React.useRef(null);
|
|
21
|
+
const closeTimer = React.useRef(null);
|
|
22
|
+
const clear = () => {
|
|
23
|
+
if (openTimer.current) clearTimeout(openTimer.current);
|
|
24
|
+
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
25
|
+
};
|
|
26
|
+
const onEnter = () => {
|
|
27
|
+
clear();
|
|
28
|
+
openTimer.current = setTimeout(() => setOpen(true), openDelay);
|
|
29
|
+
};
|
|
30
|
+
const onLeave = () => {
|
|
31
|
+
clear();
|
|
32
|
+
closeTimer.current = setTimeout(() => setOpen(false), closeDelay);
|
|
33
|
+
};
|
|
34
|
+
React.useEffect(() => () => clear(), []);
|
|
35
|
+
React.useEffect(() => {
|
|
36
|
+
if (!open || !triggerRef.current || !contentRef.current) return;
|
|
37
|
+
const t = triggerRef.current.getBoundingClientRect();
|
|
38
|
+
const c = contentRef.current.getBoundingClientRect();
|
|
39
|
+
let top = 0;
|
|
40
|
+
let left = 0;
|
|
41
|
+
if (placement === "bottom") {
|
|
42
|
+
top = t.bottom + offset;
|
|
43
|
+
left = t.left + (t.width - c.width) / 2;
|
|
44
|
+
} else if (placement === "top") {
|
|
45
|
+
top = t.top - c.height - offset;
|
|
46
|
+
left = t.left + (t.width - c.width) / 2;
|
|
47
|
+
} else if (placement === "right") {
|
|
48
|
+
left = t.right + offset;
|
|
49
|
+
top = t.top + (t.height - c.height) / 2;
|
|
50
|
+
} else {
|
|
51
|
+
left = t.left - c.width - offset;
|
|
52
|
+
top = t.top + (t.height - c.height) / 2;
|
|
53
|
+
}
|
|
54
|
+
left = Math.max(8, Math.min(left, window.innerWidth - c.width - 8));
|
|
55
|
+
top = Math.max(8, Math.min(top, window.innerHeight - c.height - 8));
|
|
56
|
+
setCoords({ top: top + window.scrollY, left: left + window.scrollX });
|
|
57
|
+
}, [open, placement, offset]);
|
|
58
|
+
const panel = open && /* @__PURE__ */ jsx(
|
|
59
|
+
"div",
|
|
60
|
+
{
|
|
61
|
+
ref: contentRef,
|
|
62
|
+
role: "tooltip",
|
|
63
|
+
className: cx("hover-card__content", contentClassName),
|
|
64
|
+
style: coords ? { position: "absolute", top: coords.top, left: coords.left } : { position: "absolute", visibility: "hidden" },
|
|
65
|
+
onMouseEnter: onEnter,
|
|
66
|
+
onMouseLeave: onLeave,
|
|
67
|
+
children
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
return /* @__PURE__ */ jsxs(
|
|
71
|
+
"span",
|
|
72
|
+
{
|
|
73
|
+
className: cx("hover-card", className),
|
|
74
|
+
onMouseEnter: onEnter,
|
|
75
|
+
onMouseLeave: onLeave,
|
|
76
|
+
onFocus: onEnter,
|
|
77
|
+
onBlur: onLeave,
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ jsx("span", { ref: triggerRef, className: "hover-card__trigger", children: trigger }),
|
|
80
|
+
panel && typeof document !== "undefined" && createPortal(panel, document.body)
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { HoverCard };
|
|
87
|
+
//# sourceMappingURL=chunk-NLCKWF3Y.mjs.map
|
|
88
|
+
//# sourceMappingURL=chunk-NLCKWF3Y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/HoverCard.tsx"],"names":[],"mappings":"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","file":"chunk-NLCKWF3Y.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cx } from '../utils/cx';\n\nexport type HoverCardPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface HoverCardProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n placement?: HoverCardPlacement;\n openDelay?: number;\n closeDelay?: number;\n offset?: number;\n className?: string;\n contentClassName?: string;\n}\n\nexport function HoverCard({\n trigger,\n children,\n placement = 'bottom',\n openDelay = 250,\n closeDelay = 150,\n offset = 8,\n className,\n contentClassName,\n}: HoverCardProps) {\n const [open, setOpen] = React.useState(false);\n const [coords, setCoords] = React.useState<{ top: number; left: number } | null>(null);\n const triggerRef = React.useRef<HTMLSpanElement>(null);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n };\n\n const onEnter = () => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n };\n const onLeave = () => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n };\n\n React.useEffect(() => () => clear(), []);\n\n React.useEffect(() => {\n if (!open || !triggerRef.current || !contentRef.current) return;\n const t = triggerRef.current.getBoundingClientRect();\n const c = contentRef.current.getBoundingClientRect();\n let top = 0;\n let left = 0;\n if (placement === 'bottom') { top = t.bottom + offset; left = t.left + (t.width - c.width) / 2; }\n else if (placement === 'top') { top = t.top - c.height - offset; left = t.left + (t.width - c.width) / 2; }\n else if (placement === 'right') { left = t.right + offset; top = t.top + (t.height - c.height) / 2; }\n else { left = t.left - c.width - offset; top = t.top + (t.height - c.height) / 2; }\n left = Math.max(8, Math.min(left, window.innerWidth - c.width - 8));\n top = Math.max(8, Math.min(top, window.innerHeight - c.height - 8));\n setCoords({ top: top + window.scrollY, left: left + window.scrollX });\n }, [open, placement, offset]);\n\n const panel = open && (\n <div\n ref={contentRef}\n role=\"tooltip\"\n className={cx('hover-card__content', contentClassName)}\n style={coords ? { position: 'absolute', top: coords.top, left: coords.left } : { position: 'absolute', visibility: 'hidden' }}\n onMouseEnter={onEnter}\n onMouseLeave={onLeave}\n >\n {children}\n </div>\n );\n\n return (\n <span\n className={cx('hover-card', className)}\n onMouseEnter={onEnter}\n onMouseLeave={onLeave}\n onFocus={onEnter}\n onBlur={onLeave}\n >\n <span ref={triggerRef} className=\"hover-card__trigger\">{trigger}</span>\n {panel && typeof document !== 'undefined' && createPortal(panel, document.body)}\n </span>\n );\n}\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk3PXYCXDW_js = require('./chunk-3PXYCXDW.js');
|
|
4
|
+
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
5
|
+
var React = require('react');
|
|
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
|
+
var PREFERRED_FORMAT = {
|
|
29
|
+
horizontal: "svg",
|
|
30
|
+
vertical: "svg",
|
|
31
|
+
mark: "svg",
|
|
32
|
+
wordmark: "svg"
|
|
33
|
+
};
|
|
34
|
+
var DEFAULT_HEIGHT = {
|
|
35
|
+
horizontal: 32,
|
|
36
|
+
vertical: 64,
|
|
37
|
+
mark: 32,
|
|
38
|
+
wordmark: 28
|
|
39
|
+
};
|
|
40
|
+
function buildPath(variant, bg, format, basePath) {
|
|
41
|
+
const prefix = variant === "horizontal" || variant === "vertical" ? "logo-" : "";
|
|
42
|
+
return `${basePath}/${prefix}${variant}-${bg}.${format}`;
|
|
43
|
+
}
|
|
44
|
+
var Logo = React__namespace.forwardRef(function Logo2({
|
|
45
|
+
variant = "mark",
|
|
46
|
+
bg = "light",
|
|
47
|
+
format,
|
|
48
|
+
responsive,
|
|
49
|
+
basePath,
|
|
50
|
+
height,
|
|
51
|
+
alt,
|
|
52
|
+
brandName,
|
|
53
|
+
className,
|
|
54
|
+
...rest
|
|
55
|
+
}, ref) {
|
|
56
|
+
const brand = chunk3PXYCXDW_js.getBrand();
|
|
57
|
+
const resolvedBasePath = basePath ?? brand.logoBasePath;
|
|
58
|
+
const resolvedBrandName = brandName ?? brand.name;
|
|
59
|
+
const fmt = format ?? PREFERRED_FORMAT[variant];
|
|
60
|
+
const h = height ?? DEFAULT_HEIGHT[variant];
|
|
61
|
+
const a = alt ?? resolvedBrandName;
|
|
62
|
+
const desktopSrc = buildPath(variant, bg, fmt, resolvedBasePath);
|
|
63
|
+
if (responsive && variant !== "mark") {
|
|
64
|
+
const mobileFmt = format ?? PREFERRED_FORMAT.mark;
|
|
65
|
+
const mobileSrc = buildPath("mark", bg, mobileFmt, resolvedBasePath);
|
|
66
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("picture", { className: chunkPASF6T4H_js.cx("logo", className), children: [
|
|
67
|
+
/* @__PURE__ */ jsxRuntime.jsx("source", { media: "(min-width: 768px)", srcSet: desktopSrc }),
|
|
68
|
+
/* @__PURE__ */ jsxRuntime.jsx("img", { ref, src: mobileSrc, alt: a, height: h, ...rest })
|
|
69
|
+
] });
|
|
70
|
+
}
|
|
71
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
72
|
+
"img",
|
|
73
|
+
{
|
|
74
|
+
ref,
|
|
75
|
+
src: desktopSrc,
|
|
76
|
+
alt: a,
|
|
77
|
+
height: h,
|
|
78
|
+
className: chunkPASF6T4H_js.cx("logo", className),
|
|
79
|
+
...rest
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
exports.Logo = Logo;
|
|
85
|
+
//# sourceMappingURL=chunk-NU4GAGUV.js.map
|
|
86
|
+
//# sourceMappingURL=chunk-NU4GAGUV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Logo.tsx"],"names":["React","Logo","getBrand","cx","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAM,gBAAA,GAAoD;AAAA,EACxD,UAAA,EAAY,KAAA;AAAA,EACZ,QAAA,EAAU,KAAA;AAAA,EACV,IAAA,EAAM,KAAA;AAAA,EACN,QAAA,EAAU;AACZ,CAAA;AAGA,IAAM,cAAA,GAA8C;AAAA,EAClD,UAAA,EAAY,EAAA;AAAA,EACZ,QAAA,EAAU,EAAA;AAAA,EACV,IAAA,EAAM,EAAA;AAAA,EACN,QAAA,EAAU;AACZ,CAAA;AAEA,SAAS,SAAA,CACP,OAAA,EACA,EAAA,EACA,MAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,OAAA,KAAY,YAAA,IAAgB,OAAA,KAAY,aAAa,OAAA,GAAU,EAAA;AAC9E,EAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AACxD;AAiCO,IAAM,IAAA,GAAaA,gBAAA,CAAA,UAAA,CAAwC,SAASC,KAAAA,CACzE;AAAA,EACE,OAAA,GAAU,MAAA;AAAA,EACV,EAAA,GAAK,OAAA;AAAA,EACL,MAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,QAAQC,yBAAA,EAAS;AACvB,EAAA,MAAM,gBAAA,GAAmB,YAAY,KAAA,CAAM,YAAA;AAC3C,EAAA,MAAM,iBAAA,GAAoB,aAAa,KAAA,CAAM,IAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,MAAA,IAAU,gBAAA,CAAiB,OAAO,CAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,MAAA,IAAU,cAAA,CAAe,OAAO,CAAA;AAC1C,EAAA,MAAM,IAAI,GAAA,IAAO,iBAAA;AACjB,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,OAAA,EAAS,EAAA,EAAI,KAAK,gBAAgB,CAAA;AAE/D,EAAA,IAAI,UAAA,IAAc,YAAY,MAAA,EAAQ;AACpC,IAAA,MAAM,SAAA,GAAY,UAAU,gBAAA,CAAiB,IAAA;AAC7C,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,MAAA,EAAQ,EAAA,EAAI,WAAW,gBAAgB,CAAA;AACnE,IAAA,uCACG,SAAA,EAAA,EAAQ,SAAA,EAAWC,mBAAA,CAAG,MAAA,EAAQ,SAAS,CAAA,EACtC,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,oBAAA,EAAqB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,sBACvDA,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,GAAA,EAAK,SAAA,EAAW,KAAK,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAI,GAAG,IAAA,EAAM;AAAA,KAAA,EAC9D,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,GAAA,EAAK,UAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,MAAA,EAAQ,CAAA;AAAA,MACR,SAAA,EAAWD,mBAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC9B,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-NU4GAGUV.js","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { getBrand } from '../brand';\n\nexport type LogoVariant = 'horizontal' | 'vertical' | 'mark' | 'wordmark';\nexport type LogoBg = 'light' | 'dark';\nexport type LogoFormat = 'svg' | 'png';\n\n/** Formato preferido por variante. SVG en todas las variantes (mejor escalado y peso). */\nconst PREFERRED_FORMAT: Record<LogoVariant, LogoFormat> = {\n horizontal: 'svg',\n vertical: 'svg',\n mark: 'svg',\n wordmark: 'svg',\n};\n\n/** Altura razonable por defecto según la forma de la variante. */\nconst DEFAULT_HEIGHT: Record<LogoVariant, number> = {\n horizontal: 32,\n vertical: 64,\n mark: 32,\n wordmark: 28,\n};\n\nfunction buildPath(\n variant: LogoVariant,\n bg: LogoBg,\n format: LogoFormat,\n basePath: string\n) {\n const prefix = variant === 'horizontal' || variant === 'vertical' ? 'logo-' : '';\n return `${basePath}/${prefix}${variant}-${bg}.${format}`;\n}\n\nexport interface LogoProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> {\n /** Forma del logo. Default: `mark` (isotipo). */\n variant?: LogoVariant;\n /** Color del fondo donde se va a pintar. Define si usar la versión normal o invertida. Default: `light`. */\n bg?: LogoBg;\n /** Forza el formato (svg|png). Por defecto se usa el preferido por variante. */\n format?: LogoFormat;\n /**\n * Si `true`, usa `mark` en mobile (<768px) y `variant` en desktop.\n * Útil para AppShell / topbars / headers que se vuelven angostos.\n */\n responsive?: boolean;\n /** Base URL donde están los assets. Default desde `getBrand().logoBasePath`. */\n basePath?: string;\n /** Altura en px. Default depende de la variante (mark: 32, horizontal: 32, vertical: 64, wordmark: 28). */\n height?: number;\n /** Texto alternativo (a11y). Default: el `brandName`. */\n alt?: string;\n /** Nombre de la marca; fallback de `alt`. Default desde `getBrand().name`. */\n brandName?: string;\n}\n\n/**\n * Componente Logo unificado para todas las variantes (horizontal, vertical, mark, wordmark)\n * con soporte responsive (`mark` en mobile, variante elegida en desktop).\n *\n * @example\n * <Logo variant=\"horizontal\" bg=\"light\" />\n * <Logo responsive variant=\"horizontal\" bg=\"light\" /> // mark en mobile, horizontal en desktop\n * <Logo variant=\"mark\" bg=\"dark\" height={48} />\n */\nexport const Logo = React.forwardRef<HTMLImageElement, LogoProps>(function Logo(\n {\n variant = 'mark',\n bg = 'light',\n format,\n responsive,\n basePath,\n height,\n alt,\n brandName,\n className,\n ...rest\n },\n ref\n) {\n const brand = getBrand();\n const resolvedBasePath = basePath ?? brand.logoBasePath;\n const resolvedBrandName = brandName ?? brand.name;\n const fmt = format ?? PREFERRED_FORMAT[variant];\n const h = height ?? DEFAULT_HEIGHT[variant];\n const a = alt ?? resolvedBrandName;\n const desktopSrc = buildPath(variant, bg, fmt, resolvedBasePath);\n\n if (responsive && variant !== 'mark') {\n const mobileFmt = format ?? PREFERRED_FORMAT.mark;\n const mobileSrc = buildPath('mark', bg, mobileFmt, resolvedBasePath);\n return (\n <picture className={cx('logo', className)}>\n <source media=\"(min-width: 768px)\" srcSet={desktopSrc} />\n <img ref={ref} src={mobileSrc} alt={a} height={h} {...rest} />\n </picture>\n );\n }\n\n return (\n <img\n ref={ref}\n src={desktopSrc}\n alt={a}\n height={h}\n className={cx('logo', className)}\n {...rest}\n />\n );\n});\n"]}
|