react-liquid-glass-svg 1.0.0 → 1.0.3

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/README.md CHANGED
@@ -33,14 +33,14 @@ Most glass-effect packages rely on WebGL or canvas — heavy, SSR-hostile, and a
33
33
  backdrop-filter: blur() ← softens the result
34
34
  ```
35
35
 
36
- That's the entire trick. **No shaders. No canvas. No WebGL.** ~5 KB gzip.
36
+ That's the entire trick. **No shaders. No canvas. No WebGL.** ~2 KB gzip.
37
37
 
38
38
  ## ✨ Features
39
39
 
40
40
  | | |
41
41
  | -------------------------- | --------------------------------------------------------------------------------------- |
42
42
  | 🪟 **Apple liquid glass** | Real displacement-mapped refraction on Chromium/Firefox; noise+blur fallback on Safari. |
43
- | ⚡ **5 KB gzipped** | One file, zero runtime deps. Tree-shakable, `sideEffects: false`. |
43
+ | ⚡ **~2 KB gzipped** | One file, zero runtime deps. Tree-shakable, `sideEffects: false`. |
44
44
  | 🧩 **Polymorphic API** | `<LiquidGlass as="button" />`, `as="nav"`, `as="article"` — semantics stay yours. |
45
45
  | 🎨 **Tailwind-friendly** | Pass `className`. No clashes, no wrappers, no `!important` wars. |
46
46
  | 🔠 **TypeScript-first** | Strict types, autocompleted props. Zero `@types/*` packages to install. |
@@ -223,7 +223,7 @@ All other props (`onClick`, `role`, `aria-*`, `data-*`, etc.) are forwarded to t
223
223
 
224
224
  The package is built specifically with React Server Components in mind.
225
225
 
226
- The `'use client'` directive is **baked into the published ESM and UMD bundles** — you don't need to add it.
226
+ The `'use client'` directive is **baked into the published ESM and CJS bundles** — you don't need to add it.
227
227
 
228
228
  ```tsx
229
229
  // app/page.tsx — Next.js App Router (Server Component)
@@ -252,7 +252,7 @@ The fallback path is automatic. The package detects Safari/iOS at runtime and sw
252
252
 
253
253
  ## ⚡ Performance
254
254
 
255
- - **~5 KB gzipped** (ESM build, no peer deps counted)
255
+ - **~2 KB gzipped** (ESM build, no peer deps counted)
256
256
  - **Zero runtime deps**, only React/ReactDOM peer
257
257
  - **Tree-shakable** (`sideEffects: false`)
258
258
  - One `<svg>` per instance, no global pollution
package/dist/index.cjs ADDED
@@ -0,0 +1,4 @@
1
+ "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("react"),t=require("react/jsx-runtime");var n=/iPad|iPhone|iPod/,r=/^((?!chrome|android).)*safari/i,i=()=>{if(typeof window>`u`)return!0;let e=window.navigator.userAgent;return!(n.test(e)||r.test(e))},a=()=>{let[t,n]=(0,e.useState)(!0);return(0,e.useEffect)(()=>{n(i())},[]),{hasFullFilterSupport:t}},o=({id:e,turbulenceBaseFrequency:n,turbulenceSeed:r,displacementScale:i})=>(0,t.jsxs)(`filter`,{id:e,x:`0%`,y:`0%`,width:`100%`,height:`100%`,filterUnits:`objectBoundingBox`,children:[(0,t.jsx)(`feTurbulence`,{type:`fractalNoise`,baseFrequency:n,numOctaves:1,seed:r,result:`turbulence`}),(0,t.jsxs)(`feComponentTransfer`,{in:`turbulence`,result:`mapped`,children:[(0,t.jsx)(`feFuncR`,{type:`gamma`,amplitude:1,exponent:10,offset:.5}),(0,t.jsx)(`feFuncG`,{type:`gamma`,amplitude:0,exponent:1,offset:0}),(0,t.jsx)(`feFuncB`,{type:`gamma`,amplitude:0,exponent:1,offset:.5})]}),(0,t.jsx)(`feGaussianBlur`,{in:`turbulence`,stdDeviation:3,result:`softMap`}),(0,t.jsx)(`feSpecularLighting`,{in:`softMap`,surfaceScale:5,specularConstant:1,specularExponent:100,lightingColor:`white`,result:`specLight`,children:(0,t.jsx)(`fePointLight`,{x:-200,y:-200,z:300})}),(0,t.jsx)(`feComposite`,{in:`specLight`,operator:`arithmetic`,k1:0,k2:1,k3:1,k4:0,result:`litImage`}),(0,t.jsx)(`feDisplacementMap`,{in:`SourceGraphic`,in2:`softMap`,scale:i,xChannelSelector:`R`,yChannelSelector:`G`})]}),s=({id:e,turbulenceBaseFrequency:n,turbulenceSeed:r})=>(0,t.jsxs)(`filter`,{id:e,x:`-20%`,y:`-20%`,width:`140%`,height:`140%`,filterUnits:`objectBoundingBox`,children:[(0,t.jsx)(`feTurbulence`,{type:`fractalNoise`,baseFrequency:n,numOctaves:2,seed:r,result:`turbulence`}),(0,t.jsx)(`feGaussianBlur`,{in:`turbulence`,stdDeviation:`2`,result:`blur`}),(0,t.jsx)(`feColorMatrix`,{in:`blur`,type:`matrix`,values:`1 0 0 0 0
2
+ 0 1 0 0 0
3
+ 0 0 1 0 0
4
+ 0 0 0 0.15 0`,result:`transparency`}),(0,t.jsx)(`feBlend`,{in:`SourceGraphic`,in2:`transparency`,mode:`normal`})]}),c=`0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)`,l=`0 8px 32px rgba(0,0,0,0.28)`,u=`inset 0 1px 0 0 rgba(255,255,255,0.55), inset 0 -1px 1px 0 rgba(255,255,255,0.12), inset 0 0 0 1px rgba(255,255,255,0.08)`,d=e=>Array.isArray(e)?`${e[0]} ${e[1]}`:`${e}`,f=({children:n,className:r=``,backdropBlur:i=2,tintColor:f=`rgba(255, 255, 255, .2)`,displacementScale:p=150,turbulenceBaseFrequency:m=.008,turbulenceSeed:h=1.5,as:g=`div`,style:_,glassBorder:v=!1,...y})=>{let b=(0,e.useId)(),{hasFullFilterSupport:x}=a(),S=d(m);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`svg`,{style:{display:`none`},children:x?(0,t.jsx)(o,{id:b,turbulenceBaseFrequency:S,turbulenceSeed:h,displacementScale:p}):(0,t.jsx)(s,{id:b,turbulenceBaseFrequency:S,turbulenceSeed:h})}),(0,t.jsxs)(g,{className:r,style:{position:`relative`,overflow:`hidden`,boxShadow:v?l:c,..._},...y,children:[(0,t.jsx)(`div`,{style:{position:`absolute`,inset:0,zIndex:0,overflow:`hidden`,borderRadius:`inherit`,backdropFilter:`blur(${i}px)`,WebkitBackdropFilter:`blur(${i}px)`,filter:`url(#${b})`,isolation:`isolate`,...!x&&{transform:`translateZ(0)`,willChange:`transform`}}}),(0,t.jsx)(`div`,{style:{position:`absolute`,inset:0,zIndex:1,borderRadius:`inherit`,background:f}}),v&&(0,t.jsx)(`span`,{"aria-hidden":`true`,style:{position:`absolute`,inset:0,zIndex:2,borderRadius:`inherit`,pointerEvents:`none`,background:`linear-gradient(135deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0) 38%, rgba(255,255,255,0) 62%, rgba(255,255,255,0.06) 100%)`,boxShadow:u}}),(0,t.jsx)(`div`,{style:{position:`relative`,zIndex:3,borderRadius:`inherit`},children:n})]})]})};exports.LiquidGlass=f,exports.default=f;
package/dist/index.esm.js CHANGED
@@ -1,194 +1,17 @@
1
1
  "use client";
2
2
  import { useEffect as e, useId as t, useState as n } from "react";
3
- //#region \0rolldown/runtime.js
4
- var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), i = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(e, { get: (e, t) => (typeof require < "u" ? require : e)[t] }) : e)(function(e) {
5
- if (typeof require < "u") return require.apply(this, arguments);
6
- throw Error("Calling `require` for \"" + e + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
7
- }), a = /iPad|iPhone|iPod/, o = /^((?!chrome|android).)*safari/i, s = () => {
3
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ //#region src/hooks/useBrowserDetection.ts
5
+ var o = /iPad|iPhone|iPod/, s = /^((?!chrome|android).)*safari/i, c = () => {
8
6
  if (typeof window > "u") return !0;
9
7
  let e = window.navigator.userAgent;
10
- return !(a.test(e) || o.test(e));
11
- }, c = () => {
8
+ return !(o.test(e) || s.test(e));
9
+ }, l = () => {
12
10
  let [t, r] = n(!0);
13
11
  return e(() => {
14
- r(s());
12
+ r(c());
15
13
  }, []), { hasFullFilterSupport: t };
16
- }, l = /* @__PURE__ */ r(((e) => {
17
- var t = Symbol.for("react.transitional.element"), n = Symbol.for("react.fragment");
18
- function r(e, n, r) {
19
- var i = null;
20
- if (r !== void 0 && (i = "" + r), n.key !== void 0 && (i = "" + n.key), "key" in n) for (var a in r = {}, n) a !== "key" && (r[a] = n[a]);
21
- else r = n;
22
- return n = r.ref, {
23
- $$typeof: t,
24
- type: e,
25
- key: i,
26
- ref: n === void 0 ? null : n,
27
- props: r
28
- };
29
- }
30
- e.Fragment = n, e.jsx = r, e.jsxs = r;
31
- })), u = /* @__PURE__ */ r(((e) => {
32
- process.env.NODE_ENV !== "production" && (function() {
33
- function t(e) {
34
- if (e == null) return null;
35
- if (typeof e == "function") return e.$$typeof === k ? null : e.displayName || e.name || null;
36
- if (typeof e == "string") return e;
37
- switch (e) {
38
- case v: return "Fragment";
39
- case b: return "Profiler";
40
- case y: return "StrictMode";
41
- case w: return "Suspense";
42
- case T: return "SuspenseList";
43
- case O: return "Activity";
44
- }
45
- if (typeof e == "object") switch (typeof e.tag == "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), e.$$typeof) {
46
- case _: return "Portal";
47
- case S: return e.displayName || "Context";
48
- case x: return (e._context.displayName || "Context") + ".Consumer";
49
- case C:
50
- var n = e.render;
51
- return e = e.displayName, e || (e = n.displayName || n.name || "", e = e === "" ? "ForwardRef" : "ForwardRef(" + e + ")"), e;
52
- case E: return n = e.displayName || null, n === null ? t(e.type) || "Memo" : n;
53
- case D:
54
- n = e._payload, e = e._init;
55
- try {
56
- return t(e(n));
57
- } catch {}
58
- }
59
- return null;
60
- }
61
- function n(e) {
62
- return "" + e;
63
- }
64
- function r(e) {
65
- try {
66
- n(e);
67
- var t = !1;
68
- } catch {
69
- t = !0;
70
- }
71
- if (t) {
72
- t = console;
73
- var r = t.error, i = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
74
- return r.call(t, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", i), n(e);
75
- }
76
- }
77
- function a(e) {
78
- if (e === v) return "<>";
79
- if (typeof e == "object" && e && e.$$typeof === D) return "<...>";
80
- try {
81
- var n = t(e);
82
- return n ? "<" + n + ">" : "<...>";
83
- } catch {
84
- return "<...>";
85
- }
86
- }
87
- function o() {
88
- var e = A.A;
89
- return e === null ? null : e.getOwner();
90
- }
91
- function s() {
92
- return Error("react-stack-top-frame");
93
- }
94
- function c(e) {
95
- if (j.call(e, "key")) {
96
- var t = Object.getOwnPropertyDescriptor(e, "key").get;
97
- if (t && t.isReactWarning) return !1;
98
- }
99
- return e.key !== void 0;
100
- }
101
- function l(e, t) {
102
- function n() {
103
- P || (P = !0, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", t));
104
- }
105
- n.isReactWarning = !0, Object.defineProperty(e, "key", {
106
- get: n,
107
- configurable: !0
108
- });
109
- }
110
- function u() {
111
- var e = t(this.type);
112
- return F[e] || (F[e] = !0, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")), e = this.props.ref, e === void 0 ? null : e;
113
- }
114
- function d(e, t, n, r, i, a) {
115
- var o = n.ref;
116
- return e = {
117
- $$typeof: g,
118
- type: e,
119
- key: t,
120
- props: n,
121
- _owner: r
122
- }, (o === void 0 ? null : o) === null ? Object.defineProperty(e, "ref", {
123
- enumerable: !1,
124
- value: null
125
- }) : Object.defineProperty(e, "ref", {
126
- enumerable: !1,
127
- get: u
128
- }), e._store = {}, Object.defineProperty(e._store, "validated", {
129
- configurable: !1,
130
- enumerable: !1,
131
- writable: !0,
132
- value: 0
133
- }), Object.defineProperty(e, "_debugInfo", {
134
- configurable: !1,
135
- enumerable: !1,
136
- writable: !0,
137
- value: null
138
- }), Object.defineProperty(e, "_debugStack", {
139
- configurable: !1,
140
- enumerable: !1,
141
- writable: !0,
142
- value: i
143
- }), Object.defineProperty(e, "_debugTask", {
144
- configurable: !1,
145
- enumerable: !1,
146
- writable: !0,
147
- value: a
148
- }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
149
- }
150
- function f(e, n, i, a, s, u) {
151
- var f = n.children;
152
- if (f !== void 0) if (a) if (M(f)) {
153
- for (a = 0; a < f.length; a++) p(f[a]);
154
- Object.freeze && Object.freeze(f);
155
- } else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
156
- else p(f);
157
- if (j.call(n, "key")) {
158
- f = t(e);
159
- var m = Object.keys(n).filter(function(e) {
160
- return e !== "key";
161
- });
162
- a = 0 < m.length ? "{key: someKey, " + m.join(": ..., ") + ": ...}" : "{key: someKey}", R[f + a] || (m = 0 < m.length ? "{" + m.join(": ..., ") + ": ...}" : "{}", console.error("A props object containing a \"key\" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />", a, f, m, f), R[f + a] = !0);
163
- }
164
- if (f = null, i !== void 0 && (r(i), f = "" + i), c(n) && (r(n.key), f = "" + n.key), "key" in n) for (var h in i = {}, n) h !== "key" && (i[h] = n[h]);
165
- else i = n;
166
- return f && l(i, typeof e == "function" ? e.displayName || e.name || "Unknown" : e), d(e, f, i, o(), s, u);
167
- }
168
- function p(e) {
169
- m(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e && e.$$typeof === D && (e._payload.status === "fulfilled" ? m(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
170
- }
171
- function m(e) {
172
- return typeof e == "object" && !!e && e.$$typeof === g;
173
- }
174
- var h = i("react"), g = Symbol.for("react.transitional.element"), _ = Symbol.for("react.portal"), v = Symbol.for("react.fragment"), y = Symbol.for("react.strict_mode"), b = Symbol.for("react.profiler"), x = Symbol.for("react.consumer"), S = Symbol.for("react.context"), C = Symbol.for("react.forward_ref"), w = Symbol.for("react.suspense"), T = Symbol.for("react.suspense_list"), E = Symbol.for("react.memo"), D = Symbol.for("react.lazy"), O = Symbol.for("react.activity"), k = Symbol.for("react.client.reference"), A = h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, j = Object.prototype.hasOwnProperty, M = Array.isArray, N = console.createTask ? console.createTask : function() {
175
- return null;
176
- };
177
- h = { react_stack_bottom_frame: function(e) {
178
- return e();
179
- } };
180
- var P, F = {}, I = h.react_stack_bottom_frame.bind(h, s)(), L = N(a(s)), R = {};
181
- e.Fragment = v, e.jsx = function(e, t, n) {
182
- var r = 1e4 > A.recentlyCreatedOwnerStacks++;
183
- return f(e, t, n, !1, r ? Error("react-stack-top-frame") : I, r ? N(a(e)) : L);
184
- }, e.jsxs = function(e, t, n) {
185
- var r = 1e4 > A.recentlyCreatedOwnerStacks++;
186
- return f(e, t, n, !0, r ? Error("react-stack-top-frame") : I, r ? N(a(e)) : L);
187
- };
188
- })();
189
- })), d = (/* @__PURE__ */ r(((e, t) => {
190
- process.env.NODE_ENV === "production" ? t.exports = l() : t.exports = u();
191
- })))(), f = ({ id: e, turbulenceBaseFrequency: t, turbulenceSeed: n, displacementScale: r }) => /* @__PURE__ */ (0, d.jsxs)("filter", {
14
+ }, u = ({ id: e, turbulenceBaseFrequency: t, turbulenceSeed: n, displacementScale: r }) => /* @__PURE__ */ a("filter", {
192
15
  id: e,
193
16
  x: "0%",
194
17
  y: "0%",
@@ -196,30 +19,30 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
196
19
  height: "100%",
197
20
  filterUnits: "objectBoundingBox",
198
21
  children: [
199
- /* @__PURE__ */ (0, d.jsx)("feTurbulence", {
22
+ /* @__PURE__ */ i("feTurbulence", {
200
23
  type: "fractalNoise",
201
24
  baseFrequency: t,
202
25
  numOctaves: 1,
203
26
  seed: n,
204
27
  result: "turbulence"
205
28
  }),
206
- /* @__PURE__ */ (0, d.jsxs)("feComponentTransfer", {
29
+ /* @__PURE__ */ a("feComponentTransfer", {
207
30
  in: "turbulence",
208
31
  result: "mapped",
209
32
  children: [
210
- /* @__PURE__ */ (0, d.jsx)("feFuncR", {
33
+ /* @__PURE__ */ i("feFuncR", {
211
34
  type: "gamma",
212
35
  amplitude: 1,
213
36
  exponent: 10,
214
37
  offset: .5
215
38
  }),
216
- /* @__PURE__ */ (0, d.jsx)("feFuncG", {
39
+ /* @__PURE__ */ i("feFuncG", {
217
40
  type: "gamma",
218
41
  amplitude: 0,
219
42
  exponent: 1,
220
43
  offset: 0
221
44
  }),
222
- /* @__PURE__ */ (0, d.jsx)("feFuncB", {
45
+ /* @__PURE__ */ i("feFuncB", {
223
46
  type: "gamma",
224
47
  amplitude: 0,
225
48
  exponent: 1,
@@ -227,25 +50,25 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
227
50
  })
228
51
  ]
229
52
  }),
230
- /* @__PURE__ */ (0, d.jsx)("feGaussianBlur", {
53
+ /* @__PURE__ */ i("feGaussianBlur", {
231
54
  in: "turbulence",
232
55
  stdDeviation: 3,
233
56
  result: "softMap"
234
57
  }),
235
- /* @__PURE__ */ (0, d.jsx)("feSpecularLighting", {
58
+ /* @__PURE__ */ i("feSpecularLighting", {
236
59
  in: "softMap",
237
60
  surfaceScale: 5,
238
61
  specularConstant: 1,
239
62
  specularExponent: 100,
240
63
  lightingColor: "white",
241
64
  result: "specLight",
242
- children: /* @__PURE__ */ (0, d.jsx)("fePointLight", {
65
+ children: /* @__PURE__ */ i("fePointLight", {
243
66
  x: -200,
244
67
  y: -200,
245
68
  z: 300
246
69
  })
247
70
  }),
248
- /* @__PURE__ */ (0, d.jsx)("feComposite", {
71
+ /* @__PURE__ */ i("feComposite", {
249
72
  in: "specLight",
250
73
  operator: "arithmetic",
251
74
  k1: 0,
@@ -254,7 +77,7 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
254
77
  k4: 0,
255
78
  result: "litImage"
256
79
  }),
257
- /* @__PURE__ */ (0, d.jsx)("feDisplacementMap", {
80
+ /* @__PURE__ */ i("feDisplacementMap", {
258
81
  in: "SourceGraphic",
259
82
  in2: "softMap",
260
83
  scale: r,
@@ -262,7 +85,7 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
262
85
  yChannelSelector: "G"
263
86
  })
264
87
  ]
265
- }), p = ({ id: e, turbulenceBaseFrequency: t, turbulenceSeed: n }) => /* @__PURE__ */ (0, d.jsxs)("filter", {
88
+ }), d = ({ id: e, turbulenceBaseFrequency: t, turbulenceSeed: n }) => /* @__PURE__ */ a("filter", {
266
89
  id: e,
267
90
  x: "-20%",
268
91
  y: "-20%",
@@ -270,77 +93,77 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
270
93
  height: "140%",
271
94
  filterUnits: "objectBoundingBox",
272
95
  children: [
273
- /* @__PURE__ */ (0, d.jsx)("feTurbulence", {
96
+ /* @__PURE__ */ i("feTurbulence", {
274
97
  type: "fractalNoise",
275
98
  baseFrequency: t,
276
99
  numOctaves: 2,
277
100
  seed: n,
278
101
  result: "turbulence"
279
102
  }),
280
- /* @__PURE__ */ (0, d.jsx)("feGaussianBlur", {
103
+ /* @__PURE__ */ i("feGaussianBlur", {
281
104
  in: "turbulence",
282
105
  stdDeviation: "2",
283
106
  result: "blur"
284
107
  }),
285
- /* @__PURE__ */ (0, d.jsx)("feColorMatrix", {
108
+ /* @__PURE__ */ i("feColorMatrix", {
286
109
  in: "blur",
287
110
  type: "matrix",
288
111
  values: "1 0 0 0 0\n 0 1 0 0 0\n 0 0 1 0 0\n 0 0 0 0.15 0",
289
112
  result: "transparency"
290
113
  }),
291
- /* @__PURE__ */ (0, d.jsx)("feBlend", {
114
+ /* @__PURE__ */ i("feBlend", {
292
115
  in: "SourceGraphic",
293
116
  in2: "transparency",
294
117
  mode: "normal"
295
118
  })
296
119
  ]
297
- }), m = "0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)", h = "0 8px 32px rgba(0,0,0,0.28)", g = "inset 0 1px 0 0 rgba(255,255,255,0.55), inset 0 -1px 1px 0 rgba(255,255,255,0.12), inset 0 0 0 1px rgba(255,255,255,0.08)", _ = (e) => Array.isArray(e) ? `${e[0]} ${e[1]}` : `${e}`, v = ({ children: e, className: n = "", backdropBlur: r = 2, tintColor: i = "rgba(255, 255, 255, .2)", displacementScale: a = 150, turbulenceBaseFrequency: o = .008, turbulenceSeed: s = 1.5, as: l = "div", style: u, glassBorder: v = !1, ...y }) => {
298
- let b = t(), { hasFullFilterSupport: x } = c(), S = _(o);
299
- return /* @__PURE__ */ (0, d.jsxs)(d.Fragment, { children: [/* @__PURE__ */ (0, d.jsx)("svg", {
120
+ }), f = "0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)", p = "0 8px 32px rgba(0,0,0,0.28)", m = "inset 0 1px 0 0 rgba(255,255,255,0.55), inset 0 -1px 1px 0 rgba(255,255,255,0.12), inset 0 0 0 1px rgba(255,255,255,0.08)", h = (e) => Array.isArray(e) ? `${e[0]} ${e[1]}` : `${e}`, g = ({ children: e, className: n = "", backdropBlur: o = 2, tintColor: s = "rgba(255, 255, 255, .2)", displacementScale: c = 150, turbulenceBaseFrequency: g = .008, turbulenceSeed: _ = 1.5, as: v = "div", style: y, glassBorder: b = !1, ...x }) => {
121
+ let S = t(), { hasFullFilterSupport: C } = l(), w = h(g);
122
+ return /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("svg", {
300
123
  style: { display: "none" },
301
- children: x ? /* @__PURE__ */ (0, d.jsx)(f, {
302
- id: b,
303
- turbulenceBaseFrequency: S,
304
- turbulenceSeed: s,
305
- displacementScale: a
306
- }) : /* @__PURE__ */ (0, d.jsx)(p, {
307
- id: b,
308
- turbulenceBaseFrequency: S,
309
- turbulenceSeed: s
124
+ children: C ? /* @__PURE__ */ i(u, {
125
+ id: S,
126
+ turbulenceBaseFrequency: w,
127
+ turbulenceSeed: _,
128
+ displacementScale: c
129
+ }) : /* @__PURE__ */ i(d, {
130
+ id: S,
131
+ turbulenceBaseFrequency: w,
132
+ turbulenceSeed: _
310
133
  })
311
- }), /* @__PURE__ */ (0, d.jsxs)(l, {
134
+ }), /* @__PURE__ */ a(v, {
312
135
  className: n,
313
136
  style: {
314
137
  position: "relative",
315
138
  overflow: "hidden",
316
- boxShadow: v ? h : m,
317
- ...u
139
+ boxShadow: b ? p : f,
140
+ ...y
318
141
  },
319
- ...y,
142
+ ...x,
320
143
  children: [
321
- /* @__PURE__ */ (0, d.jsx)("div", { style: {
144
+ /* @__PURE__ */ i("div", { style: {
322
145
  position: "absolute",
323
146
  inset: 0,
324
147
  zIndex: 0,
325
148
  overflow: "hidden",
326
149
  borderRadius: "inherit",
327
- backdropFilter: `blur(${r}px)`,
328
- WebkitBackdropFilter: `blur(${r}px)`,
329
- filter: `url(#${b})`,
150
+ backdropFilter: `blur(${o}px)`,
151
+ WebkitBackdropFilter: `blur(${o}px)`,
152
+ filter: `url(#${S})`,
330
153
  isolation: "isolate",
331
- ...!x && {
154
+ ...!C && {
332
155
  transform: "translateZ(0)",
333
156
  willChange: "transform"
334
157
  }
335
158
  } }),
336
- /* @__PURE__ */ (0, d.jsx)("div", { style: {
159
+ /* @__PURE__ */ i("div", { style: {
337
160
  position: "absolute",
338
161
  inset: 0,
339
162
  zIndex: 1,
340
163
  borderRadius: "inherit",
341
- background: i
164
+ background: s
342
165
  } }),
343
- v && /* @__PURE__ */ (0, d.jsx)("span", {
166
+ b && /* @__PURE__ */ i("span", {
344
167
  "aria-hidden": "true",
345
168
  style: {
346
169
  position: "absolute",
@@ -349,10 +172,10 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
349
172
  borderRadius: "inherit",
350
173
  pointerEvents: "none",
351
174
  background: "linear-gradient(135deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0) 38%, rgba(255,255,255,0) 62%, rgba(255,255,255,0.06) 100%)",
352
- boxShadow: g
175
+ boxShadow: m
353
176
  }
354
177
  }),
355
- /* @__PURE__ */ (0, d.jsx)("div", {
178
+ /* @__PURE__ */ i("div", {
356
179
  style: {
357
180
  position: "relative",
358
181
  zIndex: 3,
@@ -364,4 +187,4 @@ var r = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t
364
187
  })] });
365
188
  };
366
189
  //#endregion
367
- export { v as LiquidGlass, v as default };
190
+ export { g as LiquidGlass, g as default };
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "react-liquid-glass-svg",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "description": "Apple liquid glass for React — pure SVG filters and backdrop-blur. No WebGL, no canvas, no shaders.",
6
- "main": "./dist/index.js",
6
+ "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.esm.js",
8
8
  "types": "./dist/index.d.ts",
9
9
  "homepage": "https://github.com/yurkagon/react-liquid-glass-svg#readme",
@@ -18,7 +18,7 @@
18
18
  ".": {
19
19
  "types": "./dist/index.d.ts",
20
20
  "import": "./dist/index.esm.js",
21
- "require": "./dist/index.js"
21
+ "require": "./dist/index.cjs"
22
22
  },
23
23
  "./package.json": "./package.json"
24
24
  },
package/dist/index.umd.js DELETED
@@ -1,9 +0,0 @@
1
- "use client";(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react")):typeof define==`function`&&define.amd?define([`exports`,`react`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.LiquidGlass={},e.React))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),r=/iPad|iPhone|iPod/,i=/^((?!chrome|android).)*safari/i,a=()=>{if(typeof window>`u`)return!0;let e=window.navigator.userAgent;return!(r.test(e)||i.test(e))},o=()=>{let[e,n]=(0,t.useState)(!0);return(0,t.useEffect)(()=>{n(a())},[]),{hasFullFilterSupport:e}},s=n((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),c=n((e=>{process.env.NODE_ENV!==`production`&&(function(){function t(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===O?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case _:return`Fragment`;case y:return`Profiler`;case v:return`StrictMode`;case C:return`Suspense`;case w:return`SuspenseList`;case D:return`Activity`}if(typeof e==`object`)switch(typeof e.tag==`number`&&console.error(`Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.`),e.$$typeof){case g:return`Portal`;case x:return e.displayName||`Context`;case b:return(e._context.displayName||`Context`)+`.Consumer`;case S:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||``,e=e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case T:return n=e.displayName||null,n===null?t(e.type)||`Memo`:n;case E:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function n(e){return``+e}function r(e){try{n(e);var t=!1}catch{t=!0}if(t){t=console;var r=t.error,i=typeof Symbol==`function`&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||`Object`;return r.call(t,`The provided key is an unsupported type %s. This value must be coerced to a string before using it here.`,i),n(e)}}function i(e){if(e===_)return`<>`;if(typeof e==`object`&&e&&e.$$typeof===E)return`<...>`;try{var n=t(e);return n?`<`+n+`>`:`<...>`}catch{return`<...>`}}function a(){var e=k.A;return e===null?null:e.getOwner()}function o(){return Error(`react-stack-top-frame`)}function s(e){if(A.call(e,`key`)){var t=Object.getOwnPropertyDescriptor(e,`key`).get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function c(e,t){function n(){N||(N=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",t))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function l(){var e=t(this.type);return P[e]||(P[e]=!0,console.error(`Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.`)),e=this.props.ref,e===void 0?null:e}function u(e,t,n,r,i,a){var o=n.ref;return e={$$typeof:h,type:e,key:t,props:n,_owner:r},(o===void 0?null:o)===null?Object.defineProperty(e,"ref",{enumerable:!1,value:null}):Object.defineProperty(e,"ref",{enumerable:!1,get:l}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:i}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:a}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function d(e,n,i,o,l,d){var p=n.children;if(p!==void 0)if(o)if(j(p)){for(o=0;o<p.length;o++)f(p[o]);Object.freeze&&Object.freeze(p)}else console.error(`React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.`);else f(p);if(A.call(n,`key`)){p=t(e);var m=Object.keys(n).filter(function(e){return e!==`key`});o=0<m.length?`{key: someKey, `+m.join(`: ..., `)+`: ...}`:`{key: someKey}`,L[p+o]||(m=0<m.length?`{`+m.join(`: ..., `)+`: ...}`:`{}`,console.error(`A props object containing a "key" prop is being spread into JSX:
2
- let props = %s;
3
- <%s {...props} />
4
- React keys must be passed directly to JSX without using spread:
5
- let props = %s;
6
- <%s key={someKey} {...props} />`,o,p,m,p),L[p+o]=!0)}if(p=null,i!==void 0&&(r(i),p=``+i),s(n)&&(r(n.key),p=``+n.key),`key`in n)for(var h in i={},n)h!==`key`&&(i[h]=n[h]);else i=n;return p&&c(i,typeof e==`function`?e.displayName||e.name||`Unknown`:e),u(e,p,i,a(),l,d)}function f(e){p(e)?e._store&&(e._store.validated=1):typeof e==`object`&&e&&e.$$typeof===E&&(e._payload.status===`fulfilled`?p(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function p(e){return typeof e==`object`&&!!e&&e.$$typeof===h}var m=require("react"),h=Symbol.for(`react.transitional.element`),g=Symbol.for(`react.portal`),_=Symbol.for(`react.fragment`),v=Symbol.for(`react.strict_mode`),y=Symbol.for(`react.profiler`),b=Symbol.for(`react.consumer`),x=Symbol.for(`react.context`),S=Symbol.for(`react.forward_ref`),C=Symbol.for(`react.suspense`),w=Symbol.for(`react.suspense_list`),T=Symbol.for(`react.memo`),E=Symbol.for(`react.lazy`),D=Symbol.for(`react.activity`),O=Symbol.for(`react.client.reference`),k=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=Object.prototype.hasOwnProperty,j=Array.isArray,M=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(e){return e()}};var N,P={},F=m.react_stack_bottom_frame.bind(m,o)(),I=M(i(o)),L={};e.Fragment=_,e.jsx=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!1,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)},e.jsxs=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!0,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)}})()})),l=n(((e,t)=>{process.env.NODE_ENV===`production`?t.exports=s():t.exports=c()}))(),u=({id:e,turbulenceBaseFrequency:t,turbulenceSeed:n,displacementScale:r})=>(0,l.jsxs)(`filter`,{id:e,x:`0%`,y:`0%`,width:`100%`,height:`100%`,filterUnits:`objectBoundingBox`,children:[(0,l.jsx)(`feTurbulence`,{type:`fractalNoise`,baseFrequency:t,numOctaves:1,seed:n,result:`turbulence`}),(0,l.jsxs)(`feComponentTransfer`,{in:`turbulence`,result:`mapped`,children:[(0,l.jsx)(`feFuncR`,{type:`gamma`,amplitude:1,exponent:10,offset:.5}),(0,l.jsx)(`feFuncG`,{type:`gamma`,amplitude:0,exponent:1,offset:0}),(0,l.jsx)(`feFuncB`,{type:`gamma`,amplitude:0,exponent:1,offset:.5})]}),(0,l.jsx)(`feGaussianBlur`,{in:`turbulence`,stdDeviation:3,result:`softMap`}),(0,l.jsx)(`feSpecularLighting`,{in:`softMap`,surfaceScale:5,specularConstant:1,specularExponent:100,lightingColor:`white`,result:`specLight`,children:(0,l.jsx)(`fePointLight`,{x:-200,y:-200,z:300})}),(0,l.jsx)(`feComposite`,{in:`specLight`,operator:`arithmetic`,k1:0,k2:1,k3:1,k4:0,result:`litImage`}),(0,l.jsx)(`feDisplacementMap`,{in:`SourceGraphic`,in2:`softMap`,scale:r,xChannelSelector:`R`,yChannelSelector:`G`})]}),d=({id:e,turbulenceBaseFrequency:t,turbulenceSeed:n})=>(0,l.jsxs)(`filter`,{id:e,x:`-20%`,y:`-20%`,width:`140%`,height:`140%`,filterUnits:`objectBoundingBox`,children:[(0,l.jsx)(`feTurbulence`,{type:`fractalNoise`,baseFrequency:t,numOctaves:2,seed:n,result:`turbulence`}),(0,l.jsx)(`feGaussianBlur`,{in:`turbulence`,stdDeviation:`2`,result:`blur`}),(0,l.jsx)(`feColorMatrix`,{in:`blur`,type:`matrix`,values:`1 0 0 0 0
7
- 0 1 0 0 0
8
- 0 0 1 0 0
9
- 0 0 0 0.15 0`,result:`transparency`}),(0,l.jsx)(`feBlend`,{in:`SourceGraphic`,in2:`transparency`,mode:`normal`})]}),f=`0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)`,p=`0 8px 32px rgba(0,0,0,0.28)`,m=`inset 0 1px 0 0 rgba(255,255,255,0.55), inset 0 -1px 1px 0 rgba(255,255,255,0.12), inset 0 0 0 1px rgba(255,255,255,0.08)`,h=e=>Array.isArray(e)?`${e[0]} ${e[1]}`:`${e}`,g=({children:e,className:n=``,backdropBlur:r=2,tintColor:i=`rgba(255, 255, 255, .2)`,displacementScale:a=150,turbulenceBaseFrequency:s=.008,turbulenceSeed:c=1.5,as:g=`div`,style:_,glassBorder:v=!1,...y})=>{let b=(0,t.useId)(),{hasFullFilterSupport:x}=o(),S=h(s);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(`svg`,{style:{display:`none`},children:x?(0,l.jsx)(u,{id:b,turbulenceBaseFrequency:S,turbulenceSeed:c,displacementScale:a}):(0,l.jsx)(d,{id:b,turbulenceBaseFrequency:S,turbulenceSeed:c})}),(0,l.jsxs)(g,{className:n,style:{position:`relative`,overflow:`hidden`,boxShadow:v?p:f,..._},...y,children:[(0,l.jsx)(`div`,{style:{position:`absolute`,inset:0,zIndex:0,overflow:`hidden`,borderRadius:`inherit`,backdropFilter:`blur(${r}px)`,WebkitBackdropFilter:`blur(${r}px)`,filter:`url(#${b})`,isolation:`isolate`,...!x&&{transform:`translateZ(0)`,willChange:`transform`}}}),(0,l.jsx)(`div`,{style:{position:`absolute`,inset:0,zIndex:1,borderRadius:`inherit`,background:i}}),v&&(0,l.jsx)(`span`,{"aria-hidden":`true`,style:{position:`absolute`,inset:0,zIndex:2,borderRadius:`inherit`,pointerEvents:`none`,background:`linear-gradient(135deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0) 38%, rgba(255,255,255,0) 62%, rgba(255,255,255,0.06) 100%)`,boxShadow:m}}),(0,l.jsx)(`div`,{style:{position:`relative`,zIndex:3,borderRadius:`inherit`},children:e})]})]})};e.LiquidGlass=g,e.default=g});