@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 @@
|
|
|
1
|
+
{"version":3,"file":"Minimal.js","sources":["../../../../../src/components/Footer/variants/Minimal.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport type { FooterProps } from \"../types\";\nimport { FooterWordmark, FooterLogoNode } from \"../parts\";\n\ninterface MinimalProps extends FooterProps {}\n\nexport function FooterMinimal({ className, brand, logo, logoSrc, logoAlt, logoClassName, columns, languageSwitcher, bottom, LinkComponent, ...props }: MinimalProps) {\n const Link = LinkComponent ?? \"a\";\n const brandNode = FooterLogoNode({ logo, logoSrc, logoAlt, logoClassName, brand }) ?? <FooterWordmark brand={brand} />;\n\n return (\n <footer className={cn(\"w-full border-t border-border bg-background\", className)} {...props}>\n <Container className=\"flex flex-col items-center justify-between gap-6 py-10 sm:flex-row\">\n {brandNode}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-8 gap-y-3\">\n {columns.flatMap((c) => c.links).slice(0, 6).map((link) => (\n <li key={link.href}>\n <Link href={link.href} className=\"text-sm text-muted-foreground transition-colors duration-150 hover:text-foreground\">\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n <div className=\"flex flex-col items-center gap-3\">\n {languageSwitcher ? <div>{languageSwitcher}</div> : null}\n <div className=\"text-sm text-muted-foreground\">{bottom}</div>\n </div>\n </Container>\n </footer>\n );\n}\nFooterMinimal.displayName = \"FooterMinimal\";"],"names":["FooterMinimal","className","brand","logo","logoSrc","logoAlt","logoClassName","columns","languageSwitcher","bottom","LinkComponent","props","Link","brandNode","FooterLogoNode","jsx","FooterWordmark","cn","jsxs","Container","c","link"],"mappings":";;;;AAOO,SAASA,EAAc,EAAE,WAAAC,GAAW,OAAAC,GAAO,MAAAC,GAAM,SAAAC,GAAS,SAAAC,GAAS,eAAAC,GAAe,SAAAC,GAAS,kBAAAC,GAAkB,QAAAC,GAAQ,eAAAC,GAAe,GAAGC,KAAuB;AACnK,QAAMC,IAAOF,KAAiB,KACxBG,IAAYC,EAAe,EAAE,MAAAX,GAAM,SAAAC,GAAS,SAAAC,GAAS,eAAAC,GAAe,OAAAJ,EAAA,CAAO,KAAK,gBAAAa,EAACC,GAAA,EAAe,OAAAd,EAAA,CAAc;AAEpH,SACE,gBAAAa,EAAC,UAAA,EAAO,WAAWE,EAAG,+CAA+ChB,CAAS,GAAI,GAAGU,GACnF,UAAA,gBAAAO,EAACC,GAAA,EAAU,WAAU,sEAClB,UAAA;AAAA,IAAAN;AAAA,IACD,gBAAAE,EAAC,MAAA,EAAG,WAAU,8DACX,YAAQ,QAAQ,CAACK,MAAMA,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAACC,MAChD,gBAAAN,EAAC,MAAA,EACC,UAAA,gBAAAA,EAACH,GAAA,EAAK,MAAMS,EAAK,MAAM,WAAU,sFAC9B,YAAK,MAAA,CACR,EAAA,GAHOA,EAAK,IAId,CACD,GACH;AAAA,IACA,gBAAAH,EAAC,OAAA,EAAI,WAAU,oCACZ,UAAA;AAAA,MAAAV,IAAmB,gBAAAO,EAAC,OAAA,EAAK,UAAAP,EAAA,CAAiB,IAAS;AAAA,MACpD,gBAAAO,EAAC,OAAA,EAAI,WAAU,iCAAiC,UAAAN,EAAA,CAAO;AAAA,IAAA,EAAA,CACzD;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AACAT,EAAc,cAAc;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as m } from "react";
|
|
3
|
+
import { HeroSplit as i } from "./variants/Split.js";
|
|
4
|
+
import { HeroCentered as f } from "./variants/Centered.js";
|
|
5
|
+
import { HeroStatement as n } from "./variants/Statement.js";
|
|
6
|
+
const p = m(({ variant: o = "split", ...r }, e) => o === "centered" ? /* @__PURE__ */ t(f, { ref: e, ...r }) : o === "statement" ? /* @__PURE__ */ t(n, { ref: e, ...r }) : /* @__PURE__ */ t(i, { ref: e, ...r }));
|
|
7
|
+
p.displayName = "Hero";
|
|
8
|
+
export {
|
|
9
|
+
p as Hero
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=Hero.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Hero.js","sources":["../../../../src/components/Hero/Hero.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { HeroProps } from \"./types\";\nimport { HeroSplit } from \"./variants/Split\";\nimport { HeroCentered } from \"./variants/Centered\";\nimport { HeroStatement } from \"./variants/Statement\";\n\nexport const Hero = forwardRef<HTMLElement, HeroProps>(({ variant = \"split\", ...props }, ref) => {\n if (variant === \"centered\") return <HeroCentered ref={ref} {...props} />;\n if (variant === \"statement\") return <HeroStatement ref={ref} {...props} />;\n return <HeroSplit ref={ref} {...props} />;\n});\nHero.displayName = \"Hero\";"],"names":["Hero","forwardRef","variant","props","ref","HeroCentered","HeroStatement","jsx","HeroSplit"],"mappings":";;;;;AAMO,MAAMA,IAAOC,EAAmC,CAAC,EAAE,SAAAC,IAAU,SAAS,GAAGC,EAAA,GAASC,MACnFF,MAAY,+BAAoBG,GAAA,EAAa,KAAAD,GAAW,GAAGD,GAAO,IAClED,MAAY,gCAAqBI,GAAA,EAAc,KAAAF,GAAW,GAAGD,GAAO,IACjE,gBAAAI,EAACC,GAAA,EAAU,KAAAJ,GAAW,GAAGD,EAAA,CAAO,CACxC;AACDH,EAAK,cAAc;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as r, jsxs as n } from "react/jsx-runtime";
|
|
2
|
+
const i = "relative mx-auto flex w-full max-w-6xl flex-col items-center px-5 sm:px-8", s = "font-display font-semibold tracking-[-0.03em] text-balance text-foreground";
|
|
3
|
+
function o({ eyebrow: e }) {
|
|
4
|
+
return typeof e == "string" ? /* @__PURE__ */ r("p", { className: "text-xs font-semibold uppercase tracking-[0.2em] text-primary", children: e }) : e ? /* @__PURE__ */ r("div", { children: e }) : null;
|
|
5
|
+
}
|
|
6
|
+
function x({
|
|
7
|
+
primaryAction: e,
|
|
8
|
+
secondaryAction: t
|
|
9
|
+
}) {
|
|
10
|
+
return !e && !t ? null : /* @__PURE__ */ n("div", { className: "flex flex-wrap items-center gap-4", children: [
|
|
11
|
+
e,
|
|
12
|
+
t
|
|
13
|
+
] });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
x as HeroActions,
|
|
17
|
+
o as HeroEyebrow,
|
|
18
|
+
i as heroContainer,
|
|
19
|
+
s as heroTitleBase
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sources":["../../../../src/components/Hero/parts.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nexport const heroContainer =\n \"relative mx-auto flex w-full max-w-6xl flex-col items-center px-5 sm:px-8\";\n\nexport const heroTitleBase =\n \"font-display font-semibold tracking-[-0.03em] text-balance text-foreground\";\n\nexport function HeroEyebrow({ eyebrow }: { eyebrow?: ReactNode }) {\n if (typeof eyebrow === \"string\") {\n return (\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-primary\">\n {eyebrow}\n </p>\n );\n }\n return eyebrow ? <div>{eyebrow}</div> : null;\n}\n\nexport function HeroActions({\n primaryAction,\n secondaryAction,\n}: {\n primaryAction?: ReactNode;\n secondaryAction?: ReactNode;\n}) {\n if (!primaryAction && !secondaryAction) return null;\n return <div className=\"flex flex-wrap items-center gap-4\">{primaryAction}{secondaryAction}</div>;\n}"],"names":["heroContainer","heroTitleBase","HeroEyebrow","eyebrow","jsx","HeroActions","primaryAction","secondaryAction","jsxs"],"mappings":";AAEO,MAAMA,IACX,6EAEWC,IACX;AAEK,SAASC,EAAY,EAAE,SAAAC,KAAoC;AAChE,SAAI,OAAOA,KAAY,WAEnB,gBAAAC,EAAC,KAAA,EAAE,WAAU,iEACV,UAAAD,GACH,IAGGA,IAAU,gBAAAC,EAAC,OAAA,EAAK,UAAAD,EAAA,CAAQ,IAAS;AAC1C;AAEO,SAASE,EAAY;AAAA,EAC1B,eAAAC;AAAA,EACA,iBAAAC;AACF,GAGG;AACD,SAAI,CAACD,KAAiB,CAACC,IAAwB,OACxC,gBAAAC,EAAC,OAAA,EAAI,WAAU,qCAAqC,UAAA;AAAA,IAAAF;AAAA,IAAeC;AAAA,EAAA,GAAgB;AAC5F;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as e, jsxs as n } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as b } from "react";
|
|
3
|
+
import { cn as r } from "../../../utils/cn.js";
|
|
4
|
+
import { HeroEyebrow as g, heroTitleBase as h, HeroActions as N, heroContainer as w } from "../parts.js";
|
|
5
|
+
const j = b(
|
|
6
|
+
({ className: d, eyebrow: c, title: x, description: t, primaryAction: s, secondaryAction: a, media: m, meta: o, id: i, ...p }, u) => /* @__PURE__ */ e(
|
|
7
|
+
"section",
|
|
8
|
+
{
|
|
9
|
+
ref: u,
|
|
10
|
+
id: i,
|
|
11
|
+
className: r("relative w-full border-b border-border bg-background", d),
|
|
12
|
+
...p,
|
|
13
|
+
children: /* @__PURE__ */ n("div", { className: r(w, "pt-24 pb-20 text-center sm:pt-32 sm:pb-24"), children: [
|
|
14
|
+
/* @__PURE__ */ e(g, { eyebrow: c }),
|
|
15
|
+
/* @__PURE__ */ e("h1", { className: r(h, "mt-7 max-w-4xl text-5xl leading-[1.04] sm:text-6xl lg:text-7xl"), children: x }),
|
|
16
|
+
t ? /* @__PURE__ */ e("p", { className: "mx-auto mt-7 max-w-xl text-pretty leading-relaxed text-muted-foreground sm:text-lg", children: t }) : null,
|
|
17
|
+
s || a ? /* @__PURE__ */ e("div", { className: "mt-10 justify-center", children: /* @__PURE__ */ e(N, { primaryAction: s, secondaryAction: a }) }) : null,
|
|
18
|
+
o ? /* @__PURE__ */ e("ul", { className: "mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3", children: o.map((l, f) => /* @__PURE__ */ n(
|
|
19
|
+
"li",
|
|
20
|
+
{
|
|
21
|
+
className: r(
|
|
22
|
+
"flex items-center gap-2 text-sm text-muted-foreground",
|
|
23
|
+
f > 0 && "sm:border-l sm:border-border sm:pl-9"
|
|
24
|
+
),
|
|
25
|
+
children: [
|
|
26
|
+
l.icon ? /* @__PURE__ */ e("span", { className: "text-foreground/35", children: l.icon }) : null,
|
|
27
|
+
l.label
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
l.label
|
|
31
|
+
)) }) : null,
|
|
32
|
+
m ? /* @__PURE__ */ e("div", { className: "mt-16 w-full", children: m }) : null
|
|
33
|
+
] })
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
j.displayName = "HeroCentered";
|
|
38
|
+
export {
|
|
39
|
+
j as HeroCentered
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=Centered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Centered.js","sources":["../../../../../src/components/Hero/variants/Centered.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { HeroActions, HeroEyebrow, heroContainer, heroTitleBase } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Centered — understated, one statement, generous white space. */\nexport const HeroCentered = forwardRef<HTMLElement, HeroProps>(\n (\n { className, eyebrow, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(heroContainer, \"pt-24 pb-20 text-center sm:pt-32 sm:pb-24\")}>\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleBase, \"mt-7 max-w-4xl text-5xl leading-[1.04] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-7 max-w-xl text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3\">\n {meta.map((m, i) => (\n <li\n key={m.label}\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground\",\n i > 0 && \"sm:border-l sm:border-border sm:pl-9\",\n )}\n >\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n {media ? <div className=\"mt-16 w-full\">{media}</div> : null}\n </div>\n </section>\n ),\n);\nHeroCentered.displayName = \"HeroCentered\";"],"names":["HeroCentered","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","jsx","cn","heroContainer","HeroEyebrow","heroTitleBase","HeroActions","m","i","jsxs"],"mappings":";;;;AAMO,MAAMA,IAAeC;AAAA,EAC1B,CACE,EAAE,WAAAC,GAAW,SAAAC,GAAS,OAAAC,GAAO,aAAAC,GAAa,eAAAC,GAAe,iBAAAC,GAAiB,OAAAC,GAAO,MAAAC,GAAM,IAAAC,GAAI,GAAGC,EAAA,GAC9FC,MAEA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,IAAAF;AAAA,MACA,WAAWI,EAAG,wDAAwDZ,CAAS;AAAA,MAC9E,GAAGS;AAAA,MAEJ,4BAAC,OAAA,EAAI,WAAWG,EAAGC,GAAe,2CAA2C,GAC3E,UAAA;AAAA,QAAA,gBAAAF,EAACG,KAAY,SAAAb,GAAkB;AAAA,0BAC9B,MAAA,EAAG,WAAWW,EAAGG,GAAe,gEAAgE,GAC9F,UAAAb,GACH;AAAA,QACCC,IACC,gBAAAQ,EAAC,KAAA,EAAE,WAAU,sFACV,aACH,IACE;AAAA,QACHP,KAAiBC,IAChB,gBAAAM,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA,gBAAAA,EAACK,GAAA,EAAY,eAAAZ,GAA8B,iBAAAC,EAAA,CAAkC,EAAA,CAC/E,IACE;AAAA,QACHE,sBACE,MAAA,EAAG,WAAU,oEACX,UAAAA,EAAK,IAAI,CAACU,GAAGC,MACZ,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAWP;AAAA,cACT;AAAA,cACAM,IAAI,KAAK;AAAA,YAAA;AAAA,YAGV,UAAA;AAAA,cAAAD,EAAE,OAAO,gBAAAN,EAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAM,EAAE,MAAK,IAAU;AAAA,cAChEA,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAPEA,EAAE;AAAA,QAAA,CASV,GACH,IACE;AAAA,QACHX,IAAQ,gBAAAK,EAAC,OAAA,EAAI,WAAU,gBAAgB,aAAM,IAAS;AAAA,MAAA,EAAA,CACzD;AAAA,IAAA;AAAA,EAAA;AAGN;AACAb,EAAa,cAAc;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as e, jsxs as r } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as f } from "react";
|
|
3
|
+
import { cn as t } from "../../../utils/cn.js";
|
|
4
|
+
import { HeroEyebrow as b, heroTitleBase as u, HeroActions as h, heroContainer as N } from "../parts.js";
|
|
5
|
+
const w = f(
|
|
6
|
+
({ className: i, eyebrow: n, title: c, description: a, primaryAction: s, secondaryAction: o, media: d, meta: m, id: x, ...p }, g) => /* @__PURE__ */ e(
|
|
7
|
+
"section",
|
|
8
|
+
{
|
|
9
|
+
ref: g,
|
|
10
|
+
id: x,
|
|
11
|
+
className: t("relative w-full border-b border-border bg-background", i),
|
|
12
|
+
...p,
|
|
13
|
+
children: /* @__PURE__ */ r("div", { className: t(
|
|
14
|
+
N,
|
|
15
|
+
"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20"
|
|
16
|
+
), children: [
|
|
17
|
+
/* @__PURE__ */ r("div", { className: "max-w-xl", children: [
|
|
18
|
+
/* @__PURE__ */ e(b, { eyebrow: n }),
|
|
19
|
+
/* @__PURE__ */ e("h1", { className: t(u, "mt-6 text-5xl leading-[1.03] sm:text-6xl lg:text-7xl"), children: c }),
|
|
20
|
+
a ? /* @__PURE__ */ e("p", { className: "mt-7 max-w-md text-pretty leading-relaxed text-muted-foreground sm:text-lg", children: a }) : null,
|
|
21
|
+
s || o ? /* @__PURE__ */ e("div", { className: "mt-10", children: /* @__PURE__ */ e(h, { primaryAction: s, secondaryAction: o }) }) : null,
|
|
22
|
+
m ? /* @__PURE__ */ e("ul", { className: "mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6", children: m.map((l) => /* @__PURE__ */ r("li", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
23
|
+
l.icon ? /* @__PURE__ */ e("span", { className: "text-foreground/35", children: l.icon }) : null,
|
|
24
|
+
l.label
|
|
25
|
+
] }, l.label)) }) : null
|
|
26
|
+
] }),
|
|
27
|
+
d ? /* @__PURE__ */ e("div", { className: "w-full self-center", children: d }) : null
|
|
28
|
+
] })
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
);
|
|
32
|
+
w.displayName = "HeroSplit";
|
|
33
|
+
export {
|
|
34
|
+
w as HeroSplit
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=Split.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Split.js","sources":["../../../../../src/components/Hero/variants/Split.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { HeroActions, HeroEyebrow, heroContainer, heroTitleBase } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Split — editorial grid: huge type left, media right, meta rule under. */\nexport const HeroSplit = forwardRef<HTMLElement, HeroProps>(\n (\n { className, eyebrow, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(\n heroContainer,\n \"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20\",\n )}>\n <div className=\"max-w-xl\">\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleBase, \"mt-6 text-5xl leading-[1.03] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mt-7 max-w-md text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n {media ? <div className=\"w-full self-center\">{media}</div> : null}\n </div>\n </section>\n ),\n);\nHeroSplit.displayName = \"HeroSplit\";"],"names":["HeroSplit","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","jsx","cn","jsxs","heroContainer","HeroEyebrow","heroTitleBase","HeroActions","m"],"mappings":";;;;AAMO,MAAMA,IAAYC;AAAA,EACvB,CACE,EAAE,WAAAC,GAAW,SAAAC,GAAS,OAAAC,GAAO,aAAAC,GAAa,eAAAC,GAAe,iBAAAC,GAAiB,OAAAC,GAAO,MAAAC,GAAM,IAAAC,GAAI,GAAGC,EAAA,GAC9FC,MAEA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,IAAAF;AAAA,MACA,WAAWI,EAAG,wDAAwDZ,CAAS;AAAA,MAC9E,GAAGS;AAAA,MAEJ,UAAA,gBAAAI,EAAC,SAAI,WAAWD;AAAA,QACdE;AAAA,QACA;AAAA,MAAA,GAEA,UAAA;AAAA,QAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,UAAA,gBAAAF,EAACI,KAAY,SAAAd,GAAkB;AAAA,4BAC9B,MAAA,EAAG,WAAWW,EAAGI,GAAe,sDAAsD,GACpF,UAAAd,GACH;AAAA,UACCC,IACC,gBAAAQ,EAAC,KAAA,EAAE,WAAU,8EACV,aACH,IACE;AAAA,UACHP,KAAiBC,IAChB,gBAAAM,EAAC,OAAA,EAAI,WAAU,SACb,UAAA,gBAAAA,EAACM,GAAA,EAAY,eAAAb,GAA8B,iBAAAC,EAAA,CAAkC,EAAA,CAC/E,IACE;AAAA,UACHE,IACC,gBAAAI,EAAC,MAAA,EAAG,WAAU,iFACX,UAAAJ,EAAK,IAAI,CAACW,MACT,gBAAAL,EAAC,MAAA,EAAiB,WAAU,yDACzB,UAAA;AAAA,YAAAK,EAAE,OAAO,gBAAAP,EAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAO,EAAE,MAAK,IAAU;AAAA,YAChEA,EAAE;AAAA,UAAA,EAAA,GAFIA,EAAE,KAGX,CACD,EAAA,CACH,IACE;AAAA,QAAA,GACN;AAAA,QACCZ,IAAQ,gBAAAK,EAAC,OAAA,EAAI,WAAU,sBAAsB,aAAM,IAAS;AAAA,MAAA,EAAA,CAC/D;AAAA,IAAA;AAAA,EAAA;AAGN;AACAb,EAAU,cAAc;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as a, jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef as f } from "react";
|
|
4
|
+
import { cn as i } from "../../../utils/cn.js";
|
|
5
|
+
import { useTokenForeground as u } from "../../../utils/useTokenForeground.js";
|
|
6
|
+
import { HeroActions as h, heroContainer as y } from "../parts.js";
|
|
7
|
+
const g = f(
|
|
8
|
+
({ className: m, title: c, description: r, primaryAction: n, secondaryAction: o, media: b, meta: s, id: d, ...x }, p) => {
|
|
9
|
+
const t = u("--color-secondary");
|
|
10
|
+
return /* @__PURE__ */ a(
|
|
11
|
+
"section",
|
|
12
|
+
{
|
|
13
|
+
ref: p,
|
|
14
|
+
id: d,
|
|
15
|
+
className: i("relative w-full overflow-hidden bg-secondary", m),
|
|
16
|
+
style: { color: t },
|
|
17
|
+
...x,
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ e("div", { "aria-hidden": !0, className: "pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay" }),
|
|
20
|
+
/* @__PURE__ */ e("div", { "aria-hidden": !0, className: "pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10" }),
|
|
21
|
+
/* @__PURE__ */ a("div", { className: i(y, "pt-28 pb-24 text-center sm:pt-36 sm:pb-32"), children: [
|
|
22
|
+
/* @__PURE__ */ e(
|
|
23
|
+
"h1",
|
|
24
|
+
{
|
|
25
|
+
className: "max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl",
|
|
26
|
+
style: { color: t },
|
|
27
|
+
children: c
|
|
28
|
+
}
|
|
29
|
+
),
|
|
30
|
+
r ? /* @__PURE__ */ e("p", { className: "mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg", style: { color: t, opacity: 0.72 }, children: r }) : null,
|
|
31
|
+
n || o ? /* @__PURE__ */ e("div", { className: "mt-11 justify-center", children: /* @__PURE__ */ e(h, { primaryAction: n, secondaryAction: o }) }) : null,
|
|
32
|
+
s ? /* @__PURE__ */ e("ul", { className: "mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3", children: s.map((l) => /* @__PURE__ */ a("li", { className: "flex items-center gap-2 text-sm font-medium", style: { color: t, opacity: 0.72 }, children: [
|
|
33
|
+
l.icon ? /* @__PURE__ */ e("span", { children: l.icon }) : null,
|
|
34
|
+
l.label
|
|
35
|
+
] }, l.label)) }) : null
|
|
36
|
+
] })
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
g.displayName = "HeroStatement";
|
|
43
|
+
export {
|
|
44
|
+
g as HeroStatement
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=Statement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Statement.js","sources":["../../../../../src/components/Hero/variants/Statement.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useTokenForeground } from \"../../../utils/useTokenForeground\";\nimport { HeroActions, heroContainer } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Statement — full-bleed ink band. No eyebrow, pure message. */\nexport const HeroStatement = forwardRef<HTMLElement, HeroProps>(\n (\n { className, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => {\n // Statement paints its own background from --color-secondary, so the\n // readable text color must be derived from THAT token, not the brand.\n const fg = useTokenForeground(\"--color-secondary\");\n\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full overflow-hidden bg-secondary\", className)}\n style={{ color: fg }}\n {...props}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div aria-hidden className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10\" />\n <div className={cn(heroContainer, \"pt-28 pb-24 text-center sm:pt-36 sm:pb-32\")}>\n <h1\n className=\"max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl\"\n style={{ color: fg }}\n >\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg\" style={{ color: fg, opacity: 0.72 }}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-11 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm font-medium\" style={{ color: fg, opacity: 0.72 }}>\n {m.icon ? <span>{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n },\n);\nHeroStatement.displayName = \"HeroStatement\";"],"names":["HeroStatement","forwardRef","className","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","fg","useTokenForeground","jsxs","cn","jsx","heroContainer","HeroActions","m"],"mappings":";;;;;AAQO,MAAMA,IAAgBC;AAAA,EAC3B,CACE,EAAE,WAAAC,GAAW,OAAAC,GAAO,aAAAC,GAAa,eAAAC,GAAe,iBAAAC,GAAiB,OAAAC,GAAO,MAAAC,GAAM,IAAAC,GAAI,GAAGC,EAAA,GACrFC,MACG;AAGH,UAAMC,IAAKC,EAAmB,mBAAmB;AAEjD,WACE,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,IAAAF;AAAA,QACA,WAAWM,EAAG,gDAAgDb,CAAS;AAAA,QACvE,OAAO,EAAE,OAAOU,EAAA;AAAA,QACf,GAAGF;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAM,EAAC,OAAA,EAAI,eAAW,IAAC,WAAU,+EAA8E;AAAA,UACzG,gBAAAA,EAAC,OAAA,EAAI,eAAW,IAAC,WAAU,iEAAgE;AAAA,4BAC1F,OAAA,EAAI,WAAWD,EAAGE,GAAe,2CAA2C,GAC3E,UAAA;AAAA,YAAA,gBAAAD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAOJ,EAAA;AAAA,gBAEf,UAAAT;AAAA,cAAA;AAAA,YAAA;AAAA,YAEFC,IACC,gBAAAY,EAAC,KAAA,EAAE,WAAU,gEAA+D,OAAO,EAAE,OAAOJ,GAAI,SAAS,KAAA,GACtG,aACH,IACE;AAAA,YACHP,KAAiBC,IAChB,gBAAAU,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA,gBAAAA,EAACE,GAAA,EAAY,eAAAb,GAA8B,iBAAAC,EAAA,CAAkC,EAAA,CAC/E,IACE;AAAA,YACHE,IACC,gBAAAQ,EAAC,MAAA,EAAG,WAAU,qEACX,UAAAR,EAAK,IAAI,CAACW,wBACR,MAAA,EAAiB,WAAU,+CAA8C,OAAO,EAAE,OAAOP,GAAI,SAAS,QACpG,UAAA;AAAA,cAAAO,EAAE,OAAO,gBAAAH,EAAC,QAAA,EAAM,UAAAG,EAAE,MAAK,IAAU;AAAA,cACjCA,EAAE;AAAA,YAAA,EAAA,GAFIA,EAAE,KAGX,CACD,EAAA,CACH,IACE;AAAA,UAAA,EAAA,CACN;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAnB,EAAc,cAAc;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as p } from "react/jsx-runtime";
|
|
3
|
+
import { useLanguageSwitcher as u } from "./useLanguageSwitcher.js";
|
|
4
|
+
import { LanguageSwitcherDropdown as m } from "./variants/Dropdown.js";
|
|
5
|
+
import { LanguageSwitcherModal as g } from "./variants/Modal.js";
|
|
6
|
+
const s = ({
|
|
7
|
+
option: a = "dropdown",
|
|
8
|
+
languages: t,
|
|
9
|
+
value: e,
|
|
10
|
+
defaultValue: n,
|
|
11
|
+
onChange: o,
|
|
12
|
+
...c
|
|
13
|
+
}) => {
|
|
14
|
+
const r = u(t, e, n, o);
|
|
15
|
+
if (t.length === 0) return null;
|
|
16
|
+
const i = {
|
|
17
|
+
languages: t,
|
|
18
|
+
value: e,
|
|
19
|
+
defaultValue: n,
|
|
20
|
+
onChange: o,
|
|
21
|
+
...c,
|
|
22
|
+
open: r.open,
|
|
23
|
+
onOpenChange: r.setOpen,
|
|
24
|
+
current: r.current,
|
|
25
|
+
currentLang: r.currentLang,
|
|
26
|
+
setCurrent: r.setCurrent
|
|
27
|
+
};
|
|
28
|
+
return a === "modal" ? /* @__PURE__ */ p(g, { ...i }) : /* @__PURE__ */ p(m, { ...i });
|
|
29
|
+
};
|
|
30
|
+
s.displayName = "LanguageSwitcher";
|
|
31
|
+
export {
|
|
32
|
+
s as LanguageSwitcher
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=LanguageSwitcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageSwitcher.js","sources":["../../../../src/components/LanguageSwitcher/LanguageSwitcher.tsx"],"sourcesContent":["\"use client\";\nimport type { LanguageSwitcherProps } from \"./types\";\nimport { useLanguageSwitcher } from \"./useLanguageSwitcher\";\nimport { LanguageSwitcherDropdown } from \"./variants/Dropdown\";\nimport { LanguageSwitcherModal } from \"./variants/Modal\";\n\nexport const LanguageSwitcher = ({\n option = \"dropdown\",\n languages,\n value,\n defaultValue,\n onChange,\n ...props\n}: LanguageSwitcherProps) => {\n const state = useLanguageSwitcher(languages, value, defaultValue, onChange);\n\n if (languages.length === 0) return null;\n\n const variantProps = {\n languages,\n value,\n defaultValue,\n onChange,\n ...props,\n open: state.open,\n onOpenChange: state.setOpen,\n current: state.current,\n currentLang: state.currentLang,\n setCurrent: state.setCurrent,\n };\n\n if (option === \"modal\") {\n return <LanguageSwitcherModal {...variantProps} />;\n }\n return <LanguageSwitcherDropdown {...variantProps} />;\n};\nLanguageSwitcher.displayName = \"LanguageSwitcher\";"],"names":["LanguageSwitcher","option","languages","value","defaultValue","onChange","props","state","useLanguageSwitcher","variantProps","jsx","LanguageSwitcherModal","LanguageSwitcherDropdown"],"mappings":";;;;AAMO,MAAMA,IAAmB,CAAC;AAAA,EAC/B,QAAAC,IAAS;AAAA,EACT,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MAA6B;AAC3B,QAAMC,IAAQC,EAAoBN,GAAWC,GAAOC,GAAcC,CAAQ;AAE1E,MAAIH,EAAU,WAAW,EAAG,QAAO;AAEnC,QAAMO,IAAe;AAAA,IACnB,WAAAP;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,IACH,MAAMC,EAAM;AAAA,IACZ,cAAcA,EAAM;AAAA,IACpB,SAASA,EAAM;AAAA,IACf,aAAaA,EAAM;AAAA,IACnB,YAAYA,EAAM;AAAA,EAAA;AAGpB,SAAIN,MAAW,UACN,gBAAAS,EAACC,GAAA,EAAuB,GAAGF,EAAA,CAAc,IAE3C,gBAAAC,EAACE,GAAA,EAA0B,GAAGH,EAAA,CAAc;AACrD;AACAT,EAAiB,cAAc;"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as u, jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect as c } from "react";
|
|
4
|
+
import { cn as s } from "../../utils/cn.js";
|
|
5
|
+
import { iso2ToFlagEmoji as m } from "../../utils/iso2Flag.js";
|
|
6
|
+
import { Globe as a, ChevronDown as f, Check as g } from "../../icons.js";
|
|
7
|
+
function y(o, t, r) {
|
|
8
|
+
c(() => {
|
|
9
|
+
if (!o) return;
|
|
10
|
+
const e = (n) => {
|
|
11
|
+
t.current && !t.current.contains(n.target) && r();
|
|
12
|
+
}, d = (n) => {
|
|
13
|
+
n.key === "Escape" && r();
|
|
14
|
+
};
|
|
15
|
+
return document.addEventListener("pointerdown", e), document.addEventListener("keydown", d), () => {
|
|
16
|
+
document.removeEventListener("pointerdown", e), document.removeEventListener("keydown", d);
|
|
17
|
+
};
|
|
18
|
+
}, [o, t, r]);
|
|
19
|
+
}
|
|
20
|
+
function l(o, { size: t = "text-sm", globeClass: r = "text-muted-foreground" } = {}) {
|
|
21
|
+
const e = m(o);
|
|
22
|
+
return e ? /* @__PURE__ */ i("span", { "aria-hidden": !0, className: s(t, "leading-none"), children: e }) : /* @__PURE__ */ i(a, { className: s("h-4 w-4 shrink-0", r) });
|
|
23
|
+
}
|
|
24
|
+
function v({
|
|
25
|
+
inverse: o,
|
|
26
|
+
open: t,
|
|
27
|
+
showFlag: r,
|
|
28
|
+
currentLang: e,
|
|
29
|
+
onClick: d,
|
|
30
|
+
ariaProps: n
|
|
31
|
+
}) {
|
|
32
|
+
return /* @__PURE__ */ u(
|
|
33
|
+
"button",
|
|
34
|
+
{
|
|
35
|
+
type: "button",
|
|
36
|
+
"aria-haspopup": n.haspopup,
|
|
37
|
+
"aria-expanded": n.expanded,
|
|
38
|
+
"aria-controls": n.controls,
|
|
39
|
+
onClick: d,
|
|
40
|
+
className: s(
|
|
41
|
+
"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
42
|
+
o ? "border-white/10 text-on-secondary hover:bg-white/10" : "border-border text-foreground hover:bg-surface"
|
|
43
|
+
),
|
|
44
|
+
children: [
|
|
45
|
+
r ? l(e.code, { globeClass: o ? "opacity-70" : "text-muted-foreground" }) : /* @__PURE__ */ i(
|
|
46
|
+
a,
|
|
47
|
+
{
|
|
48
|
+
className: s("h-4 w-4", o ? "opacity-70" : "text-muted-foreground")
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
/* @__PURE__ */ i("span", { className: "tracking-tight", children: e.label }),
|
|
52
|
+
/* @__PURE__ */ i(
|
|
53
|
+
f,
|
|
54
|
+
{
|
|
55
|
+
className: s(
|
|
56
|
+
"h-3.5 w-3.5 transition-transform duration-150",
|
|
57
|
+
t && "rotate-180",
|
|
58
|
+
o ? "opacity-70" : "text-muted-foreground"
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
function N({
|
|
67
|
+
lang: o,
|
|
68
|
+
active: t,
|
|
69
|
+
onSelect: r,
|
|
70
|
+
variant: e,
|
|
71
|
+
showFlag: d
|
|
72
|
+
}) {
|
|
73
|
+
return /* @__PURE__ */ u(
|
|
74
|
+
"button",
|
|
75
|
+
{
|
|
76
|
+
type: "button",
|
|
77
|
+
role: "option",
|
|
78
|
+
"aria-selected": t,
|
|
79
|
+
onClick: r,
|
|
80
|
+
className: e === "modal" ? s(
|
|
81
|
+
"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
82
|
+
t ? "border-primary/40 bg-primary-soft text-foreground" : "border-border text-foreground hover:bg-surface-strong"
|
|
83
|
+
) : s(
|
|
84
|
+
"flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
85
|
+
t ? "bg-surface-strong text-foreground" : "text-muted-foreground hover:bg-surface-strong hover:text-foreground"
|
|
86
|
+
),
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ u("span", { className: e === "modal" ? "flex items-center gap-3" : "flex items-center gap-2.5", children: [
|
|
89
|
+
d ? l(o.code, e === "modal" ? { size: "text-base" } : {}) : null,
|
|
90
|
+
/* @__PURE__ */ i("span", { className: "text-sm font-medium", children: o.label })
|
|
91
|
+
] }),
|
|
92
|
+
/* @__PURE__ */ u("span", { className: e === "modal" ? "flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground" : void 0, children: [
|
|
93
|
+
e === "modal" ? o.code : null,
|
|
94
|
+
t ? /* @__PURE__ */ i(g, { className: e === "modal" ? "h-4 w-4 text-primary" : "h-3.5 w-3.5 text-primary" }) : null
|
|
95
|
+
] })
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
o.code
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
N as LanguageOptionRow,
|
|
103
|
+
v as LanguageTrigger,
|
|
104
|
+
l as renderFlagOrGlobe,
|
|
105
|
+
y as useOutsideClose
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sources":["../../../../src/components/LanguageSwitcher/parts.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { iso2ToFlagEmoji } from \"../../utils/iso2Flag\";\nimport { Check, ChevronDown, Globe } from \"../../icons\";\nimport type { LanguageOption } from \"./types\";\n\nexport function useOutsideClose(\n open: boolean,\n rootRef: { current: HTMLDivElement | null },\n onClose: () => void,\n) {\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, rootRef, onClose]);\n}\n\nexport function renderFlagOrGlobe(\n code: string,\n { size = \"text-sm\", globeClass = \"text-muted-foreground\" }: { size?: string; globeClass?: string } = {},\n) {\n const flag = iso2ToFlagEmoji(code);\n return flag ? (\n <span aria-hidden className={cn(size, \"leading-none\")}>\n {flag}\n </span>\n ) : (\n <Globe className={cn(\"h-4 w-4 shrink-0\", globeClass)} />\n );\n}\n\nexport function LanguageTrigger({\n inverse,\n open,\n showFlag,\n currentLang,\n onClick,\n ariaProps,\n}: {\n inverse?: boolean;\n open: boolean;\n showFlag?: boolean;\n currentLang: LanguageOption;\n onClick: () => void;\n ariaProps: {\n haspopup: \"listbox\" | \"dialog\";\n expanded: boolean;\n controls?: string;\n };\n}) {\n return (\n <button\n type=\"button\"\n aria-haspopup={ariaProps.haspopup}\n aria-expanded={ariaProps.expanded}\n aria-controls={ariaProps.controls}\n onClick={onClick}\n className={cn(\n \"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inverse\n ? \"border-white/10 text-on-secondary hover:bg-white/10\"\n : \"border-border text-foreground hover:bg-surface\",\n )}\n >\n {showFlag ? (\n renderFlagOrGlobe(currentLang.code, { globeClass: inverse ? \"opacity-70\" : \"text-muted-foreground\" })\n ) : (\n <Globe\n className={cn(\"h-4 w-4\", inverse ? \"opacity-70\" : \"text-muted-foreground\")}\n />\n )}\n <span className=\"tracking-tight\">{currentLang.label}</span>\n <ChevronDown\n className={cn(\n \"h-3.5 w-3.5 transition-transform duration-150\",\n open && \"rotate-180\",\n inverse ? \"opacity-70\" : \"text-muted-foreground\",\n )}\n />\n </button>\n );\n}\n\nexport function LanguageOptionRow({\n lang,\n active,\n onSelect,\n variant,\n showFlag,\n}: {\n lang: LanguageOption;\n active: boolean;\n onSelect: () => void;\n variant: \"dropdown\" | \"modal\";\n showFlag?: boolean;\n}) {\n return (\n <button\n key={lang.code}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n onClick={onSelect}\n className={\n variant === \"modal\"\n ? cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"border-primary/40 bg-primary-soft text-foreground\"\n : \"border-border text-foreground hover:bg-surface-strong\",\n )\n : cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"bg-surface-strong text-foreground\"\n : \"text-muted-foreground hover:bg-surface-strong hover:text-foreground\",\n )\n }\n >\n <span className={variant === \"modal\" ? \"flex items-center gap-3\" : \"flex items-center gap-2.5\"}>\n {showFlag ? renderFlagOrGlobe(lang.code, variant === \"modal\" ? { size: \"text-base\" } : {}) : null}\n <span className=\"text-sm font-medium\">{lang.label}</span>\n </span>\n <span className={variant === \"modal\" ? \"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\" : undefined}>\n {variant === \"modal\" ? lang.code : null}\n {active ? <Check className={variant === \"modal\" ? \"h-4 w-4 text-primary\" : \"h-3.5 w-3.5 text-primary\"} /> : null}\n </span>\n </button>\n );\n}"],"names":["useOutsideClose","open","rootRef","onClose","useEffect","onPointerDown","event","onKeyDown","renderFlagOrGlobe","code","size","globeClass","flag","iso2ToFlagEmoji","jsx","cn","Globe","LanguageTrigger","inverse","showFlag","currentLang","onClick","ariaProps","jsxs","ChevronDown","LanguageOptionRow","lang","active","onSelect","variant","Check"],"mappings":";;;;;AAOO,SAASA,EACdC,GACAC,GACAC,GACA;AACA,EAAAC,EAAU,MAAM;AACd,QAAI,CAACH,EAAM;AACX,UAAMI,IAAgB,CAACC,MAAwB;AAC7C,MAAIJ,EAAQ,WAAW,CAACA,EAAQ,QAAQ,SAASI,EAAM,MAAc,KACnEH,EAAA;AAAA,IAEJ,GACMI,IAAY,CAACD,MAAyB;AAC1C,MAAIA,EAAM,QAAQ,YAAUH,EAAA;AAAA,IAC9B;AACA,oBAAS,iBAAiB,eAAeE,CAAa,GACtD,SAAS,iBAAiB,WAAWE,CAAS,GACvC,MAAM;AACX,eAAS,oBAAoB,eAAeF,CAAa,GACzD,SAAS,oBAAoB,WAAWE,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAACN,GAAMC,GAASC,CAAO,CAAC;AAC7B;AAEO,SAASK,EACdC,GACA,EAAE,MAAAC,IAAO,WAAW,YAAAC,IAAa,wBAAA,IAAoE,IACrG;AACA,QAAMC,IAAOC,EAAgBJ,CAAI;AACjC,SAAOG,IACL,gBAAAE,EAAC,QAAA,EAAK,eAAW,IAAC,WAAWC,EAAGL,GAAM,cAAc,GACjD,UAAAE,EAAA,CACH,IAEA,gBAAAE,EAACE,GAAA,EAAM,WAAWD,EAAG,oBAAoBJ,CAAU,GAAG;AAE1D;AAEO,SAASM,EAAgB;AAAA,EAC9B,SAAAC;AAAA,EACA,MAAAjB;AAAA,EACA,UAAAkB;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAWG;AACD,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,iBAAeD,EAAU;AAAA,MACzB,iBAAeA,EAAU;AAAA,MACzB,iBAAeA,EAAU;AAAA,MACzB,SAAAD;AAAA,MACA,WAAWN;AAAA,QACT;AAAA,QACAG,IACI,wDACA;AAAA,MAAA;AAAA,MAGL,UAAA;AAAA,QAAAC,IACCX,EAAkBY,EAAY,MAAM,EAAE,YAAYF,IAAU,eAAe,wBAAA,CAAyB,IAEpG,gBAAAJ;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAWD,EAAG,WAAWG,IAAU,eAAe,uBAAuB;AAAA,UAAA;AAAA,QAAA;AAAA,QAG7E,gBAAAJ,EAAC,QAAA,EAAK,WAAU,kBAAkB,YAAY,OAAM;AAAA,QACpD,gBAAAA;AAAA,UAACU;AAAA,UAAA;AAAA,YACC,WAAWT;AAAA,cACT;AAAA,cACAd,KAAQ;AAAA,cACRiB,IAAU,eAAe;AAAA,YAAA;AAAA,UAC3B;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEO,SAASO,EAAkB;AAAA,EAChC,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAV;AACF,GAMG;AACD,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAeI;AAAA,MACf,SAASC;AAAA,MACT,WACEC,MAAY,UACRd;AAAA,QACE;AAAA,QACAY,IACI,sDACA;AAAA,MAAA,IAENZ;AAAA,QACE;AAAA,QACAY,IACI,sCACA;AAAA,MAAA;AAAA,MAIZ,UAAA;AAAA,QAAA,gBAAAJ,EAAC,QAAA,EAAK,WAAWM,MAAY,UAAU,4BAA4B,6BAChE,UAAA;AAAA,UAAAV,IAAWX,EAAkBkB,EAAK,MAAMG,MAAY,UAAU,EAAE,MAAM,gBAAgB,CAAA,CAAE,IAAI;AAAA,UAC7F,gBAAAf,EAAC,QAAA,EAAK,WAAU,uBAAuB,YAAK,MAAA,CAAM;AAAA,QAAA,GACpD;AAAA,0BACC,QAAA,EAAK,WAAWe,MAAY,UAAU,gGAAgG,QACpI,UAAA;AAAA,UAAAA,MAAY,UAAUH,EAAK,OAAO;AAAA,UAClCC,sBAAUG,GAAA,EAAM,WAAWD,MAAY,UAAU,yBAAyB,4BAA4B,IAAK;AAAA,QAAA,EAAA,CAC9G;AAAA,MAAA;AAAA,IAAA;AAAA,IA5BKH,EAAK;AAAA,EAAA;AA+BhB;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState as o } from "react";
|
|
3
|
+
function S(e, u, f, r) {
|
|
4
|
+
var c;
|
|
5
|
+
const [i, n] = o(!1), [p, d] = o(f ?? ((c = e[0]) == null ? void 0 : c.code) ?? ""), s = u ?? p, l = e.find((t) => t.code === s) ?? e[0];
|
|
6
|
+
return { open: i, setOpen: n, current: s, currentLang: l, setCurrent: (t) => {
|
|
7
|
+
d(t), n(!1), r == null || r(t);
|
|
8
|
+
} };
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
S as useLanguageSwitcher
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=useLanguageSwitcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLanguageSwitcher.js","sources":["../../../../src/components/LanguageSwitcher/useLanguageSwitcher.ts"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport type { LanguageOption } from \"./types\";\n\nexport function useLanguageSwitcher(\n languages: LanguageOption[],\n value?: string,\n defaultValue?: string,\n onChange?: (code: string) => void,\n) {\n const [open, setOpen] = useState(false);\n const [internal, setInternal] = useState(defaultValue ?? languages[0]?.code ?? \"\");\n const current = value ?? internal;\n const currentLang = languages.find((l) => l.code === current) ?? languages[0];\n\n const setCurrent = (code: string) => {\n setInternal(code);\n setOpen(false);\n onChange?.(code);\n };\n\n return { open, setOpen, current, currentLang, setCurrent };\n}"],"names":["useLanguageSwitcher","languages","value","defaultValue","onChange","open","setOpen","useState","internal","setInternal","_a","current","currentLang","l","code"],"mappings":";AAIO,SAASA,EACdC,GACAC,GACAC,GACAC,GACA;;AACA,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAACC,GAAUC,CAAW,IAAIF,EAASJ,OAAgBO,IAAAT,EAAU,CAAC,MAAX,gBAAAS,EAAc,SAAQ,EAAE,GAC3EC,IAAUT,KAASM,GACnBI,IAAcX,EAAU,KAAK,CAACY,MAAMA,EAAE,SAASF,CAAO,KAAKV,EAAU,CAAC;AAQ5E,SAAO,EAAE,MAAAI,GAAM,SAAAC,GAAS,SAAAK,GAAS,aAAAC,GAAa,YAN3B,CAACE,MAAiB;AACnC,IAAAL,EAAYK,CAAI,GAChBR,EAAQ,EAAK,GACbF,KAAA,QAAAA,EAAWU;AAAA,EACb,EAE8C;AAChD;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as g, jsx as o } from "react/jsx-runtime";
|
|
3
|
+
import { useId as v, useRef as x } from "react";
|
|
4
|
+
import { cn as c } from "../../../utils/cn.js";
|
|
5
|
+
import { useOutsideClose as y, LanguageTrigger as w, LanguageOptionRow as L } from "../parts.js";
|
|
6
|
+
function N({
|
|
7
|
+
className: d,
|
|
8
|
+
languages: u,
|
|
9
|
+
open: e,
|
|
10
|
+
onOpenChange: r,
|
|
11
|
+
current: f,
|
|
12
|
+
currentLang: m,
|
|
13
|
+
setCurrent: p,
|
|
14
|
+
align: i = "end",
|
|
15
|
+
showFlag: l = !1,
|
|
16
|
+
inverse: b = !1,
|
|
17
|
+
modalTitle: S,
|
|
18
|
+
value: R,
|
|
19
|
+
defaultValue: j,
|
|
20
|
+
onChange: k,
|
|
21
|
+
...h
|
|
22
|
+
}) {
|
|
23
|
+
const a = v(), s = `--ls-${a.replace(/:/g, "")}`, n = x(null);
|
|
24
|
+
return y(e, n, () => r(!1)), /* @__PURE__ */ g(
|
|
25
|
+
"div",
|
|
26
|
+
{
|
|
27
|
+
ref: n,
|
|
28
|
+
className: c("relative inline-flex", d),
|
|
29
|
+
...h,
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ o(
|
|
32
|
+
"button",
|
|
33
|
+
{
|
|
34
|
+
type: "button",
|
|
35
|
+
style: { anchorName: s },
|
|
36
|
+
onClick: () => r(!e),
|
|
37
|
+
children: /* @__PURE__ */ o(
|
|
38
|
+
w,
|
|
39
|
+
{
|
|
40
|
+
inverse: b,
|
|
41
|
+
open: e,
|
|
42
|
+
showFlag: l,
|
|
43
|
+
currentLang: m,
|
|
44
|
+
onClick: () => r(!e),
|
|
45
|
+
ariaProps: { haspopup: "listbox", expanded: e, controls: a }
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
/* @__PURE__ */ o(
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
id: a,
|
|
54
|
+
role: "listbox",
|
|
55
|
+
"aria-label": "Select language",
|
|
56
|
+
style: {
|
|
57
|
+
positionAnchor: s,
|
|
58
|
+
top: "anchor(bottom)",
|
|
59
|
+
...i === "start" ? { left: "anchor(left)" } : { right: "anchor(right)" }
|
|
60
|
+
},
|
|
61
|
+
className: c(
|
|
62
|
+
"absolute top-full z-50 mt-2 min-w-[10rem] rounded-lg border border-border bg-surface p-1 shadow-raised transition-all duration-150",
|
|
63
|
+
i === "start" ? "left-0" : "right-0",
|
|
64
|
+
e ? "visible translate-y-0 opacity-100" : "pointer-events-none invisible -translate-y-1 opacity-0"
|
|
65
|
+
),
|
|
66
|
+
children: u.map((t) => /* @__PURE__ */ o(
|
|
67
|
+
L,
|
|
68
|
+
{
|
|
69
|
+
lang: t,
|
|
70
|
+
active: t.code === f,
|
|
71
|
+
onSelect: () => p(t.code),
|
|
72
|
+
variant: "dropdown",
|
|
73
|
+
showFlag: l
|
|
74
|
+
},
|
|
75
|
+
t.code
|
|
76
|
+
))
|
|
77
|
+
}
|
|
78
|
+
)
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
N.displayName = "LanguageSwitcherDropdown";
|
|
84
|
+
export {
|
|
85
|
+
N as LanguageSwitcherDropdown
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=Dropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sources":["../../../../../src/components/LanguageSwitcher/variants/Dropdown.tsx"],"sourcesContent":["\"use client\";\nimport { useId, useRef, type CSSProperties } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {\n useOutsideClose,\n LanguageTrigger,\n LanguageOptionRow,\n} from \"../parts\";\nimport type { LanguageSwitcherVariantProps } from \"../types\";\n\nexport function LanguageSwitcherDropdown({\n className,\n languages,\n open,\n onOpenChange,\n current,\n currentLang,\n setCurrent,\n align = \"end\",\n showFlag = false,\n inverse = false,\n modalTitle,\n value,\n defaultValue,\n onChange,\n ...props\n}: LanguageSwitcherVariantProps) {\n const listboxId = useId();\n const anchorName = `--ls-${listboxId.replace(/:/g, \"\")}`;\n const rootRef = useRef<HTMLDivElement>(null);\n\n useOutsideClose(open, rootRef, () => onOpenChange(false));\n\n return (\n <div\n ref={rootRef}\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n <button\n type=\"button\"\n style={{ anchorName } as CSSProperties}\n onClick={() => onOpenChange(!open)}\n >\n <LanguageTrigger\n inverse={inverse}\n open={open}\n showFlag={showFlag}\n currentLang={currentLang}\n onClick={() => onOpenChange(!open)}\n ariaProps={{ haspopup: \"listbox\", expanded: open, controls: listboxId }}\n />\n </button>\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label=\"Select language\"\n style={\n {\n positionAnchor: anchorName,\n top: \"anchor(bottom)\",\n ...(align === \"start\" ? { left: \"anchor(left)\" } : { right: \"anchor(right)\" }),\n } as CSSProperties\n }\n className={cn(\n \"absolute top-full z-50 mt-2 min-w-[10rem] rounded-lg border border-border bg-surface p-1 shadow-raised transition-all duration-150\",\n align === \"start\" ? \"left-0\" : \"right-0\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n {languages.map((lang) => (\n <LanguageOptionRow\n key={lang.code}\n lang={lang}\n active={lang.code === current}\n onSelect={() => setCurrent(lang.code)}\n variant=\"dropdown\"\n showFlag={showFlag}\n />\n ))}\n </div>\n </div>\n );\n}\nLanguageSwitcherDropdown.displayName = \"LanguageSwitcherDropdown\";"],"names":["LanguageSwitcherDropdown","className","languages","open","onOpenChange","current","currentLang","setCurrent","align","showFlag","inverse","modalTitle","value","defaultValue","onChange","props","listboxId","useId","anchorName","rootRef","useRef","useOutsideClose","jsxs","cn","jsx","LanguageTrigger","lang","LanguageOptionRow"],"mappings":";;;;AAUO,SAASA,EAAyB;AAAA,EACvC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,SAAAC,IAAU;AAAA,EACV,YAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GAAiC;AAC/B,QAAMC,IAAYC,EAAA,GACZC,IAAa,QAAQF,EAAU,QAAQ,MAAM,EAAE,CAAC,IAChDG,IAAUC,EAAuB,IAAI;AAE3C,SAAAC,EAAgBlB,GAAMgB,GAAS,MAAMf,EAAa,EAAK,CAAC,GAGtD,gBAAAkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKH;AAAA,MACL,WAAWI,EAAG,wBAAwBtB,CAAS;AAAA,MAC9C,GAAGc;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAO,EAAE,YAAAN,EAAA;AAAA,YACT,SAAS,MAAMd,EAAa,CAACD,CAAI;AAAA,YAEjC,UAAA,gBAAAqB;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,SAAAf;AAAA,gBACA,MAAAP;AAAA,gBACA,UAAAM;AAAA,gBACA,aAAAH;AAAA,gBACA,SAAS,MAAMF,EAAa,CAACD,CAAI;AAAA,gBACjC,WAAW,EAAE,UAAU,WAAW,UAAUA,GAAM,UAAUa,EAAA;AAAA,cAAU;AAAA,YAAA;AAAA,UACxE;AAAA,QAAA;AAAA,QAGF,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAIR;AAAA,YACJ,MAAK;AAAA,YACL,cAAW;AAAA,YACX,OACE;AAAA,cACE,gBAAgBE;AAAA,cAChB,KAAK;AAAA,cACL,GAAIV,MAAU,UAAU,EAAE,MAAM,eAAA,IAAmB,EAAE,OAAO,gBAAA;AAAA,YAAgB;AAAA,YAGhF,WAAWe;AAAA,cACT;AAAA,cACAf,MAAU,UAAU,WAAW;AAAA,cAC/BL,IACI,sCACA;AAAA,YAAA;AAAA,YAGL,UAAAD,EAAU,IAAI,CAACwB,MACd,gBAAAF;AAAA,cAACG;AAAA,cAAA;AAAA,gBAEC,MAAAD;AAAA,gBACA,QAAQA,EAAK,SAASrB;AAAA,gBACtB,UAAU,MAAME,EAAWmB,EAAK,IAAI;AAAA,gBACpC,SAAQ;AAAA,gBACR,UAAAjB;AAAA,cAAA;AAAA,cALKiB,EAAK;AAAA,YAAA,CAOb;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;AACA1B,EAAyB,cAAc;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as u, Fragment as p, jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import { useRef as h } from "react";
|
|
4
|
+
import { cn as v } from "../../../utils/cn.js";
|
|
5
|
+
import { Modal as x } from "../../Modal.js";
|
|
6
|
+
import { LanguageTrigger as L, LanguageOptionRow as S } from "../parts.js";
|
|
7
|
+
function w({
|
|
8
|
+
className: o,
|
|
9
|
+
languages: t,
|
|
10
|
+
open: a,
|
|
11
|
+
onOpenChange: r,
|
|
12
|
+
current: d,
|
|
13
|
+
currentLang: m,
|
|
14
|
+
setCurrent: n,
|
|
15
|
+
modalTitle: c,
|
|
16
|
+
showFlag: l = !1,
|
|
17
|
+
inverse: s = !1,
|
|
18
|
+
align: M,
|
|
19
|
+
value: N,
|
|
20
|
+
defaultValue: R,
|
|
21
|
+
onChange: b,
|
|
22
|
+
...f
|
|
23
|
+
}) {
|
|
24
|
+
const g = h(null);
|
|
25
|
+
return /* @__PURE__ */ u(p, { children: [
|
|
26
|
+
/* @__PURE__ */ e("div", { ref: g, className: v("relative inline-flex", o), ...f, children: /* @__PURE__ */ e(
|
|
27
|
+
L,
|
|
28
|
+
{
|
|
29
|
+
inverse: s,
|
|
30
|
+
open: a,
|
|
31
|
+
showFlag: l,
|
|
32
|
+
currentLang: m,
|
|
33
|
+
onClick: () => r(!a),
|
|
34
|
+
ariaProps: { haspopup: "dialog", expanded: a }
|
|
35
|
+
}
|
|
36
|
+
) }),
|
|
37
|
+
/* @__PURE__ */ e(x, { open: a, onClose: () => r(!1), title: c, size: "sm", children: /* @__PURE__ */ e("div", { role: "listbox", "aria-label": "Select language", className: "grid min-w-[19rem] gap-1.5", children: t.map((i) => /* @__PURE__ */ e(
|
|
38
|
+
S,
|
|
39
|
+
{
|
|
40
|
+
lang: i,
|
|
41
|
+
active: i.code === d,
|
|
42
|
+
onSelect: () => n(i.code),
|
|
43
|
+
variant: "modal",
|
|
44
|
+
showFlag: l
|
|
45
|
+
},
|
|
46
|
+
i.code
|
|
47
|
+
)) }) })
|
|
48
|
+
] });
|
|
49
|
+
}
|
|
50
|
+
w.displayName = "LanguageSwitcherModal";
|
|
51
|
+
export {
|
|
52
|
+
w as LanguageSwitcherModal
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../../src/components/LanguageSwitcher/variants/Modal.tsx"],"sourcesContent":["\"use client\";\nimport { useRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Modal } from \"../../Modal\";\nimport { LanguageTrigger, LanguageOptionRow } from \"../parts\";\nimport type { LanguageSwitcherVariantProps } from \"../types\";\n\nexport function LanguageSwitcherModal({\n className,\n languages,\n open,\n onOpenChange,\n current,\n currentLang,\n setCurrent,\n modalTitle,\n showFlag = false,\n inverse = false,\n align,\n value,\n defaultValue,\n onChange,\n ...props\n}: LanguageSwitcherVariantProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n\n return (\n <>\n <div ref={rootRef} className={cn(\"relative inline-flex\", className)} {...props}>\n <LanguageTrigger\n inverse={inverse}\n open={open}\n showFlag={showFlag}\n currentLang={currentLang}\n onClick={() => onOpenChange(!open)}\n ariaProps={{ haspopup: \"dialog\", expanded: open }}\n />\n </div>\n <Modal open={open} onClose={() => onOpenChange(false)} title={modalTitle} size=\"sm\">\n <div role=\"listbox\" aria-label=\"Select language\" className=\"grid min-w-[19rem] gap-1.5\">\n {languages.map((lang) => (\n <LanguageOptionRow\n key={lang.code}\n lang={lang}\n active={lang.code === current}\n onSelect={() => setCurrent(lang.code)}\n variant=\"modal\"\n showFlag={showFlag}\n />\n ))}\n </div>\n </Modal>\n </>\n );\n}\nLanguageSwitcherModal.displayName = \"LanguageSwitcherModal\";"],"names":["LanguageSwitcherModal","className","languages","open","onOpenChange","current","currentLang","setCurrent","modalTitle","showFlag","inverse","align","value","defaultValue","onChange","props","rootRef","useRef","jsxs","Fragment","jsx","cn","LanguageTrigger","Modal","lang","LanguageOptionRow"],"mappings":";;;;;AAOO,SAASA,EAAsB;AAAA,EACpC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC,IAAU;AAAA,EACV,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GAAiC;AAC/B,QAAMC,IAAUC,EAAuB,IAAI;AAE3C,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,KAAKJ,GAAS,WAAWK,EAAG,wBAAwBpB,CAAS,GAAI,GAAGc,GACvE,UAAA,gBAAAK;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAAZ;AAAA,QACA,MAAAP;AAAA,QACA,UAAAM;AAAA,QACA,aAAAH;AAAA,QACA,SAAS,MAAMF,EAAa,CAACD,CAAI;AAAA,QACjC,WAAW,EAAE,UAAU,UAAU,UAAUA,EAAA;AAAA,MAAK;AAAA,IAAA,GAEpD;AAAA,IACA,gBAAAiB,EAACG,KAAM,MAAApB,GAAY,SAAS,MAAMC,EAAa,EAAK,GAAG,OAAOI,GAAY,MAAK,MAC7E,UAAA,gBAAAY,EAAC,OAAA,EAAI,MAAK,WAAU,cAAW,mBAAkB,WAAU,8BACxD,UAAAlB,EAAU,IAAI,CAACsB,MACd,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QAEC,MAAAD;AAAA,QACA,QAAQA,EAAK,SAASnB;AAAA,QACtB,UAAU,MAAME,EAAWiB,EAAK,IAAI;AAAA,QACpC,SAAQ;AAAA,QACR,UAAAf;AAAA,MAAA;AAAA,MALKe,EAAK;AAAA,IAAA,CAOb,GACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AACAxB,EAAsB,cAAc;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as u } from "react";
|
|
3
|
+
import { LogoCloudQuiet as i } from "./variants/Quiet.js";
|
|
4
|
+
import { LogoCloudMarquee as e } from "./variants/Marquee.js";
|
|
5
|
+
import { LogoCloudStrip as d } from "./variants/Strip.js";
|
|
6
|
+
const f = u(
|
|
7
|
+
({ option: m = "quiet", ...o }, r) => m === "marquee" ? /* @__PURE__ */ t(e, { ref: r, ...o }) : m === "strip" ? /* @__PURE__ */ t(d, { ref: r, ...o }) : /* @__PURE__ */ t(i, { ref: r, ...o })
|
|
8
|
+
);
|
|
9
|
+
f.displayName = "LogoCloud";
|
|
10
|
+
export {
|
|
11
|
+
f as LogoCloud
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=LogoCloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogoCloud.js","sources":["../../../../src/components/LogoCloud/LogoCloud.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { LogoCloudProps } from \"./types\";\nimport { LogoCloudQuiet } from \"./variants/Quiet\";\nimport { LogoCloudMarquee } from \"./variants/Marquee\";\nimport { LogoCloudStrip } from \"./variants/Strip\";\n\nexport const LogoCloud = forwardRef<HTMLDivElement, LogoCloudProps>(\n ({ option = \"quiet\", ...props }, ref) => {\n if (option === \"marquee\") return <LogoCloudMarquee ref={ref} {...props} />;\n if (option === \"strip\") return <LogoCloudStrip ref={ref} {...props} />;\n return <LogoCloudQuiet ref={ref} {...props} />;\n },\n);\nLogoCloud.displayName = \"LogoCloud\";"],"names":["LogoCloud","forwardRef","option","props","ref","LogoCloudMarquee","LogoCloudStrip","jsx","LogoCloudQuiet"],"mappings":";;;;;AAMO,MAAMA,IAAYC;AAAA,EACvB,CAAC,EAAE,QAAAC,IAAS,SAAS,GAAGC,EAAA,GAASC,MAC3BF,MAAW,8BAAmBG,GAAA,EAAiB,KAAAD,GAAW,GAAGD,GAAO,IACpED,MAAW,4BAAiBI,GAAA,EAAe,KAAAF,GAAW,GAAGD,GAAO,IAC7D,gBAAAI,EAACC,GAAA,EAAe,KAAAJ,GAAW,GAAGD,EAAA,CAAO;AAEhD;AACAH,EAAU,cAAc;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { cn as o } from "../../utils/cn.js";
|
|
3
|
+
const a = ({ name: r }) => /* @__PURE__ */ t("span", { className: "text-lg font-semibold tracking-tight text-foreground/45 transition-colors duration-200 group-hover:text-foreground", children: r }), c = ({ logo: r }) => r.src ? /* @__PURE__ */ t(
|
|
4
|
+
"img",
|
|
5
|
+
{
|
|
6
|
+
src: r.src,
|
|
7
|
+
alt: r.name,
|
|
8
|
+
loading: "lazy",
|
|
9
|
+
className: o(
|
|
10
|
+
"max-h-7 w-auto opacity-50 grayscale transition-all duration-200 group-hover:opacity-90 group-hover:grayscale-0",
|
|
11
|
+
"h-7"
|
|
12
|
+
)
|
|
13
|
+
}
|
|
14
|
+
) : /* @__PURE__ */ t(a, { name: r.name });
|
|
15
|
+
function i({ title: r, className: e }) {
|
|
16
|
+
return r ? /* @__PURE__ */ t("p", { className: o("mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground", e), children: r }) : null;
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
i as LogoCloudTitle,
|
|
20
|
+
c as LogoMark
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sources":["../../../../src/components/LogoCloud/parts.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn\";\nimport type { LogoItem } from \"./types\";\n\nconst LogoText = ({ name }: { name: string }) => (\n <span className=\"text-lg font-semibold tracking-tight text-foreground/45 transition-colors duration-200 group-hover:text-foreground\">\n {name}\n </span>\n);\n\nexport const LogoMark = ({ logo }: { logo: LogoItem }) =>\n logo.src ? (\n <img\n src={logo.src}\n alt={logo.name}\n loading=\"lazy\"\n className={cn(\n \"max-h-7 w-auto opacity-50 grayscale transition-all duration-200 group-hover:opacity-90 group-hover:grayscale-0\",\n \"h-7\",\n )}\n />\n ) : (\n <LogoText name={logo.name} />\n );\n\nexport function LogoCloudTitle({ title, className }: { title?: string; className?: string }) {\n if (!title) return null;\n return (\n <p className={cn(\"mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\", className)}>\n {title}\n </p>\n );\n}"],"names":["LogoText","name","jsx","LogoMark","logo","cn","LogoCloudTitle","title","className"],"mappings":";;AAGA,MAAMA,IAAW,CAAC,EAAE,MAAAC,EAAA,MAClB,gBAAAC,EAAC,QAAA,EAAK,WAAU,sHACb,UAAAD,GACH,GAGWE,IAAW,CAAC,EAAE,MAAAC,EAAA,MACzBA,EAAK,MACH,gBAAAF;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAKE,EAAK;AAAA,IACV,KAAKA,EAAK;AAAA,IACV,SAAQ;AAAA,IACR,WAAWC;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AACF,IAEA,gBAAAH,EAACF,GAAA,EAAS,MAAMI,EAAK,KAAA,CAAM;AAGxB,SAASE,EAAe,EAAE,OAAAC,GAAO,WAAAC,KAAqD;AAC3F,SAAKD,sBAEF,KAAA,EAAE,WAAWF,EAAG,4FAA4FG,CAAS,GACnH,UAAAD,GACH,IAJiB;AAMrB;"}
|