mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-13 13:48:26 +00:00
fix(site): persist icon customizer (#4944)
* fix(docs): persist icon customizer settings Persist icon color, size, stroke width, and absolute stroke width between page navigations and reloads. Keep a shared icon style state across the homepage and icons page, clamp the homepage preview size to its supported range, and apply persisted absolute stroke settings after mount. * fix(docs): avoid icon customizer hydration flicker Initialize persisted icon settings synchronously and apply absolute stroke width before the first rendered state. * fix(docs): restore icon styles before first paint Apply stored icon styles from a head script before hydration, defer customizer visibility until mount, and render persisted switches on the client to avoid stale SSR classes. Keep absolute stroke state synchronized globally and cover prepaint initialization with regression tests. * fix(site): persist icon customizer * fix(packages/react): update vulnerable @tanstack packages * fix(docs): persist icon customizer settings Persist icon color, size, stroke width, and absolute stroke width between page navigations and reloads. Keep a shared icon style state across the homepage and icons page, clamp the homepage preview size to its supported range, and apply persisted absolute stroke settings after mount. * fix(docs): avoid icon customizer hydration flicker Initialize persisted icon settings synchronously and apply absolute stroke width before the first rendered state. * fix(docs): restore icon styles before first paint Apply stored icon styles from a head script before hydration, defer customizer visibility until mount, and render persisted switches on the client to avoid stale SSR classes. Keep absolute stroke state synchronized globally and cover prepaint initialization with regression tests. * fix(site): persist icon customizer * fix(packages/react): update vulnerable @tanstack packages * fix(site): generalize usePersistedIconStyle to reduce code duplication in icon customizers * fix(site): home size slider now uses max="256", matching the sidebar * fix(site): fix linting issues in iconStyleHead.js * fix(site): make Switch.vue hydration safe * fix(site): fix home icon customizer color input width * fix(site): make home icon customizer not persistent * fix(site): fix duplicate ids in sidebar icon customizer as well * fix(site): various minor fixes to the customizer bl * fix(site): revert "[default]" placeholder --------- Co-authored-by: epifaniofrancisco <epifaniofrancisco03@gmail.com>
This commit is contained in:
co-authored by
epifaniofrancisco
parent
9d9418a25d
commit
00300d31bd
@@ -15,6 +15,10 @@ const defaultSandpackCSS = await readFile(
|
||||
fileURLToPath(new URL('./theme/sandpack-default.css', import.meta.url)),
|
||||
'utf-8',
|
||||
);
|
||||
const iconStyleHeadScript = await readFile(
|
||||
fileURLToPath(new URL('./theme/iconStyleHead.js', import.meta.url)),
|
||||
'utf-8',
|
||||
);
|
||||
|
||||
const title = 'Lucide';
|
||||
const socialTitle = 'Lucide Icons';
|
||||
@@ -84,7 +88,10 @@ export default defineConfig({
|
||||
}) as unknown as UserConfig['vite']['plugins'][0],
|
||||
],
|
||||
},
|
||||
head: getHeadConfig({ title, description, socialTitle }),
|
||||
head: [
|
||||
...getHeadConfig({ title, description, socialTitle }),
|
||||
['script', {}, iconStyleHeadScript],
|
||||
],
|
||||
transformPageData,
|
||||
themeConfig: {
|
||||
logo: {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<script setup lang="ts">
|
||||
import { useData } from 'vitepress';
|
||||
import { computed } from 'vue';
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -7,8 +6,6 @@ const props = defineProps<{
|
||||
id: string;
|
||||
}>();
|
||||
|
||||
const { isDark } = useData();
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
||||
function limitHexInput(val: string) {
|
||||
@@ -22,7 +19,7 @@ function limitHexInput(val: string) {
|
||||
const value = computed({
|
||||
get: () => {
|
||||
if (props.modelValue == null || props.modelValue === 'currentColor') {
|
||||
return isDark.value ? '#ffffff' : '#000000';
|
||||
return null;
|
||||
}
|
||||
|
||||
return props.modelValue;
|
||||
|
||||
@@ -5,7 +5,7 @@ import Button from './Button.vue';
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Button class="reset-button">
|
||||
<Button class="reset-button" aria-label="Reset style">
|
||||
<Icon
|
||||
:size="20"
|
||||
:iconNode="rotateCw"
|
||||
@@ -16,6 +16,7 @@ import Button from './Button.vue';
|
||||
|
||||
<style scoped>
|
||||
.reset-button {
|
||||
transition: ease-in-out 0.1s opacity;
|
||||
background: none;
|
||||
padding: 0;
|
||||
}
|
||||
@@ -29,6 +30,12 @@ import Button from './Button.vue';
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.reset-button:disabled {
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* a rotate css animation keyframes */
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<script setup>
|
||||
import { Switch } from '@headlessui/vue'
|
||||
import { onMounted, ref } from 'vue'
|
||||
|
||||
defineProps({
|
||||
modelValue: {
|
||||
@@ -9,14 +10,19 @@
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
const isHydrated = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
isHydrated.value = true
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Switch
|
||||
:model-value="modelValue"
|
||||
:model-value="isHydrated ? modelValue : false"
|
||||
@update:model-value="emit('update:modelValue', $event)"
|
||||
class="switch"
|
||||
:class="{ enabled: modelValue }"
|
||||
:class="{ enabled: isHydrated && modelValue }"
|
||||
>
|
||||
<span class="thumb" />
|
||||
</Switch>
|
||||
|
||||
@@ -1,59 +1,21 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, watch } from 'vue'
|
||||
import { syncRef, useCssVar } from '@vueuse/core'
|
||||
import HomeContainer from './HomeContainer.vue'
|
||||
import RangeSlider from '../base/RangeSlider.vue'
|
||||
import InputField from '../base/InputField.vue'
|
||||
import ColorPicker from '../base/ColorPicker.vue'
|
||||
import ResetButton from '../base/ResetButton.vue'
|
||||
import HomeIconCustomizerIcons from './HomeIconCustomizerIcons.vue'
|
||||
import Switch from '../base/Switch.vue'
|
||||
import { computed } from 'vue';
|
||||
import { useIconStyle } from '../../composables/useIconStyle';
|
||||
import HomeContainer from './HomeContainer.vue';
|
||||
import RangeSlider from '../base/RangeSlider.vue';
|
||||
import InputField from '../base/InputField.vue';
|
||||
import ColorPicker from '../base/ColorPicker.vue';
|
||||
import ResetButton from '../base/ResetButton.vue';
|
||||
import HomeIconCustomizerIcons from './HomeIconCustomizerIcons.vue';
|
||||
import Switch from '../base/Switch.vue';
|
||||
|
||||
const { color, strokeWidth, size, absoluteStrokeWidth, isCustomized, resetStyle } = useIconStyle();
|
||||
|
||||
const iconContainer = ref<HTMLElement | null>()
|
||||
const color = ref('currentColor')
|
||||
const strokeWidth = ref(2)
|
||||
const size = ref(24)
|
||||
const absoluteStrokeWidth = ref(false)
|
||||
|
||||
const colorCssVar = useCssVar(
|
||||
'--customize-color',
|
||||
iconContainer,
|
||||
{
|
||||
initialValue: 'default'
|
||||
}
|
||||
)
|
||||
|
||||
const strokeWidthCssVar = useCssVar(
|
||||
'--customize-strokeWidth',
|
||||
iconContainer,
|
||||
{
|
||||
initialValue: '2'
|
||||
}
|
||||
)
|
||||
|
||||
const sizeCssVar = useCssVar(
|
||||
'--customize-size',
|
||||
iconContainer,
|
||||
{
|
||||
initialValue: '24'
|
||||
}
|
||||
)
|
||||
|
||||
syncRef(color, colorCssVar)
|
||||
syncRef(strokeWidth, strokeWidthCssVar, { transform: { ltr: String, rtl: Number } })
|
||||
syncRef(size, sizeCssVar, { transform: { ltr: String, rtl: Number } })
|
||||
|
||||
function resetStyle () {
|
||||
color.value = 'currentColor'
|
||||
strokeWidth.value = 2
|
||||
size.value = 24
|
||||
absoluteStrokeWidth.value = false
|
||||
}
|
||||
|
||||
watch(absoluteStrokeWidth, (enabled) => {
|
||||
iconContainer.value?.classList.toggle('absolute-stroke-width', enabled)
|
||||
})
|
||||
const iconStyle = computed(() => ({
|
||||
'--home-icon-color': color.value,
|
||||
'--home-icon-stroke-width': String(strokeWidth.value),
|
||||
'--home-icon-size': String(size.value),
|
||||
}));
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -62,7 +24,10 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
<div class="card-column">
|
||||
<h2 class="title">
|
||||
Style as you please
|
||||
<ResetButton @click="resetStyle"></ResetButton>
|
||||
<ResetButton
|
||||
:disabled="!isCustomized"
|
||||
@click="resetStyle"
|
||||
/>
|
||||
</h2>
|
||||
<p class="copy">
|
||||
Lucide has a lot of customization options to match the icons with your UI.
|
||||
@@ -78,7 +43,10 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
class="color-picker-field"
|
||||
>
|
||||
<template #display>
|
||||
<ColorPicker v-model="color" id="icon-color" />
|
||||
<ColorPicker
|
||||
v-model="color"
|
||||
id="icon-color-picker"
|
||||
/>
|
||||
</template>
|
||||
</InputField>
|
||||
|
||||
@@ -90,7 +58,7 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
<span class="customize-label">{{ strokeWidth }}px</span>
|
||||
</template>
|
||||
<RangeSlider
|
||||
id="stroke-width"
|
||||
id="stroke-width-slider"
|
||||
name="stroke-width"
|
||||
v-model="strokeWidth"
|
||||
:min="1"
|
||||
@@ -107,7 +75,7 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
<span class="customize-label">{{ size }}px</span>
|
||||
</template>
|
||||
<RangeSlider
|
||||
id="size"
|
||||
id="size-slider"
|
||||
name="size"
|
||||
v-model="size"
|
||||
:min="16"
|
||||
@@ -122,7 +90,7 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
>
|
||||
<template #display>
|
||||
<Switch
|
||||
id="absolute-stroke-width"
|
||||
id="absolute-stroke-width-switch"
|
||||
name="absolute-stroke-width"
|
||||
v-model="absoluteStrokeWidth"
|
||||
/>
|
||||
@@ -131,8 +99,11 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="icons-container card-column" ref="iconContainer">
|
||||
<HomeIconCustomizerIcons />
|
||||
<div class="icons-container card-column">
|
||||
<HomeIconCustomizerIcons
|
||||
:class="{ 'absolute-stroke-width': absoluteStrokeWidth }"
|
||||
:style="iconStyle"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</HomeContainer>
|
||||
@@ -179,10 +150,6 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
display: grid;
|
||||
grid-template-columns: 8fr 10fr;
|
||||
}
|
||||
/*
|
||||
.card-column {
|
||||
flex: 1;
|
||||
} */
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
@@ -191,7 +158,7 @@ watch(absoluteStrokeWidth, (enabled) => {
|
||||
}
|
||||
}
|
||||
|
||||
.color-picker-field:deep(.display-value) {
|
||||
width: 138px;
|
||||
.color-picker-field:deep(.icon-color-picker-input) {
|
||||
width: 116px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,29 +1,35 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import { data } from './HomeHeroIconsCard.data'
|
||||
import LucideIcon from '../base/LucideIcon.vue'
|
||||
import { vIntersectionObserver } from '@vueuse/components'
|
||||
import { data } from './HomeHeroIconsCard.data';
|
||||
import LucideIcon from '../base/LucideIcon.vue';
|
||||
import { vIntersectionObserver } from '@vueuse/components';
|
||||
|
||||
const getInitialItems = () => data.icons.slice(0, 64)
|
||||
const items = ref(getInitialItems())
|
||||
const showIcons = ref(false)
|
||||
const getInitialItems = () => data.icons.slice(0, 64);
|
||||
const items = ref(getInitialItems());
|
||||
const showIcons = ref(false);
|
||||
|
||||
// Added intersection observer to improve performance
|
||||
const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting }]) => {
|
||||
if (isIntersecting) {
|
||||
showIcons.value = true
|
||||
showIcons.value = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="icon-grid" v-intersection-observer="onIntersectionObserver">
|
||||
<div
|
||||
class="icon-grid"
|
||||
v-intersection-observer="onIntersectionObserver"
|
||||
>
|
||||
<template v-if="showIcons">
|
||||
<div
|
||||
v-for="icon in items"
|
||||
class="icon-grid-item"
|
||||
>
|
||||
<LucideIcon v-bind="icon" class="lucide-icon"/>
|
||||
>
|
||||
<LucideIcon
|
||||
v-bind="icon"
|
||||
class="lucide-icon"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@@ -36,7 +42,7 @@ const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting
|
||||
grid-template-columns: repeat(auto-fill, minmax(68px, 1fr));
|
||||
grid-template-rows: repeat(auto-fill, minmax(68px, 1fr));
|
||||
width: 100%;
|
||||
height:100%;
|
||||
height: 100%;
|
||||
max-height: 360px;
|
||||
gap: 1px;
|
||||
overflow: hidden;
|
||||
@@ -65,13 +71,15 @@ const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting
|
||||
|
||||
.lucide-icon {
|
||||
will-change: width, height, stroke-width, stroke;
|
||||
color: var(--customize-color, currentColor);
|
||||
stroke-width: var(--customize-strokeWidth, 2);
|
||||
width: calc(var(--customize-size, 24) * 1px);
|
||||
height: calc(var(--customize-size, 24) * 1px);
|
||||
color: var(--home-icon-color, currentColor);
|
||||
stroke-width: var(--home-icon-stroke-width, 2);
|
||||
width: calc(var(--home-icon-size, 24) * 1px);
|
||||
height: calc(var(--home-icon-size, 24) * 1px);
|
||||
max-width: 3rem;
|
||||
max-height: 3rem;
|
||||
}
|
||||
|
||||
.icons-container.absolute-stroke-width .lucide-icon {
|
||||
stroke-width: calc(var(--customize-strokeWidth, 2) * 24 / var(--customize-size, 24));
|
||||
.icon-grid.absolute-stroke-width .lucide-icon {
|
||||
stroke-width: calc(var(--home-icon-stroke-width, 2) * 24 / var(--home-icon-size, 24));
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,73 +1,26 @@
|
||||
<script setup lang="ts">
|
||||
import { shallowRef, type Ref, watch, computed } from 'vue';
|
||||
import { useCssVar, syncRef } from '@vueuse/core';
|
||||
import { STYLE_DEFAULTS, useIconStyleContext } from '../../composables/useIconStyle';
|
||||
import { useIconStyleContext } from '../../composables/useIconStyle';
|
||||
import RangeSlider from '../base/RangeSlider.vue';
|
||||
import InputField from '../base/InputField.vue';
|
||||
import ColorPicker from '../base/ColorPicker.vue';
|
||||
import ResetButton from '../base/ResetButton.vue';
|
||||
import Switch from '../base/Switch.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
rootEl?: Ref<HTMLElement>;
|
||||
}>();
|
||||
|
||||
const { color, strokeWidth, size, absoluteStrokeWidth } = useIconStyleContext();
|
||||
const documentRef = shallowRef<HTMLElement | undefined>(
|
||||
typeof document !== 'undefined' ? document?.documentElement : undefined,
|
||||
);
|
||||
|
||||
const colorCssVar = useCssVar('--customize-color', props.rootEl?.value ?? documentRef.value, {
|
||||
initialValue: `${STYLE_DEFAULTS.color}`,
|
||||
});
|
||||
|
||||
const strokeWidthCssVar = useCssVar(
|
||||
'--customize-strokeWidth',
|
||||
props.rootEl?.value ?? documentRef.value,
|
||||
{
|
||||
initialValue: `${STYLE_DEFAULTS.strokeWidth}`,
|
||||
},
|
||||
);
|
||||
|
||||
const sizeCssVar = useCssVar('--customize-size', props.rootEl?.value ?? documentRef.value, {
|
||||
initialValue: `${STYLE_DEFAULTS.size}`,
|
||||
});
|
||||
|
||||
syncRef(color, colorCssVar, { direction: 'ltr' });
|
||||
syncRef(strokeWidth, strokeWidthCssVar, { direction: 'ltr', transform: { ltr: String } });
|
||||
syncRef(size, sizeCssVar, { direction: 'ltr', transform: { ltr: String } });
|
||||
|
||||
function resetStyle() {
|
||||
color.value = STYLE_DEFAULTS.color;
|
||||
strokeWidth.value = STYLE_DEFAULTS.strokeWidth;
|
||||
size.value = STYLE_DEFAULTS.size;
|
||||
absoluteStrokeWidth.value = STYLE_DEFAULTS.absoluteStrokeWidth;
|
||||
}
|
||||
|
||||
watch(absoluteStrokeWidth, (enabled) => {
|
||||
const htmlEl = document.documentElement;
|
||||
|
||||
htmlEl.classList.toggle('absolute-stroke-width', enabled);
|
||||
});
|
||||
|
||||
const customizingActive = computed(() => {
|
||||
return (
|
||||
color.value !== STYLE_DEFAULTS.color ||
|
||||
strokeWidth.value !== STYLE_DEFAULTS.strokeWidth ||
|
||||
size.value !== STYLE_DEFAULTS.size ||
|
||||
absoluteStrokeWidth.value !== STYLE_DEFAULTS.absoluteStrokeWidth
|
||||
);
|
||||
});
|
||||
const { color, strokeWidth, size, absoluteStrokeWidth, isCustomized, resetStyle } =
|
||||
useIconStyleContext();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div
|
||||
class="customizer-card"
|
||||
:class="{ customized: customizingActive }"
|
||||
:class="{ customized: isCustomized }"
|
||||
>
|
||||
<div class="card-header">
|
||||
<h2 class="card-title">Customizer</h2>
|
||||
<ResetButton @click="resetStyle"></ResetButton>
|
||||
<ResetButton
|
||||
:disabled="!isCustomized"
|
||||
@click="resetStyle"
|
||||
/>
|
||||
</div>
|
||||
<InputField
|
||||
id="icon-color"
|
||||
@@ -75,7 +28,7 @@ const customizingActive = computed(() => {
|
||||
>
|
||||
<ColorPicker
|
||||
v-model="color"
|
||||
id="icon-color"
|
||||
id="icon-color-picker"
|
||||
class="color-picker"
|
||||
/>
|
||||
</InputField>
|
||||
@@ -88,7 +41,7 @@ const customizingActive = computed(() => {
|
||||
<span class="customize-label">{{ strokeWidth }}px</span>
|
||||
</template>
|
||||
<RangeSlider
|
||||
id="stroke-width"
|
||||
id="stroke-width-slider"
|
||||
name="stroke-width"
|
||||
v-model="strokeWidth"
|
||||
:min="0.5"
|
||||
@@ -105,7 +58,7 @@ const customizingActive = computed(() => {
|
||||
<span class="customize-label">{{ size }}px</span>
|
||||
</template>
|
||||
<RangeSlider
|
||||
id="size"
|
||||
id="size-slider"
|
||||
name="size"
|
||||
v-model="size"
|
||||
:min="16"
|
||||
@@ -119,7 +72,7 @@ const customizingActive = computed(() => {
|
||||
label="Absolute stroke width"
|
||||
>
|
||||
<Switch
|
||||
id="absolute-stroke-width"
|
||||
id="absolute-stroke-width-switch"
|
||||
name="absolute-stroke-width"
|
||||
v-model="absoluteStrokeWidth"
|
||||
/>
|
||||
@@ -140,7 +93,6 @@ const customizingActive = computed(() => {
|
||||
color: var(--vp-c-text-1);
|
||||
line-height: 32px;
|
||||
font-size: 16px;
|
||||
/* margin-bottom: 12px; */
|
||||
}
|
||||
|
||||
.customizer-card {
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { test } from 'node:test';
|
||||
import { nextTick } from 'vue';
|
||||
|
||||
const storedValues = new Map<string, string>([
|
||||
['icon-size', '240'],
|
||||
['icon-stroke-width', '1.5'],
|
||||
['icon-color', '#ff0000'],
|
||||
['icon-absolute-stroke-width', 'true'],
|
||||
]);
|
||||
const styleProperties = new Map<string, string>();
|
||||
const classes = new Set<string>();
|
||||
|
||||
class StorageMock {
|
||||
getItem(key: string) {
|
||||
return storedValues.get(key) ?? null;
|
||||
}
|
||||
|
||||
setItem(key: string, value: string) {
|
||||
storedValues.set(key, value);
|
||||
}
|
||||
|
||||
removeItem(key: string) {
|
||||
storedValues.delete(key);
|
||||
}
|
||||
}
|
||||
|
||||
class StorageEventMock {
|
||||
type: string;
|
||||
options: unknown;
|
||||
|
||||
constructor(type: string, options: unknown) {
|
||||
this.type = type;
|
||||
this.options = options;
|
||||
}
|
||||
}
|
||||
|
||||
const localStorage = new StorageMock();
|
||||
const document = {
|
||||
documentElement: {
|
||||
style: { setProperty: (key: string, value: string) => styleProperties.set(key, value) },
|
||||
classList: {
|
||||
toggle: (value: string, enabled: boolean) =>
|
||||
enabled ? classes.add(value) : classes.delete(value),
|
||||
},
|
||||
},
|
||||
};
|
||||
const window = {
|
||||
document,
|
||||
localStorage,
|
||||
addEventListener() {},
|
||||
removeEventListener() {},
|
||||
dispatchEvent() {},
|
||||
};
|
||||
|
||||
Object.assign(globalThis, {
|
||||
window,
|
||||
document,
|
||||
localStorage,
|
||||
Storage: StorageMock,
|
||||
StorageEvent: StorageEventMock,
|
||||
CSS: { supports: () => true },
|
||||
});
|
||||
|
||||
const { useIconStyle, usePersistedIconStyle } = await import('./useIconStyle.ts');
|
||||
|
||||
test('creates a non-persisted icon style from the defaults', () => {
|
||||
const style = useIconStyle();
|
||||
|
||||
assert.equal(style.size.value, 24);
|
||||
assert.equal(style.strokeWidth.value, 2);
|
||||
assert.equal(style.color.value, 'currentColor');
|
||||
assert.equal(style.absoluteStrokeWidth.value, false);
|
||||
|
||||
style.size.value = 48;
|
||||
|
||||
assert.equal(storedValues.get('icon-size'), '240');
|
||||
assert.equal(styleProperties.get('--customize-size'), '240');
|
||||
});
|
||||
|
||||
test('restores persisted settings and applies the shared CSS variables', () => {
|
||||
const style = usePersistedIconStyle();
|
||||
|
||||
assert.equal(style.size.value, 240);
|
||||
assert.equal(style.strokeWidth.value, 1.5);
|
||||
assert.equal(style.color.value, '#ff0000');
|
||||
assert.equal(style.absoluteStrokeWidth.value, true);
|
||||
assert.equal(style.isCustomized.value, true);
|
||||
assert.equal(styleProperties.get('--customize-size'), '240');
|
||||
assert.equal(styleProperties.get('--customize-strokeWidth'), '1.5');
|
||||
assert.equal(styleProperties.get('--customize-color'), '#ff0000');
|
||||
assert.ok(classes.has('absolute-stroke-width'));
|
||||
});
|
||||
|
||||
test('resetting updates refs, CSS variables, and persisted values', async () => {
|
||||
const style = usePersistedIconStyle();
|
||||
style.resetStyle();
|
||||
await nextTick();
|
||||
|
||||
assert.equal(style.size.value, 24);
|
||||
assert.equal(style.strokeWidth.value, 2);
|
||||
assert.equal(style.color.value, 'currentColor');
|
||||
assert.equal(style.absoluteStrokeWidth.value, false);
|
||||
assert.equal(style.isCustomized.value, false);
|
||||
assert.equal(styleProperties.get('--customize-size'), '24');
|
||||
assert.equal(styleProperties.get('--customize-strokeWidth'), '2');
|
||||
assert.equal(styleProperties.get('--customize-color'), 'currentColor');
|
||||
assert.equal(classes.has('absolute-stroke-width'), false);
|
||||
assert.equal(storedValues.get('icon-size'), '24');
|
||||
assert.equal(storedValues.get('icon-stroke-width'), '2');
|
||||
assert.equal(storedValues.get('icon-color'), 'currentColor');
|
||||
assert.equal(storedValues.get('icon-absolute-stroke-width'), 'false');
|
||||
});
|
||||
@@ -1,14 +1,19 @@
|
||||
import { ref, inject, Ref } from 'vue';
|
||||
import { computed, inject, ref, watch, type ComputedRef, type Ref } from 'vue';
|
||||
import { useLocalStorage } from '@vueuse/core';
|
||||
|
||||
export const ICON_STYLE_CONTEXT = Symbol('style');
|
||||
|
||||
interface IconSizeContext {
|
||||
interface IconStyleContext {
|
||||
size: Ref<number>;
|
||||
strokeWidth: Ref<number>;
|
||||
color: Ref<string>;
|
||||
absoluteStrokeWidth: Ref<boolean>;
|
||||
isCustomized: ComputedRef<boolean>;
|
||||
resetStyle: () => void;
|
||||
}
|
||||
|
||||
type IconStyle = Pick<IconStyleContext, 'size' | 'strokeWidth' | 'color' | 'absoluteStrokeWidth'>;
|
||||
|
||||
export const STYLE_DEFAULTS = {
|
||||
size: 24,
|
||||
strokeWidth: 2,
|
||||
@@ -16,15 +21,82 @@ export const STYLE_DEFAULTS = {
|
||||
absoluteStrokeWidth: false,
|
||||
};
|
||||
|
||||
export const iconStyleContext = {
|
||||
size: ref(24),
|
||||
strokeWidth: ref(2),
|
||||
color: ref('currentColor'),
|
||||
absoluteStrokeWidth: ref(false),
|
||||
const persistedIconStyle = {
|
||||
size: useLocalStorage('icon-size', STYLE_DEFAULTS.size, { initOnMounted: false }),
|
||||
strokeWidth: useLocalStorage('icon-stroke-width', STYLE_DEFAULTS.strokeWidth, {
|
||||
initOnMounted: false,
|
||||
}),
|
||||
color: useLocalStorage('icon-color', STYLE_DEFAULTS.color, { initOnMounted: false }),
|
||||
absoluteStrokeWidth: useLocalStorage(
|
||||
'icon-absolute-stroke-width',
|
||||
STYLE_DEFAULTS.absoluteStrokeWidth,
|
||||
{ initOnMounted: false },
|
||||
),
|
||||
};
|
||||
|
||||
export function useIconStyleContext(): IconSizeContext {
|
||||
const context = inject<IconSizeContext>(ICON_STYLE_CONTEXT);
|
||||
function createIconStyleContext(style: IconStyle): IconStyleContext {
|
||||
const isCustomized = computed(() => {
|
||||
return (
|
||||
style.color.value !== STYLE_DEFAULTS.color ||
|
||||
style.strokeWidth.value !== STYLE_DEFAULTS.strokeWidth ||
|
||||
style.size.value !== STYLE_DEFAULTS.size ||
|
||||
style.absoluteStrokeWidth.value !== STYLE_DEFAULTS.absoluteStrokeWidth
|
||||
);
|
||||
});
|
||||
|
||||
function resetStyle() {
|
||||
style.color.value = STYLE_DEFAULTS.color;
|
||||
style.strokeWidth.value = STYLE_DEFAULTS.strokeWidth;
|
||||
style.size.value = STYLE_DEFAULTS.size;
|
||||
style.absoluteStrokeWidth.value = STYLE_DEFAULTS.absoluteStrokeWidth;
|
||||
}
|
||||
|
||||
return {
|
||||
...style,
|
||||
isCustomized,
|
||||
resetStyle,
|
||||
};
|
||||
}
|
||||
|
||||
export const iconStyleContext = createIconStyleContext(persistedIconStyle);
|
||||
|
||||
export function useIconStyle() {
|
||||
return createIconStyleContext({
|
||||
size: ref(STYLE_DEFAULTS.size),
|
||||
strokeWidth: ref(STYLE_DEFAULTS.strokeWidth),
|
||||
color: ref(STYLE_DEFAULTS.color),
|
||||
absoluteStrokeWidth: ref(STYLE_DEFAULTS.absoluteStrokeWidth),
|
||||
});
|
||||
}
|
||||
|
||||
export function usePersistedIconStyle() {
|
||||
return iconStyleContext;
|
||||
}
|
||||
|
||||
if (typeof document !== 'undefined') {
|
||||
watch(
|
||||
[
|
||||
persistedIconStyle.size,
|
||||
persistedIconStyle.strokeWidth,
|
||||
persistedIconStyle.color,
|
||||
persistedIconStyle.absoluteStrokeWidth,
|
||||
],
|
||||
([size, strokeWidth, color, absoluteStrokeWidth]) => {
|
||||
const root = document.documentElement;
|
||||
root.style.setProperty('--customize-size', String(Math.min(256, Math.max(16, size))));
|
||||
root.style.setProperty(
|
||||
'--customize-strokeWidth',
|
||||
String(Math.min(3, Math.max(0.5, strokeWidth))),
|
||||
);
|
||||
if (CSS.supports('color', color)) root.style.setProperty('--customize-color', color);
|
||||
root.classList.toggle('absolute-stroke-width', absoluteStrokeWidth);
|
||||
},
|
||||
{ immediate: true, flush: 'sync' },
|
||||
);
|
||||
}
|
||||
|
||||
export function useIconStyleContext(): IconStyleContext {
|
||||
const context = inject<IconStyleContext>(ICON_STYLE_CONTEXT);
|
||||
|
||||
if (!context) {
|
||||
throw new Error('useIconStyleContext must be used with useIconStyleProvider');
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
// Run before the body is painted: the generated HTML cannot know local preferences.
|
||||
(() => {
|
||||
try {
|
||||
const root = globalThis.document.documentElement;
|
||||
const size = globalThis.localStorage.getItem('icon-size');
|
||||
const stroke = globalThis.localStorage.getItem('icon-stroke-width');
|
||||
const color = globalThis.localStorage.getItem('icon-color');
|
||||
const absolute = globalThis.localStorage.getItem('icon-absolute-stroke-width');
|
||||
if ([size, stroke, color, absolute].every((value) => value === null)) return;
|
||||
if (size !== null && Number.isFinite(Number(size))) {
|
||||
root.style.setProperty('--customize-size', String(Math.min(256, Math.max(16, Number(size)))));
|
||||
}
|
||||
if (stroke !== null && Number.isFinite(Number(stroke)))
|
||||
root.style.setProperty(
|
||||
'--customize-strokeWidth',
|
||||
String(Math.min(3, Math.max(0.5, Number(stroke)))),
|
||||
);
|
||||
if (color !== null && globalThis.CSS.supports('color', color))
|
||||
root.style.setProperty('--customize-color', color);
|
||||
root.classList.toggle('absolute-stroke-width', absolute === 'true');
|
||||
} catch {
|
||||
// Storage can be unavailable, for example in private browsing mode.
|
||||
}
|
||||
})();
|
||||
@@ -10,8 +10,8 @@
|
||||
"check": "pnpm build && pnpm typecheck && pnpm test:browser"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tanstack/react-router": "1.170.32",
|
||||
"@tanstack/react-start": "1.168.49",
|
||||
"@tanstack/react-router": "1.170.41",
|
||||
"@tanstack/react-start": "1.168.60",
|
||||
"lucide-react": "workspace:*",
|
||||
"react": "19.2.8",
|
||||
"react-dom": "19.2.8"
|
||||
|
||||
Generated
+212
-74
@@ -394,11 +394,11 @@ importers:
|
||||
integrations/lucide-react/tanstack-start:
|
||||
dependencies:
|
||||
'@tanstack/react-router':
|
||||
specifier: 1.170.32
|
||||
version: 1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
specifier: 1.170.41
|
||||
version: 1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/react-start':
|
||||
specifier: 1.168.49
|
||||
version: 1.168.49(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
specifier: 1.168.60
|
||||
version: 1.168.60(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
lucide-react:
|
||||
specifier: workspace:*
|
||||
version: link:../../../packages/lucide-react
|
||||
@@ -1651,10 +1651,6 @@ packages:
|
||||
'@astrojs/yaml2ts@0.2.4':
|
||||
resolution: {integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==}
|
||||
|
||||
'@babel/code-frame@7.27.1':
|
||||
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/code-frame@7.29.7':
|
||||
resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -5691,6 +5687,10 @@ packages:
|
||||
resolution: {integrity: sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/history@1.162.4':
|
||||
resolution: {integrity: sha512-utTS5L2OkeYUzXGohL1Z8sefu1GLNOJcxe8Hd6iIdc/Xo1K1nDB2JEp4iSFhvYh33xKC9V91TxrS8qfrpoKobQ==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/react-router@1.170.32':
|
||||
resolution: {integrity: sha512-SIpxvaTKco100a5ZR3ePmArbhtm3XOx+w1dpGYY9gxHDta4iXSKDdQuhLonwJbIMkVJsU1rwXf0UDHMrF/1snw==}
|
||||
engines: {node: '>=20.19'}
|
||||
@@ -5698,15 +5698,22 @@ packages:
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-start-client@1.168.30':
|
||||
resolution: {integrity: sha512-qsZuykUl1EF0/rc1bin1RtjFzz07YMOTBzhOstSDzbOVm/WKf1QKFTN+qAZi74xlbXSWNuT2MiFRyg4RKwj8iw==}
|
||||
'@tanstack/react-router@1.170.41':
|
||||
resolution: {integrity: sha512-Mpvw8Wm5MGDbTqI8Yc9flLKxbOHwoWocv0H2aGKcgw2a017oK5nZWqa954P+DrUx/8fI98YNywnHP5XcD3tQ9w==}
|
||||
engines: {node: '>=20.19'}
|
||||
peerDependencies:
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-start-client@1.168.39':
|
||||
resolution: {integrity: sha512-Uby0uo37JlQgUKHU0snDwH9nYiEeAjm9+7pUOFgycU/UszEILC2SO2DSCoNnCMuHKj9z+4URKzBYIP2exT9+wg==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
peerDependencies:
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-start-rsc@0.1.48':
|
||||
resolution: {integrity: sha512-UglRdTMuF3c4dvzL/gh4dMVbMWHsPy8ZgTQdT2qpTlyt1b/3m+R40tBFdsfTgw76VTXivW+qV/ih0PN9000XTw==}
|
||||
'@tanstack/react-start-rsc@0.1.59':
|
||||
resolution: {integrity: sha512-M2Lqxkk5C1zQncQs5paqX+/OLdOht51pg6D84YfLMrNsjhU/nzb6wd92MIja0mi5i23+L+fxLLjQYR2DObjBlw==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
peerDependencies:
|
||||
'@rspack/core': '>=2.0.0-0'
|
||||
@@ -5722,15 +5729,15 @@ packages:
|
||||
react-server-dom-rspack:
|
||||
optional: true
|
||||
|
||||
'@tanstack/react-start-server@1.167.37':
|
||||
resolution: {integrity: sha512-cODHpFU8vIm7AdHii9W3NEuwyruNmT5wLDZjRsJLT9Jp+7FACnfJrRbvxnp1ldSv/9mxcHKi/OgwbdHQeMZcAQ==}
|
||||
'@tanstack/react-start-server@1.167.46':
|
||||
resolution: {integrity: sha512-K7z8xBOEdp8u5CZCxWrbS0tFtk5XZGMdhssLeZlRZKlLDbX7BKLdMtJ7th5sR6QVt9MTUAg3LcoqvJMPSFF+lg==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
peerDependencies:
|
||||
react: '>=18.0.0 || >=19.0.0'
|
||||
react-dom: '>=18.0.0 || >=19.0.0'
|
||||
|
||||
'@tanstack/react-start@1.168.49':
|
||||
resolution: {integrity: sha512-iQb1ZoEHqvZMGLR4G7v3tTtgL06yv/bwxvGP3waVHxVn7bRpyopM44YbOluaGkcJzc13ZTvdLKWYNAN3bxMX/Q==}
|
||||
'@tanstack/react-start@1.168.60':
|
||||
resolution: {integrity: sha512-WMOM0Xlh2lPbVlbjYM6uOxOpiaWRPvODm/dwkLsGKq5tjyHOHZmKckJgwlrZl7OQUqFlOZHYj8bKUTgoeg8cUQ==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
peerDependencies:
|
||||
'@rsbuild/core': ^2.0.0
|
||||
@@ -5746,6 +5753,12 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
|
||||
'@tanstack/react-store@0.11.2':
|
||||
resolution: {integrity: sha512-oj5O5DmiMWE+ih+SioX2ayC1kbK7d3fpLx0B75fPJr9nY3zU+hoW010yr64qXsY/9fyiLVE2bn5mGNV3owm8RQ==}
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
|
||||
'@tanstack/react-store@0.9.3':
|
||||
resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==}
|
||||
peerDependencies:
|
||||
@@ -5756,10 +5769,18 @@ packages:
|
||||
resolution: {integrity: sha512-wDwSLvoLwIaNcnx9UNcN9Mb7Y8QwCYq1U1RQZwyN186gnkIoIYI2SOxy8VqH1vFigbkHkk4FmwMAQlghPgDK2g==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/router-core@1.171.34':
|
||||
resolution: {integrity: sha512-X+19pGuuLVPvvAvPYw9v/+ktRk5cCll8AtfpBpOhDRmVgUMrfqze0467xtq8YRVVs/mmo5rVtWn/7Tp32RDBKw==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/router-generator@1.167.33':
|
||||
resolution: {integrity: sha512-Z3lCWIPuRUMPmuI8Mm48x/s49TxmHOaFVZ52j1W1QKYrsFHyT6U/h9bqfHJDxfQ8kz7y9q+W1YPKZ15Ee7yuCA==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/router-generator@1.167.40':
|
||||
resolution: {integrity: sha512-WkEueqEvsBBudzO0fx1nWfOmRNW8OAvBoVABTGls9bAWzjdC+KDGHvjCNrvn88ofs1F6gqL8aWnzKCbxW3dCyQ==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/router-plugin@1.168.35':
|
||||
resolution: {integrity: sha512-foDAZKFqHXae+oFbIgcsSvy2QCVRn7XdS3nhwcRvD+ed6JrKPUP/1lQMsZLJqWycgR1vkZF7gs955KGa0NZQ0w==}
|
||||
engines: {node: '>=20.19'}
|
||||
@@ -5781,20 +5802,45 @@ packages:
|
||||
webpack:
|
||||
optional: true
|
||||
|
||||
'@tanstack/router-plugin@1.168.42':
|
||||
resolution: {integrity: sha512-vAR5WXJh/ErseEWQftDhsJcr2c++ucRQ6FbqN3ygMO44+ZxxRfW3sIpZmddHROVSmBk8jc6MrwjTPNjVhd62Vw==}
|
||||
engines: {node: '>=20.19'}
|
||||
peerDependencies:
|
||||
'@rsbuild/core': '>=1.0.2 || ^2.0.0'
|
||||
'@tanstack/react-router': ^1.170.41
|
||||
vite: ^7.3.6
|
||||
vite-plugin-solid: ^2.11.10 || ^3.0.0-0
|
||||
webpack: '>=5.92.0'
|
||||
peerDependenciesMeta:
|
||||
'@rsbuild/core':
|
||||
optional: true
|
||||
'@tanstack/react-router':
|
||||
optional: true
|
||||
vite:
|
||||
optional: true
|
||||
vite-plugin-solid:
|
||||
optional: true
|
||||
webpack:
|
||||
optional: true
|
||||
|
||||
'@tanstack/router-utils@1.162.2':
|
||||
resolution: {integrity: sha512-hTWqJtqIFFdvuCl8WXNyrodp2L9zo2G37xKRrcVmVRWpAB2h+U1LuRAfS4tsFTiWOIoE/B+WDVFB8JpoEdw6jQ==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/start-client-core@1.170.27':
|
||||
resolution: {integrity: sha512-Ro6ZSM0NgYKDMxM0e8qyU4mBfnld2Zb74BA/9f4i35C0Y3IAA8Zxs/DIPfOo9VRYWp5c5n5Q8dRBn2qn0vtPhQ==}
|
||||
'@tanstack/router-utils@1.162.3':
|
||||
resolution: {integrity: sha512-Icb0xGuG1+54IV0WMLRcc3ErTx2HeJWyPG661FkQ8UT6guoBq1FJjFRqlG/JS0xi4mFFkBhvwO7tbLa32f3yxA==}
|
||||
engines: {node: '>=20.19'}
|
||||
|
||||
'@tanstack/start-client-core@1.170.34':
|
||||
resolution: {integrity: sha512-LfwZSbau2MLLZ/uPAoO+NC9fK3J66c0wLhnNQqIa+Goqw7bXPjkHwlsjY7evlUz1AnyhhQ1Qab95v+VmP0TZ9A==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
|
||||
'@tanstack/start-fn-stubs@1.162.0':
|
||||
resolution: {integrity: sha512-QWfUZ3Yo923tdQn38LyKMU8rcTw69zc+T4dAvgTWV4O56SqFRsGfS0lSWIMhJRwXIx/bvdi7nTUBDdZtTHtpTQ==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
|
||||
'@tanstack/start-plugin-core@1.171.39':
|
||||
resolution: {integrity: sha512-Zyj6G4MDFLXcHYhPavhewCBo8dsxi3qvPk31zl/QtTzYzOY9rJHDDBGarKsJq20ziChmkGn/sttYqb4vGCxJDA==}
|
||||
'@tanstack/start-plugin-core@1.171.49':
|
||||
resolution: {integrity: sha512-HPOb7LnMc71k38cd5uvMybPPUU/Q/56KvSqQzSWz7cps1ZDFXaxUM6EFaFHLCdgTWqGexNGDdRE+sUVPVBM4Xg==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
peerDependencies:
|
||||
'@rsbuild/core': ^2.0.0
|
||||
@@ -5805,14 +5851,17 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
|
||||
'@tanstack/start-server-core@1.169.31':
|
||||
resolution: {integrity: sha512-56w8l+Fao01YCrmv0hzNxL3b3FRmqLRGdE11izZNQsW+1CcSYuehAM5khWKABuI1DI/UIBLGV7BwL4Dlg0eHCw==}
|
||||
'@tanstack/start-server-core@1.169.39':
|
||||
resolution: {integrity: sha512-pqqkxhXY46nuFSYt6TsMGyABiplUzHFHndKAlRRGC0fWDrJCH1koWxVMoxySa51ZETV79f/z73b5UZ1jfIkXwQ==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
|
||||
'@tanstack/start-storage-context@1.167.29':
|
||||
resolution: {integrity: sha512-8qfprC5774XMRDQlMogkfiGpFLiBf0xDG4bMFUbfkSzpCAQwpLbgGY4Zwft22O9rKYq2vUXusKAdVjvJTUEquQ==}
|
||||
'@tanstack/start-storage-context@1.167.36':
|
||||
resolution: {integrity: sha512-x+xCXK2GtFzY6NbXqAg8YpU6cwAjDfMeYSNzxfGzntpjbwBRHHrXeC/kYUnBBQCV7wK4kJ8vBBQGP0OyYTasUg==}
|
||||
engines: {node: '>=22.12.0'}
|
||||
|
||||
'@tanstack/store@0.11.2':
|
||||
resolution: {integrity: sha512-sJ4mjol8uQsHV0gOJzzjwXfh2Fwm+Sz0+8deqiTm4jGbMdjzNSW+xZCFm0kUa870uhd8yi+DpKnZb5Kc4apa0Q==}
|
||||
|
||||
'@tanstack/store@0.9.3':
|
||||
resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==}
|
||||
|
||||
@@ -11413,6 +11462,12 @@ packages:
|
||||
peerDependencies:
|
||||
seroval: ^1.0
|
||||
|
||||
seroval-plugins@1.6.7:
|
||||
resolution: {integrity: sha512-4Nk35ttD3DTDJW4hgw5StsVAPeU6qnDFnULAouw6tQ7oLTV/ICXrWpsXo2EE52eSP2joUMazbVf52mFEcADqRw==}
|
||||
engines: {node: '>=10'}
|
||||
peerDependencies:
|
||||
seroval: ^1.0
|
||||
|
||||
seroval@1.5.6:
|
||||
resolution: {integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -11421,6 +11476,10 @@ packages:
|
||||
resolution: {integrity: sha512-LErWMNS2RRFdu2RMA5u/PA59/IWs0XsikyEXGQ2/36iEWFrdG0ABmg17E17cikrv76891kOAMq3TkTFXpwAHXw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
seroval@1.6.7:
|
||||
resolution: {integrity: sha512-AeDcLh0yO2SFm9W71essgnSzLV9DI8ZH0x0knXn2DMnUZj728mpLbxjlbB6IqKCmqh8JA3cEqRyGoNkt584JcQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
serve-placeholder@2.0.2:
|
||||
resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==}
|
||||
|
||||
@@ -13784,12 +13843,6 @@ snapshots:
|
||||
dependencies:
|
||||
yaml: 2.9.0
|
||||
|
||||
'@babel/code-frame@7.27.1':
|
||||
dependencies:
|
||||
'@babel/helper-validator-identifier': 7.29.7
|
||||
js-tokens: 4.0.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
'@babel/code-frame@7.29.7':
|
||||
dependencies:
|
||||
'@babel/helper-validator-identifier': 7.29.7
|
||||
@@ -17721,6 +17774,8 @@ snapshots:
|
||||
|
||||
'@tanstack/history@1.162.1': {}
|
||||
|
||||
'@tanstack/history@1.162.4': {}
|
||||
|
||||
'@tanstack/react-router@1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.162.1
|
||||
@@ -17730,23 +17785,32 @@ snapshots:
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
|
||||
'@tanstack/react-start-client@1.168.30(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
'@tanstack/react-router@1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@tanstack/start-client-core': 1.170.27
|
||||
'@tanstack/history': 1.162.4
|
||||
'@tanstack/react-store': 0.11.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.34
|
||||
isbot: 5.2.2
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
|
||||
'@tanstack/react-start-rsc@0.1.48(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
'@tanstack/react-start-client@1.168.39(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@tanstack/router-utils': 1.162.2(supports-color@10.2.2)
|
||||
'@tanstack/start-client-core': 1.170.27
|
||||
'@tanstack/react-router': 1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/start-client-core': 1.170.34
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
|
||||
'@tanstack/react-start-rsc@0.1.59(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/router-utils': 1.162.3(supports-color@10.2.2)
|
||||
'@tanstack/start-client-core': 1.170.34
|
||||
'@tanstack/start-fn-stubs': 1.162.0
|
||||
'@tanstack/start-plugin-core': 1.171.39(@tanstack/react-router@1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(crossws@0.4.12(srvx@1.0.1))(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/start-storage-context': 1.167.29
|
||||
'@tanstack/start-plugin-core': 1.171.49(@tanstack/react-router@1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/start-storage-context': 1.167.36
|
||||
pathe: 2.0.3
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
@@ -17764,26 +17828,26 @@ snapshots:
|
||||
- vite-plugin-solid
|
||||
- webpack
|
||||
|
||||
'@tanstack/react-start-server@1.167.37(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
'@tanstack/react-start-server@1.167.46(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@tanstack/start-server-core': 1.169.31(crossws@0.4.12(srvx@1.0.1))
|
||||
'@tanstack/react-router': 1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/start-server-core': 1.169.39(crossws@0.4.12(srvx@1.0.1))
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
transitivePeerDependencies:
|
||||
- crossws
|
||||
|
||||
'@tanstack/react-start@1.168.49(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
'@tanstack/react-start@1.168.60(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/react-start-client': 1.168.30(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/react-start-rsc': 0.1.48(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/react-start-server': 1.167.37(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-utils': 1.162.2(supports-color@10.2.2)
|
||||
'@tanstack/start-client-core': 1.170.27
|
||||
'@tanstack/start-plugin-core': 1.171.39(@tanstack/react-router@1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(crossws@0.4.12(srvx@1.0.1))(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/start-server-core': 1.169.31(crossws@0.4.12(srvx@1.0.1))
|
||||
'@tanstack/react-router': 1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/react-start-client': 1.168.39(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/react-start-rsc': 0.1.59(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/react-start-server': 1.167.46(crossws@0.4.12(srvx@1.0.1))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
'@tanstack/router-utils': 1.162.3(supports-color@10.2.2)
|
||||
'@tanstack/start-client-core': 1.170.34
|
||||
'@tanstack/start-plugin-core': 1.171.49(@tanstack/react-router@1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/start-server-core': 1.169.39(crossws@0.4.12(srvx@1.0.1))
|
||||
pathe: 2.0.3
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
@@ -17803,6 +17867,13 @@ snapshots:
|
||||
- vite-plugin-solid
|
||||
- webpack
|
||||
|
||||
'@tanstack/react-store@0.11.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
dependencies:
|
||||
'@tanstack/store': 0.11.2
|
||||
react: 19.2.8
|
||||
react-dom: 19.2.8(react@19.2.8)
|
||||
use-sync-external-store: 1.6.0(react@19.2.8)
|
||||
|
||||
'@tanstack/react-store@0.9.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8)':
|
||||
dependencies:
|
||||
'@tanstack/store': 0.9.3
|
||||
@@ -17817,6 +17888,13 @@ snapshots:
|
||||
seroval: 1.6.4
|
||||
seroval-plugins: 1.6.4(seroval@1.6.4)
|
||||
|
||||
'@tanstack/router-core@1.171.34':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.162.4
|
||||
cookie-es: 3.1.1
|
||||
seroval: 1.6.7
|
||||
seroval-plugins: 1.6.7(seroval@1.6.7)
|
||||
|
||||
'@tanstack/router-generator@1.167.33(supports-color@10.2.2)':
|
||||
dependencies:
|
||||
'@babel/types': 7.29.8
|
||||
@@ -17830,6 +17908,19 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-generator@1.167.40(supports-color@10.2.2)':
|
||||
dependencies:
|
||||
'@babel/types': 7.29.8
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/router-utils': 1.162.3(supports-color@10.2.2)
|
||||
'@tanstack/virtual-file-routes': 1.162.0
|
||||
jiti: 2.7.0
|
||||
magic-string: 0.30.21
|
||||
prettier: 3.9.6
|
||||
zod: 4.6.5
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/router-plugin@1.168.35(@tanstack/react-router@1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||
@@ -17855,6 +17946,31 @@ snapshots:
|
||||
- supports-color
|
||||
- unloader
|
||||
|
||||
'@tanstack/router-plugin@1.168.42(@tanstack/react-router@1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||
'@babel/template': 7.29.7
|
||||
'@babel/types': 7.29.8
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/router-generator': 1.167.40(supports-color@10.2.2)
|
||||
'@tanstack/router-utils': 1.162.3(supports-color@10.2.2)
|
||||
chokidar: 5.0.0
|
||||
unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
zod: 4.6.5
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
||||
vite: 7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)
|
||||
vite-plugin-solid: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
transitivePeerDependencies:
|
||||
- '@farmfe/core'
|
||||
- '@rspack/core'
|
||||
- bun-types-no-globals
|
||||
- esbuild
|
||||
- rolldown
|
||||
- rollup
|
||||
- supports-color
|
||||
- unloader
|
||||
|
||||
'@tanstack/router-utils@1.162.2(supports-color@10.2.2)':
|
||||
dependencies:
|
||||
'@babel/generator': 7.29.8
|
||||
@@ -17868,30 +17984,44 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/start-client-core@1.170.27':
|
||||
'@tanstack/router-utils@1.162.3(supports-color@10.2.2)':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@babel/generator': 7.29.8
|
||||
'@babel/parser': 7.29.8
|
||||
'@babel/types': 7.29.8
|
||||
ansis: 4.3.1
|
||||
babel-dead-code-elimination: 1.0.12(supports-color@10.2.2)
|
||||
diff: 8.0.4
|
||||
pathe: 2.0.3
|
||||
tinyglobby: 0.2.17
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/start-client-core@1.170.34':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/start-fn-stubs': 1.162.0
|
||||
'@tanstack/start-storage-context': 1.167.29
|
||||
seroval: 1.6.4
|
||||
'@tanstack/start-storage-context': 1.167.36
|
||||
seroval: 1.6.7
|
||||
|
||||
'@tanstack/start-fn-stubs@1.162.0': {}
|
||||
|
||||
'@tanstack/start-plugin-core@1.171.39(@tanstack/react-router@1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(crossws@0.4.12(srvx@1.0.1))(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
'@tanstack/start-plugin-core@1.171.49(@tanstack/react-router@1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(crossws@0.4.12(srvx@1.0.1))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/code-frame': 7.29.7
|
||||
'@babel/core': 7.29.7(supports-color@10.2.2)
|
||||
'@babel/types': 7.29.8
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@tanstack/router-generator': 1.167.33(supports-color@10.2.2)
|
||||
'@tanstack/router-plugin': 1.168.35(@tanstack/react-router@1.170.32(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/router-utils': 1.162.2(supports-color@10.2.2)
|
||||
'@tanstack/start-server-core': 1.169.31(crossws@0.4.12(srvx@1.0.1))
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/router-generator': 1.167.40(supports-color@10.2.2)
|
||||
'@tanstack/router-plugin': 1.168.42(@tanstack/react-router@1.170.41(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@10.2.2)(vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10))(solid-js@1.9.15)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0)))(vite@7.3.6(@types/node@26.4.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(lightningcss@1.33.0)(sass@1.103.1)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.0))
|
||||
'@tanstack/router-utils': 1.162.3(supports-color@10.2.2)
|
||||
'@tanstack/start-server-core': 1.169.39(crossws@0.4.12(srvx@1.0.1))
|
||||
exsolve: 1.1.1
|
||||
lightningcss: 1.33.0
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.7
|
||||
seroval: 1.6.4
|
||||
seroval: 1.6.7
|
||||
source-map: 0.7.6
|
||||
srvx: 0.11.22
|
||||
tinyglobby: 0.2.17
|
||||
@@ -17915,21 +18045,23 @@ snapshots:
|
||||
- vite-plugin-solid
|
||||
- webpack
|
||||
|
||||
'@tanstack/start-server-core@1.169.31(crossws@0.4.12(srvx@1.0.1))':
|
||||
'@tanstack/start-server-core@1.169.39(crossws@0.4.12(srvx@1.0.1))':
|
||||
dependencies:
|
||||
'@tanstack/history': 1.162.1
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@tanstack/start-client-core': 1.170.27
|
||||
'@tanstack/start-storage-context': 1.167.29
|
||||
'@tanstack/history': 1.162.4
|
||||
'@tanstack/router-core': 1.171.34
|
||||
'@tanstack/start-client-core': 1.170.34
|
||||
'@tanstack/start-storage-context': 1.167.36
|
||||
fetchdts: 0.1.7
|
||||
h3-v2: h3@2.0.1-rc.20(crossws@0.4.12(srvx@1.0.1))
|
||||
seroval: 1.6.4
|
||||
seroval: 1.6.7
|
||||
transitivePeerDependencies:
|
||||
- crossws
|
||||
|
||||
'@tanstack/start-storage-context@1.167.29':
|
||||
'@tanstack/start-storage-context@1.167.36':
|
||||
dependencies:
|
||||
'@tanstack/router-core': 1.171.27
|
||||
'@tanstack/router-core': 1.171.34
|
||||
|
||||
'@tanstack/store@0.11.2': {}
|
||||
|
||||
'@tanstack/store@0.9.3': {}
|
||||
|
||||
@@ -24991,10 +25123,16 @@ snapshots:
|
||||
dependencies:
|
||||
seroval: 1.6.4
|
||||
|
||||
seroval-plugins@1.6.7(seroval@1.6.7):
|
||||
dependencies:
|
||||
seroval: 1.6.7
|
||||
|
||||
seroval@1.5.6: {}
|
||||
|
||||
seroval@1.6.4: {}
|
||||
|
||||
seroval@1.6.7: {}
|
||||
|
||||
serve-placeholder@2.0.2:
|
||||
dependencies:
|
||||
defu: 6.1.7
|
||||
|
||||
Reference in New Issue
Block a user