diff --git a/docs/.vitepress/data/teamData.json b/docs/.vitepress/data/teamData.json new file mode 100644 index 000000000..ac71685fa --- /dev/null +++ b/docs/.vitepress/data/teamData.json @@ -0,0 +1,48 @@ +[ + { + "name": "Eric Fennis", + "title": "Creator of Lucide & Software engineer @nedap", + "image": "https://github.com/ericfennis.png?size=192", + "sponsor": "https://github.com/sponsors/ericfennis", + "socialLinks": [ + { + "icon": "github", + "link": "https://github.com/ericfennis" + }, + { + "icon": "x", + "link": "https://github.com/ericfennis" + } + ] + }, + { + "name": "Karsa Rigó", + "title": "Maintainer of Lucide & Software engineer @sztaki", + "image": "https://github.com/karsa-mistmere.png?size=192", + "socialLinks": [ + { + "icon": "github", + "link": "https://github.com/karsa-mistmere" + }, + { + "icon": "linkedin", + "link": "https://www.linkedin.com/in/karsamistmere" + } + ] + }, + { + "name": "jguddas", + "title": "Maintainer of Lucide & Software engineer @lego", + "image": "https://github.com/jguddas.png?size=192", + "socialLinks": [ + { + "icon": "github", + "link": "https://github.com/jguddas" + }, + { + "icon": "linkedin", + "link": "https://www.linkedin.com/in/jguddas" + } + ] + } +] diff --git a/docs/.vitepress/theme/components/base/Badge.vue b/docs/.vitepress/theme/components/base/Badge.vue index aabe58c56..0abedf2d6 100644 --- a/docs/.vitepress/theme/components/base/Badge.vue +++ b/docs/.vitepress/theme/components/base/Badge.vue @@ -1,6 +1,5 @@ + + + + diff --git a/docs/.vitepress/theme/components/home/HomeSponsorCard.vue b/docs/.vitepress/theme/components/home/HomeSponsorCard.vue new file mode 100644 index 000000000..3c3fd726a --- /dev/null +++ b/docs/.vitepress/theme/components/home/HomeSponsorCard.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/docs/.vitepress/theme/components/home/HomeTeamSection.vue b/docs/.vitepress/theme/components/home/HomeTeamSection.vue new file mode 100644 index 000000000..e128ca6d4 --- /dev/null +++ b/docs/.vitepress/theme/components/home/HomeTeamSection.vue @@ -0,0 +1,91 @@ + + + + + + diff --git a/docs/.vitepress/theme/components/home/TeamMemberCard.vue b/docs/.vitepress/theme/components/home/TeamMemberCard.vue new file mode 100644 index 000000000..8d472e8ea --- /dev/null +++ b/docs/.vitepress/theme/components/home/TeamMemberCard.vue @@ -0,0 +1,91 @@ + + + + + + + diff --git a/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue b/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue new file mode 100644 index 000000000..548e15b20 --- /dev/null +++ b/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/docs/.vitepress/theme/components/icons/IconDetailOverlay.vue b/docs/.vitepress/theme/components/icons/IconDetailOverlay.vue index ec5150953..9dc8d21de 100644 --- a/docs/.vitepress/theme/components/icons/IconDetailOverlay.vue +++ b/docs/.vitepress/theme/components/icons/IconDetailOverlay.vue @@ -13,12 +13,18 @@ import { computedAsync } from '@vueuse/core'; import { satisfies } from 'semver'; const props = defineProps<{ - iconName: string + iconName: string | null }>() +const { go } = useRouter() + const icon = computedAsync(async () => { if (props.iconName) { - return (await import(`../../../data/iconDetails/${props.iconName}.ts`)).default as IconEntity + try { + return (await import(`../../../data/iconDetails/${props.iconName}.ts`)).default as IconEntity + } catch (err) { + go(`/icons/${props.iconName}`) + } } return null }, null) @@ -36,8 +42,6 @@ function onClose() { emit('close') } -const { go } = useRouter() - const CloseIcon = createLucideIcon('Close', x) const Expand = createLucideIcon('Expand', expand) @@ -144,11 +148,11 @@ const Expand = createLucideIcon('Expand', expand) } .drawer-enter-active { - transition: all 0.2s cubic-bezier(.21,.8,.46,.9); + transition: opacity 0.5s, transform 0.25s ease; } .drawer-leave-active { - transition: all 0.4s cubic-bezier(1, 0.5, 0.8, 1); + transition: opacity 0.25s ease, transform 1.6s ease-out; } .drawer-enter-from, diff --git a/docs/.vitepress/theme/components/icons/IconItem.vue b/docs/.vitepress/theme/components/icons/IconItem.vue index 6bfa6be5b..e02564237 100644 --- a/docs/.vitepress/theme/components/icons/IconItem.vue +++ b/docs/.vitepress/theme/components/icons/IconItem.vue @@ -52,8 +52,7 @@ async function navigateToIcon(event) { event.preventDefault() window.history.pushState({}, '', `/icons/${props.name}`) emit('setActiveIcon', props.name) - } - else { + } else { event.preventDefault() go(`/icons/${props.name}`) } diff --git a/docs/.vitepress/theme/components/icons/IconsCategoryOverview.vue b/docs/.vitepress/theme/components/icons/IconsCategoryOverview.vue index 19b9faf81..bcfbbd018 100644 --- a/docs/.vitepress/theme/components/icons/IconsCategoryOverview.vue +++ b/docs/.vitepress/theme/components/icons/IconsCategoryOverview.vue @@ -12,6 +12,7 @@ import { useElementSize, useEventListener, useVirtualList } from '@vueuse/core'; import chunkArray from '../../utils/chunkArray'; import { CategoryRow } from './IconsCategory.vue'; import useScrollToCategory from '../../composables/useScrollToCategory'; +import CarbonAdOverlay from './CarbonAdOverlay.vue'; const ICON_SIZE = 56; const ICON_GRID_GAP = 8; @@ -133,6 +134,12 @@ function onFocusSearchInput() { const NoResults = defineAsyncComponent(() => import('./NoResults.vue')); const IconDetailOverlay = defineAsyncComponent(() => import('./IconDetailOverlay.vue')); + +function handleCloseDrawer() { + setActiveIconName(''); + + window.history.pushState({}, '', '/icons/categories'); +} diff --git a/docs/.vitepress/theme/components/showcase/ShowcaseList.vue b/docs/.vitepress/theme/components/showcase/ShowcaseList.vue index cf1a58b35..340ef299f 100644 --- a/docs/.vitepress/theme/components/showcase/ShowcaseList.vue +++ b/docs/.vitepress/theme/components/showcase/ShowcaseList.vue @@ -40,33 +40,4 @@ import ShowcaseListItem from "./ShowcaseListItem.vue"; .package-group { margin-bottom: 96px; } - -.grid { - display: flex; - flex-wrap: wrap; - align-items: stretch; - justify-content: center; - align-content: space-evenly; - box-sizing: border-box; - margin: -8px; -} - -.grid > * { - flex-basis: 100%; - box-sizing: border-box; - padding: 8px; -} - -@media (min-width: 960px) { - .grid > * { - flex-basis: 50%; - } -} - -@media (min-width: 1280px) { - .grid > * { - flex-basis: 33.33%; - } -} - diff --git a/docs/.vitepress/vue-shim.d.ts b/docs/.vitepress/vue-shim.d.ts index 90ab0a63e..478b6d7ad 100644 --- a/docs/.vitepress/vue-shim.d.ts +++ b/docs/.vitepress/vue-shim.d.ts @@ -1,5 +1,7 @@ +import { IconNode } from 'lucide-vue-next/src/createLucideIcon'; +import Vue from 'vue'; + declare module '*.vue' { - import Vue from 'vue'; export default Vue; } @@ -16,3 +18,7 @@ declare const resvg_wasm: RequestInfo | URL | Response | BufferSource | WebAssem declare module 'node:module' { function createRequire(filename: string): NodeRequire; } + +declare module '*.node.json' { + export default IconNode; +} diff --git a/docs/icons/categories.md b/docs/icons/categories.md index 619c62e4c..6b211ec9e 100644 --- a/docs/icons/categories.md +++ b/docs/icons/categories.md @@ -10,7 +10,6 @@ import { data } from './icons.data.ts' import { data as categoriesData } from './categories.data.ts' import PageContainer from '../.vitepress/theme/components/PageContainer.vue' import IconsCategoryOverview from '../.vitepress/theme/components/icons/IconsCategoryOverview.vue' -
diff --git a/docs/index.md b/docs/index.md index 28436c656..0eae54567 100644 --- a/docs/index.md +++ b/docs/index.md @@ -56,7 +56,9 @@ features: + diff --git a/docs/public/open-collective.png b/docs/public/open-collective.png new file mode 100644 index 000000000..c24d24d00 Binary files /dev/null and b/docs/public/open-collective.png differ