@flux-ui/visuals 3.13.0 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +7 -10
- package/dist/index.js +17 -17
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/src/component/FluxVisualHighlighter.vue +1 -1
- package/src/component/FluxVisualNumberFlow.vue +1 -1
- package/src/component/FluxVisualPing.vue +1 -1
- package/src/component/FluxVisualSlotText.vue +3 -3
- package/src/css/component/Noise.module.scss +2 -2
- package/src/css/component/PatternGlow.module.scss +2 -2
- package/src/css/component/SlotText.module.scss +1 -1
- package/src/css/component/TextShimmer.module.scss +4 -13
- package/src/css/component/Visual.module.scss +3 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flux-ui/visuals",
|
|
3
3
|
"description": "Visual effect components for the Flux UI library.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "4.0.0-beta.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"funding": "https://github.com/sponsors/basmilius",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"visuals"
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "vue-tsc && vite build",
|
|
26
|
+
"build": "vue-tsc --build && vite build",
|
|
27
27
|
"dev": "vite build --watch --mode development"
|
|
28
28
|
},
|
|
29
29
|
"engines": {
|
|
@@ -50,22 +50,22 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@basmilius/common": "^3.55.0",
|
|
52
52
|
"@basmilius/utils": "^3.55.0",
|
|
53
|
-
"@flux-ui/internals": "
|
|
54
|
-
"@flux-ui/types": "
|
|
53
|
+
"@flux-ui/internals": "4.0.0-beta.0",
|
|
54
|
+
"@flux-ui/types": "4.0.0-beta.0",
|
|
55
55
|
"clsx": "^2.1.1",
|
|
56
56
|
"rough-notation": "^0.5.1"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"vue": "^3.6.0-rc.
|
|
59
|
+
"vue": "^3.6.0-rc.2"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@basmilius/vite-preset": "^3.55.0",
|
|
63
|
-
"@types/node": "^26.1.
|
|
63
|
+
"@types/node": "^26.1.2",
|
|
64
64
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
65
65
|
"@vue/tsconfig": "^0.9.1",
|
|
66
66
|
"sass-embedded": "^1.100.0",
|
|
67
67
|
"typescript": "6.0.3",
|
|
68
68
|
"vite": "^8.1.5",
|
|
69
|
-
"vue-tsc": "^3.3.
|
|
69
|
+
"vue-tsc": "^3.3.8"
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
const inView = group ? shallowRef(true) : useInView(targetRef, {initial: !whenInView});
|
|
58
58
|
|
|
59
59
|
const effectiveVariant = computed(() => variant ?? group?.defaults.variant ?? 'highlight');
|
|
60
|
-
const effectiveColor = computed(() => color ?? group?.defaults.color ?? 'var(--warning-
|
|
60
|
+
const effectiveColor = computed(() => color ?? group?.defaults.color ?? 'var(--warning-border)');
|
|
61
61
|
const effectiveStrokeWidth = computed(() => strokeWidth ?? group?.defaults.strokeWidth ?? 1.5);
|
|
62
62
|
const effectiveAnimationDuration = computed(() => animationDuration ?? group?.defaults.animationDuration ?? 500);
|
|
63
63
|
const effectiveIterations = computed(() => iterations ?? group?.defaults.iterations ?? 2);
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
const CUBIC_BEZIER_PATTERN = /^cubic-bezier\(\s*([-\d.]+)\s*,\s*([-\d.]+)\s*,\s*([-\d.]+)\s*,\s*([-\d.]+)\s*\)$/;
|
|
50
50
|
|
|
51
|
-
// Fallback for an
|
|
51
|
+
// Fallback for an unrecognized easing value, matching the --swift-out default.
|
|
52
52
|
const swiftOutEasing = cubicBezier(0.55, 0, 0.1, 1);
|
|
53
53
|
|
|
54
54
|
const labelRef = useTemplateRef('label');
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
|
|
277
277
|
// Resize the cell to the new glyph — but ease the width instead of
|
|
278
278
|
// snapping it, so a wide outgoing glyph is never cropped by a
|
|
279
|
-
// suddenly-narrow cell and
|
|
279
|
+
// suddenly-narrow cell and neighbors glide rather than jump.
|
|
280
280
|
const oldW = slot.getBoundingClientRect().width;
|
|
281
281
|
sizer.textContent = glyph(toChar);
|
|
282
282
|
const newW = sizer.getBoundingClientRect().width;
|
|
@@ -288,7 +288,7 @@
|
|
|
288
288
|
|
|
289
289
|
// A cell growing from or collapsing to empty changes width
|
|
290
290
|
// drastically — clip it horizontally while it resizes so its glyph
|
|
291
|
-
// wipes in/out with the cell instead of stacking onto the
|
|
291
|
+
// wipes in/out with the cell instead of stacking onto the neighbors.
|
|
292
292
|
if (fromChar === '' || toChar === '') {
|
|
293
293
|
slot.classList.add($style.isResizing);
|
|
294
294
|
}
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
|
|
367
367
|
const done = (event: TransitionEvent): void => {
|
|
368
368
|
if (event.propertyName !== 'transform') {
|
|
369
|
-
return; // ignore the
|
|
369
|
+
return; // ignore the color fade
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
newFace.removeEventListener('transitionend', done);
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
// Raw feTurbulence emits four independent noise channels, so the alpha is
|
|
9
9
|
// also noise and the grain is a faint, half-transparent colored static that
|
|
10
10
|
// washes out to nothing under a low opacity. The filter runs in sRGB (so the
|
|
11
|
-
// grain stays centered on mid-
|
|
12
|
-
// white), collapses to a single opaque
|
|
11
|
+
// grain stays centered on mid-gray instead of being gamma-lifted toward
|
|
12
|
+
// white), collapses to a single opaque gray channel and boosts its contrast,
|
|
13
13
|
// giving a neutral film grain that reads clearly even at a few percent.
|
|
14
14
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n' color-interpolation-filters='sRGB'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1'/%3E%3CfeComponentTransfer%3E%3CfeFuncR type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncG type='linear' slope='1.8' intercept='-0.4'/%3E%3CfeFuncB type='linear' slope='1.8' intercept='-0.4'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
15
15
|
background-repeat: repeat;
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
// Cells appearing from or collapsing to empty change width drastically, so clip
|
|
24
24
|
// them horizontally too while they resize — their glyph wipes in/out with the
|
|
25
|
-
// cell instead of spilling over the
|
|
25
|
+
// cell instead of spilling over the neighbors.
|
|
26
26
|
.charSlot.isResizing {
|
|
27
27
|
overflow-x: clip;
|
|
28
28
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
color: transparent;
|
|
5
5
|
background-image: linear-gradient(
|
|
6
6
|
90deg,
|
|
7
|
-
var(--shimmer-base, var(--
|
|
8
|
-
var(--shimmer-color, var(--
|
|
9
|
-
var(--shimmer-base, var(--
|
|
7
|
+
var(--shimmer-base, var(--foreground-subtle)) calc(50% - var(--shimmer-spread, 15) * 1%),
|
|
8
|
+
var(--shimmer-color, var(--foreground-prominent)) 50%,
|
|
9
|
+
var(--shimmer-base, var(--foreground-subtle)) calc(50% + var(--shimmer-spread, 15) * 1%)
|
|
10
10
|
);
|
|
11
11
|
// Both edges of the gradient are the base color, so tiling it seamlessly
|
|
12
12
|
// keeps the text fully painted at every step: outside the moving highlight
|
|
@@ -21,20 +21,11 @@
|
|
|
21
21
|
-webkit-background-clip: text;
|
|
22
22
|
-webkit-text-fill-color: transparent;
|
|
23
23
|
|
|
24
|
-
[dark] & {
|
|
25
|
-
background-image: linear-gradient(
|
|
26
|
-
90deg,
|
|
27
|
-
var(--shimmer-base, var(--gray-500)) calc(50% - var(--shimmer-spread, 15) * 1%),
|
|
28
|
-
var(--shimmer-color, var(--gray-50)) 50%,
|
|
29
|
-
var(--shimmer-base, var(--gray-500)) calc(50% + var(--shimmer-spread, 15) * 1%)
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
24
|
// No sweep when reduced motion is requested: fall back to a plain, solid
|
|
34
25
|
// text color so the label stays legible without animating.
|
|
35
26
|
@media (prefers-reduced-motion: reduce) {
|
|
36
27
|
animation: none;
|
|
37
|
-
color: var(--shimmer-base, var(--
|
|
28
|
+
color: var(--shimmer-base, var(--foreground-subtle));
|
|
38
29
|
background: none;
|
|
39
30
|
-webkit-text-fill-color: currentColor;
|
|
40
31
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
.dotPattern {
|
|
21
21
|
composes: fillVisual;
|
|
22
22
|
|
|
23
|
-
fill: var(--
|
|
23
|
+
fill: var(--surface-stroke-hover);
|
|
24
24
|
pointer-events: none;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
.gridPattern {
|
|
34
34
|
composes: fillVisual;
|
|
35
35
|
|
|
36
|
-
fill: var(--
|
|
37
|
-
stroke: var(--
|
|
36
|
+
fill: var(--surface-stroke-muted);
|
|
37
|
+
stroke: var(--surface-stroke-hover);
|
|
38
38
|
pointer-events: none;
|
|
39
39
|
}
|
|
40
40
|
|