import { Button, Flex, Link, WrapItem, Text, Wrap, Heading, Box } from '@chakra-ui/react'; import download from 'downloadjs'; import { Download, Github } from 'lucide-react'; import NextLink from 'next/link'; import { IconCustomizerDrawer } from './IconCustomizerDrawer'; import JSLogo from '../../public/framework-logos/js.svg'; import ReactLogo from '../../public/framework-logos/react.svg'; import VueLogo from '../../public/framework-logos/vue.svg'; import Vue3Logo from '../../public/framework-logos/vue-next.svg'; import PreactLogo from '../../public/framework-logos/preact.svg'; import AngularLogo from '../../public/framework-logos/angular.svg'; import FlutterLogo from '../../public/framework-logos/flutter.svg'; import SvelteLogo from '../../public/framework-logos/svelte.svg'; import { useCallback, useState } from 'react'; import { useCustomizeIconContext } from './CustomizeIconContext'; import { IconEntity } from '../types'; import generateZip, { IconContent } from 'src/lib/generateZip'; interface HeaderProps { data: IconEntity[]; } const Header = ({ data }: HeaderProps) => { const [zippingIcons, setZippingIcons] = useState(false); const { iconsRef, strokeWidth, color, size } = useCustomizeIconContext(); const downloadAllIcons = useCallback(async () => { setZippingIcons(true); let iconEntries: IconContent[] = Object.entries(iconsRef.current) .map(([name, svgEl]) => [ name, svgEl.outerHTML, ]); // Fallback if (iconEntries.length === 0) { const getFallbackZip = (await import('../lib/getFallbackZip')).default iconEntries = getFallbackZip(data, { strokeWidth, color, size }) } const zip = await generateZip(iconEntries); download(zip, 'lucide.zip'); setZippingIcons(false); }, []); const repositoryUrl = 'https://github.com/lucide-icons/lucide'; const packages = [ { name: 'lucide', Logo: JSLogo, href: '/docs/lucide', label: 'Lucide documentation for JavaScript', }, { name: 'lucide-react', Logo: ReactLogo, href: '/docs/lucide-react', label: 'Lucide documentation for React', }, { name: 'lucide-react-native', Logo: ReactLogo, href: '/docs/lucide-react-native', label: 'Lucide documentation for React Native', }, { name: 'lucide-vue', Logo: VueLogo, href: '/docs/lucide-vue', label: 'Lucide documentation for Vue', }, { name: 'lucide-vue-next', Logo: Vue3Logo, href: '/docs/lucide-vue-next', label: 'Lucide documentation for Vue 3', }, { name: 'lucide-svelte', Logo: SvelteLogo, href: '/docs/lucide-svelte', label: 'Lucide documentation for Svelte', }, { name: 'lucide-preact', Logo: PreactLogo, href: '/docs/lucide-preact', label: 'Lucide documentation for Preact', }, { name: 'lucide-angular', Logo: AngularLogo, href: '/docs/lucide-angular', label: 'Lucide documentation for Angluar', }, { name: 'lucide-flutter', Logo: FlutterLogo, href: '/docs/lucide-flutter', label: 'Lucide documentation for Flutter', }, ]; return ( Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of{' '} Feather Icons .
We're expanding the icon set as much as possible while keeping it nice-looking -{' '} join us !
Available for: {packages.map(({ name, href, Logo, label }) => ( ))} More options
); }; export default Header;