diff --git a/docs/.vitepress/theme/components/SurveyAskOverlay.vue b/docs/.vitepress/theme/components/SurveyAskOverlay.vue
index fd693c90d..e1e7947a7 100644
--- a/docs/.vitepress/theme/components/SurveyAskOverlay.vue
+++ b/docs/.vitepress/theme/components/SurveyAskOverlay.vue
@@ -73,7 +73,7 @@ function hidePopup() {
:iconNode="x"
name="x"
:size="20"
- absoluteStrokeWidth
+ nonScalingStroke
/>
diff --git a/docs/.vitepress/theme/components/base/Switch.vue b/docs/.vitepress/theme/components/base/Switch.vue
index cd5de267a..1da8613a4 100644
--- a/docs/.vitepress/theme/components/base/Switch.vue
+++ b/docs/.vitepress/theme/components/base/Switch.vue
@@ -6,6 +6,10 @@
modelValue: {
type: Boolean,
default: false
+ },
+ id: {
+ type: String,
+ default: ''
}
})
@@ -23,6 +27,7 @@
@update:model-value="emit('update:modelValue', $event)"
class="switch"
:class="{ enabled: isHydrated && modelValue }"
+ :id="id"
>
diff --git a/docs/.vitepress/theme/components/home/HomeIconCustomizer.vue b/docs/.vitepress/theme/components/home/HomeIconCustomizer.vue
index 67ad6bf7f..b5599fedc 100644
--- a/docs/.vitepress/theme/components/home/HomeIconCustomizer.vue
+++ b/docs/.vitepress/theme/components/home/HomeIconCustomizer.vue
@@ -9,7 +9,7 @@ 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 { color, strokeWidth, size, nonScalingStroke, isCustomized, resetStyle } = useIconStyle();
const iconStyle = computed(() => ({
'--home-icon-color': color.value,
@@ -85,14 +85,14 @@ const iconStyle = computed(() => ({
@@ -101,7 +101,7 @@ const iconStyle = computed(() => ({
diff --git a/docs/.vitepress/theme/components/home/HomeIconCustomizerIcons.vue b/docs/.vitepress/theme/components/home/HomeIconCustomizerIcons.vue
index 7f0ca5bb9..bfd558982 100644
--- a/docs/.vitepress/theme/components/home/HomeIconCustomizerIcons.vue
+++ b/docs/.vitepress/theme/components/home/HomeIconCustomizerIcons.vue
@@ -79,7 +79,7 @@ const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting
max-height: 3rem;
}
-.icon-grid.absolute-stroke-width .lucide-icon {
+.icon-grid.non-scaling-stroke .lucide-icon {
stroke-width: calc(var(--home-icon-stroke-width, 2) * 24 / var(--home-icon-size, 24));
}
diff --git a/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue b/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue
index e1bce79c9..3e5eafff4 100644
--- a/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue
+++ b/docs/.vitepress/theme/components/icons/CarbonAdOverlay.vue
@@ -48,7 +48,7 @@ onMounted(() => {
:iconNode="x"
name="x"
:size="20"
- absoluteStrokeWidth
+ nonScalingStroke
/>
diff --git a/docs/.vitepress/theme/components/icons/CopyCodeButton.vue b/docs/.vitepress/theme/components/icons/CopyCodeButton.vue
index a58fcf4f5..9a50081b3 100644
--- a/docs/.vitepress/theme/components/icons/CopyCodeButton.vue
+++ b/docs/.vitepress/theme/components/icons/CopyCodeButton.vue
@@ -9,7 +9,7 @@ const props = defineProps<{
name: string;
popoverPosition?: 'top' | 'bottom';
}>();
-const { size, color, strokeWidth, absoluteStrokeWidth } = useIconStyleContext();
+const { size, color, strokeWidth, nonScalingStroke } = useIconStyleContext();
const { animate, confetti } = useConfetti();
const componentName = computed(() => {
return (toPascalCase(props.name) as string).replace(/\s/g, '');
@@ -30,8 +30,8 @@ function copyJSX() {
attrs.push(`strokeWidth={${strokeWidth.value}}`);
}
- if (absoluteStrokeWidth.value) {
- attrs.push(`absoluteStrokeWidth`);
+ if (nonScalingStroke.value) {
+ attrs.push(`nonScalingStroke`);
}
const code = `<${componentName.value}${attrs.join(' ')} />`;
@@ -60,8 +60,8 @@ function copyVue() {
attrs.push(`:stroke-width="${strokeWidth.value}"`);
}
- if (absoluteStrokeWidth.value) {
- attrs.push(`absoluteStrokeWidth`);
+ if (nonScalingStroke.value) {
+ attrs.push(`nonScalingStroke`);
}
const code = `<${componentName.value}${attrs.join(' ')} />`;
@@ -86,8 +86,8 @@ function copyAngular() {
attrs.push(`[strokeWidth]="${strokeWidth.value}"`);
}
- if (absoluteStrokeWidth.value) {
- attrs.push(`[absoluteStrokeWidth]="true"`);
+ if (nonScalingStroke.value) {
+ attrs.push(`[nonScalingStroke]="true"`);
}
const code = ``;
diff --git a/docs/.vitepress/theme/components/icons/IconItem.vue b/docs/.vitepress/theme/components/icons/IconItem.vue
index 762dcdc80..78b27a846 100644
--- a/docs/.vitepress/theme/components/icons/IconItem.vue
+++ b/docs/.vitepress/theme/components/icons/IconItem.vue
@@ -204,7 +204,7 @@ const DiamondIcon = createLucideIcon('Diamond', diamond);
max-height: 3rem;
}
-html.absolute-stroke-width .lucide-icon.customizable {
+html.non-scaling-stroke .lucide-icon.customizable {
stroke-width: calc(var(--customize-strokeWidth, 2) * 24 / var(--customize-size, 24));
}
diff --git a/docs/.vitepress/theme/components/icons/IconPreview.vue b/docs/.vitepress/theme/components/icons/IconPreview.vue
index 6651b08f0..a4e65e56e 100644
--- a/docs/.vitepress/theme/components/icons/IconPreview.vue
+++ b/docs/.vitepress/theme/components/icons/IconPreview.vue
@@ -1,7 +1,7 @@
-
diff --git a/docs/.vitepress/theme/components/icons/IconPreviewSmall.vue b/docs/.vitepress/theme/components/icons/IconPreviewSmall.vue
index 3ac52bbdd..972a0d5c6 100644
--- a/docs/.vitepress/theme/components/icons/IconPreviewSmall.vue
+++ b/docs/.vitepress/theme/components/icons/IconPreviewSmall.vue
@@ -71,7 +71,7 @@ const Icon = createLucideIcon(props.name, props.iconNode);
height: calc(var(--customize-size, 24) * 1px); */
}
-html.absolute-stroke-width .lucide-icon {
+html.non-scaling-stroke .lucide-icon {
stroke-width: calc(var(--customize-strokeWidth, 2) * 24 / var(--customize-size, 24));
}
diff --git a/docs/.vitepress/theme/components/icons/SidebarIconCustomizer.vue b/docs/.vitepress/theme/components/icons/SidebarIconCustomizer.vue
index 70a02f3b1..fc23a0b81 100644
--- a/docs/.vitepress/theme/components/icons/SidebarIconCustomizer.vue
+++ b/docs/.vitepress/theme/components/icons/SidebarIconCustomizer.vue
@@ -1,4 +1,6 @@
@@ -68,13 +75,13 @@ const { color, strokeWidth, size, absoluteStrokeWidth, isCustomized, resetStyle
diff --git a/docs/.vitepress/theme/composables/useIconStyle.test.mts b/docs/.vitepress/theme/composables/useIconStyle.test.mts
index 99bb85822..5b571a82a 100644
--- a/docs/.vitepress/theme/composables/useIconStyle.test.mts
+++ b/docs/.vitepress/theme/composables/useIconStyle.test.mts
@@ -6,7 +6,7 @@ const storedValues = new Map([
['icon-size', '240'],
['icon-stroke-width', '1.5'],
['icon-color', '#ff0000'],
- ['icon-absolute-stroke-width', 'true'],
+ ['icon-non-scaling-stroke', 'true'],
]);
const styleProperties = new Map();
const classes = new Set();
@@ -70,7 +70,7 @@ test('creates a non-persisted icon style from the defaults', () => {
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.nonScalingStroke.value, false);
style.size.value = 48;
@@ -84,12 +84,12 @@ test('restores persisted settings and applies the shared CSS variables', () => {
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.nonScalingStroke.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'));
+ assert.ok(classes.has('non-scaling-stroke'));
});
test('resetting updates refs, CSS variables, and persisted values', async () => {
@@ -100,14 +100,14 @@ test('resetting updates refs, CSS variables, and persisted values', async () =>
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.nonScalingStroke.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(classes.has('non-scaling-stroke'), 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');
+ assert.equal(storedValues.get('icon-non-scaling-stroke'), 'false');
});
diff --git a/docs/.vitepress/theme/composables/useIconStyle.ts b/docs/.vitepress/theme/composables/useIconStyle.ts
index dd7a938d3..99e58a2df 100644
--- a/docs/.vitepress/theme/composables/useIconStyle.ts
+++ b/docs/.vitepress/theme/composables/useIconStyle.ts
@@ -7,18 +7,18 @@ interface IconStyleContext {
size: Ref;
strokeWidth: Ref;
color: Ref;
- absoluteStrokeWidth: Ref;
+ nonScalingStroke: Ref;
isCustomized: ComputedRef;
resetStyle: () => void;
}
-type IconStyle = Pick;
+type IconStyle = Pick;
export const STYLE_DEFAULTS = {
size: 24,
strokeWidth: 2,
color: 'currentColor',
- absoluteStrokeWidth: false,
+ nonScalingStroke: false,
};
const persistedIconStyle = {
@@ -27,11 +27,9 @@ const persistedIconStyle = {
initOnMounted: false,
}),
color: useLocalStorage('icon-color', STYLE_DEFAULTS.color, { initOnMounted: false }),
- absoluteStrokeWidth: useLocalStorage(
- 'icon-absolute-stroke-width',
- STYLE_DEFAULTS.absoluteStrokeWidth,
- { initOnMounted: false },
- ),
+ nonScalingStroke: useLocalStorage('icon-non-scaling-stroke', STYLE_DEFAULTS.nonScalingStroke, {
+ initOnMounted: false,
+ }),
};
function createIconStyleContext(style: IconStyle): IconStyleContext {
@@ -40,7 +38,7 @@ function createIconStyleContext(style: IconStyle): IconStyleContext {
style.color.value !== STYLE_DEFAULTS.color ||
style.strokeWidth.value !== STYLE_DEFAULTS.strokeWidth ||
style.size.value !== STYLE_DEFAULTS.size ||
- style.absoluteStrokeWidth.value !== STYLE_DEFAULTS.absoluteStrokeWidth
+ style.nonScalingStroke.value !== STYLE_DEFAULTS.nonScalingStroke
);
});
@@ -48,7 +46,7 @@ function createIconStyleContext(style: IconStyle): IconStyleContext {
style.color.value = STYLE_DEFAULTS.color;
style.strokeWidth.value = STYLE_DEFAULTS.strokeWidth;
style.size.value = STYLE_DEFAULTS.size;
- style.absoluteStrokeWidth.value = STYLE_DEFAULTS.absoluteStrokeWidth;
+ style.nonScalingStroke.value = STYLE_DEFAULTS.nonScalingStroke;
}
return {
@@ -65,7 +63,7 @@ export function useIconStyle() {
size: ref(STYLE_DEFAULTS.size),
strokeWidth: ref(STYLE_DEFAULTS.strokeWidth),
color: ref(STYLE_DEFAULTS.color),
- absoluteStrokeWidth: ref(STYLE_DEFAULTS.absoluteStrokeWidth),
+ nonScalingStroke: ref(STYLE_DEFAULTS.nonScalingStroke),
});
}
@@ -79,9 +77,9 @@ if (typeof document !== 'undefined') {
persistedIconStyle.size,
persistedIconStyle.strokeWidth,
persistedIconStyle.color,
- persistedIconStyle.absoluteStrokeWidth,
+ persistedIconStyle.nonScalingStroke,
],
- ([size, strokeWidth, color, absoluteStrokeWidth]) => {
+ ([size, strokeWidth, color, nonScalingStroke]) => {
const root = document.documentElement;
root.style.setProperty('--customize-size', String(Math.min(256, Math.max(16, size))));
root.style.setProperty(
@@ -89,7 +87,7 @@ if (typeof document !== 'undefined') {
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);
+ root.classList.toggle('non-scaling-stroke', nonScalingStroke);
},
{ immediate: true, flush: 'sync' },
);
diff --git a/docs/.vitepress/theme/iconStyleHead.js b/docs/.vitepress/theme/iconStyleHead.js
index d61bf8b81..7be030b79 100644
--- a/docs/.vitepress/theme/iconStyleHead.js
+++ b/docs/.vitepress/theme/iconStyleHead.js
@@ -5,8 +5,8 @@
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;
+ const nonScaling = globalThis.localStorage.getItem('icon-non-scaling-stroke');
+ if ([size, stroke, color, nonScaling].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)))));
}
@@ -17,7 +17,7 @@
);
if (color !== null && globalThis.CSS.supports('color', color))
root.style.setProperty('--customize-color', color);
- root.classList.toggle('absolute-stroke-width', absolute === 'true');
+ root.classList.toggle('non-scaling-stroke', nonScaling === 'true');
} catch {
// Storage can be unavailable, for example in private browsing mode.
}