diff --git a/docs/.vitepress/components/IconCustomizer.vue b/docs/.vitepress/components/IconCustomizer.vue index a81628c40..a79efd9ec 100644 --- a/docs/.vitepress/components/IconCustomizer.vue +++ b/docs/.vitepress/components/IconCustomizer.vue @@ -1,11 +1,16 @@ diff --git a/docs/.vitepress/components/IconPreview.vue b/docs/.vitepress/components/IconPreview.vue index 1dcb59881..8893dbcbe 100644 --- a/docs/.vitepress/components/IconPreview.vue +++ b/docs/.vitepress/components/IconPreview.vue @@ -2,7 +2,7 @@ import type { IconEntity } from '../types' import { computed } from 'vue' import createLucideIcon from 'lucide-vue-next/src/createLucideIcon'; -import CloseButton from './CloseButton.vue'; +import { useIconSizeContext } from '../composables/useSharedSize'; const props = defineProps<{ name: IconEntity['name'] @@ -10,9 +10,9 @@ const props = defineProps<{ customizable?: boolean }>() -const size = 24 +const { size } = useIconSizeContext() -const gridLines = computed(() => Array.from({ length:(size - 1) })) +const gridLines = computed(() => Array.from({ length:(size.value - 1) })) const iconComponent = computed(() => { if (!props.name || !props.iconNode) return null @@ -20,10 +20,14 @@ const iconComponent = computed(() => { }) - diff --git a/docs/.vitepress/components/RangeSlider.vue b/docs/.vitepress/components/RangeSlider.vue new file mode 100644 index 000000000..020a8e083 --- /dev/null +++ b/docs/.vitepress/components/RangeSlider.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/docs/.vitepress/composables/useSharedSize.ts b/docs/.vitepress/composables/useSharedSize.ts new file mode 100644 index 000000000..5d691afeb --- /dev/null +++ b/docs/.vitepress/composables/useSharedSize.ts @@ -0,0 +1,31 @@ +/* eslint-disable no-console */ + +import { + ref, provide, inject, Ref +} from 'vue'; + +export const SIZE_CONTEXT_NAME = Symbol('size'); + +interface IconSizeContext { + size: Ref +} + +export const context = { + size: ref(24), +}; + +export function useIconSizeProvider(): IconSizeContext { + provide(SIZE_CONTEXT_NAME, context); + + return context; +} + +export function useIconSizeContext(): IconSizeContext{ + const context = inject(SIZE_CONTEXT_NAME); + + if (!context) { + throw new Error('useIconSizeContext must be used with useIconSizeProvider'); + } + + return context; +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index 37c00ad6a..66ce0b12d 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -4,6 +4,7 @@ import './style.css' import { Theme } from 'vitepress' import IconsSidebarNavAfter from './layouts/IconsSidebarNavAfter.vue' import HomeHeroIconsCard from '../components/HomeHeroIconsCard.vue' +import { SIZE_CONTEXT_NAME, context } from '../composables/useSharedSize' const theme: Partial = { extends: DefaultTheme, @@ -13,7 +14,9 @@ const theme: Partial = { 'home-hero-image': () => h(HomeHeroIconsCard) }) }, - + enhanceApp({ app }) { + app.provide(SIZE_CONTEXT_NAME,context) + } } export default theme