vireglass 1.0.0 → 2.0.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.
Files changed (97) hide show
  1. package/README.md +83 -9
  2. package/dist/adapters-BfeAopGO.d.ts +154 -0
  3. package/dist/adapters-DugC6Qri.d.cts +154 -0
  4. package/dist/chunk-3PGYF2NK.js +360 -0
  5. package/dist/chunk-3PGYF2NK.js.map +1 -0
  6. package/dist/{chunk-HF2AWZEZ.js → chunk-IQOBZGCF.js} +210 -606
  7. package/dist/chunk-IQOBZGCF.js.map +1 -0
  8. package/dist/chunk-JF3FK254.js +377 -0
  9. package/dist/chunk-JF3FK254.js.map +1 -0
  10. package/dist/chunk-P2ZOODXD.js +58 -0
  11. package/dist/chunk-P2ZOODXD.js.map +1 -0
  12. package/dist/chunk-TTOKBARR.js +456 -0
  13. package/dist/chunk-TTOKBARR.js.map +1 -0
  14. package/dist/dom.cjs +2055 -0
  15. package/dist/dom.cjs.map +1 -0
  16. package/dist/dom.d.cts +347 -0
  17. package/dist/dom.d.ts +347 -0
  18. package/dist/dom.js +1082 -0
  19. package/dist/dom.js.map +1 -0
  20. package/dist/geometry-GvXtt-_S.d.ts +105 -0
  21. package/dist/geometry-RhKd7CM5.d.cts +105 -0
  22. package/dist/group-model-8u4GKrUu.d.cts +194 -0
  23. package/dist/group-model-vYSmEVia.d.ts +194 -0
  24. package/dist/index.cjs +737 -244
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +122 -113
  27. package/dist/index.d.ts +122 -113
  28. package/dist/index.js +6 -277
  29. package/dist/index.js.map +1 -1
  30. package/dist/law.cjs +478 -0
  31. package/dist/law.cjs.map +1 -0
  32. package/dist/law.d.cts +543 -0
  33. package/dist/law.d.ts +543 -0
  34. package/dist/law.js +3 -0
  35. package/dist/law.js.map +1 -0
  36. package/dist/{material-CkUHUBoy.d.cts → material-CnUmdKg1.d.cts} +1 -1
  37. package/dist/{material-CkUHUBoy.d.ts → material-CnUmdKg1.d.ts} +1 -1
  38. package/dist/react.d.cts +1 -1
  39. package/dist/react.d.ts +1 -1
  40. package/dist/reference.cjs +221 -0
  41. package/dist/reference.cjs.map +1 -0
  42. package/dist/reference.d.cts +183 -0
  43. package/dist/reference.d.ts +183 -0
  44. package/dist/reference.js +197 -0
  45. package/dist/reference.js.map +1 -0
  46. package/dist/web/index.cjs +247 -165
  47. package/dist/web/index.cjs.map +1 -1
  48. package/dist/web/index.d.cts +4 -29
  49. package/dist/web/index.d.ts +4 -29
  50. package/dist/web/index.js +5 -90
  51. package/dist/web/index.js.map +1 -1
  52. package/docs/adr-001-rendering.md +288 -0
  53. package/docs/architecture.md +161 -0
  54. package/docs/benchmarks.md +191 -0
  55. package/docs/dom.md +160 -0
  56. package/docs/law.md +65 -0
  57. package/docs/material-lab.md +799 -0
  58. package/docs/platform-parity.md +266 -0
  59. package/docs/reference.md +397 -0
  60. package/package.json +24 -3
  61. package/src/accent.ts +35 -0
  62. package/src/accessibility.ts +30 -16
  63. package/src/adapters.ts +71 -3
  64. package/src/appear.ts +45 -0
  65. package/src/concentric.ts +66 -0
  66. package/src/dom/body.ts +98 -0
  67. package/src/dom/displacement.ts +163 -0
  68. package/src/dom/group.ts +124 -0
  69. package/src/dom/index.ts +739 -0
  70. package/src/dom/map-cache.ts +37 -0
  71. package/src/dom/nesting.ts +32 -0
  72. package/src/dom/preferences.ts +53 -0
  73. package/src/dom/probe.ts +163 -0
  74. package/src/dom/rim.ts +103 -0
  75. package/src/dom/scroll-edge.ts +106 -0
  76. package/src/dom/shadow.ts +56 -0
  77. package/src/dom/spectral-map.ts +102 -0
  78. package/src/dom/support.ts +47 -0
  79. package/src/geometry.ts +41 -14
  80. package/src/glass-scale.ts +3 -5
  81. package/src/index.ts +3 -1
  82. package/src/law.ts +562 -0
  83. package/src/lens-shader.ts +53 -30
  84. package/src/native/glass-surface.tsx +8 -14
  85. package/src/native/provider.tsx +22 -2
  86. package/src/optics.ts +43 -62
  87. package/src/reference.ts +9 -0
  88. package/src/scroll-edge.ts +22 -7
  89. package/src/sdf.ts +195 -8
  90. package/src/shadow-tint.ts +23 -0
  91. package/src/spectral.ts +110 -0
  92. package/src/surface-shader.ts +8 -6
  93. package/src/touch-response.ts +42 -27
  94. package/src/web/index.ts +0 -1
  95. package/dist/adapters-BPB0D5nr.d.cts +0 -357
  96. package/dist/adapters-BgSc-smX.d.ts +0 -357
  97. package/dist/chunk-HF2AWZEZ.js.map +0 -1
@@ -1,357 +0,0 @@
1
- import { V as VireGlassOptics, n as VireGlassDebugMode } from './material-CkUHUBoy.cjs';
2
-
3
- /** Glass shape in dp. Circle and capsule are special cases of a rounded rectangle. */
4
- type VireGlassGeometry = {
5
- width: number;
6
- height: number;
7
- cornerRadius: number;
8
- };
9
- declare const circleGeometry: (size: number) => VireGlassGeometry;
10
- declare const capsuleGeometry: (width: number, height: number) => VireGlassGeometry;
11
- declare const roundedRectGeometry: (width: number, height: number, cornerRadius: number) => VireGlassGeometry;
12
- declare const halfMinDp: (g: VireGlassGeometry) => number;
13
- /** Viewport margin for a drop that overshoots past the finger: a fraction of the element's half
14
- * size beyond the drag travel itself. The drop overshoots the body by no more than `dragLimit`,
15
- * and stitching adds smoothing on top of that — this term covers it too. */
16
- declare const MAX_STRETCH = 0.34;
17
- declare const sizeGain: (g: VireGlassGeometry) => number;
18
- /** A bevel wider than this fraction of the half-size breaks the SDF: the roundings converge in
19
- * the middle. */
20
- declare const MAX_BEVEL_FRACTION = 0.65;
21
- declare const bevelFraction: (g: VireGlassGeometry, o: VireGlassOptics) => number;
22
- declare const bevelDp: (g: VireGlassGeometry, o: VireGlassOptics) => number;
23
- declare const thicknessDp: (g: VireGlassGeometry, o: VireGlassOptics) => number;
24
- /** Glass height right at the silhouette, a fraction of thickness: without it there's nothing at
25
- * the edge to bend the ray. */
26
- declare const RIM_FRACTION = 0.85;
27
- declare const rimDp: (g: VireGlassGeometry, o: VireGlassOptics) => number;
28
- /** Bigger element, deeper and wider shadow (M 7:14). */
29
- declare const shadowReachDp: (g: VireGlassGeometry) => number;
30
- /** How far the second morph shape reaches past the first one's bounds. Without this margin the
31
- * fused shape gets clipped by the canvas edge and the experiment shows the wrong thing. */
32
- declare function morphReachDp(g: VireGlassGeometry, morph?: {
33
- offsetX: number;
34
- offsetY: number;
35
- width: number;
36
- height: number;
37
- smoothing: number;
38
- }): number;
39
- /**
40
- * Margin around the lens view on each side: beyond it, the shader has nothing to sample.
41
- *
42
- * FOUR things have to fit in here. The refraction sample with aberrations. The blur radius —
43
- * it also samples around the point. The gather radius — the rim picks it up from outside the
44
- * shape, and without the margin it goes black exactly where it should be catching the
45
- * surroundings. And drag travel: the lens view moves with the finger, but its bounds don't, and
46
- * the sample falls off the edge, which is how layers from under the glass leak through.
47
- */
48
- declare function lensPadDp(g: VireGlassGeometry, o: VireGlassOptics, morph?: Parameters<typeof morphReachDp>[1], dragLimit?: number): number;
49
- /**
50
- * Margin around the surface canvas: the shadow reaches outside the shape, and dragging shifts it
51
- * further still.
52
- *
53
- * The multiplier is smaller than the shadow's full reach: under the finger, the shader for a
54
- * rising element multiplies the radius by 1.55, and the very end of that tail falls outside the
55
- * margin. Left that way on purpose — at the margin's edge it's at 1.2% alpha (2.5% before the
56
- * shadow was softened), and raising the multiplier means growing every surface view's area. If
57
- * that tail ever shows up on a device, fix it here.
58
- */
59
- declare function surfacePadDp(g: VireGlassGeometry, dragLimit?: number, morph?: Parameters<typeof morphReachDp>[1]): number;
60
- declare function shadowOpacity(busy: number): number;
61
- /** Same thing for platforms where the measurement flows through state: quantized coarsely, like
62
- * the ambient color, otherwise every probe sample would trigger a surface repaint. */
63
- declare function shadowOpacityFrom(sample: {
64
- busy: number;
65
- }): number;
66
-
67
- /**
68
- * REFERENCE CANVASES — the set that both benches draw and that the gates run against.
69
- *
70
- * There used to be three kinds of canvas, each in a different place: the web bench had its own
71
- * zones, the mobile lab had its own, and a third set lived inside `check-optics.mjs`, invisible
72
- * to everyone else. So the gate measured one thing, the eye looked at another, and there was
73
- * nothing to confirm the question "does Android differ?" against.
74
- *
75
- * The canvases are described as DATA, not drawing code: the canvas and the native views draw
76
- * differently, but both platforms lay out the same list of layers. Everything is in dp and in
77
- * fractions — fractions of the stage kept the stripes the same relative thickness on benches of
78
- * different sizes.
79
- *
80
- * Each canvas answers for one promise of the material (`what`), and that's also the caption on
81
- * the bench. A canvas can't be added to only one bench: platform parity would go back to being
82
- * a matter of impression.
83
- */
84
-
85
- /**
86
- * BENCH SHAPES — shared too. Element size feeds into the optics through sizeGain: a 120 circle
87
- * and a 150 circle are glass of different thickness, and screenshots from two benches on
88
- * different shapes are as incomparable as on different canvases. The values match the ones the
89
- * reference comparisons were shot on.
90
- */
91
- declare const REFERENCE_SHAPES: {
92
- circle: VireGlassGeometry;
93
- capsule: VireGlassGeometry;
94
- tile: VireGlassGeometry;
95
- };
96
- type VireGlassRefShapeName = keyof typeof REFERENCE_SHAPES;
97
- /** A stripe's layer. Lightness is 0..1, sizes are dp: gray, not color (there's nothing to
98
- * measure color with). */
99
- type VireGlassRefLayer = {
100
- readonly kind: 'flat';
101
- readonly level: number;
102
- }
103
- /** Vertical stripes: wider than the bevel, so the body absorbs them rather than the rim. */
104
- | {
105
- readonly kind: 'stripes';
106
- readonly level: number;
107
- readonly other: number;
108
- readonly periodDp: number;
109
- readonly widthDp: number;
110
- }
111
- /** A pseudo-random checkerboard — a "cover": structure that fights the ink drawn over the glass. */
112
- | {
113
- readonly kind: 'checker';
114
- readonly level: number;
115
- readonly amp: number;
116
- readonly cellDp: number;
117
- }
118
- /** Left and right halves at different lightness. */
119
- | {
120
- readonly kind: 'step';
121
- readonly left: number;
122
- readonly right: number;
123
- }
124
- /** A dark bar across the middle of the stripe — measures bulging at the rim against it. */
125
- | {
126
- readonly kind: 'bar';
127
- readonly level: number;
128
- readonly barLevel: number;
129
- readonly thicknessDp: number;
130
- }
131
- /** A fine grid: any lens distortion shows up on a straight line right away. */
132
- | {
133
- readonly kind: 'grid';
134
- readonly level: number;
135
- readonly lineLevel: number;
136
- readonly stepDp: number;
137
- }
138
- /** A stepped gradient. Steps, not a smooth fill: the native views can't draw a gradient without
139
- * an image. */
140
- | {
141
- readonly kind: 'gradient';
142
- readonly from: number;
143
- readonly to: number;
144
- readonly steps: number;
145
- };
146
- type VireGlassRefBand = {
147
- /** Stripe thickness in dp. The sum over a canvas is `REFERENCE_SCENE_HEIGHT`. */
148
- readonly heightDp: number;
149
- readonly layer: VireGlassRefLayer;
150
- };
151
- /**
152
- * Canvas size IN DP, one for all. Height is kept within the mobile lab's zone (0.42 of the
153
- * screen height), width within the narrowest phone (360 dp) with room to spare for the
154
- * surrounding field.
155
- *
156
- * Width matters NO LESS than height. The pattern is measured from the edge of the canvas, so on
157
- * a canvas spanning the full width of the stage, the phase of the pattern under the element
158
- * depended on screen width: 24 dp-period stripes landed under the center differently on a 406 dp
159
- * phone versus a fifteen-hundred-pixel canvas, and the checkerboard put an entirely different
160
- * cell arrangement under the element. A fixed-size panel removes this whole class of discrepancy
161
- * at once.
162
- */
163
- declare const REFERENCE_SCENE_WIDTH = 336;
164
- declare const REFERENCE_SCENE_HEIGHT = 252;
165
- /** The field around the canvas. Deliberately off the stripe levels and not gray: it shows where
166
- * the reference area ends, so its border can't be mistaken for a stripe in a screenshot. */
167
- declare const REFERENCE_SURROUND = "#3c1f4a";
168
- /**
169
- * Where the element sits on the canvas — dp from the panel's top-left corner. Position is as much
170
- * a part of the contract as canvas size and shape: a bench that parks the element its own way
171
- * shows it over DIFFERENT stripes, and there's nothing left to compare screenshots against.
172
- *
173
- * This has drifted before: the web bench centered the element within the VISIBLE area, while the
174
- * canvas was drawn centered on the full canvas element — with the control panel open, those are
175
- * two different points.
176
- */
177
- declare const REFERENCE_PIECE_AT: {
178
- readonly xDp: number;
179
- readonly yDp: number;
180
- };
181
- type VireGlassRefScene = {
182
- readonly name: string;
183
- /** What this canvas checks. Also the caption on the bench — otherwise the set turns to mush. */
184
- readonly what: string;
185
- /** Stripes at a given backdrop lightness: benches call with `level`, the gate sweeps the whole range. */
186
- readonly bands: (level: number) => readonly VireGlassRefBand[];
187
- /** Default lightness. Canvases that don't need it simply ignore it. */
188
- readonly level: number;
189
- /**
190
- * Whether the canvas is fit for NUMERIC platform comparison. A lightness profile needs a
191
- * backdrop that's uniform along the row; on a periodic grid of pixel-wide lines, the average
192
- * is determined by how the platform rasterizes that line, not by the material. Such a canvas
193
- * stays in the set — distortion of a straight line is visible to the eye at a glance — but it's
194
- * excluded from the comparison table.
195
- */
196
- readonly measurable?: false;
197
- };
198
- declare const REFERENCE_SCENES: readonly VireGlassRefScene[];
199
- type VireGlassRefSceneName = (typeof REFERENCE_SCENES)[number]['name'];
200
- declare const referenceScene: (name: string) => VireGlassRefScene;
201
- /** Lightness to hex gray. One conversion for both platforms — otherwise they'd drift apart. */
202
- declare const refGray: (level: number) => string;
203
- /**
204
- * Checkerboard cells as POSITIONS, not as drawing: the canvas loops over them, the native views
205
- * lay them out as a list, and both platforms get the exact same arrangement. The generator is
206
- * its own and deliberately simple — `Math.random` would give two platforms different canvases.
207
- */
208
- declare const refCheckerCells: (layer: Extract<VireGlassRefLayer, {
209
- kind: "checker";
210
- }>, widthDp: number, heightDp: number) => readonly {
211
- readonly xDp: number;
212
- readonly yDp: number;
213
- readonly level: number;
214
- }[];
215
- /** Gradient steps — also positions: the same list for the canvas and for the native views. */
216
- declare const refGradientSteps: (layer: Extract<VireGlassRefLayer, {
217
- kind: "gradient";
218
- }>) => readonly number[];
219
-
220
- /** Smooth union with a second shape — bench morphing experiment only. */
221
- type VireGlassMorph = {
222
- offsetX: number;
223
- offsetY: number;
224
- width: number;
225
- height: number;
226
- cornerRadius: number;
227
- /** Seam smoothing radius in dp; 0 turns the second shape off. */
228
- smoothing: number;
229
- };
230
- /** Surface response to a finger: the field around the touch point deforms, not the shape's
231
- * bounding box (`vgTouchWarp` in `sdf.ts`). Lengths in dp; `radius` = 0 turns the response off
232
- * entirely. */
233
- type VireGlassTouch = {
234
- x: number;
235
- y: number;
236
- pullX: number;
237
- pullY: number;
238
- press: number;
239
- radius: number;
240
- waveAmp: number;
241
- wavePhase: number;
242
- };
243
- /** Tinted glass for the primary action (M 16:08). Color is RGB 0…1. */
244
- type VireGlassAccent = {
245
- color: readonly [number, number, number];
246
- amount?: number;
247
- };
248
- /** Default tint fraction: the color reads, but content beneath it is still visible. */
249
- declare const ACCENT_AMOUNT = 0.8;
250
- /** Magnification at the flat center. Kept separate from the uniform channel: it's also used by
251
- * the fallback below Android 13, where there's no RuntimeShader and only an affine magnifier is
252
- * left. */
253
- declare const lensMagnify: (o: VireGlassOptics) => number;
254
- /** Props for the native view. Besides the uniform channel, only what the view uses itself lives
255
- * here: the shader source and the visible glass's size (the probe rectangle is taken from it). */
256
- declare function toLensProps(optics: VireGlassOptics, geometry: VireGlassGeometry, density: number, options?: {
257
- debug?: VireGlassDebugMode;
258
- morph?: VireGlassMorph;
259
- /** Third shape of the fused body; a zero size turns it off. */
260
- morph2?: VireGlassMorph;
261
- groupProbe?: number[];
262
- touch?: VireGlassTouch;
263
- /** Progress fraction, 0…1: to the left of the boundary the element is active. `undefined` means no progress. */
264
- progress?: number;
265
- /** Key light direction in screen space; defaults to the light at rest. */
266
- light?: readonly [number, number];
267
- /** 0…1: the lens builds up as the element appears — instead of a plain fade. */
268
- appear?: number;
269
- /** Tint for the primary action: the glass color and the fraction it lays over the content. */
270
- accent?: VireGlassAccent;
271
- }): {
272
- uniformNames: string[];
273
- uniformSizes: number[];
274
- uniformValues: number[];
275
- shaderSource: string;
276
- glassWidth: number;
277
- glassHeight: number;
278
- };
279
- /** Static part of the surface uniforms. Dynamics (gesture, press, light) get mixed in inside the
280
- * component's worklet — the adapter must stay an ordinary function. */
281
- declare function toSurfaceUniforms(optics: VireGlassOptics, geometry: VireGlassGeometry, options?: {
282
- debug?: VireGlassDebugMode;
283
- morph?: VireGlassMorph;
284
- /** Third shape of the fused body; a zero size turns it off. */
285
- morph2?: VireGlassMorph;
286
- dragLimit?: number;
287
- shadow?: number;
288
- /** Average ambient color around the element: light from it bleeds into the shadow (reference 219 @8:22). */
289
- ambient?: readonly [number, number, number];
290
- /** The lens draws the glass body — the surface is left with the highlight, shadow and icon. */
291
- bodyInLens?: boolean;
292
- touch?: VireGlassTouch;
293
- /** Progress fraction, 0…1: to the left of the boundary the element is active. `undefined` means no progress. */
294
- progress?: number;
295
- /** 0…1: the element is appearing — shadow and ink build up together with the lens. */
296
- appear?: number;
297
- /** 0 — the element sinks in under the finger, 1 — it rises into glass (reference §5). */
298
- lift?: number;
299
- }): {
300
- u_center: number[];
301
- u_halfSize: number[];
302
- u_corner: number;
303
- u_bevel: number;
304
- u_thickness: number;
305
- u_morphOffset: number[];
306
- u_morphHalf: number[];
307
- u_morphCorner: number;
308
- u_morphK: number;
309
- u_morph2Offset: number[];
310
- u_morph2Half: number[];
311
- u_morph2Corner: number;
312
- u_edgeDensity: number;
313
- u_dispersion: number;
314
- u_refraction: number;
315
- u_tint: number[];
316
- u_shadow: number;
317
- u_ambient: readonly [number, number, number];
318
- u_shadowReach: number;
319
- u_touch: number[];
320
- u_pull: number[];
321
- u_touchPress: number;
322
- u_touchRadius: number;
323
- u_wave: number[];
324
- u_presence: number;
325
- u_progress: number;
326
- u_appear: number;
327
- u_lift: number;
328
- u_debug: number;
329
- };
330
- /**
331
- * Surface fields that are LENGTHS: the adapter's contract is specified in dp, and on the web each
332
- * one of them has to be multiplied by screen density. The list lives here rather than in the
333
- * renderer, where it used to be a dozen and a half manual multiplications in a row: a missed
334
- * field there was only caught by eye, and the miss isn't visible everywhere — at density 1,
335
- * multiplying is indistinguishable from not doing it.
336
- */
337
- type SurfaceUniforms = ReturnType<typeof toSurfaceUniforms>;
338
- declare const SURFACE_LENGTH_UNIFORMS: readonly ["u_halfSize", "u_corner", "u_bevel", "u_morphOffset", "u_morphHalf", "u_morphCorner", "u_morphK", "u_morph2Offset", "u_morph2Half", "u_morph2Corner", "u_shadowReach", "u_touch", "u_pull", "u_touchRadius"];
339
- /**
340
- * Surface uniforms in device pixels. Android draws in dp and calls the adapter as-is; the web
341
- * needs this conversion. `u_center` isn't part of it: the renderer knows the element's center on
342
- * its own.
343
- */
344
- declare function toDeviceSurfaceUniforms(raw: SurfaceUniforms, density: number): SurfaceUniforms;
345
- /** Key light direction in screen coordinates, for when the orientation response is off. */
346
- declare const REST_LIGHT: readonly [number, number];
347
- /** Uniforms the component mixes in inside the worklet (press, active, light direction) and via
348
- * the icon layer. Listed here so a test can check the shader contract's completeness without
349
- * importing the component itself (it pulls in Skia and doesn't come up in a node environment). */
350
- declare const DYNAMIC_UNIFORMS: readonly ["u_press", "u_active"];
351
- declare const ICON_UNIFORMS: readonly ["u_iconOn", "u_iconScale", "u_inkIdle", "u_inkActive"];
352
- /** App-colored overlay layer on the glass. The `u_overlay` sampler shares its contract with the
353
- * ink mask and is sampled at the SAME coordinate — otherwise deformation would carry them apart. */
354
- declare const OVERLAY_UNIFORMS: readonly ["u_overlayOn"];
355
- declare function morphBetween(a: VireGlassGeometry, b: VireGlassGeometry, offsetX: number, offsetY: number, t: number): VireGlassMorph | undefined;
356
-
357
- export { ACCENT_AMOUNT as A, refCheckerCells as B, refGradientSteps as C, DYNAMIC_UNIFORMS as D, refGray as E, referenceScene as F, rimDp as G, roundedRectGeometry as H, ICON_UNIFORMS as I, shadowOpacity as J, shadowOpacityFrom as K, shadowReachDp as L, MAX_BEVEL_FRACTION as M, sizeGain as N, OVERLAY_UNIFORMS as O, surfacePadDp as P, thicknessDp as Q, REFERENCE_PIECE_AT as R, SURFACE_LENGTH_UNIFORMS as S, toDeviceSurfaceUniforms as T, toLensProps as U, type VireGlassAccent as V, toSurfaceUniforms as W, MAX_STRETCH as a, REFERENCE_SCENES as b, REFERENCE_SCENE_HEIGHT as c, REFERENCE_SCENE_WIDTH as d, REFERENCE_SHAPES as e, REFERENCE_SURROUND as f, REST_LIGHT as g, RIM_FRACTION as h, type SurfaceUniforms as i, type VireGlassGeometry as j, type VireGlassMorph as k, type VireGlassRefBand as l, type VireGlassRefLayer as m, type VireGlassRefScene as n, type VireGlassRefSceneName as o, type VireGlassRefShapeName as p, type VireGlassTouch as q, bevelDp as r, bevelFraction as s, capsuleGeometry as t, circleGeometry as u, halfMinDp as v, lensMagnify as w, lensPadDp as x, morphBetween as y, morphReachDp as z };