@viraui/react 2026.0.17 → 2026.0.19
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer viraui.preflight, viraui.components, viraui.overrides;@layer viraui.components{@property --vui-dialog-max-block-size{syntax:"*";inherits:false;initial-value:97dvh}@property --__dialog-bleed{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-peek{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-stack-step{syntax:"<number>";inherits:false;initial-value:.05}@property --__dialog-stack-progress{syntax:"<number>";inherits:false;initial-value:0}@property --__dialog-stack-peek-offset{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-stack-scale-base{syntax:"<number>";inherits:false;initial-value:1}@property --__dialog-stack-scale{syntax:"<number>";inherits:false;initial-value:1}@property --__dialog-stack-shrink{syntax:"<number>";inherits:false;initial-value:0}@property --__dialog-stack-height{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-translate-y{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-indent-radius{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-indent-transition{syntax:"<number>";inherits:false;initial-value:1}.viraui__dialog-module__Backdrop_xgFhs{position:fixed;inset:0;z-index:0;transition:opacity var(--duration-fast) var(--easing-standard);backdrop-filter:brightness(90%) blur(5px);opacity:1;&[data-ending-style],&[data-starting-style]{opacity:0}&[data-ending-style]{transition-duration:calc(var(--drawer-swipe-strength, 1) * var(--duration-fast))}&[data-swiping]:not([data-ending-style]){opacity:calc(1 - var(--drawer-swipe-progress, 0));transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none}}.viraui__dialog-module__Viewport_kmZN1{position:fixed;inset:0;z-index:4;pointer-events:none;touch-action:none}.viraui__dialog-module__Popup_5qIyj{--__dialog-bleed:var(--space-wide);--__dialog-peek:var(--space-medium);--__dialog-stack-progress:clamp(0,var(--drawer-swipe-progress,0),1);--__dialog-stack-peek-offset:max(0px,calc((var(--nested-drawers, 0) - var(--__dialog-stack-progress)) * var(--__dialog-peek)));--__dialog-stack-scale-base:max(0,calc(1 - var(--nested-drawers, 0) * var(--__dialog-stack-step)));--__dialog-stack-scale:clamp(0,calc(var(--__dialog-stack-scale-base) + var(--__dialog-stack-step) * var(--__dialog-stack-progress)),1);--__dialog-stack-shrink:calc(1 - var(--__dialog-stack-scale));--__dialog-stack-height:max(0px,calc(var(--drawer-frontmost-height, var(--drawer-height, 0px)) - var(--__dialog-bleed)));--__dialog-translate-y:calc(var(--drawer-snap-point-offset, 0px) + var(--drawer-swipe-movement-y, 0px) - var(--__dialog-stack-peek-offset) - var(--__dialog-stack-shrink) * var(--__dialog-stack-height));max-block-size:var(--vui-dialog-max-block-size,97dvh);outline:none;pointer-events:auto;touch-action:none;height:var(--drawer-height,auto);transform-origin:50% calc(100% - var(--__dialog-bleed));transition:opacity var(--duration-fast) var(--easing-entrance),transform var(--duration-fast) var(--easing-entrance),height var(--duration-fast) var(--easing-entrance);transform:translateY(var(--__dialog-translate-y)) scale(var(--__dialog-stack-scale));&[data-nested-drawer-open]{height:calc(var(--__dialog-stack-height) + var(--__dialog-bleed))}&[data-starting-style]{opacity:0;transform:translateY(100%)}&[data-ending-style]{transition-duration:calc(var(--drawer-swipe-strength, 1) * var(--duration-fast))}&[data-ending-style][data-swipe-direction=down]{transform:translateY(100%)}&[data-nested-drawer-swiping]:not([data-ending-style]),&[data-swiping]:not([data-ending-style]){transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none;&[data-ending-style][data-swipe-direction=down],&[data-starting-style]{opacity:1;transform:translateY(0)}}}.viraui__dialog-module__HandleShape_mEg8R{inline-size:var(--space-x-small);block-size:var(--space-x-small);background-color:oklab(from var(--global-contrast) l a b/.3);border-radius:var(--radius-infinite)}.viraui__dialog-module__Header_WnBly{touch-action:none;-webkit-user-select:none;user-select:none}.viraui__dialog-module__Body_9-UgN{min-block-size:0}.viraui__dialog-module__Content_r8lJc{min-block-size:0;overflow:auto;overscroll-behavior:contain;touch-action:auto;padding-block-end:calc(env(safe-area-inset-bottom) + var(--space-medium));transition:opacity var(--duration-fast) var(--easing-standard);@media (prefers-reduced-motion:reduce){transition:none}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open] &{opacity:0}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open][data-nested-drawer-swiping] &{opacity:1}}.viraui__dialog-module__IndentBackground_OEfbh{position:absolute;inset:0}.viraui__dialog-module__Indent_qfiNW{--__dialog-indent-radius:calc(1rem * (1 - var(--drawer-swipe-progress)));--__dialog-indent-transition:calc(1 - clamp(0, calc(var(--drawer-swipe-progress) * 100000), 1));transition:transform var(--duration-normal) var(--easing-entrance),border-radius var(--duration-fast) var(--easing-entrance);transition-duration:calc(var(--duration-normal) * var(--__dialog-indent-transition)),calc(var(--duration-fast) * var(--__dialog-indent-transition));transform-origin:center top;will-change:transform;&[data-active]{transform:scale(calc(.98 + (.02 * var(--drawer-swipe-progress)))) translateY(calc(.5rem * (1 - var(--drawer-swipe-progress))));border-top-left-radius:var(--__dialog-indent-radius);border-top-right-radius:var(--__dialog-indent-radius)}}}@layer viraui.overrides{.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open]{overflow:hidden}.viraui__dialog-module__CloseButton_U-B1r.viraui__dialog-module__CloseButton_U-B1r{position:absolute;top:1rem;right:1rem}}
|
|
1
|
+
@layer viraui.preflight, viraui.components, viraui.overrides;@layer viraui.components{@property --vui-dialog-max-block-size{syntax:"*";inherits:false;initial-value:97dvh}@property --__dialog-bleed{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-peek{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-stack-step{syntax:"<number>";inherits:false;initial-value:.05}@property --__dialog-stack-progress{syntax:"<number>";inherits:false;initial-value:0}@property --__dialog-stack-peek-offset{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-stack-scale-base{syntax:"<number>";inherits:false;initial-value:1}@property --__dialog-stack-scale{syntax:"<number>";inherits:false;initial-value:1}@property --__dialog-stack-shrink{syntax:"<number>";inherits:false;initial-value:0}@property --__dialog-stack-height{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-translate-y{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-indent-radius{syntax:"<length>";inherits:false;initial-value:0}@property --__dialog-indent-transition{syntax:"<number>";inherits:false;initial-value:1}.viraui__dialog-module__Backdrop_xgFhs{position:fixed;inset:0;z-index:0;transition:opacity var(--duration-fast) var(--easing-standard);backdrop-filter:brightness(90%) blur(5px);opacity:1;&[data-ending-style],&[data-starting-style]{opacity:0}&[data-ending-style]{transition-duration:calc(var(--drawer-swipe-strength, 1) * var(--duration-fast))}&[data-swiping]:not([data-ending-style]){opacity:calc(1 - var(--drawer-swipe-progress, 0));transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none}}.viraui__dialog-module__Viewport_kmZN1{position:fixed;inset:0;z-index:4;pointer-events:none;touch-action:none}.viraui__dialog-module__Popup_5qIyj{--__dialog-bleed:var(--space-wide);--__dialog-peek:var(--space-medium);--__dialog-stack-progress:clamp(0,var(--drawer-swipe-progress,0),1);--__dialog-stack-peek-offset:max(0px,calc((var(--nested-drawers, 0) - var(--__dialog-stack-progress)) * var(--__dialog-peek)));--__dialog-stack-scale-base:max(0,calc(1 - var(--nested-drawers, 0) * var(--__dialog-stack-step)));--__dialog-stack-scale:clamp(0,calc(var(--__dialog-stack-scale-base) + var(--__dialog-stack-step) * var(--__dialog-stack-progress)),1);--__dialog-stack-shrink:calc(1 - var(--__dialog-stack-scale));--__dialog-stack-height:max(0px,calc(var(--drawer-frontmost-height, var(--drawer-height, 0px)) - var(--__dialog-bleed)));--__dialog-translate-y:calc(var(--drawer-snap-point-offset, 0px) + var(--drawer-swipe-movement-y, 0px) - var(--__dialog-stack-peek-offset) - var(--__dialog-stack-shrink) * var(--__dialog-stack-height));max-block-size:var(--vui-dialog-max-block-size,97dvh);outline:none;pointer-events:auto;touch-action:none;height:var(--drawer-height,auto);transform-origin:50% calc(100% - var(--__dialog-bleed));transition:opacity var(--duration-fast) var(--easing-entrance),transform var(--duration-fast) var(--easing-entrance),height var(--duration-fast) var(--easing-entrance);transform:translateY(var(--__dialog-translate-y)) scale(var(--__dialog-stack-scale));&[data-nested-drawer-open]{height:calc(var(--__dialog-stack-height) + var(--__dialog-bleed))}&[data-starting-style]{opacity:0;transform:translateY(100%)}&[data-ending-style]{transition-duration:calc(var(--drawer-swipe-strength, 1) * var(--duration-fast))}&[data-ending-style][data-swipe-direction=down]{transform:translateY(100%)}&[data-nested-drawer-swiping]:not([data-ending-style]),&[data-swiping]:not([data-ending-style]){transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none;&[data-ending-style][data-swipe-direction=down],&[data-starting-style]{opacity:1;transform:translateY(0)}}}.viraui__dialog-module__HandleShape_mEg8R{inline-size:var(--space-x-small);block-size:var(--space-x-small);background-color:oklab(from var(--global-contrast) l a b/.3);border-radius:var(--radius-infinite)}.viraui__dialog-module__Header_WnBly{touch-action:none;-webkit-user-select:none;user-select:none}.viraui__dialog-module__Body_9-UgN{min-block-size:0}.viraui__dialog-module__Content_r8lJc{min-block-size:0;overflow:auto;overscroll-behavior:contain;touch-action:auto;padding-block-end:calc(env(safe-area-inset-bottom) + var(--space-medium));transition:opacity var(--duration-fast) var(--easing-standard),overflow 0s allow-discrete var(--duration-fast);@media (prefers-reduced-motion:reduce){transition:none}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open] &{opacity:0;overflow:hidden;transition:opacity var(--duration-fast) var(--easing-standard),overflow 0s allow-discrete}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open][data-nested-drawer-swiping] &{opacity:1;overflow:hidden}}.viraui__dialog-module__IndentBackground_OEfbh{position:absolute;inset:0}.viraui__dialog-module__Indent_qfiNW{--__dialog-indent-radius:calc(1rem * (1 - var(--drawer-swipe-progress)));--__dialog-indent-transition:calc(1 - clamp(0, calc(var(--drawer-swipe-progress) * 100000), 1));transition:transform var(--duration-normal) var(--easing-entrance),border-radius var(--duration-fast) var(--easing-entrance);transition-duration:calc(var(--duration-normal) * var(--__dialog-indent-transition)),calc(var(--duration-fast) * var(--__dialog-indent-transition));transform-origin:center top;will-change:transform;&[data-active]{transform:scale(calc(.98 + (.02 * var(--drawer-swipe-progress)))) translateY(calc(.5rem * (1 - var(--drawer-swipe-progress))));border-top-left-radius:var(--__dialog-indent-radius);border-top-right-radius:var(--__dialog-indent-radius)}}}@layer viraui.overrides{.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open]{overflow:hidden}.viraui__dialog-module__CloseButton_U-B1r.viraui__dialog-module__CloseButton_U-B1r{position:absolute;top:1rem;right:1rem}}
|
|
@@ -13,7 +13,7 @@ export declare const unwrapGlowAngle: (lastAngle: number | undefined, rawDegrees
|
|
|
13
13
|
export declare const registerGlow: (entry: GlowTrackerEntry) => void;
|
|
14
14
|
export declare const updateGlow: (entry: GlowTrackerEntry) => void;
|
|
15
15
|
export declare const unregisterGlow: (el: HTMLElement) => void;
|
|
16
|
-
/** Story / test helper:
|
|
16
|
+
/** Story / test helper: count of documents with an attached `pointermove` listener. */
|
|
17
17
|
export declare const getGlowListenerCount: () => number;
|
|
18
18
|
/** Story / test helper: registered glow root count. */
|
|
19
19
|
export declare const getGlowRegistrySize: () => number;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
//#region src/components/glow/glow-tracker.ts
|
|
2
2
|
var entries = /* @__PURE__ */ new Map();
|
|
3
|
-
var
|
|
3
|
+
var listeningDocs = /* @__PURE__ */ new Set();
|
|
4
|
+
/** Latest pointer event per listening document (keyed at handler time — `currentTarget` is null after dispatch). */
|
|
5
|
+
var pendingByDoc = /* @__PURE__ */ new Map();
|
|
4
6
|
var rafId = null;
|
|
5
|
-
var pendingEvent = null;
|
|
6
7
|
var POINTER_QUERY = "(hover: hover) and (pointer: fine)";
|
|
7
8
|
var REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
|
|
8
9
|
var canTrackPointer = () => {
|
|
@@ -42,30 +43,40 @@ var paintEntry = (entry, event) => {
|
|
|
42
43
|
};
|
|
43
44
|
var flushPaint = () => {
|
|
44
45
|
rafId = null;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
|
|
46
|
+
const pending = [...pendingByDoc.entries()];
|
|
47
|
+
pendingByDoc.clear();
|
|
48
|
+
for (const [doc, event] of pending) for (const entry of entries.values()) if (entry.el.ownerDocument === doc) paintEntry(entry, event);
|
|
49
|
+
};
|
|
50
|
+
/** Cross-realm safe: iframe `Document` fails `instanceof Document` from the module window. */
|
|
51
|
+
var asDocument = (value) => {
|
|
52
|
+
if (!value || !("nodeType" in value) || value.nodeType !== 9) return null;
|
|
53
|
+
return value;
|
|
49
54
|
};
|
|
50
55
|
var onPointerMove = (event) => {
|
|
51
|
-
|
|
56
|
+
const doc = asDocument(event.currentTarget);
|
|
57
|
+
if (!doc) return;
|
|
58
|
+
pendingByDoc.set(doc, event);
|
|
52
59
|
if (rafId !== null) return;
|
|
53
60
|
rafId = requestAnimationFrame(flushPaint);
|
|
54
61
|
};
|
|
55
|
-
var attachListener = () => {
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
var attachListener = (doc) => {
|
|
63
|
+
if (listeningDocs.has(doc) || !canTrackPointer()) return;
|
|
64
|
+
doc.addEventListener("pointermove", onPointerMove);
|
|
65
|
+
listeningDocs.add(doc);
|
|
59
66
|
};
|
|
60
|
-
var detachListener = () => {
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
var detachListener = (doc) => {
|
|
68
|
+
if (!listeningDocs.has(doc)) return;
|
|
69
|
+
for (const entry of entries.values()) if (entry.el.ownerDocument === doc) return;
|
|
70
|
+
doc.removeEventListener("pointermove", onPointerMove);
|
|
71
|
+
listeningDocs.delete(doc);
|
|
72
|
+
pendingByDoc.delete(doc);
|
|
73
|
+
if (listeningDocs.size === 0) {
|
|
74
|
+
if (rafId !== null) {
|
|
75
|
+
cancelAnimationFrame(rafId);
|
|
76
|
+
rafId = null;
|
|
77
|
+
}
|
|
78
|
+
pendingByDoc.clear();
|
|
67
79
|
}
|
|
68
|
-
pendingEvent = null;
|
|
69
80
|
};
|
|
70
81
|
var registerGlow = (entry) => {
|
|
71
82
|
const existing = entries.get(entry.el);
|
|
@@ -73,14 +84,15 @@ var registerGlow = (entry) => {
|
|
|
73
84
|
...entry,
|
|
74
85
|
...existing?.lastAngle !== void 0 && { lastAngle: existing.lastAngle }
|
|
75
86
|
});
|
|
76
|
-
attachListener();
|
|
87
|
+
attachListener(entry.el.ownerDocument);
|
|
77
88
|
};
|
|
78
89
|
var unregisterGlow = (el) => {
|
|
90
|
+
const doc = el.ownerDocument;
|
|
79
91
|
entries.delete(el);
|
|
80
|
-
detachListener();
|
|
92
|
+
detachListener(doc);
|
|
81
93
|
};
|
|
82
|
-
/** Story / test helper:
|
|
83
|
-
var getGlowListenerCount = () =>
|
|
94
|
+
/** Story / test helper: count of documents with an attached `pointermove` listener. */
|
|
95
|
+
var getGlowListenerCount = () => listeningDocs.size;
|
|
84
96
|
/** Story / test helper: registered glow root count. */
|
|
85
97
|
var getGlowRegistrySize = () => entries.size;
|
|
86
98
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viraui/react",
|
|
3
|
-
"version": "2026.0.
|
|
3
|
+
"version": "2026.0.19",
|
|
4
4
|
"private": false,
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"unplugin-dts": "1.0.3",
|
|
36
36
|
"vite": "8.1.4",
|
|
37
37
|
"vite-plugin-static-copy": "4.1.1",
|
|
38
|
-
"@viraui/foundation": "2026.0.
|
|
38
|
+
"@viraui/foundation": "2026.0.19",
|
|
39
39
|
"@viraui/icons": "2026.0.0",
|
|
40
40
|
"@viraui/postcss-config": "2026.0.0",
|
|
41
41
|
"@viraui/tsconfig": "2026.0.0"
|