@ugurdemirel/landcraft 0.1.9 → 0.1.11
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/dist/cjs/components/Badge.cjs +2 -0
- package/dist/cjs/components/Badge.cjs.map +1 -0
- package/dist/cjs/components/Blog/BlogCard.cjs +2 -0
- package/dist/cjs/components/Blog/BlogCard.cjs.map +1 -0
- package/dist/cjs/components/Blog/BlogSection.cjs +2 -0
- package/dist/cjs/components/Blog/BlogSection.cjs.map +1 -0
- package/dist/cjs/components/Blog/parts.cjs +2 -0
- package/dist/cjs/components/Blog/parts.cjs.map +1 -0
- package/dist/cjs/components/Blog/variants/Card.cjs +2 -0
- package/dist/cjs/components/Blog/variants/Card.cjs.map +1 -0
- package/dist/cjs/components/Blog/variants/Row.cjs +2 -0
- package/dist/cjs/components/Blog/variants/Row.cjs.map +1 -0
- package/dist/cjs/components/Button.cjs +2 -0
- package/dist/cjs/components/Button.cjs.map +1 -0
- package/dist/cjs/components/CTA/CTA.cjs +2 -0
- package/dist/cjs/components/CTA/CTA.cjs.map +1 -0
- package/dist/cjs/components/CTA/parts.cjs +2 -0
- package/dist/cjs/components/CTA/parts.cjs.map +1 -0
- package/dist/cjs/components/CTA/variants/Inverse.cjs +3 -0
- package/dist/cjs/components/CTA/variants/Inverse.cjs.map +1 -0
- package/dist/cjs/components/CTA/variants/Panel.cjs +3 -0
- package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -0
- package/dist/cjs/components/CTA/variants/Surface.cjs +2 -0
- package/dist/cjs/components/CTA/variants/Surface.cjs.map +1 -0
- package/dist/cjs/components/Card.cjs +2 -0
- package/dist/cjs/components/Card.cjs.map +1 -0
- package/dist/cjs/components/Container.cjs +2 -0
- package/dist/cjs/components/Container.cjs.map +1 -0
- package/dist/cjs/components/FAQ/FAQ.cjs +2 -0
- package/dist/cjs/components/FAQ/FAQ.cjs.map +1 -0
- package/dist/cjs/components/FAQ/parts.cjs +3 -0
- package/dist/cjs/components/FAQ/parts.cjs.map +1 -0
- package/dist/cjs/components/FAQ/variants/Accordion.cjs +3 -0
- package/dist/cjs/components/FAQ/variants/Accordion.cjs.map +1 -0
- package/dist/cjs/components/FAQ/variants/Cards.cjs +2 -0
- package/dist/cjs/components/FAQ/variants/Cards.cjs.map +1 -0
- package/dist/cjs/components/FAQ/variants/Split.cjs +2 -0
- package/dist/cjs/components/FAQ/variants/Split.cjs.map +1 -0
- package/dist/cjs/components/Features/FeatureCard.cjs +2 -0
- package/dist/cjs/components/Features/FeatureCard.cjs.map +1 -0
- package/dist/cjs/components/Features/FeatureGrid.cjs +2 -0
- package/dist/cjs/components/Features/FeatureGrid.cjs.map +1 -0
- package/dist/cjs/components/Features/parts.cjs +2 -0
- package/dist/cjs/components/Features/parts.cjs.map +1 -0
- package/dist/cjs/components/Features/variants/Bento.cjs +2 -0
- package/dist/cjs/components/Features/variants/Bento.cjs.map +1 -0
- package/dist/cjs/components/Features/variants/Columns.cjs +2 -0
- package/dist/cjs/components/Features/variants/Columns.cjs.map +1 -0
- package/dist/cjs/components/Features/variants/EditorialRows.cjs +2 -0
- package/dist/cjs/components/Features/variants/EditorialRows.cjs.map +1 -0
- package/dist/cjs/components/Footer/Footer.cjs +2 -0
- package/dist/cjs/components/Footer/Footer.cjs.map +1 -0
- package/dist/cjs/components/Footer/parts.cjs +2 -0
- package/dist/cjs/components/Footer/parts.cjs.map +1 -0
- package/dist/cjs/components/Footer/variants/Classic.cjs +2 -0
- package/dist/cjs/components/Footer/variants/Classic.cjs.map +1 -0
- package/dist/cjs/components/Footer/variants/Editorial.cjs +2 -0
- package/dist/cjs/components/Footer/variants/Editorial.cjs.map +1 -0
- package/dist/cjs/components/Footer/variants/Minimal.cjs +2 -0
- package/dist/cjs/components/Footer/variants/Minimal.cjs.map +1 -0
- package/dist/cjs/components/Hero/Hero.cjs +2 -0
- package/dist/cjs/components/Hero/Hero.cjs.map +1 -0
- package/dist/cjs/components/Hero/parts.cjs +2 -0
- package/dist/cjs/components/Hero/parts.cjs.map +1 -0
- package/dist/cjs/components/Hero/variants/Centered.cjs +2 -0
- package/dist/cjs/components/Hero/variants/Centered.cjs.map +1 -0
- package/dist/cjs/components/Hero/variants/Split.cjs +2 -0
- package/dist/cjs/components/Hero/variants/Split.cjs.map +1 -0
- package/dist/cjs/components/Hero/variants/Statement.cjs +3 -0
- package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -0
- package/dist/cjs/components/LanguageSwitcher/LanguageSwitcher.cjs +3 -0
- package/dist/cjs/components/LanguageSwitcher/LanguageSwitcher.cjs.map +1 -0
- package/dist/cjs/components/LanguageSwitcher/parts.cjs +3 -0
- package/dist/cjs/components/LanguageSwitcher/parts.cjs.map +1 -0
- package/dist/cjs/components/LanguageSwitcher/useLanguageSwitcher.cjs +3 -0
- package/dist/cjs/components/LanguageSwitcher/useLanguageSwitcher.cjs.map +1 -0
- package/dist/cjs/components/LanguageSwitcher/variants/Dropdown.cjs +3 -0
- package/dist/cjs/components/LanguageSwitcher/variants/Dropdown.cjs.map +1 -0
- package/dist/cjs/components/LanguageSwitcher/variants/Modal.cjs +3 -0
- package/dist/cjs/components/LanguageSwitcher/variants/Modal.cjs.map +1 -0
- package/dist/cjs/components/LogoCloud/LogoCloud.cjs +2 -0
- package/dist/cjs/components/LogoCloud/LogoCloud.cjs.map +1 -0
- package/dist/cjs/components/LogoCloud/parts.cjs +2 -0
- package/dist/cjs/components/LogoCloud/parts.cjs.map +1 -0
- package/dist/cjs/components/LogoCloud/variants/Marquee.cjs +2 -0
- package/dist/cjs/components/LogoCloud/variants/Marquee.cjs.map +1 -0
- package/dist/cjs/components/LogoCloud/variants/Quiet.cjs +2 -0
- package/dist/cjs/components/LogoCloud/variants/Quiet.cjs.map +1 -0
- package/dist/cjs/components/LogoCloud/variants/Strip.cjs +2 -0
- package/dist/cjs/components/LogoCloud/variants/Strip.cjs.map +1 -0
- package/dist/cjs/components/MegaMenu/MegaMenu.cjs +3 -0
- package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -0
- package/dist/cjs/components/Modal.cjs +3 -0
- package/dist/cjs/components/Modal.cjs.map +1 -0
- package/dist/cjs/components/Navbar/Navbar.cjs +3 -0
- package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -0
- package/dist/cjs/components/Newsletter/Newsletter.cjs +2 -0
- package/dist/cjs/components/Newsletter/Newsletter.cjs.map +1 -0
- package/dist/cjs/components/Newsletter/parts.cjs +2 -0
- package/dist/cjs/components/Newsletter/parts.cjs.map +1 -0
- package/dist/cjs/components/Newsletter/useNewsletterForm.cjs +3 -0
- package/dist/cjs/components/Newsletter/useNewsletterForm.cjs.map +1 -0
- package/dist/cjs/components/Newsletter/variants/Card.cjs +3 -0
- package/dist/cjs/components/Newsletter/variants/Card.cjs.map +1 -0
- package/dist/cjs/components/Newsletter/variants/Inline.cjs +3 -0
- package/dist/cjs/components/Newsletter/variants/Inline.cjs.map +1 -0
- package/dist/cjs/components/Newsletter/variants/Underline.cjs +3 -0
- package/dist/cjs/components/Newsletter/variants/Underline.cjs.map +1 -0
- package/dist/cjs/components/Pricing/Pricing.cjs +3 -0
- package/dist/cjs/components/Pricing/Pricing.cjs.map +1 -0
- package/dist/cjs/components/Pricing/parts.cjs +3 -0
- package/dist/cjs/components/Pricing/parts.cjs.map +1 -0
- package/dist/cjs/components/Pricing/variants/Bento.cjs +2 -0
- package/dist/cjs/components/Pricing/variants/Bento.cjs.map +1 -0
- package/dist/cjs/components/Pricing/variants/Cards.cjs +2 -0
- package/dist/cjs/components/Pricing/variants/Cards.cjs.map +1 -0
- package/dist/cjs/components/Pricing/variants/Compact.cjs +2 -0
- package/dist/cjs/components/Pricing/variants/Compact.cjs.map +1 -0
- package/dist/cjs/components/Prose.cjs +2 -0
- package/dist/cjs/components/Prose.cjs.map +1 -0
- package/dist/cjs/components/Section.cjs +2 -0
- package/dist/cjs/components/Section.cjs.map +1 -0
- package/dist/cjs/components/Slot.cjs +2 -0
- package/dist/cjs/components/Slot.cjs.map +1 -0
- package/dist/cjs/components/Stats/Stats.cjs +2 -0
- package/dist/cjs/components/Stats/Stats.cjs.map +1 -0
- package/dist/cjs/components/Stats/parts.cjs +2 -0
- package/dist/cjs/components/Stats/parts.cjs.map +1 -0
- package/dist/cjs/components/Stats/variants/Cells.cjs +2 -0
- package/dist/cjs/components/Stats/variants/Cells.cjs.map +1 -0
- package/dist/cjs/components/Stats/variants/Editorial.cjs +2 -0
- package/dist/cjs/components/Stats/variants/Editorial.cjs.map +1 -0
- package/dist/cjs/components/Stats/variants/Hairline.cjs +2 -0
- package/dist/cjs/components/Stats/variants/Hairline.cjs.map +1 -0
- package/dist/cjs/components/Stats/variants/Ticker.cjs +2 -0
- package/dist/cjs/components/Stats/variants/Ticker.cjs.map +1 -0
- package/dist/cjs/components/Testimonials/TestimonialCard.cjs +2 -0
- package/dist/cjs/components/Testimonials/TestimonialCard.cjs.map +1 -0
- package/dist/cjs/components/Testimonials/Testimonials.cjs +2 -0
- package/dist/cjs/components/Testimonials/Testimonials.cjs.map +1 -0
- package/dist/cjs/components/Testimonials/parts.cjs +2 -0
- package/dist/cjs/components/Testimonials/parts.cjs.map +1 -0
- package/dist/cjs/components/Testimonials/variants/Carousel.cjs +3 -0
- package/dist/cjs/components/Testimonials/variants/Carousel.cjs.map +1 -0
- package/dist/cjs/components/Testimonials/variants/Grid.cjs +2 -0
- package/dist/cjs/components/Testimonials/variants/Grid.cjs.map +1 -0
- package/dist/cjs/components/Testimonials/variants/Marquee.cjs +2 -0
- package/dist/cjs/components/Testimonials/variants/Marquee.cjs.map +1 -0
- package/dist/cjs/icons.cjs +2 -0
- package/dist/cjs/icons.cjs.map +1 -0
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.cjs +2 -0
- package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.cjs.map +1 -0
- package/dist/cjs/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.cjs +2 -0
- package/dist/cjs/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -0
- package/dist/cjs/utils/cn.cjs +2 -0
- package/dist/cjs/utils/cn.cjs.map +1 -0
- package/dist/cjs/utils/contrast.cjs +2 -0
- package/dist/cjs/utils/contrast.cjs.map +1 -0
- package/dist/cjs/utils/iso2Flag.cjs +8 -0
- package/dist/cjs/utils/iso2Flag.cjs.map +1 -0
- package/dist/cjs/utils/useTokenForeground.cjs +3 -0
- package/dist/cjs/utils/useTokenForeground.cjs.map +1 -0
- package/dist/es/components/Badge.js +51 -0
- package/dist/es/components/Badge.js.map +1 -0
- package/dist/es/components/Blog/BlogCard.js +12 -0
- package/dist/es/components/Blog/BlogCard.js.map +1 -0
- package/dist/es/components/Blog/BlogSection.js +65 -0
- package/dist/es/components/Blog/BlogSection.js.map +1 -0
- package/dist/es/components/Blog/parts.js +29 -0
- package/dist/es/components/Blog/parts.js.map +1 -0
- package/dist/es/components/Blog/variants/Card.js +46 -0
- package/dist/es/components/Blog/variants/Card.js.map +1 -0
- package/dist/es/components/Blog/variants/Row.js +33 -0
- package/dist/es/components/Blog/variants/Row.js.map +1 -0
- package/dist/es/components/Button.js +73 -0
- package/dist/es/components/Button.js.map +1 -0
- package/dist/es/components/CTA/CTA.js +11 -0
- package/dist/es/components/CTA/CTA.js.map +1 -0
- package/dist/es/components/CTA/parts.js +26 -0
- package/dist/es/components/CTA/parts.js.map +1 -0
- package/dist/es/components/CTA/variants/Inverse.js +47 -0
- package/dist/es/components/CTA/variants/Inverse.js.map +1 -0
- package/dist/es/components/CTA/variants/Panel.js +63 -0
- package/dist/es/components/CTA/variants/Panel.js.map +1 -0
- package/dist/es/components/CTA/variants/Surface.js +28 -0
- package/dist/es/components/CTA/variants/Surface.js.map +1 -0
- package/dist/es/components/Card.js +63 -0
- package/dist/es/components/Card.js.map +1 -0
- package/dist/es/components/Container.js +58 -0
- package/dist/es/components/Container.js.map +1 -0
- package/dist/es/components/FAQ/FAQ.js +40 -0
- package/dist/es/components/FAQ/FAQ.js.map +1 -0
- package/dist/es/components/FAQ/parts.js +56 -0
- package/dist/es/components/FAQ/parts.js.map +1 -0
- package/dist/es/components/FAQ/variants/Accordion.js +43 -0
- package/dist/es/components/FAQ/variants/Accordion.js.map +1 -0
- package/dist/es/components/FAQ/variants/Cards.js +33 -0
- package/dist/es/components/FAQ/variants/Cards.js.map +1 -0
- package/dist/es/components/FAQ/variants/Split.js +35 -0
- package/dist/es/components/FAQ/variants/Split.js.map +1 -0
- package/dist/es/components/Features/FeatureCard.js +40 -0
- package/dist/es/components/Features/FeatureCard.js.map +1 -0
- package/dist/es/components/Features/FeatureGrid.js +13 -0
- package/dist/es/components/Features/FeatureGrid.js.map +1 -0
- package/dist/es/components/Features/parts.js +17 -0
- package/dist/es/components/Features/parts.js.map +1 -0
- package/dist/es/components/Features/variants/Bento.js +27 -0
- package/dist/es/components/Features/variants/Bento.js.map +1 -0
- package/dist/es/components/Features/variants/Columns.js +13 -0
- package/dist/es/components/Features/variants/Columns.js.map +1 -0
- package/dist/es/components/Features/variants/EditorialRows.js +25 -0
- package/dist/es/components/Features/variants/EditorialRows.js.map +1 -0
- package/dist/es/components/Footer/Footer.js +10 -0
- package/dist/es/components/Footer/Footer.js.map +1 -0
- package/dist/es/components/Footer/parts.js +65 -0
- package/dist/es/components/Footer/parts.js.map +1 -0
- package/dist/es/components/Footer/variants/Classic.js +43 -0
- package/dist/es/components/Footer/variants/Classic.js.map +1 -0
- package/dist/es/components/Footer/variants/Editorial.js +39 -0
- package/dist/es/components/Footer/variants/Editorial.js.map +1 -0
- package/dist/es/components/Footer/variants/Minimal.js +20 -0
- package/dist/es/components/Footer/variants/Minimal.js.map +1 -0
- package/dist/es/components/Hero/Hero.js +11 -0
- package/dist/es/components/Hero/Hero.js.map +1 -0
- package/dist/es/components/Hero/parts.js +21 -0
- package/dist/es/components/Hero/parts.js.map +1 -0
- package/dist/es/components/Hero/variants/Centered.js +41 -0
- package/dist/es/components/Hero/variants/Centered.js.map +1 -0
- package/dist/es/components/Hero/variants/Split.js +36 -0
- package/dist/es/components/Hero/variants/Split.js.map +1 -0
- package/dist/es/components/Hero/variants/Statement.js +46 -0
- package/dist/es/components/Hero/variants/Statement.js.map +1 -0
- package/dist/es/components/LanguageSwitcher/LanguageSwitcher.js +34 -0
- package/dist/es/components/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
- package/dist/es/components/LanguageSwitcher/parts.js +107 -0
- package/dist/es/components/LanguageSwitcher/parts.js.map +1 -0
- package/dist/es/components/LanguageSwitcher/useLanguageSwitcher.js +13 -0
- package/dist/es/components/LanguageSwitcher/useLanguageSwitcher.js.map +1 -0
- package/dist/es/components/LanguageSwitcher/variants/Dropdown.js +87 -0
- package/dist/es/components/LanguageSwitcher/variants/Dropdown.js.map +1 -0
- package/dist/es/components/LanguageSwitcher/variants/Modal.js +54 -0
- package/dist/es/components/LanguageSwitcher/variants/Modal.js.map +1 -0
- package/dist/es/components/LogoCloud/LogoCloud.js +13 -0
- package/dist/es/components/LogoCloud/LogoCloud.js.map +1 -0
- package/dist/es/components/LogoCloud/parts.js +22 -0
- package/dist/es/components/LogoCloud/parts.js.map +1 -0
- package/dist/es/components/LogoCloud/variants/Marquee.js +18 -0
- package/dist/es/components/LogoCloud/variants/Marquee.js.map +1 -0
- package/dist/es/components/LogoCloud/variants/Quiet.js +15 -0
- package/dist/es/components/LogoCloud/variants/Quiet.js.map +1 -0
- package/dist/es/components/LogoCloud/variants/Strip.js +15 -0
- package/dist/es/components/LogoCloud/variants/Strip.js.map +1 -0
- package/dist/es/components/MegaMenu/MegaMenu.js +371 -0
- package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -0
- package/dist/es/components/Modal.js +81 -0
- package/dist/es/components/Modal.js.map +1 -0
- package/dist/es/components/Navbar/Navbar.js +135 -0
- package/dist/es/components/Navbar/Navbar.js.map +1 -0
- package/dist/es/components/Newsletter/Newsletter.js +13 -0
- package/dist/es/components/Newsletter/Newsletter.js.map +1 -0
- package/dist/es/components/Newsletter/parts.js +18 -0
- package/dist/es/components/Newsletter/parts.js.map +1 -0
- package/dist/es/components/Newsletter/useNewsletterForm.js +20 -0
- package/dist/es/components/Newsletter/useNewsletterForm.js.map +1 -0
- package/dist/es/components/Newsletter/variants/Card.js +55 -0
- package/dist/es/components/Newsletter/variants/Card.js.map +1 -0
- package/dist/es/components/Newsletter/variants/Inline.js +51 -0
- package/dist/es/components/Newsletter/variants/Inline.js.map +1 -0
- package/dist/es/components/Newsletter/variants/Underline.js +51 -0
- package/dist/es/components/Newsletter/variants/Underline.js.map +1 -0
- package/dist/es/components/Pricing/Pricing.js +32 -0
- package/dist/es/components/Pricing/Pricing.js.map +1 -0
- package/dist/es/components/Pricing/parts.js +119 -0
- package/dist/es/components/Pricing/parts.js.map +1 -0
- package/dist/es/components/Pricing/variants/Bento.js +47 -0
- package/dist/es/components/Pricing/variants/Bento.js.map +1 -0
- package/dist/es/components/Pricing/variants/Cards.js +49 -0
- package/dist/es/components/Pricing/variants/Cards.js.map +1 -0
- package/dist/es/components/Pricing/variants/Compact.js +49 -0
- package/dist/es/components/Pricing/variants/Compact.js.map +1 -0
- package/dist/es/components/Prose.js +36 -0
- package/dist/es/components/Prose.js.map +1 -0
- package/dist/es/components/Section.js +69 -0
- package/dist/es/components/Section.js.map +1 -0
- package/dist/es/components/Slot.js +33 -0
- package/dist/es/components/Slot.js.map +1 -0
- package/dist/es/components/Stats/Stats.js +14 -0
- package/dist/es/components/Stats/Stats.js.map +1 -0
- package/dist/es/components/Stats/parts.js +32 -0
- package/dist/es/components/Stats/parts.js.map +1 -0
- package/dist/es/components/Stats/variants/Cells.js +28 -0
- package/dist/es/components/Stats/variants/Cells.js.map +1 -0
- package/dist/es/components/Stats/variants/Editorial.js +32 -0
- package/dist/es/components/Stats/variants/Editorial.js.map +1 -0
- package/dist/es/components/Stats/variants/Hairline.js +25 -0
- package/dist/es/components/Stats/variants/Hairline.js.map +1 -0
- package/dist/es/components/Stats/variants/Ticker.js +29 -0
- package/dist/es/components/Stats/variants/Ticker.js.map +1 -0
- package/dist/es/components/Testimonials/TestimonialCard.js +50 -0
- package/dist/es/components/Testimonials/TestimonialCard.js.map +1 -0
- package/dist/es/components/Testimonials/Testimonials.js +13 -0
- package/dist/es/components/Testimonials/Testimonials.js.map +1 -0
- package/dist/es/components/Testimonials/parts.js +5 -0
- package/dist/es/components/Testimonials/parts.js.map +1 -0
- package/dist/es/components/Testimonials/variants/Carousel.js +83 -0
- package/dist/es/components/Testimonials/variants/Carousel.js.map +1 -0
- package/dist/es/components/Testimonials/variants/Grid.js +12 -0
- package/dist/es/components/Testimonials/variants/Grid.js.map +1 -0
- package/dist/es/components/Testimonials/variants/Marquee.js +15 -0
- package/dist/es/components/Testimonials/variants/Marquee.js.map +1 -0
- package/dist/es/icons.js +158 -0
- package/dist/es/icons.js.map +1 -0
- package/dist/es/index.js +106 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +17 -0
- package/dist/es/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/es/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.js +2266 -0
- package/dist/es/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/es/utils/cn.js +9 -0
- package/dist/es/utils/cn.js.map +1 -0
- package/dist/es/utils/contrast.js +48 -0
- package/dist/es/utils/contrast.js.map +1 -0
- package/dist/es/utils/iso2Flag.js +17 -0
- package/dist/es/utils/iso2Flag.js.map +1 -0
- package/dist/es/utils/useTokenForeground.js +28 -0
- package/dist/es/utils/useTokenForeground.js.map +1 -0
- package/package.json +5 -5
- package/dist/index.cjs +0 -8
- package/dist/index.cjs.map +0 -1
- package/dist/index.js +0 -5128
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsxs as s, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as c } from "react";
|
|
3
|
+
import { cn as t } from "../../../utils/cn.js";
|
|
4
|
+
import { LogoCloudTitle as u, LogoMark as f } from "../parts.js";
|
|
5
|
+
const p = c(
|
|
6
|
+
({ className: a, logos: o, title: m, ...d }, i) => {
|
|
7
|
+
const l = [...o, ...o];
|
|
8
|
+
return /* @__PURE__ */ s("div", { ref: i, className: t("w-full overflow-hidden", a), ...d, children: [
|
|
9
|
+
/* @__PURE__ */ e(u, { title: m }),
|
|
10
|
+
/* @__PURE__ */ e("div", { className: "mask-fade-x", children: /* @__PURE__ */ e("div", { className: "flex w-max animate-marquee gap-14 pr-14 motion-reduce:animate-none", children: l.map((r, n) => /* @__PURE__ */ e("div", { className: "group shrink-0", children: /* @__PURE__ */ e(f, { logo: r }) }, `${r.name}-${n}`)) }) })
|
|
11
|
+
] });
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
p.displayName = "LogoCloudMarquee";
|
|
15
|
+
export {
|
|
16
|
+
p as LogoCloudMarquee
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=Marquee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Marquee.js","sources":["../../../../../src/components/LogoCloud/variants/Marquee.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { LogoMark, LogoCloudTitle } from \"../parts\";\nimport type { LogoItem } from \"../types\";\n\ninterface MarqueeProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n}\n\nexport const LogoCloudMarquee = forwardRef<HTMLDivElement, MarqueeProps>(\n ({ className, logos, title, ...props }, ref) => {\n const doubled = [...logos, ...logos];\n return (\n <div ref={ref} className={cn(\"w-full overflow-hidden\", className)} {...props}>\n <LogoCloudTitle title={title} />\n <div className=\"mask-fade-x\">\n <div className=\"flex w-max animate-marquee gap-14 pr-14 motion-reduce:animate-none\">\n {doubled.map((logo, i) => (\n <div key={`${logo.name}-${i}`} className=\"group shrink-0\">\n <LogoMark logo={logo} />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n },\n);\nLogoCloudMarquee.displayName = \"LogoCloudMarquee\";"],"names":["LogoCloudMarquee","forwardRef","className","logos","title","props","ref","doubled","jsxs","cn","jsx","LogoCloudTitle","logo","i","LogoMark"],"mappings":";;;;AAUO,MAAMA,IAAmBC;AAAA,EAC9B,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,OAAAC,GAAO,GAAGC,EAAA,GAASC,MAAQ;AAC9C,UAAMC,IAAU,CAAC,GAAGJ,GAAO,GAAGA,CAAK;AACnC,WACE,gBAAAK,EAAC,SAAI,KAAAF,GAAU,WAAWG,EAAG,0BAA0BP,CAAS,GAAI,GAAGG,GACrE,UAAA;AAAA,MAAA,gBAAAK,EAACC,KAAe,OAAAP,GAAc;AAAA,MAC9B,gBAAAM,EAAC,OAAA,EAAI,WAAU,eACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,sEACZ,UAAAH,EAAQ,IAAI,CAACK,GAAMC,MAClB,gBAAAH,EAAC,OAAA,EAA8B,WAAU,kBACvC,UAAA,gBAAAA,EAACI,GAAA,EAAS,MAAAF,GAAY,EAAA,GADd,GAAGA,EAAK,IAAI,IAAIC,CAAC,EAE3B,CACD,GACH,EAAA,CACF;AAAA,IAAA,GACF;AAAA,EAEJ;AACF;AACAb,EAAiB,cAAc;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsxs as s, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as t } from "react";
|
|
3
|
+
import { cn as p } from "../../../utils/cn.js";
|
|
4
|
+
import { LogoCloudTitle as c, LogoMark as f } from "../parts.js";
|
|
5
|
+
const d = t(
|
|
6
|
+
({ className: r, logos: l, title: a, ...i }, m) => /* @__PURE__ */ s("div", { ref: m, className: p("w-full", r), ...i, children: [
|
|
7
|
+
/* @__PURE__ */ o(c, { title: a }),
|
|
8
|
+
/* @__PURE__ */ o("ul", { className: "flex flex-wrap items-center justify-center gap-x-12 gap-y-6", children: l.map((e) => /* @__PURE__ */ o("li", { className: "group", children: /* @__PURE__ */ o(f, { logo: e }) }, e.name)) })
|
|
9
|
+
] })
|
|
10
|
+
);
|
|
11
|
+
d.displayName = "LogoCloudQuiet";
|
|
12
|
+
export {
|
|
13
|
+
d as LogoCloudQuiet
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=Quiet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Quiet.js","sources":["../../../../../src/components/LogoCloud/variants/Quiet.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { LogoMark, LogoCloudTitle } from \"../parts\";\nimport type { LogoItem } from \"../types\";\n\ninterface QuietProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n}\n\n/** quiet — unbounded spread of wordmarks. */\nexport const LogoCloudQuiet = forwardRef<HTMLDivElement, QuietProps>(\n ({ className, logos, title, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <LogoCloudTitle title={title} />\n <ul className=\"flex flex-wrap items-center justify-center gap-x-12 gap-y-6\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"group\">\n <LogoMark logo={logo} />\n </li>\n ))}\n </ul>\n </div>\n ),\n);\nLogoCloudQuiet.displayName = \"LogoCloudQuiet\";"],"names":["LogoCloudQuiet","forwardRef","className","logos","title","props","ref","jsxs","cn","jsx","LogoCloudTitle","logo","LogoMark"],"mappings":";;;;AAWO,MAAMA,IAAiBC;AAAA,EAC5B,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,OAAAC,GAAO,GAAGC,KAASC,MACtC,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAG,UAAUN,CAAS,GAAI,GAAGG,GACrD,UAAA;AAAA,IAAA,gBAAAI,EAACC,KAAe,OAAAN,GAAc;AAAA,sBAC7B,MAAA,EAAG,WAAU,+DACX,UAAAD,EAAM,IAAI,CAACQ,MACV,gBAAAF,EAAC,QAAmB,WAAU,SAC5B,4BAACG,GAAA,EAAS,MAAAD,EAAA,CAAY,KADfA,EAAK,IAEd,CACD,EAAA,CACH;AAAA,EAAA,EAAA,CACF;AAEJ;AACAX,EAAe,cAAc;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsxs as i, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as s } from "react";
|
|
3
|
+
import { cn as d } from "../../../utils/cn.js";
|
|
4
|
+
import { LogoCloudTitle as t, LogoMark as c } from "../parts.js";
|
|
5
|
+
const f = s(
|
|
6
|
+
({ className: e, logos: a, title: l, ...m }, p) => /* @__PURE__ */ i("div", { ref: p, className: d("w-full", e), ...m, children: [
|
|
7
|
+
/* @__PURE__ */ r(t, { title: l }),
|
|
8
|
+
/* @__PURE__ */ r("ul", { className: "flex flex-wrap items-center justify-center gap-x-10 gap-y-4 rounded-2xl border border-border bg-surface px-6 py-7 sm:gap-x-14", children: a.map((o) => /* @__PURE__ */ r("li", { className: "group", children: /* @__PURE__ */ r(c, { logo: o }) }, o.name)) })
|
|
9
|
+
] })
|
|
10
|
+
);
|
|
11
|
+
f.displayName = "LogoCloudStrip";
|
|
12
|
+
export {
|
|
13
|
+
f as LogoCloudStrip
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=Strip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Strip.js","sources":["../../../../../src/components/LogoCloud/variants/Strip.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { LogoMark, LogoCloudTitle } from \"../parts\";\nimport type { LogoItem } from \"../types\";\n\ninterface StripProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n}\n\nexport const LogoCloudStrip = forwardRef<HTMLDivElement, StripProps>(\n ({ className, logos, title, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <LogoCloudTitle title={title} />\n <ul className=\"flex flex-wrap items-center justify-center gap-x-10 gap-y-4 rounded-2xl border border-border bg-surface px-6 py-7 sm:gap-x-14\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"group\">\n <LogoMark logo={logo} />\n </li>\n ))}\n </ul>\n </div>\n ),\n);\nLogoCloudStrip.displayName = \"LogoCloudStrip\";"],"names":["LogoCloudStrip","forwardRef","className","logos","title","props","ref","jsxs","cn","jsx","LogoCloudTitle","logo","LogoMark"],"mappings":";;;;AAUO,MAAMA,IAAiBC;AAAA,EAC5B,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,OAAAC,GAAO,GAAGC,KAASC,MACtC,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAG,UAAUN,CAAS,GAAI,GAAGG,GACrD,UAAA;AAAA,IAAA,gBAAAI,EAACC,KAAe,OAAAN,GAAc;AAAA,sBAC7B,MAAA,EAAG,WAAU,iIACX,UAAAD,EAAM,IAAI,CAACQ,MACV,gBAAAF,EAAC,QAAmB,WAAU,SAC5B,4BAACG,GAAA,EAAS,MAAAD,EAAA,CAAY,KADfA,EAAK,IAEd,CACD,EAAA,CACH;AAAA,EAAA,EAAA,CACF;AAEJ;AACAX,EAAe,cAAc;"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as r, jsxs as t } from "react/jsx-runtime";
|
|
3
|
+
import { useId as R, useState as w } from "react";
|
|
4
|
+
import { cn as n } from "../../utils/cn.js";
|
|
5
|
+
import { getContrastText as U } from "../../utils/contrast.js";
|
|
6
|
+
import { ChevronDown as P, X as V, Menu as W } from "../../icons.js";
|
|
7
|
+
const $ = "text-on-secondary", b = "text-foreground", Y = {
|
|
8
|
+
classic: {
|
|
9
|
+
shell: "border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",
|
|
10
|
+
bar: "mx-auto max-w-6xl px-5 sm:px-8",
|
|
11
|
+
header: "px-0",
|
|
12
|
+
trigger: "text-muted-foreground hover:text-foreground hover:bg-surface",
|
|
13
|
+
triggerOpen: "bg-surface text-foreground",
|
|
14
|
+
badge: "bg-primary-soft text-primary",
|
|
15
|
+
panel: "border-border bg-surface shadow-raised",
|
|
16
|
+
columnTitle: "text-muted-foreground/70",
|
|
17
|
+
columnLink: "hover:bg-surface-strong",
|
|
18
|
+
linkDescription: "text-muted-foreground",
|
|
19
|
+
mobilePanel: "border-t border-border bg-background",
|
|
20
|
+
mobileButton: `${b} hover:bg-surface`,
|
|
21
|
+
mobileLink: "text-muted-foreground hover:bg-surface hover:text-foreground",
|
|
22
|
+
brandText: b,
|
|
23
|
+
brandDot: "bg-foreground"
|
|
24
|
+
},
|
|
25
|
+
floating: {
|
|
26
|
+
shell: "px-0",
|
|
27
|
+
bar: "mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",
|
|
28
|
+
header: "px-3 sm:px-6",
|
|
29
|
+
trigger: "text-muted-foreground hover:text-foreground hover:bg-surface",
|
|
30
|
+
triggerOpen: "bg-surface text-foreground",
|
|
31
|
+
badge: "bg-primary-soft text-primary",
|
|
32
|
+
panel: "border-border bg-surface shadow-raised",
|
|
33
|
+
columnTitle: "text-muted-foreground/70",
|
|
34
|
+
columnLink: "hover:bg-surface-strong",
|
|
35
|
+
linkDescription: "text-muted-foreground",
|
|
36
|
+
mobilePanel: "mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",
|
|
37
|
+
mobileButton: `${b} hover:bg-surface`,
|
|
38
|
+
mobileLink: "text-muted-foreground hover:bg-surface hover:text-foreground",
|
|
39
|
+
brandText: b,
|
|
40
|
+
brandDot: "bg-foreground"
|
|
41
|
+
},
|
|
42
|
+
inverse: {
|
|
43
|
+
shell: "border-b border-white/10 bg-[#101010]/85 backdrop-blur-md",
|
|
44
|
+
bar: "mx-auto max-w-6xl px-5 sm:px-8",
|
|
45
|
+
header: "px-0",
|
|
46
|
+
trigger: "text-on-secondary/60 hover:text-on-secondary hover:bg-white/10",
|
|
47
|
+
triggerOpen: "bg-white/10 text-on-secondary",
|
|
48
|
+
badge: "bg-white/15 text-on-secondary",
|
|
49
|
+
panel: "border-white/10 bg-[#161616]",
|
|
50
|
+
columnTitle: "text-on-secondary/45",
|
|
51
|
+
columnLink: "hover:bg-white/10",
|
|
52
|
+
linkDescription: "text-on-secondary/50",
|
|
53
|
+
mobilePanel: "border-t border-white/10 bg-[#101010]",
|
|
54
|
+
mobileButton: `${$} hover:bg-white/10`,
|
|
55
|
+
mobileLink: "text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary",
|
|
56
|
+
brandText: $,
|
|
57
|
+
brandDot: "bg-on-secondary"
|
|
58
|
+
}
|
|
59
|
+
}, Z = ({
|
|
60
|
+
className: E,
|
|
61
|
+
variant: k = "classic",
|
|
62
|
+
brand: m,
|
|
63
|
+
logo: I,
|
|
64
|
+
logoSrc: C,
|
|
65
|
+
logoAlt: z,
|
|
66
|
+
logoClassName: A,
|
|
67
|
+
brandHref: F = "#",
|
|
68
|
+
items: p,
|
|
69
|
+
actions: g,
|
|
70
|
+
cta: h,
|
|
71
|
+
languageSwitcher: f,
|
|
72
|
+
sticky: X = !0,
|
|
73
|
+
LinkComponent: _,
|
|
74
|
+
onKeyDown: x,
|
|
75
|
+
...q
|
|
76
|
+
}) => {
|
|
77
|
+
const G = R(), i = _ ?? "a", [L, c] = w(null), [u, v] = w(!1), [y, M] = w(null), a = Y[k], H = () => c(null), N = () => {
|
|
78
|
+
c(null), v(!1), M(null);
|
|
79
|
+
}, T = (e) => `${G}-panel-${e}`, O = I ?? (C ? /* @__PURE__ */ r(
|
|
80
|
+
"img",
|
|
81
|
+
{
|
|
82
|
+
src: C,
|
|
83
|
+
alt: z ?? (typeof m == "string" ? m : "Logo"),
|
|
84
|
+
className: n("h-7 w-auto", A)
|
|
85
|
+
}
|
|
86
|
+
) : null), J = O ? /* @__PURE__ */ r("span", { className: "flex items-center", children: O }) : /* @__PURE__ */ t("span", { className: n("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight", a.brandText), children: [
|
|
87
|
+
/* @__PURE__ */ r("span", { "aria-hidden": !0, className: n("inline-block h-2.5 w-2.5 rounded-sm", a.brandDot) }),
|
|
88
|
+
m
|
|
89
|
+
] }), D = n(
|
|
90
|
+
"flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150",
|
|
91
|
+
a.trigger
|
|
92
|
+
), j = (e) => {
|
|
93
|
+
var o;
|
|
94
|
+
return /* @__PURE__ */ r(
|
|
95
|
+
"div",
|
|
96
|
+
{
|
|
97
|
+
className: n(
|
|
98
|
+
"grid gap-x-10 gap-y-8 sm:grid-cols-2",
|
|
99
|
+
e.featured ? "" : "lg:grid-cols-3"
|
|
100
|
+
),
|
|
101
|
+
children: (o = e.columns) == null ? void 0 : o.map((l, s) => /* @__PURE__ */ t("div", { children: [
|
|
102
|
+
l.title ? /* @__PURE__ */ r(
|
|
103
|
+
"h4",
|
|
104
|
+
{
|
|
105
|
+
className: n(
|
|
106
|
+
"text-xs font-semibold uppercase tracking-[0.14em]",
|
|
107
|
+
a.columnTitle
|
|
108
|
+
),
|
|
109
|
+
children: l.title
|
|
110
|
+
}
|
|
111
|
+
) : null,
|
|
112
|
+
/* @__PURE__ */ r("ul", { className: n(l.title && "mt-3", "space-y-0.5"), children: l.links.map((d) => /* @__PURE__ */ r("li", { children: /* @__PURE__ */ t(
|
|
113
|
+
i,
|
|
114
|
+
{
|
|
115
|
+
href: d.href,
|
|
116
|
+
onClick: N,
|
|
117
|
+
className: n(
|
|
118
|
+
"-mx-2 block rounded-md px-2 py-2 transition-colors duration-150",
|
|
119
|
+
a.columnLink
|
|
120
|
+
),
|
|
121
|
+
children: [
|
|
122
|
+
/* @__PURE__ */ r("span", { className: "block text-sm font-medium text-foreground", children: d.label }),
|
|
123
|
+
d.description ? /* @__PURE__ */ r(
|
|
124
|
+
"span",
|
|
125
|
+
{
|
|
126
|
+
className: n(
|
|
127
|
+
"mt-0.5 block text-[13px] leading-snug",
|
|
128
|
+
a.linkDescription
|
|
129
|
+
),
|
|
130
|
+
children: d.description
|
|
131
|
+
}
|
|
132
|
+
) : null
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
) }, d.href)) })
|
|
136
|
+
] }, l.title ?? s))
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
}, B = (e, o = !1) => {
|
|
140
|
+
const l = e.featured;
|
|
141
|
+
if (!l) return null;
|
|
142
|
+
const s = l.accent ? { backgroundColor: l.accent, color: U(l.accent) } : void 0;
|
|
143
|
+
return /* @__PURE__ */ t(
|
|
144
|
+
i,
|
|
145
|
+
{
|
|
146
|
+
href: l.href,
|
|
147
|
+
onClick: N,
|
|
148
|
+
className: n(
|
|
149
|
+
"group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5",
|
|
150
|
+
o && "mt-8",
|
|
151
|
+
!l.accent && "bg-primary text-on-primary"
|
|
152
|
+
),
|
|
153
|
+
style: s,
|
|
154
|
+
children: [
|
|
155
|
+
/* @__PURE__ */ t("div", { className: "flex h-full flex-col justify-between gap-4", children: [
|
|
156
|
+
/* @__PURE__ */ t("div", { children: [
|
|
157
|
+
/* @__PURE__ */ r("h4", { className: "font-display text-base font-semibold tracking-tight", children: l.title }),
|
|
158
|
+
l.description ? /* @__PURE__ */ r("p", { className: "mt-1.5 text-[13px] leading-relaxed opacity-80", children: l.description }) : null
|
|
159
|
+
] }),
|
|
160
|
+
l.cta ? /* @__PURE__ */ t("span", { className: "text-sm font-semibold underline decoration-1 underline-offset-4", children: [
|
|
161
|
+
l.cta,
|
|
162
|
+
" →"
|
|
163
|
+
] }) : null
|
|
164
|
+
] }),
|
|
165
|
+
/* @__PURE__ */ r(
|
|
166
|
+
"div",
|
|
167
|
+
{
|
|
168
|
+
"aria-hidden": !0,
|
|
169
|
+
className: "pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40"
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
}, Q = (e) => {
|
|
176
|
+
e.key === "Escape" && N(), x == null || x(e);
|
|
177
|
+
};
|
|
178
|
+
return /* @__PURE__ */ t(
|
|
179
|
+
"header",
|
|
180
|
+
{
|
|
181
|
+
className: n(
|
|
182
|
+
"relative w-full transition-colors duration-200",
|
|
183
|
+
X && "sticky top-0 z-50",
|
|
184
|
+
a.shell,
|
|
185
|
+
a.header,
|
|
186
|
+
E
|
|
187
|
+
),
|
|
188
|
+
onKeyDown: Q,
|
|
189
|
+
...q,
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ t("nav", { className: n("relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200", a.bar), onMouseLeave: H, "aria-label": "Mega menu", children: [
|
|
192
|
+
/* @__PURE__ */ r(i, { href: F, className: "shrink-0", children: J }),
|
|
193
|
+
/* @__PURE__ */ r("ul", { className: "hidden items-center gap-1 lg:flex", children: p.map((e, o) => {
|
|
194
|
+
var d;
|
|
195
|
+
const l = !!((d = e.columns) != null && d.length || e.featured), s = L === o;
|
|
196
|
+
return /* @__PURE__ */ r("li", { className: "relative", children: l ? /* @__PURE__ */ t(
|
|
197
|
+
"button",
|
|
198
|
+
{
|
|
199
|
+
type: "button",
|
|
200
|
+
"aria-haspopup": "true",
|
|
201
|
+
"aria-expanded": s,
|
|
202
|
+
"aria-controls": T(o),
|
|
203
|
+
onClick: () => c(s ? null : o),
|
|
204
|
+
onMouseEnter: () => c(o),
|
|
205
|
+
className: n(D, s && a.triggerOpen),
|
|
206
|
+
children: [
|
|
207
|
+
/* @__PURE__ */ t("span", { className: "flex items-center gap-1.5", children: [
|
|
208
|
+
e.label,
|
|
209
|
+
e.badge ? /* @__PURE__ */ r(
|
|
210
|
+
"span",
|
|
211
|
+
{
|
|
212
|
+
className: n(
|
|
213
|
+
"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",
|
|
214
|
+
a.badge
|
|
215
|
+
),
|
|
216
|
+
children: e.badge
|
|
217
|
+
}
|
|
218
|
+
) : null
|
|
219
|
+
] }),
|
|
220
|
+
/* @__PURE__ */ r(
|
|
221
|
+
P,
|
|
222
|
+
{
|
|
223
|
+
className: n(
|
|
224
|
+
"h-4 w-4 shrink-0 transition-transform duration-150",
|
|
225
|
+
s && "rotate-180"
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
) : /* @__PURE__ */ t(i, { href: e.href ?? "#", className: D, children: [
|
|
232
|
+
e.label,
|
|
233
|
+
e.badge ? /* @__PURE__ */ r("span", { className: n("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide", a.badge), children: e.badge }) : null
|
|
234
|
+
] }) }, e.label);
|
|
235
|
+
}) }),
|
|
236
|
+
/* @__PURE__ */ t("div", { className: "hidden items-center gap-3 lg:flex", children: [
|
|
237
|
+
f,
|
|
238
|
+
g,
|
|
239
|
+
h
|
|
240
|
+
] }),
|
|
241
|
+
f ? /* @__PURE__ */ r("div", { className: "flex items-center lg:hidden", children: f }) : null,
|
|
242
|
+
/* @__PURE__ */ r(
|
|
243
|
+
"button",
|
|
244
|
+
{
|
|
245
|
+
type: "button",
|
|
246
|
+
"aria-label": u ? "Close menu" : "Open menu",
|
|
247
|
+
"aria-expanded": u,
|
|
248
|
+
onClick: () => v((e) => !e),
|
|
249
|
+
className: n(
|
|
250
|
+
"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden",
|
|
251
|
+
"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
252
|
+
a.mobileButton
|
|
253
|
+
),
|
|
254
|
+
children: u ? /* @__PURE__ */ r(V, { className: "h-5 w-5" }) : /* @__PURE__ */ r(W, { className: "h-5 w-5" })
|
|
255
|
+
}
|
|
256
|
+
)
|
|
257
|
+
] }),
|
|
258
|
+
p.map((e, o) => {
|
|
259
|
+
var s;
|
|
260
|
+
if (!((s = e.columns) != null && s.length) && !e.featured) return null;
|
|
261
|
+
const l = L === o;
|
|
262
|
+
return /* @__PURE__ */ r(
|
|
263
|
+
"div",
|
|
264
|
+
{
|
|
265
|
+
id: T(o),
|
|
266
|
+
role: "region",
|
|
267
|
+
"aria-label": `${e.label} menu`,
|
|
268
|
+
onMouseEnter: () => c(o),
|
|
269
|
+
className: n(
|
|
270
|
+
"absolute top-full z-50 pt-2 transition-all duration-150",
|
|
271
|
+
k === "floating" ? "inset-x-0 mx-auto w-full max-w-5xl" : "inset-x-0",
|
|
272
|
+
l ? "visible translate-y-0 opacity-100" : "pointer-events-none invisible -translate-y-1 opacity-0"
|
|
273
|
+
),
|
|
274
|
+
children: /* @__PURE__ */ t(
|
|
275
|
+
"div",
|
|
276
|
+
{
|
|
277
|
+
className: n(
|
|
278
|
+
"overflow-hidden rounded-xl border p-6 md:p-8",
|
|
279
|
+
a.panel,
|
|
280
|
+
e.featured ? "lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12" : ""
|
|
281
|
+
),
|
|
282
|
+
children: [
|
|
283
|
+
j(e),
|
|
284
|
+
e.featured && /* @__PURE__ */ r("div", { className: n("mt-8 max-w-sm lg:mt-0 lg:w-64"), children: B(e) })
|
|
285
|
+
]
|
|
286
|
+
}
|
|
287
|
+
)
|
|
288
|
+
},
|
|
289
|
+
e.label
|
|
290
|
+
);
|
|
291
|
+
}),
|
|
292
|
+
/* @__PURE__ */ r(
|
|
293
|
+
"div",
|
|
294
|
+
{
|
|
295
|
+
className: n(
|
|
296
|
+
"grid transition-[grid-template-rows,opacity] duration-200 lg:hidden",
|
|
297
|
+
u ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0",
|
|
298
|
+
a.mobilePanel
|
|
299
|
+
),
|
|
300
|
+
children: /* @__PURE__ */ r("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ t("ul", { className: "flex flex-col py-4", children: [
|
|
301
|
+
p.map(
|
|
302
|
+
(e, o) => {
|
|
303
|
+
var l;
|
|
304
|
+
return (l = e.columns) != null && l.length || e.featured ? /* @__PURE__ */ t("li", { className: "px-5", children: [
|
|
305
|
+
/* @__PURE__ */ t(
|
|
306
|
+
"button",
|
|
307
|
+
{
|
|
308
|
+
type: "button",
|
|
309
|
+
"aria-expanded": y === o,
|
|
310
|
+
onClick: () => M((s) => s === o ? null : o),
|
|
311
|
+
className: n(
|
|
312
|
+
"flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",
|
|
313
|
+
a.mobileButton
|
|
314
|
+
),
|
|
315
|
+
children: [
|
|
316
|
+
/* @__PURE__ */ t("span", { className: "flex items-center gap-2", children: [
|
|
317
|
+
e.label,
|
|
318
|
+
e.badge ? /* @__PURE__ */ r("span", { className: n("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide", a.badge), children: e.badge }) : null
|
|
319
|
+
] }),
|
|
320
|
+
/* @__PURE__ */ r(
|
|
321
|
+
P,
|
|
322
|
+
{
|
|
323
|
+
className: n(
|
|
324
|
+
"h-4 w-4 shrink-0 transition-transform duration-150",
|
|
325
|
+
y === o && "rotate-180"
|
|
326
|
+
)
|
|
327
|
+
}
|
|
328
|
+
)
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
),
|
|
332
|
+
/* @__PURE__ */ r(
|
|
333
|
+
"div",
|
|
334
|
+
{
|
|
335
|
+
className: n(
|
|
336
|
+
"grid transition-[grid-template-rows,opacity] duration-200",
|
|
337
|
+
y === o ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"
|
|
338
|
+
),
|
|
339
|
+
children: /* @__PURE__ */ r("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ t("div", { className: "py-2 pl-1", children: [
|
|
340
|
+
j(e),
|
|
341
|
+
e.featured ? /* @__PURE__ */ r("div", { className: "max-w-sm", children: B(e, !0) }) : null
|
|
342
|
+
] }) })
|
|
343
|
+
}
|
|
344
|
+
)
|
|
345
|
+
] }, e.label) : /* @__PURE__ */ r("li", { className: "px-5", children: /* @__PURE__ */ r(
|
|
346
|
+
i,
|
|
347
|
+
{
|
|
348
|
+
href: e.href ?? "#",
|
|
349
|
+
onClick: () => v(!1),
|
|
350
|
+
className: n(
|
|
351
|
+
"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",
|
|
352
|
+
a.mobileLink
|
|
353
|
+
),
|
|
354
|
+
children: e.label
|
|
355
|
+
}
|
|
356
|
+
) }, e.label);
|
|
357
|
+
}
|
|
358
|
+
),
|
|
359
|
+
h ? /* @__PURE__ */ r("li", { className: "px-8 pb-2 pt-3", children: h }) : g ? /* @__PURE__ */ r("li", { className: "mt-3 flex flex-wrap gap-3 px-8 pb-2", children: g }) : null
|
|
360
|
+
] }) })
|
|
361
|
+
}
|
|
362
|
+
)
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
);
|
|
366
|
+
};
|
|
367
|
+
Z.displayName = "MegaMenu";
|
|
368
|
+
export {
|
|
369
|
+
Z as MegaMenu
|
|
370
|
+
};
|
|
371
|
+
//# sourceMappingURL=MegaMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MegaMenu.js","sources":["../../../../src/components/MegaMenu/MegaMenu.tsx"],"sourcesContent":["\"use client\";\nimport { useId, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { getContrastText } from \"../../utils/contrast\";\nimport { ChevronDown, Menu, X } from \"../../icons\";\nimport type { MegaMenuProps, MegaMenuVariant, MegaMenuItem } from \"./types\";\n\ninterface MegaMenuStyle {\n shell: string;\n bar: string;\n header: string;\n trigger: string;\n triggerOpen: string;\n badge: string;\n panel: string;\n columnTitle: string;\n columnLink: string;\n linkDescription: string;\n mobilePanel: string;\n mobileButton: string;\n mobileLink: string;\n brandText: string;\n brandDot: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<MegaMenuVariant, MegaMenuStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileButton: `${light} hover:bg-surface`,\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: light,\n brandDot: \"bg-foreground\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileButton: `${light} hover:bg-surface`,\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: light,\n brandDot: \"bg-foreground\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-on-secondary/60 hover:text-on-secondary hover:bg-white/10\",\n triggerOpen: \"bg-white/10 text-on-secondary\",\n badge: \"bg-white/15 text-on-secondary\",\n panel: \"border-white/10 bg-[#161616]\",\n columnTitle: \"text-on-secondary/45\",\n columnLink: \"hover:bg-white/10\",\n linkDescription: \"text-on-secondary/50\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileButton: `${inverse} hover:bg-white/10`,\n mobileLink: \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n },\n};\n\nexport const MegaMenu = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n items,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n onKeyDown,\n ...props\n}: MegaMenuProps) => {\n const ids = useId();\n const Link = LinkComponent ?? \"a\";\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<number | null>(null);\n const s = styles[variant];\n\n const closePanels = () => setOpenIndex(null);\n const closeAll = () => {\n setOpenIndex(null);\n setMobileOpen(false);\n setMobileExpanded(null);\n };\n\n const panelId = (i: number) => `${ids}-panel-${i}`;\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n const triggerClasses = cn(\n \"flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150\",\n s.trigger,\n );\n\n const renderColumns = (item: MegaMenuItem) => (\n <div\n className={cn(\n \"grid gap-x-10 gap-y-8 sm:grid-cols-2\",\n item.featured ? \"\" : \"lg:grid-cols-3\",\n )}\n >\n {item.columns?.map((column, ci) => (\n <div key={column.title ?? ci}>\n {column.title ? (\n <h4\n className={cn(\n \"text-xs font-semibold uppercase tracking-[0.14em]\",\n s.columnTitle,\n )}\n >\n {column.title}\n </h4>\n ) : null}\n <ul className={cn(column.title && \"mt-3\", \"space-y-0.5\")}>\n {column.links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n onClick={closeAll}\n className={cn(\n \"-mx-2 block rounded-md px-2 py-2 transition-colors duration-150\",\n s.columnLink,\n )}\n >\n <span className=\"block text-sm font-medium text-foreground\">\n {link.label}\n </span>\n {link.description ? (\n <span\n className={cn(\n \"mt-0.5 block text-[13px] leading-snug\",\n s.linkDescription,\n )}\n >\n {link.description}\n </span>\n ) : null}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n\n const renderFeatured = (item: MegaMenuItem, mobile = false) => {\n const featured = item.featured;\n if (!featured) return null;\n const featuredStyle = featured.accent\n ? { backgroundColor: featured.accent, color: getContrastText(featured.accent) }\n : undefined;\n\n return (\n <Link\n href={featured.href}\n onClick={closeAll}\n className={cn(\n \"group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5\",\n mobile && \"mt-8\",\n !featured.accent && \"bg-primary text-on-primary\",\n )}\n style={featuredStyle}\n >\n <div className=\"flex h-full flex-col justify-between gap-4\">\n <div>\n <h4 className=\"font-display text-base font-semibold tracking-tight\">\n {featured.title}\n </h4>\n {featured.description ? (\n <p className=\"mt-1.5 text-[13px] leading-relaxed opacity-80\">\n {featured.description}\n </p>\n ) : null}\n </div>\n {featured.cta ? (\n <span className=\"text-sm font-semibold underline decoration-1 underline-offset-4\">\n {featured.cta} →\n </span>\n ) : null}\n </div>\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40\"\n />\n </Link>\n );\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n closeAll();\n }\n onKeyDown?.(event);\n };\n\n return (\n <header\n className={cn(\n \"relative w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n s.shell,\n s.header,\n className,\n )}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <nav className={cn(\"relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} onMouseLeave={closePanels} aria-label=\"Mega menu\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className=\"hidden items-center gap-1 lg:flex\">\n {items.map((item, i) => {\n const hasPanel = Boolean(item.columns?.length || item.featured);\n const open = openIndex === i;\n return (\n <li key={item.label} className=\"relative\">\n {hasPanel ? (\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={open}\n aria-controls={panelId(i)}\n onClick={() => setOpenIndex(open ? null : i)}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(triggerClasses, open && s.triggerOpen)}\n >\n <span className=\"flex items-center gap-1.5\">\n {item.label}\n {item.badge ? (\n <span\n className={cn(\n \"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\",\n s.badge,\n )}\n >\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <Link href={item.href ?? \"#\"} className={triggerClasses}>\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n\n <div className=\"hidden items-center gap-3 lg:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n {languageSwitcher ? (\n <div className=\"flex items-center lg:hidden\">{languageSwitcher}</div>\n ) : null}\n\n <button\n type=\"button\"\n aria-label={mobileOpen ? \"Close menu\" : \"Open menu\"}\n aria-expanded={mobileOpen}\n onClick={() => setMobileOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.mobileButton,\n )}\n >\n {mobileOpen ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n {items.map((item, i) => {\n if (!item.columns?.length && !item.featured) return null;\n const open = openIndex === i;\n return (\n <div\n key={item.label}\n id={panelId(i)}\n role=\"region\"\n aria-label={`${item.label} menu`}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(\n \"absolute top-full z-50 pt-2 transition-all duration-150\",\n variant === \"floating\" ? \"inset-x-0 mx-auto w-full max-w-5xl\" : \"inset-x-0\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n <div\n className={cn(\n \"overflow-hidden rounded-xl border p-6 md:p-8\",\n s.panel,\n item.featured ? \"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12\" : \"\",\n )}\n >\n {renderColumns(item)}\n {item.featured && (\n <div className={cn(\"mt-8 max-w-sm lg:mt-0 lg:w-64\")}>\n {renderFeatured(item)}\n </div>\n )}\n </div>\n </div>\n );\n })}\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 lg:hidden\",\n mobileOpen ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className=\"flex flex-col py-4\">\n {items.map((item, i) =>\n item.columns?.length || item.featured ? (\n <li key={item.label} className=\"px-5\">\n <button\n type=\"button\"\n aria-expanded={mobileExpanded === i}\n onClick={() =>\n setMobileExpanded((prev) => (prev === i ? null : i))\n }\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileButton,\n )}\n >\n <span className=\"flex items-center gap-2\">\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n mobileExpanded === i && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200\",\n mobileExpanded === i\n ? \"grid-rows-[1fr] opacity-100\"\n : \"grid-rows-[0fr] opacity-0\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <div className=\"py-2 pl-1\">\n {renderColumns(item)}\n {item.featured ? (\n <div className=\"max-w-sm\">{renderFeatured(item, true)}</div>\n ) : null}\n </div>\n </div>\n </div>\n </li>\n ) : (\n <li key={item.label} className=\"px-5\">\n <Link\n href={item.href ?? \"#\"}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {item.label}\n </Link>\n </li>\n ),\n )}\n {cta ? (\n <li className=\"px-8 pb-2 pt-3\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-8 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nMegaMenu.displayName = \"MegaMenu\";"],"names":["inverse","light","styles","MegaMenu","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","items","actions","cta","languageSwitcher","sticky","LinkComponent","onKeyDown","props","ids","useId","Link","openIndex","setOpenIndex","useState","mobileOpen","setMobileOpen","mobileExpanded","setMobileExpanded","s","closePanels","closeAll","panelId","i","logoNode","jsx","cn","brandNode","jsxs","triggerClasses","renderColumns","item","column","ci","link","renderFeatured","mobile","featured","featuredStyle","getContrastText","handleKeyDown","event","hasPanel","_a","open","ChevronDown","o","X","Menu","prev"],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as N, jsx as r } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef as j, useId as p, useRef as v, useEffect as t } from "react";
|
|
4
|
+
import { cn as k } from "../utils/cn.js";
|
|
5
|
+
import { X as E } from "../icons.js";
|
|
6
|
+
const I = {
|
|
7
|
+
sm: "max-w-sm",
|
|
8
|
+
md: "max-w-lg",
|
|
9
|
+
lg: "max-w-2xl"
|
|
10
|
+
}, z = j(
|
|
11
|
+
({ className: b, open: d, onClose: o, title: n, description: i, footer: c, size: h = "md", children: x, ...w }, l) => {
|
|
12
|
+
const u = p(), m = p(), s = v(null), a = v(o);
|
|
13
|
+
return t(() => {
|
|
14
|
+
a.current = o;
|
|
15
|
+
}, [o]), t(() => {
|
|
16
|
+
const e = s.current;
|
|
17
|
+
e && (e.hasAttribute("popover") || e.setAttribute("popover", "auto"));
|
|
18
|
+
}, []), t(() => {
|
|
19
|
+
const e = s.current;
|
|
20
|
+
e && (d ? (e.matches(":popover-open") || e.showPopover(), document.body.style.overflow = "hidden") : (e.matches(":popover-open") && e.hidePopover(), document.body.style.overflow = ""));
|
|
21
|
+
}, [d]), t(() => {
|
|
22
|
+
const e = s.current;
|
|
23
|
+
if (!e) return;
|
|
24
|
+
const f = (y) => {
|
|
25
|
+
var g;
|
|
26
|
+
y.newState === "closed" && ((g = a.current) == null || g.call(a));
|
|
27
|
+
};
|
|
28
|
+
return e.addEventListener("toggle", f), () => e.removeEventListener("toggle", f);
|
|
29
|
+
}, []), t(
|
|
30
|
+
() => () => {
|
|
31
|
+
document.body.style.overflow = "";
|
|
32
|
+
},
|
|
33
|
+
[]
|
|
34
|
+
), /* @__PURE__ */ N(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
ref: (e) => {
|
|
38
|
+
s.current = e, typeof l == "function" ? l(e) : l && (l.current = e);
|
|
39
|
+
},
|
|
40
|
+
role: "dialog",
|
|
41
|
+
"aria-modal": "true",
|
|
42
|
+
"aria-labelledby": n ? u : void 0,
|
|
43
|
+
"aria-describedby": i ? m : void 0,
|
|
44
|
+
className: k(
|
|
45
|
+
"modal-anim modal-backdrop fixed inset-0 z-[100] m-auto h-fit max-h-[calc(100vh-2rem)] w-fit max-w-[calc(100vw-2rem)] overflow-y-auto rounded-2xl border border-border bg-surface p-6 text-foreground shadow-overlay",
|
|
46
|
+
I[h],
|
|
47
|
+
b
|
|
48
|
+
),
|
|
49
|
+
...w,
|
|
50
|
+
children: [
|
|
51
|
+
n ? /* @__PURE__ */ r(
|
|
52
|
+
"h2",
|
|
53
|
+
{
|
|
54
|
+
id: u,
|
|
55
|
+
className: "pr-8 font-display text-lg font-semibold tracking-tight text-foreground",
|
|
56
|
+
children: n
|
|
57
|
+
}
|
|
58
|
+
) : null,
|
|
59
|
+
i ? /* @__PURE__ */ r("p", { id: m, className: "mt-1.5 text-sm leading-6 text-muted-foreground", children: i }) : null,
|
|
60
|
+
/* @__PURE__ */ r(
|
|
61
|
+
"button",
|
|
62
|
+
{
|
|
63
|
+
type: "button",
|
|
64
|
+
"aria-label": "Close dialog",
|
|
65
|
+
onClick: o,
|
|
66
|
+
className: "absolute right-4 top-4 inline-flex h-8 w-8 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors duration-150 hover:bg-surface-strong hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
67
|
+
children: /* @__PURE__ */ r(E, { className: "h-4 w-4" })
|
|
68
|
+
}
|
|
69
|
+
),
|
|
70
|
+
/* @__PURE__ */ r("div", { className: n || i ? "mt-4" : "pt-8", children: x }),
|
|
71
|
+
c ? /* @__PURE__ */ r("div", { className: "mt-6 flex flex-wrap items-center justify-end gap-3", children: c }) : null
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
z.displayName = "Modal";
|
|
78
|
+
export {
|
|
79
|
+
z as Modal
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef, useEffect, useId, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { X } from \"../icons\";\n\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n open: boolean;\n onClose: () => void;\n /** Dialog heading (required for a11y; auto-linked via `aria-labelledby`). */\n title?: ReactNode;\n description?: ReactNode;\n /** Rendered below the content, e.g. actions. */\n footer?: ReactNode;\n /** Content width. Defaults to `md`. */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizes: Record<NonNullable<ModalProps[\"size\"]>, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n};\n\n/**\n * Accessible dialog built on the HTML Popover API.\n *\n * `popover=\"auto\"` renders in the top layer and gives light-dismiss (outside\n * click + `Escape`), automatic focus movement and restoration for free, so no\n * portal, focus trap or key handlers are needed. State stays controlled via\n * `open` / `onClose`.\n */\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n ({ className, open, onClose, title, description, footer, size = \"md\", children, ...props }, ref) => {\n const titleId = useId();\n const descriptionId = useId();\n const internalRef = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n useEffect(() => {\n const el = internalRef.current;\n if (!el) return;\n if (!el.hasAttribute(\"popover\")) el.setAttribute(\"popover\", \"auto\");\n }, []);\n\n useEffect(() => {\n const el = internalRef.current;\n if (!el) return;\n if (open) {\n if (!el.matches(\":popover-open\")) el.showPopover();\n document.body.style.overflow = \"hidden\";\n } else {\n if (el.matches(\":popover-open\")) el.hidePopover();\n document.body.style.overflow = \"\";\n }\n }, [open]);\n\n useEffect(() => {\n const el = internalRef.current;\n if (!el) return;\n const onToggle = (event: Event) => {\n if ((event as ToggleEvent).newState === \"closed\") onCloseRef.current?.();\n };\n el.addEventListener(\"toggle\", onToggle);\n return () => el.removeEventListener(\"toggle\", onToggle);\n }, []);\n\n useEffect(\n () => () => {\n document.body.style.overflow = \"\";\n },\n [],\n );\n\n return (\n <div\n ref={(node) => {\n internalRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(\n \"modal-anim modal-backdrop fixed inset-0 z-[100] m-auto h-fit max-h-[calc(100vh-2rem)] w-fit max-w-[calc(100vw-2rem)] overflow-y-auto rounded-2xl border border-border bg-surface p-6 text-foreground shadow-overlay\",\n sizes[size],\n className,\n )}\n {...props}\n >\n {title ? (\n <h2\n id={titleId}\n className=\"pr-8 font-display text-lg font-semibold tracking-tight text-foreground\"\n >\n {title}\n </h2>\n ) : null}\n {description ? (\n <p id={descriptionId} className=\"mt-1.5 text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Close dialog\"\n onClick={onClose}\n className=\"absolute right-4 top-4 inline-flex h-8 w-8 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors duration-150 hover:bg-surface-strong hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n <div className={title || description ? \"mt-4\" : \"pt-8\"}>{children}</div>\n {footer ? (\n <div className=\"mt-6 flex flex-wrap items-center justify-end gap-3\">{footer}</div>\n ) : null}\n </div>\n );\n },\n);\nModal.displayName = \"Modal\";"],"names":["sizes","Modal","forwardRef","className","open","onClose","title","description","footer","size","children","props","ref","titleId","useId","descriptionId","internalRef","useRef","onCloseRef","useEffect","el","onToggle","event","_a","jsxs","node","cn","jsx","X"],"mappings":";;;;AAiBA,MAAMA,IAAyD;AAAA,EAC7D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAUaC,IAAQC;AAAA,EACnB,CAAC,EAAE,WAAAC,GAAW,MAAAC,GAAM,SAAAC,GAAS,OAAAC,GAAO,aAAAC,GAAa,QAAAC,GAAQ,MAAAC,IAAO,MAAM,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAAQ;AAClG,UAAMC,IAAUC,EAAA,GACVC,IAAgBD,EAAA,GAChBE,IAAcC,EAA8B,IAAI,GAChDC,IAAaD,EAAOZ,CAAO;AAEjC,WAAAc,EAAU,MAAM;AACd,MAAAD,EAAW,UAAUb;AAAA,IACvB,GAAG,CAACA,CAAO,CAAC,GAEZc,EAAU,MAAM;AACd,YAAMC,IAAKJ,EAAY;AACvB,MAAKI,MACAA,EAAG,aAAa,SAAS,KAAGA,EAAG,aAAa,WAAW,MAAM;AAAA,IACpE,GAAG,CAAA,CAAE,GAELD,EAAU,MAAM;AACd,YAAMC,IAAKJ,EAAY;AACvB,MAAKI,MACDhB,KACGgB,EAAG,QAAQ,eAAe,OAAM,YAAA,GACrC,SAAS,KAAK,MAAM,WAAW,aAE3BA,EAAG,QAAQ,eAAe,OAAM,YAAA,GACpC,SAAS,KAAK,MAAM,WAAW;AAAA,IAEnC,GAAG,CAAChB,CAAI,CAAC,GAETe,EAAU,MAAM;AACd,YAAMC,IAAKJ,EAAY;AACvB,UAAI,CAACI,EAAI;AACT,YAAMC,IAAW,CAACC,MAAiB;;AACjC,QAAKA,EAAsB,aAAa,cAAUC,IAAAL,EAAW,YAAX,QAAAK,EAAA,KAAAL;AAAA,MACpD;AACA,aAAAE,EAAG,iBAAiB,UAAUC,CAAQ,GAC/B,MAAMD,EAAG,oBAAoB,UAAUC,CAAQ;AAAA,IACxD,GAAG,CAAA,CAAE,GAELF;AAAA,MACE,MAAM,MAAM;AACV,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC;AAAA,MACA,CAAA;AAAA,IAAC,GAID,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK,CAACC,MAAS;AACb,UAAAT,EAAY,UAAUS,GAClB,OAAOb,KAAQ,aAAYA,EAAIa,CAAI,IAC9Bb,QAAS,UAAUa;AAAA,QAC9B;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QACX,mBAAiBnB,IAAQO,IAAU;AAAA,QACnC,oBAAkBN,IAAcQ,IAAgB;AAAA,QAChD,WAAWW;AAAA,UACT;AAAA,UACA1B,EAAMS,CAAI;AAAA,UACVN;AAAA,QAAA;AAAA,QAED,GAAGQ;AAAA,QAEH,UAAA;AAAA,UAAAL,IACC,gBAAAqB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAId;AAAA,cACJ,WAAU;AAAA,cAET,UAAAP;AAAA,YAAA;AAAA,UAAA,IAED;AAAA,UACHC,sBACE,KAAA,EAAE,IAAIQ,GAAe,WAAU,kDAC7B,aACH,IACE;AAAA,UACJ,gBAAAY;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,SAAStB;AAAA,cACT,WAAU;AAAA,cAEV,UAAA,gBAAAsB,EAACC,GAAA,EAAE,WAAU,UAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,4BAExB,OAAA,EAAI,WAAWtB,KAASC,IAAc,SAAS,QAAS,UAAAG,GAAS;AAAA,UACjEF,IACC,gBAAAmB,EAAC,OAAA,EAAI,WAAU,sDAAsD,aAAO,IAC1E;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA1B,EAAM,cAAc;"}
|