@edinstvo/glass 0.0.0-stage → 0.1.0-alpha.1

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/shader.js ADDED
@@ -0,0 +1,109 @@
1
+ export const vertex = `#version 300 es
2
+ void main() {
3
+ vec2 p = vec2((gl_VertexID << 1) & 2, gl_VertexID & 2);
4
+ gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0);
5
+ }`;
6
+ export const fragment = `#version 300 es
7
+ precision highp float;
8
+
9
+ uniform sampler2D uBackdrop, uFrosted;
10
+ uniform vec2 uCanvas, uSize, uUvOrigin, uUvPerPx, uTexSize, uLightDir;
11
+ uniform vec3 uTint;
12
+ uniform float uViewY, uPad, uRadius, uDpr, uLight, uTransparency, uRefraction, uDepth, uDispersion, uFrost, uSplay, uBloom, uGlint, uRim, uLift;
13
+ out vec4 outColor;
14
+
15
+ const float SOFTNESS = 2.7;
16
+
17
+ float roundedBox(vec2 p, vec2 b, float r) {
18
+ vec2 q = abs(p) - b + r;
19
+ return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - r;
20
+ }
21
+
22
+ float softMin(float a, float b) {
23
+ float lo = min(a, b);
24
+ return lo * pow(1.0 + pow(lo / max(a, b), SOFTNESS), -1.0 / SOFTNESS);
25
+ }
26
+
27
+ vec2 toUv(vec2 px) {
28
+ return uUvOrigin + px * uUvPerPx;
29
+ }
30
+
31
+ vec3 pick(vec2 px, float lod) {
32
+ return uFrost > 0.0 ? texture(uFrosted, toUv(px)).rgb : textureLod(uBackdrop, toUv(px), lod).rgb;
33
+ }
34
+
35
+ void main() {
36
+ vec2 px = vec2(gl_FragCoord.x, uCanvas.y - (gl_FragCoord.y - uViewY)) - uPad;
37
+ vec2 half_ = uSize * 0.5;
38
+ vec2 c = px - half_;
39
+ float d = roundedBox(c, half_, uRadius);
40
+ float texels = max(uUvPerPx.x * uTexSize.x, uUvPerPx.y * uTexSize.y);
41
+ float haloLod = log2(max(28.0 * uDpr * texels, 1.0));
42
+ vec3 halo = textureLod(uBackdrop, toUv(px), haloLod).rgb;
43
+
44
+ float mask = 1.0 - smoothstep(-0.75, 0.75, d);
45
+ float spill = exp(-max(d, 0.0) / (uPad * 0.3)) * uBloom * 0.4 * uLight;
46
+ vec3 spillColor = mix(halo, vec3(1.0), 0.6);
47
+ // ── a p-norm of the edge distances: smooth everywhere inside, and p = 2.7 lands on the rounded corner
48
+ vec2 edges = max(half_ - abs(c), 0.0) + uRadius + 0.001;
49
+ float soft = softMin(edges.x, edges.y);
50
+ float peak = softMin(half_.x + uRadius, half_.y + uRadius) - uRadius;
51
+ float band = min(mix(max(uDepth * uDpr, 1.0), peak, uSplay * uSplay), peak);
52
+ float s = 1.0 - clamp((soft - uRadius) / band, 0.0, 1.0);
53
+ float height = sqrt(max(1.0 - s * s, 0.0));
54
+ vec2 g = normalize(pow(vec2(soft) / edges, vec2(SOFTNESS + 1.0)) * sign(c) + 0.00001);
55
+ vec3 n = normalize(vec3(g * s * s / sqrt(1.02 - s * s), 1.0));
56
+
57
+ vec3 ray = refract(vec3(0.0, 0.0, -1.0), n, 1.0 / 1.5);
58
+ vec2 shift = ray.xy / max(-ray.z, 0.5) * band * (0.35 + height) * uRefraction * 1.2;
59
+
60
+ vec2 at = px + shift;
61
+ float squeeze = log2(max(max(length(dFdx(at)), length(dFdy(at))) * texels, 1.0));
62
+ float k = 0.04 + uDispersion * 0.3;
63
+ vec3 col = vec3(
64
+ pick(at - shift * k, squeeze).r,
65
+ pick(at, squeeze).g,
66
+ pick(at + shift * k, squeeze).b
67
+ );
68
+
69
+ col = mix(vec3(dot(col, vec3(0.2126, 0.7152, 0.0722))), col, 1.08);
70
+ col = mix(uTint, col, uTransparency);
71
+ col = col * (1.0 + uLift) + uLift * 0.12;
72
+ col += halo * uBloom * 0.22 * s;
73
+
74
+ float facing = dot(n.xy, uLightDir);
75
+ col += uLight * (max(facing, 0.0) * 0.3 + dot(c / half_, uLightDir) * 0.03);
76
+ col *= 1.0 - uLight * max(-facing, 0.0) * 0.2;
77
+
78
+ float toward = dot(g, uLightDir);
79
+ col += uGlint * pow(s, 5.0) * (pow(max(toward, 0.0), 6.0) + pow(max(-toward, 0.0), 6.0) * 0.4);
80
+
81
+ float along = dot(g, uLightDir);
82
+ float line = smoothstep(-1.6 * uDpr, -0.6 * uDpr, d);
83
+ col += uRim * line * (0.18 + 0.82 * along * along);
84
+
85
+ vec3 inside = clamp(col, 0.0, 1.0) * mask;
86
+ float rest = (1.0 - mask) * spill;
87
+ outColor = vec4(inside + spillColor * rest, mask + rest);
88
+ }`;
89
+ export const blurFragment = `#version 300 es
90
+ precision highp float;
91
+
92
+ uniform sampler2D uSource;
93
+ uniform vec2 uStep, uInvSize;
94
+ uniform float uLod;
95
+ out vec4 outColor;
96
+
97
+ void main() {
98
+ vec2 uv = gl_FragCoord.xy * uInvSize;
99
+ vec3 sum = vec3(0.0);
100
+ float total = 0.0;
101
+ for (int i = -8; i <= 8; i++) {
102
+ float x = float(i);
103
+ float weight = exp(-x * x / 18.0);
104
+ sum += textureLod(uSource, uv + uStep * x, uLod).rgb * weight;
105
+ total += weight;
106
+ }
107
+ outColor = vec4(sum / total, 1.0);
108
+ }`;
109
+ //# sourceMappingURL=shader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader.js","sourceRoot":"","sources":["../src/shader.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;;;;EAIpB,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkFtB,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;EAmB1B,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type GlassSource } from "./backdrop.js";
2
+ import { type Interaction, type InteractionName } from "./interaction.js";
3
+ import { type Material, type PresetName } from "./material.js";
4
+ export interface GlassOptions {
5
+ material?: PresetName | Partial<Material>;
6
+ interaction?: InteractionName | Interaction;
7
+ source?: GlassSource;
8
+ live?: boolean;
9
+ }
10
+ export declare class GlassSurface {
11
+ private host;
12
+ private canvas;
13
+ private context;
14
+ private motion;
15
+ private resize;
16
+ private visibility;
17
+ private visible;
18
+ private forced;
19
+ private moved;
20
+ private signature;
21
+ private live;
22
+ private options;
23
+ private material;
24
+ private interaction;
25
+ private tint;
26
+ private radius;
27
+ constructor(host: HTMLElement, canvas: HTMLCanvasElement, options?: GlassOptions);
28
+ connect(): void;
29
+ disconnect(): void;
30
+ set(options: GlassOptions): void;
31
+ invalidate(): void;
32
+ nudge(): void;
33
+ restyle(): void;
34
+ update(dt: number): boolean;
35
+ private paint;
36
+ private fallBack;
37
+ }
38
+ export declare function placeCanvas(canvas: HTMLCanvasElement): void;
39
+ export declare function attachGlass(host: HTMLElement, options?: GlassOptions): {
40
+ set: (next: GlassOptions) => void;
41
+ invalidate: () => void;
42
+ destroy: () => void;
43
+ };
@@ -0,0 +1,224 @@
1
+ import { resolveBackdrop } from "./backdrop.js";
2
+ import { resolveTint } from "./color.js";
3
+ import { cornerRadius, lightVector, uvTransform } from "./geometry.js";
4
+ import { Motion, interactions } from "./interaction.js";
5
+ import { kebab, numericKeys, presets, resolveMaterial } from "./material.js";
6
+ import { Renderer } from "./renderer.js";
7
+ const pad = 32;
8
+ const surfaces = new Set();
9
+ let pending = 0;
10
+ let lastTick = 0;
11
+ let listening = false;
12
+ function wake() {
13
+ pending ||= requestAnimationFrame(tick);
14
+ }
15
+ function tick(now) {
16
+ pending = 0;
17
+ const dt = Math.min((now - lastTick) / 1000, 1 / 30);
18
+ lastTick = now;
19
+ Renderer.shared?.nextFrame();
20
+ let again = false;
21
+ for (const surface of surfaces)
22
+ again = surface.update(dt) || again;
23
+ if (again)
24
+ wake();
25
+ }
26
+ function nudgeAll() {
27
+ for (const surface of surfaces)
28
+ surface.nudge();
29
+ }
30
+ function restyleAll() {
31
+ for (const surface of surfaces)
32
+ surface.restyle();
33
+ }
34
+ function listen() {
35
+ if (listening)
36
+ return;
37
+ listening = true;
38
+ addEventListener("scroll", nudgeAll, { capture: true, passive: true });
39
+ addEventListener("resize", nudgeAll, { passive: true });
40
+ matchMedia("(prefers-color-scheme: dark)").addEventListener("change", restyleAll);
41
+ new MutationObserver(restyleAll).observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
42
+ if (Renderer.shared)
43
+ Renderer.shared.onRestore = restyleAll;
44
+ }
45
+ export class GlassSurface {
46
+ host;
47
+ canvas;
48
+ context;
49
+ motion;
50
+ resize = new ResizeObserver(() => this.restyle());
51
+ visibility = new IntersectionObserver(([entry]) => {
52
+ this.visible = entry.isIntersecting;
53
+ if (this.visible)
54
+ this.invalidate();
55
+ });
56
+ visible = true;
57
+ forced = true;
58
+ moved = false;
59
+ signature = "";
60
+ live = false;
61
+ options;
62
+ material = resolveMaterial();
63
+ interaction = interactions.none;
64
+ tint = [1, 1, 1];
65
+ radius = 0;
66
+ constructor(host, canvas, options = {}) {
67
+ this.host = host;
68
+ this.canvas = canvas;
69
+ this.context = canvas.getContext("2d");
70
+ this.motion = new Motion(host, wake);
71
+ this.options = options;
72
+ }
73
+ connect() {
74
+ listen();
75
+ if (!Renderer.shared) {
76
+ this.fallBack();
77
+ return;
78
+ }
79
+ this.host.dataset.engine = "webgl";
80
+ surfaces.add(this);
81
+ this.resize.observe(this.host);
82
+ this.visibility.observe(this.host);
83
+ this.motion.attach();
84
+ this.restyle();
85
+ }
86
+ disconnect() {
87
+ surfaces.delete(this);
88
+ this.resize.disconnect();
89
+ this.visibility.disconnect();
90
+ this.motion.detach();
91
+ }
92
+ set(options) {
93
+ this.options = { ...this.options, ...options };
94
+ this.restyle();
95
+ }
96
+ invalidate() {
97
+ this.forced = true;
98
+ wake();
99
+ }
100
+ nudge() {
101
+ this.moved = true;
102
+ wake();
103
+ }
104
+ restyle() {
105
+ const style = getComputedStyle(this.host);
106
+ const tokens = {};
107
+ for (const key of numericKeys) {
108
+ const value = style.getPropertyValue(`--glass-${kebab(key)}`);
109
+ if (value)
110
+ tokens[key] = parseFloat(value);
111
+ }
112
+ const tint = style.getPropertyValue("--glass-tint").trim();
113
+ if (tint)
114
+ tokens.tint = tint;
115
+ const { material = "regular", interaction = "none" } = this.options;
116
+ this.material = typeof material === "string"
117
+ ? resolveMaterial(presets[material] ?? presets.regular, tokens)
118
+ : resolveMaterial(tokens, material);
119
+ const reduced = matchMedia("(prefers-reduced-motion: reduce)").matches;
120
+ this.interaction = reduced ? interactions.none : typeof interaction === "string" ? (interactions[interaction] ?? interactions.none) : interaction;
121
+ this.tint = resolveTint(this.material.tint);
122
+ this.radius = cornerRadius(style.borderTopLeftRadius, this.host.offsetWidth, this.host.offsetHeight);
123
+ this.invalidate();
124
+ }
125
+ update(dt) {
126
+ const { motion, interaction } = this;
127
+ const moving = motion.moving;
128
+ if (moving)
129
+ motion.step(dt, interaction);
130
+ if (!this.visible)
131
+ return moving;
132
+ const width = this.host.offsetWidth;
133
+ const height = this.host.offsetHeight;
134
+ if (!width || !height)
135
+ return moving;
136
+ if (!this.forced && !this.moved && !moving && !this.live)
137
+ return false;
138
+ const rect = this.host.getBoundingClientRect();
139
+ const backdrop = resolveBackdrop(this.host, rect, this.options.source ?? "auto", () => this.invalidate());
140
+ if (!backdrop)
141
+ return moving;
142
+ this.live = this.options.live ?? (backdrop.live && backdrop.image instanceof HTMLVideoElement);
143
+ const signature = `${rect.left},${rect.top},${rect.width},${rect.height},${backdrop.map.x},${backdrop.map.y},${backdrop.map.w},${backdrop.map.h}`;
144
+ const skip = !this.forced && !moving && !this.live && signature === this.signature;
145
+ this.moved = false;
146
+ if (skip)
147
+ return false;
148
+ try {
149
+ this.paint(backdrop, rect, width, height);
150
+ }
151
+ catch (error) {
152
+ console.warn("@edinstvo/glass: can't read this backdrop, falling back to CSS.", error);
153
+ this.fallBack();
154
+ return false;
155
+ }
156
+ this.forced = false;
157
+ this.signature = signature;
158
+ return moving || motion.moving || this.live;
159
+ }
160
+ paint(backdrop, rect, width, height) {
161
+ const dpr = Math.min(devicePixelRatio || 1, 2);
162
+ const canvasW = Math.round((width + pad * 2) * dpr);
163
+ const canvasH = Math.round((height + pad * 2) * dpr);
164
+ if (this.canvas.width !== canvasW || this.canvas.height !== canvasH) {
165
+ this.canvas.width = canvasW;
166
+ this.canvas.height = canvasH;
167
+ }
168
+ const { origin, perPixel } = uvTransform(rect, backdrop.map, rect.width / width, rect.height / height, dpr);
169
+ const [baseX, baseY] = lightVector(this.material.lightAngle);
170
+ const follow = this.interaction.follow;
171
+ const x = baseX + this.motion.x.value * follow;
172
+ const y = baseY + this.motion.y.value * follow;
173
+ const length = Math.hypot(x, y) || 1;
174
+ Renderer.shared.draw({
175
+ target: this.context,
176
+ backdrop,
177
+ width: canvasW,
178
+ height: canvasH,
179
+ pad: pad * dpr,
180
+ size: [width * dpr, height * dpr],
181
+ radius: this.radius * dpr,
182
+ dpr,
183
+ uvOrigin: origin,
184
+ uvPerPixel: perPixel,
185
+ lightDir: [x / length, y / length],
186
+ tint: this.tint,
187
+ material: this.material,
188
+ });
189
+ }
190
+ fallBack() {
191
+ this.host.dataset.engine = "css";
192
+ this.canvas.hidden = true;
193
+ surfaces.delete(this);
194
+ }
195
+ }
196
+ export function placeCanvas(canvas) {
197
+ Object.assign(canvas.style, {
198
+ position: "absolute",
199
+ inset: `-${pad}px`,
200
+ width: `calc(100% + ${pad * 2}px)`,
201
+ height: `calc(100% + ${pad * 2}px)`,
202
+ pointerEvents: "none",
203
+ zIndex: "0",
204
+ });
205
+ }
206
+ export function attachGlass(host, options = {}) {
207
+ const canvas = document.createElement("canvas");
208
+ placeCanvas(canvas);
209
+ if (getComputedStyle(host).position === "static")
210
+ host.style.position = "relative";
211
+ host.style.isolation = "isolate";
212
+ host.prepend(canvas);
213
+ const surface = new GlassSurface(host, canvas, options);
214
+ surface.connect();
215
+ return {
216
+ set: (next) => surface.set(next),
217
+ invalidate: () => surface.invalidate(),
218
+ destroy: () => {
219
+ surface.disconnect();
220
+ canvas.remove();
221
+ },
222
+ };
223
+ }
224
+ //# sourceMappingURL=surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,54 @@
1
1
  {
2
2
  "name": "@edinstvo/glass",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "Liquid glass for the web: one WebGL material that looks the same on macOS and Windows.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/EdinstvoAI/edinstvo-glass.git"
10
+ },
11
+ "homepage": "https://github.com/EdinstvoAI/edinstvo-glass",
12
+ "keywords": [
13
+ "glass",
14
+ "liquid-glass",
15
+ "webgl",
16
+ "web-components",
17
+ "shader",
18
+ "material"
19
+ ],
20
+ "main": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "default": "./dist/index.js"
26
+ },
27
+ "./define": {
28
+ "types": "./dist/define.d.ts",
29
+ "default": "./dist/define.js"
30
+ },
31
+ "./glass.css": "./css/glass.css"
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "css"
36
+ ],
37
+ "sideEffects": [
38
+ "./dist/define.js",
39
+ "*.css"
40
+ ],
41
+ "scripts": {
42
+ "build": "tsc",
43
+ "test": "tsc && node --test",
44
+ "demo": "tsc && node demo/serve.mjs",
45
+ "prepublishOnly": "npm test"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public",
49
+ "provenance": true
50
+ },
51
+ "devDependencies": {
52
+ "typescript": "^5"
53
+ }
54
+ }