@creativoma/liquid-glass 1.0.2 → 1.1.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/CHANGELOG.md +47 -0
- package/README.md +29 -15
- package/dist/components/LiquidGlass.d.ts.map +1 -1
- package/dist/hooks/useBrowserDetection.d.ts +8 -0
- package/dist/hooks/useBrowserDetection.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +244 -189
- package/dist/index.umd.js +5 -2
- package/dist/liquid-glass.css +1 -1
- package/package.json +23 -23
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,53 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.1.0] - 2026-02-14
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Exported `useBrowserDetection` hook for public use, allowing consumers to detect Safari/iOS browsers
|
|
15
|
+
- Performance optimizations: RegExp patterns hoisted to module level in browser detection
|
|
16
|
+
- Claude Code development files to `.gitignore` (`.claude/`, `.agents/`)
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Updated package.json exports field: moved `types` condition first for better TypeScript compatibility
|
|
21
|
+
- Updated package.json paths to use relative `./` prefix for improved module resolution
|
|
22
|
+
- Updated major dependencies:
|
|
23
|
+
- `eslint-plugin-react-hooks` `^5.2.0` → `^7.0.1`
|
|
24
|
+
- `@vitejs/plugin-react` `^4.7.0` → `^5.1.4`
|
|
25
|
+
- Updated minor dependencies:
|
|
26
|
+
- `@types/node` `^20.19.25` → `^25.2.3`
|
|
27
|
+
- `@types/react` `^19.2.7` → `^19.2.14`
|
|
28
|
+
- `typescript-eslint` `^8.48.1` → `^8.55.0`
|
|
29
|
+
- React `^19.2.1` → `^19.2.4`
|
|
30
|
+
- Vite `^7.2.6` → `^7.3.1`
|
|
31
|
+
- And other dev dependencies to latest versions
|
|
32
|
+
|
|
33
|
+
### Documentation
|
|
34
|
+
|
|
35
|
+
- Improved README.md with professional formatting
|
|
36
|
+
- Removed emoji decorators from section headers
|
|
37
|
+
- Added comprehensive feature list and additional badges
|
|
38
|
+
- Enhanced API reference structure
|
|
39
|
+
|
|
40
|
+
## [1.0.3] - 2025-12-06
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- Fixed liquid glass effect not working on iOS Safari and Safari browsers
|
|
45
|
+
- Implemented browser detection to identify Safari/iOS devices
|
|
46
|
+
- Added simplified SVG filter fallback for Safari/iOS that uses only well-supported primitives (`feTurbulence`, `feGaussianBlur`, `feColorMatrix`, `feBlend`)
|
|
47
|
+
- Maintained full-featured filter with `feDisplacementMap` for non-Safari browsers
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
- Browser detection function with SSR support using `useEffect`
|
|
52
|
+
- Hardware acceleration hints for Safari/iOS (`transform: translateZ(0)`, `willChange: transform`)
|
|
53
|
+
- Dual filter system that automatically selects appropriate filter based on browser capabilities
|
|
54
|
+
|
|
8
55
|
## [1.0.2] - 2025-12-06
|
|
9
56
|
|
|
10
57
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
# @creativoma/liquid-glass
|
|
2
2
|
|
|
3
|
-
](https://www.npmjs.com/package/@creativoma/liquid-glass)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
[](https://reactjs.org/)
|
|
4
7
|
|
|
5
|
-
A modern React component
|
|
8
|
+
A modern React component library featuring liquid frosted glass effect using TailwindCSS and SVG filters. Create elegant glassmorphism interfaces with advanced visual effects.
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
## Features
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
- Liquid frosted glass effect with customizable displacement mapping
|
|
13
|
+
- Full TypeScript support with comprehensive type definitions
|
|
14
|
+
- TailwindCSS integration for seamless styling
|
|
15
|
+
- Polymorphic component API (render as any HTML element)
|
|
16
|
+
- Cross-browser compatible with Safari/iOS fallback support
|
|
17
|
+
- Customizable blur, tint, and turbulence parameters
|
|
18
|
+
- Zero dependencies (peer dependencies only)
|
|
19
|
+
- ESM and UMD formats for maximum compatibility
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
10
22
|
|
|
11
23
|
```bash
|
|
12
24
|
npm install @creativoma/liquid-glass
|
|
@@ -20,7 +32,7 @@ yarn add @creativoma/liquid-glass
|
|
|
20
32
|
pnpm add @creativoma/liquid-glass
|
|
21
33
|
```
|
|
22
34
|
|
|
23
|
-
##
|
|
35
|
+
## Quick Start
|
|
24
36
|
|
|
25
37
|
```jsx
|
|
26
38
|
import { LiquidGlass } from '@creativoma/liquid-glass'
|
|
@@ -37,7 +49,9 @@ function App() {
|
|
|
37
49
|
}
|
|
38
50
|
```
|
|
39
51
|
|
|
40
|
-
##
|
|
52
|
+
## API Reference
|
|
53
|
+
|
|
54
|
+
### Props
|
|
41
55
|
|
|
42
56
|
| Prop | Type | Default | Description |
|
|
43
57
|
| ------------------------- | ----------------- | --------------------------- | ----------------------------------------------------- |
|
|
@@ -51,7 +65,7 @@ function App() {
|
|
|
51
65
|
| `as` | `ElementType` | `'div'` | HTML component to render (div, button, section, etc.) |
|
|
52
66
|
| `style` | `CSSProperties` | - | Additional inline styles |
|
|
53
67
|
|
|
54
|
-
##
|
|
68
|
+
## Usage Examples
|
|
55
69
|
|
|
56
70
|
### Card with glass effect
|
|
57
71
|
|
|
@@ -137,7 +151,7 @@ function App() {
|
|
|
137
151
|
</LiquidGlass>
|
|
138
152
|
```
|
|
139
153
|
|
|
140
|
-
##
|
|
154
|
+
## Development
|
|
141
155
|
|
|
142
156
|
```bash
|
|
143
157
|
# Clone the repository
|
|
@@ -167,7 +181,7 @@ pnpm run preview
|
|
|
167
181
|
npm publish
|
|
168
182
|
```
|
|
169
183
|
|
|
170
|
-
##
|
|
184
|
+
## Project Structure
|
|
171
185
|
|
|
172
186
|
```
|
|
173
187
|
liquid-glass/
|
|
@@ -189,13 +203,13 @@ liquid-glass/
|
|
|
189
203
|
└── tailwind.config.js
|
|
190
204
|
```
|
|
191
205
|
|
|
192
|
-
##
|
|
206
|
+
## Requirements
|
|
193
207
|
|
|
194
208
|
- React >= 18.0.0
|
|
195
209
|
- React DOM >= 18.0.0
|
|
196
210
|
- TailwindCSS (component uses Tailwind classes)
|
|
197
211
|
|
|
198
|
-
##
|
|
212
|
+
## Technologies
|
|
199
213
|
|
|
200
214
|
- **React** - Component library
|
|
201
215
|
- **TypeScript** - Static typing
|
|
@@ -203,7 +217,7 @@ liquid-glass/
|
|
|
203
217
|
- **Tailwind CSS** - CSS framework for glassmorphism effect
|
|
204
218
|
- **SVG Filters** - Advanced visual effects with feTurbulence and feDisplacementMap
|
|
205
219
|
|
|
206
|
-
##
|
|
220
|
+
## Package Formats
|
|
207
221
|
|
|
208
222
|
This package includes multiple formats for maximum compatibility:
|
|
209
223
|
|
|
@@ -211,7 +225,7 @@ This package includes multiple formats for maximum compatibility:
|
|
|
211
225
|
- **UMD** (`dist/index.umd.js`) - For universal compatibility
|
|
212
226
|
- **TypeScript** (`dist/index.d.ts`) - Type definitions
|
|
213
227
|
|
|
214
|
-
##
|
|
228
|
+
## Contributing
|
|
215
229
|
|
|
216
230
|
Contributions are welcome! Please:
|
|
217
231
|
|
|
@@ -221,10 +235,10 @@ Contributions are welcome! Please:
|
|
|
221
235
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
222
236
|
5. Open a Pull Request
|
|
223
237
|
|
|
224
|
-
##
|
|
238
|
+
## License
|
|
225
239
|
|
|
226
240
|
MIT © [creativoma](https://github.com/creativoma)
|
|
227
241
|
|
|
228
|
-
##
|
|
242
|
+
## Changelog
|
|
229
243
|
|
|
230
244
|
See [CHANGELOG.md](./CHANGELOG.md) for a detailed list of changes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiquidGlass.d.ts","sourceRoot":"","sources":["../../src/components/LiquidGlass.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAS,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"LiquidGlass.d.ts","sourceRoot":"","sources":["../../src/components/LiquidGlass.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAS,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG/C,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA6IrC,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom hook for detecting browser capabilities
|
|
3
|
+
* Returns whether a simplified filter should be used for Safari/iOS
|
|
4
|
+
*/
|
|
5
|
+
export declare const useBrowserDetection: () => {
|
|
6
|
+
useSimplifiedFilter: boolean;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=useBrowserDetection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBrowserDetection.d.ts","sourceRoot":"","sources":["../../src/hooks/useBrowserDetection.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;CAM/B,CAAA"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import ee, {
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
function
|
|
5
|
-
if (
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
function u(
|
|
1
|
+
import ee, { useState as re, useId as te } from "react";
|
|
2
|
+
var h = { exports: {} }, v = {};
|
|
3
|
+
var D;
|
|
4
|
+
function ne() {
|
|
5
|
+
if (D) return v;
|
|
6
|
+
D = 1;
|
|
7
|
+
var s = /* @__PURE__ */ Symbol.for("react.transitional.element"), c = /* @__PURE__ */ Symbol.for("react.fragment");
|
|
8
|
+
function u(d, l, i) {
|
|
9
9
|
var f = null;
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
for (var
|
|
13
|
-
|
|
14
|
-
} else
|
|
15
|
-
return
|
|
16
|
-
$$typeof:
|
|
17
|
-
type:
|
|
10
|
+
if (i !== void 0 && (f = "" + i), l.key !== void 0 && (f = "" + l.key), "key" in l) {
|
|
11
|
+
i = {};
|
|
12
|
+
for (var m in l)
|
|
13
|
+
m !== "key" && (i[m] = l[m]);
|
|
14
|
+
} else i = l;
|
|
15
|
+
return l = i.ref, {
|
|
16
|
+
$$typeof: s,
|
|
17
|
+
type: d,
|
|
18
18
|
key: f,
|
|
19
|
-
ref:
|
|
20
|
-
props:
|
|
19
|
+
ref: l !== void 0 ? l : null,
|
|
20
|
+
props: i
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
return
|
|
23
|
+
return v.Fragment = c, v.jsx = u, v.jsxs = u, v;
|
|
24
24
|
}
|
|
25
25
|
var _ = {};
|
|
26
|
-
var
|
|
27
|
-
function
|
|
28
|
-
return
|
|
29
|
-
function
|
|
26
|
+
var L;
|
|
27
|
+
function ae() {
|
|
28
|
+
return L || (L = 1, process.env.NODE_ENV !== "production" && (function() {
|
|
29
|
+
function s(e) {
|
|
30
30
|
if (e == null) return null;
|
|
31
31
|
if (typeof e == "function")
|
|
32
32
|
return e.$$typeof === Z ? null : e.displayName || e.name || null;
|
|
33
33
|
if (typeof e == "string") return e;
|
|
34
34
|
switch (e) {
|
|
35
|
-
case
|
|
35
|
+
case y:
|
|
36
36
|
return "Fragment";
|
|
37
|
-
case
|
|
37
|
+
case U:
|
|
38
38
|
return "Profiler";
|
|
39
|
-
case
|
|
39
|
+
case W:
|
|
40
40
|
return "StrictMode";
|
|
41
|
-
case
|
|
41
|
+
case J:
|
|
42
42
|
return "Suspense";
|
|
43
|
-
case
|
|
43
|
+
case V:
|
|
44
44
|
return "SuspenseList";
|
|
45
45
|
case H:
|
|
46
46
|
return "Activity";
|
|
@@ -49,62 +49,62 @@ function ne() {
|
|
|
49
49
|
switch (typeof e.tag == "number" && console.error(
|
|
50
50
|
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
|
|
51
51
|
), e.$$typeof) {
|
|
52
|
-
case
|
|
52
|
+
case G:
|
|
53
53
|
return "Portal";
|
|
54
|
-
case
|
|
54
|
+
case z:
|
|
55
55
|
return e.displayName || "Context";
|
|
56
|
-
case
|
|
56
|
+
case q:
|
|
57
57
|
return (e._context.displayName || "Context") + ".Consumer";
|
|
58
|
-
case
|
|
58
|
+
case B:
|
|
59
59
|
var r = e.render;
|
|
60
60
|
return e = e.displayName, e || (e = r.displayName || r.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
|
|
61
61
|
case X:
|
|
62
|
-
return r = e.displayName || null, r !== null ? r :
|
|
63
|
-
case
|
|
62
|
+
return r = e.displayName || null, r !== null ? r : s(e.type) || "Memo";
|
|
63
|
+
case k:
|
|
64
64
|
r = e._payload, e = e._init;
|
|
65
65
|
try {
|
|
66
|
-
return
|
|
66
|
+
return s(e(r));
|
|
67
67
|
} catch {
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
72
|
-
function
|
|
72
|
+
function c(e) {
|
|
73
73
|
return "" + e;
|
|
74
74
|
}
|
|
75
75
|
function u(e) {
|
|
76
76
|
try {
|
|
77
|
-
|
|
77
|
+
c(e);
|
|
78
78
|
var r = !1;
|
|
79
79
|
} catch {
|
|
80
80
|
r = !0;
|
|
81
81
|
}
|
|
82
82
|
if (r) {
|
|
83
83
|
r = console;
|
|
84
|
-
var
|
|
85
|
-
return
|
|
84
|
+
var n = r.error, a = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
|
|
85
|
+
return n.call(
|
|
86
86
|
r,
|
|
87
87
|
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
|
88
|
-
|
|
89
|
-
),
|
|
88
|
+
a
|
|
89
|
+
), c(e);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
function
|
|
93
|
-
if (e ===
|
|
94
|
-
if (typeof e == "object" && e !== null && e.$$typeof ===
|
|
92
|
+
function d(e) {
|
|
93
|
+
if (e === y) return "<>";
|
|
94
|
+
if (typeof e == "object" && e !== null && e.$$typeof === k)
|
|
95
95
|
return "<...>";
|
|
96
96
|
try {
|
|
97
|
-
var r =
|
|
97
|
+
var r = s(e);
|
|
98
98
|
return r ? "<" + r + ">" : "<...>";
|
|
99
99
|
} catch {
|
|
100
100
|
return "<...>";
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
-
function
|
|
104
|
-
var e =
|
|
103
|
+
function l() {
|
|
104
|
+
var e = S.A;
|
|
105
105
|
return e === null ? null : e.getOwner();
|
|
106
106
|
}
|
|
107
|
-
function
|
|
107
|
+
function i() {
|
|
108
108
|
return Error("react-stack-top-frame");
|
|
109
109
|
}
|
|
110
110
|
function f(e) {
|
|
@@ -114,33 +114,33 @@ function ne() {
|
|
|
114
114
|
}
|
|
115
115
|
return e.key !== void 0;
|
|
116
116
|
}
|
|
117
|
-
function
|
|
118
|
-
function
|
|
117
|
+
function m(e, r) {
|
|
118
|
+
function n() {
|
|
119
119
|
C || (C = !0, console.error(
|
|
120
120
|
"%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)",
|
|
121
121
|
r
|
|
122
122
|
));
|
|
123
123
|
}
|
|
124
|
-
|
|
125
|
-
get:
|
|
124
|
+
n.isReactWarning = !0, Object.defineProperty(e, "key", {
|
|
125
|
+
get: n,
|
|
126
126
|
configurable: !0
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
function T() {
|
|
130
|
-
var e =
|
|
130
|
+
var e = s(this.type);
|
|
131
131
|
return F[e] || (F[e] = !0, console.error(
|
|
132
132
|
"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."
|
|
133
133
|
)), e = this.props.ref, e !== void 0 ? e : null;
|
|
134
134
|
}
|
|
135
|
-
function g(e, r,
|
|
136
|
-
var
|
|
135
|
+
function g(e, r, n, a, R, O) {
|
|
136
|
+
var o = n.ref;
|
|
137
137
|
return e = {
|
|
138
138
|
$$typeof: P,
|
|
139
139
|
type: e,
|
|
140
140
|
key: r,
|
|
141
|
-
props:
|
|
142
|
-
_owner:
|
|
143
|
-
}, (
|
|
141
|
+
props: n,
|
|
142
|
+
_owner: a
|
|
143
|
+
}, (o !== void 0 ? o : null) !== null ? Object.defineProperty(e, "ref", {
|
|
144
144
|
enumerable: !1,
|
|
145
145
|
get: T
|
|
146
146
|
}) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
|
|
@@ -165,214 +165,269 @@ function ne() {
|
|
|
165
165
|
value: O
|
|
166
166
|
}), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
|
|
167
167
|
}
|
|
168
|
-
function
|
|
169
|
-
var
|
|
170
|
-
if (
|
|
171
|
-
if (
|
|
172
|
-
if (Q(
|
|
173
|
-
for (
|
|
174
|
-
|
|
175
|
-
Object.freeze && Object.freeze(
|
|
168
|
+
function j(e, r, n, a, R, O) {
|
|
169
|
+
var o = r.children;
|
|
170
|
+
if (o !== void 0)
|
|
171
|
+
if (a)
|
|
172
|
+
if (Q(o)) {
|
|
173
|
+
for (a = 0; a < o.length; a++)
|
|
174
|
+
p(o[a]);
|
|
175
|
+
Object.freeze && Object.freeze(o);
|
|
176
176
|
} else
|
|
177
177
|
console.error(
|
|
178
178
|
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
|
179
179
|
);
|
|
180
|
-
else
|
|
180
|
+
else p(o);
|
|
181
181
|
if (N.call(r, "key")) {
|
|
182
|
-
|
|
183
|
-
var
|
|
182
|
+
o = s(e);
|
|
183
|
+
var b = Object.keys(r).filter(function(K) {
|
|
184
184
|
return K !== "key";
|
|
185
185
|
});
|
|
186
|
-
|
|
186
|
+
a = 0 < b.length ? "{key: someKey, " + b.join(": ..., ") + ": ...}" : "{key: someKey}", Y[o + a] || (b = 0 < b.length ? "{" + b.join(": ..., ") + ": ...}" : "{}", console.error(
|
|
187
187
|
`A props object containing a "key" prop is being spread into JSX:
|
|
188
188
|
let props = %s;
|
|
189
189
|
<%s {...props} />
|
|
190
190
|
React keys must be passed directly to JSX without using spread:
|
|
191
191
|
let props = %s;
|
|
192
192
|
<%s key={someKey} {...props} />`,
|
|
193
|
-
n,
|
|
194
193
|
a,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
194
|
+
o,
|
|
195
|
+
b,
|
|
196
|
+
o
|
|
197
|
+
), Y[o + a] = !0);
|
|
198
198
|
}
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
for (var
|
|
202
|
-
|
|
203
|
-
} else
|
|
204
|
-
return
|
|
205
|
-
|
|
199
|
+
if (o = null, n !== void 0 && (u(n), o = "" + n), f(r) && (u(r.key), o = "" + r.key), "key" in r) {
|
|
200
|
+
n = {};
|
|
201
|
+
for (var A in r)
|
|
202
|
+
A !== "key" && (n[A] = r[A]);
|
|
203
|
+
} else n = r;
|
|
204
|
+
return o && m(
|
|
205
|
+
n,
|
|
206
206
|
typeof e == "function" ? e.displayName || e.name || "Unknown" : e
|
|
207
207
|
), g(
|
|
208
208
|
e,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
209
|
+
o,
|
|
210
|
+
n,
|
|
211
|
+
l(),
|
|
212
212
|
R,
|
|
213
213
|
O
|
|
214
214
|
);
|
|
215
215
|
}
|
|
216
|
-
function
|
|
217
|
-
|
|
216
|
+
function p(e) {
|
|
217
|
+
E(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === k && (e._payload.status === "fulfilled" ? E(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
|
|
218
218
|
}
|
|
219
|
-
function
|
|
219
|
+
function E(e) {
|
|
220
220
|
return typeof e == "object" && e !== null && e.$$typeof === P;
|
|
221
221
|
}
|
|
222
|
-
var
|
|
222
|
+
var x = ee, P = /* @__PURE__ */ Symbol.for("react.transitional.element"), G = /* @__PURE__ */ Symbol.for("react.portal"), y = /* @__PURE__ */ Symbol.for("react.fragment"), W = /* @__PURE__ */ Symbol.for("react.strict_mode"), U = /* @__PURE__ */ Symbol.for("react.profiler"), q = /* @__PURE__ */ Symbol.for("react.consumer"), z = /* @__PURE__ */ Symbol.for("react.context"), B = /* @__PURE__ */ Symbol.for("react.forward_ref"), J = /* @__PURE__ */ Symbol.for("react.suspense"), V = /* @__PURE__ */ Symbol.for("react.suspense_list"), X = /* @__PURE__ */ Symbol.for("react.memo"), k = /* @__PURE__ */ Symbol.for("react.lazy"), H = /* @__PURE__ */ Symbol.for("react.activity"), Z = /* @__PURE__ */ Symbol.for("react.client.reference"), S = x.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, N = Object.prototype.hasOwnProperty, Q = Array.isArray, w = console.createTask ? console.createTask : function() {
|
|
223
223
|
return null;
|
|
224
224
|
};
|
|
225
|
-
|
|
225
|
+
x = {
|
|
226
226
|
react_stack_bottom_frame: function(e) {
|
|
227
227
|
return e();
|
|
228
228
|
}
|
|
229
229
|
};
|
|
230
|
-
var C, F = {},
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
)(),
|
|
234
|
-
_.Fragment =
|
|
235
|
-
var
|
|
236
|
-
return
|
|
230
|
+
var C, F = {}, I = x.react_stack_bottom_frame.bind(
|
|
231
|
+
x,
|
|
232
|
+
i
|
|
233
|
+
)(), $ = w(d(i)), Y = {};
|
|
234
|
+
_.Fragment = y, _.jsx = function(e, r, n) {
|
|
235
|
+
var a = 1e4 > S.recentlyCreatedOwnerStacks++;
|
|
236
|
+
return j(
|
|
237
237
|
e,
|
|
238
238
|
r,
|
|
239
|
-
|
|
239
|
+
n,
|
|
240
240
|
!1,
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
a ? Error("react-stack-top-frame") : I,
|
|
242
|
+
a ? w(d(e)) : $
|
|
243
243
|
);
|
|
244
|
-
}, _.jsxs = function(e, r,
|
|
245
|
-
var
|
|
246
|
-
return
|
|
244
|
+
}, _.jsxs = function(e, r, n) {
|
|
245
|
+
var a = 1e4 > S.recentlyCreatedOwnerStacks++;
|
|
246
|
+
return j(
|
|
247
247
|
e,
|
|
248
248
|
r,
|
|
249
|
-
|
|
249
|
+
n,
|
|
250
250
|
!0,
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
a ? Error("react-stack-top-frame") : I,
|
|
252
|
+
a ? w(d(e)) : $
|
|
253
253
|
);
|
|
254
254
|
};
|
|
255
255
|
})()), _;
|
|
256
256
|
}
|
|
257
257
|
var M;
|
|
258
|
-
function
|
|
259
|
-
return M || (M = 1, process.env.NODE_ENV === "production" ?
|
|
258
|
+
function oe() {
|
|
259
|
+
return M || (M = 1, process.env.NODE_ENV === "production" ? h.exports = ne() : h.exports = ae()), h.exports;
|
|
260
260
|
}
|
|
261
|
-
var
|
|
262
|
-
const se = ({
|
|
263
|
-
|
|
264
|
-
|
|
261
|
+
var t = oe();
|
|
262
|
+
const se = /iPad|iPhone|iPod/, le = /^((?!chrome|android).)*safari/i, ie = () => {
|
|
263
|
+
if (typeof window > "u") return !1;
|
|
264
|
+
const s = window.navigator.userAgent, c = se.test(s), u = le.test(s);
|
|
265
|
+
return c || u;
|
|
266
|
+
}, ue = () => {
|
|
267
|
+
const [s] = re(() => ie());
|
|
268
|
+
return { useSimplifiedFilter: s };
|
|
269
|
+
}, fe = ({
|
|
270
|
+
children: s,
|
|
271
|
+
className: c = "",
|
|
265
272
|
backdropBlur: u = 2,
|
|
266
|
-
tintColor:
|
|
267
|
-
displacementScale:
|
|
268
|
-
turbulenceBaseFrequency:
|
|
273
|
+
tintColor: d = "rgba(255, 255, 255, .2)",
|
|
274
|
+
displacementScale: l = 150,
|
|
275
|
+
turbulenceBaseFrequency: i = "0.008 0.008",
|
|
269
276
|
turbulenceSeed: f = 1.5,
|
|
270
|
-
as:
|
|
277
|
+
as: m = "div",
|
|
271
278
|
style: T,
|
|
272
279
|
...g
|
|
273
280
|
}) => {
|
|
274
|
-
const
|
|
275
|
-
return /* @__PURE__ */
|
|
276
|
-
/* @__PURE__ */
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
/* @__PURE__ */
|
|
299
|
-
/* @__PURE__ */
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
281
|
+
const p = `liquid-glass-${te().replace(/:/g, "-")}`, { useSimplifiedFilter: E } = ue();
|
|
282
|
+
return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
|
|
283
|
+
/* @__PURE__ */ t.jsx("svg", { style: { display: "none" }, suppressHydrationWarning: !0, children: E ? (
|
|
284
|
+
// Simplified filter for Safari/iOS - uses only well-supported primitives
|
|
285
|
+
/* @__PURE__ */ t.jsxs(
|
|
286
|
+
"filter",
|
|
287
|
+
{
|
|
288
|
+
id: p,
|
|
289
|
+
x: "-20%",
|
|
290
|
+
y: "-20%",
|
|
291
|
+
width: "140%",
|
|
292
|
+
height: "140%",
|
|
293
|
+
filterUnits: "objectBoundingBox",
|
|
294
|
+
children: [
|
|
295
|
+
/* @__PURE__ */ t.jsx(
|
|
296
|
+
"feTurbulence",
|
|
297
|
+
{
|
|
298
|
+
type: "fractalNoise",
|
|
299
|
+
baseFrequency: i,
|
|
300
|
+
numOctaves: 2,
|
|
301
|
+
seed: f,
|
|
302
|
+
result: "turbulence"
|
|
303
|
+
}
|
|
304
|
+
),
|
|
305
|
+
/* @__PURE__ */ t.jsx("feGaussianBlur", { in: "turbulence", stdDeviation: "2", result: "blur" }),
|
|
306
|
+
/* @__PURE__ */ t.jsx(
|
|
307
|
+
"feColorMatrix",
|
|
308
|
+
{
|
|
309
|
+
in: "blur",
|
|
310
|
+
type: "matrix",
|
|
311
|
+
values: `1 0 0 0 0
|
|
312
|
+
0 1 0 0 0
|
|
313
|
+
0 0 1 0 0
|
|
314
|
+
0 0 0 0.15 0`,
|
|
315
|
+
result: "transparency"
|
|
316
|
+
}
|
|
317
|
+
),
|
|
318
|
+
/* @__PURE__ */ t.jsx("feBlend", { in: "SourceGraphic", in2: "transparency", mode: "normal" })
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
)
|
|
322
|
+
) : (
|
|
323
|
+
// Full-featured filter for non-Safari browsers
|
|
324
|
+
/* @__PURE__ */ t.jsxs(
|
|
325
|
+
"filter",
|
|
326
|
+
{
|
|
327
|
+
id: p,
|
|
328
|
+
x: "0%",
|
|
329
|
+
y: "0%",
|
|
330
|
+
width: "100%",
|
|
331
|
+
height: "100%",
|
|
332
|
+
filterUnits: "objectBoundingBox",
|
|
333
|
+
children: [
|
|
334
|
+
/* @__PURE__ */ t.jsx(
|
|
335
|
+
"feTurbulence",
|
|
336
|
+
{
|
|
337
|
+
type: "fractalNoise",
|
|
338
|
+
baseFrequency: i,
|
|
339
|
+
numOctaves: 1,
|
|
340
|
+
seed: f,
|
|
341
|
+
result: "turbulence"
|
|
342
|
+
}
|
|
343
|
+
),
|
|
344
|
+
/* @__PURE__ */ t.jsxs("feComponentTransfer", { in: "turbulence", result: "mapped", children: [
|
|
345
|
+
/* @__PURE__ */ t.jsx("feFuncR", { type: "gamma", amplitude: 1, exponent: 10, offset: 0.5 }),
|
|
346
|
+
/* @__PURE__ */ t.jsx("feFuncG", { type: "gamma", amplitude: 0, exponent: 1, offset: 0 }),
|
|
347
|
+
/* @__PURE__ */ t.jsx("feFuncB", { type: "gamma", amplitude: 0, exponent: 1, offset: 0.5 })
|
|
348
|
+
] }),
|
|
349
|
+
/* @__PURE__ */ t.jsx("feGaussianBlur", { in: "turbulence", stdDeviation: 3, result: "softMap" }),
|
|
350
|
+
/* @__PURE__ */ t.jsx(
|
|
351
|
+
"feSpecularLighting",
|
|
352
|
+
{
|
|
353
|
+
in: "softMap",
|
|
354
|
+
surfaceScale: 5,
|
|
355
|
+
specularConstant: 1,
|
|
356
|
+
specularExponent: 100,
|
|
357
|
+
lightingColor: "white",
|
|
358
|
+
result: "specLight",
|
|
359
|
+
children: /* @__PURE__ */ t.jsx("fePointLight", { x: -200, y: -200, z: 300 })
|
|
360
|
+
}
|
|
361
|
+
),
|
|
362
|
+
/* @__PURE__ */ t.jsx(
|
|
363
|
+
"feComposite",
|
|
364
|
+
{
|
|
365
|
+
in: "specLight",
|
|
366
|
+
operator: "arithmetic",
|
|
367
|
+
k1: 0,
|
|
368
|
+
k2: 1,
|
|
369
|
+
k3: 1,
|
|
370
|
+
k4: 0,
|
|
371
|
+
result: "litImage"
|
|
372
|
+
}
|
|
373
|
+
),
|
|
374
|
+
/* @__PURE__ */ t.jsx(
|
|
375
|
+
"feDisplacementMap",
|
|
376
|
+
{
|
|
377
|
+
in: "SourceGraphic",
|
|
378
|
+
in2: "softMap",
|
|
379
|
+
scale: l,
|
|
380
|
+
xChannelSelector: "R",
|
|
381
|
+
yChannelSelector: "G"
|
|
382
|
+
}
|
|
383
|
+
)
|
|
384
|
+
]
|
|
385
|
+
}
|
|
386
|
+
)
|
|
338
387
|
) }),
|
|
339
|
-
/* @__PURE__ */
|
|
340
|
-
|
|
388
|
+
/* @__PURE__ */ t.jsxs(
|
|
389
|
+
m,
|
|
341
390
|
{
|
|
342
|
-
className: `relative overflow-hidden ${
|
|
391
|
+
className: `relative overflow-hidden ${c}`,
|
|
343
392
|
style: {
|
|
344
393
|
boxShadow: "0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)",
|
|
345
394
|
...T
|
|
346
395
|
},
|
|
347
396
|
...g,
|
|
348
397
|
children: [
|
|
349
|
-
/* @__PURE__ */
|
|
398
|
+
/* @__PURE__ */ t.jsx(
|
|
350
399
|
"div",
|
|
351
400
|
{
|
|
352
401
|
className: "absolute inset-0 z-0 overflow-hidden",
|
|
353
402
|
style: {
|
|
354
403
|
backdropFilter: `blur(${u}px)`,
|
|
355
404
|
WebkitBackdropFilter: `blur(${u}px)`,
|
|
356
|
-
filter: `url(#${
|
|
357
|
-
isolation: "isolate"
|
|
405
|
+
filter: `url(#${p})`,
|
|
406
|
+
isolation: "isolate",
|
|
407
|
+
...E && {
|
|
408
|
+
// Additional CSS-based effects for Safari/iOS to enhance the liquid glass appearance
|
|
409
|
+
transform: "translateZ(0)",
|
|
410
|
+
willChange: "transform"
|
|
411
|
+
}
|
|
358
412
|
}
|
|
359
413
|
}
|
|
360
414
|
),
|
|
361
|
-
/* @__PURE__ */
|
|
415
|
+
/* @__PURE__ */ t.jsx(
|
|
362
416
|
"div",
|
|
363
417
|
{
|
|
364
418
|
className: "absolute inset-0 z-[1]",
|
|
365
419
|
style: {
|
|
366
|
-
background:
|
|
420
|
+
background: d
|
|
367
421
|
}
|
|
368
422
|
}
|
|
369
423
|
),
|
|
370
|
-
/* @__PURE__ */
|
|
424
|
+
/* @__PURE__ */ t.jsx("div", { className: "relative z-[2]", children: s })
|
|
371
425
|
]
|
|
372
426
|
}
|
|
373
427
|
)
|
|
374
428
|
] });
|
|
375
429
|
};
|
|
376
430
|
export {
|
|
377
|
-
|
|
431
|
+
fe as LiquidGlass,
|
|
432
|
+
ue as useBrowserDetection
|
|
378
433
|
};
|
package/dist/index.umd.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
(function(c,
|
|
1
|
+
(function(c,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],m):(c=typeof globalThis<"u"?globalThis:c||self,m(c.LiquidGlass={},c.React))})(this,(function(c,m){"use strict";var h={exports:{}},_={};var C;function q(){if(C)return _;C=1;var o=Symbol.for("react.transitional.element"),f=Symbol.for("react.fragment");function u(p,i,l){var d=null;if(l!==void 0&&(d=""+l),i.key!==void 0&&(d=""+i.key),"key"in i){l={};for(var b in i)b!=="key"&&(l[b]=i[b])}else l=i;return i=l.ref,{$$typeof:o,type:p,key:d,ref:i!==void 0?i:null,props:l}}return _.Fragment=f,_.jsx=u,_.jsxs=u,_}var x={};var F;function z(){return F||(F=1,process.env.NODE_ENV!=="production"&&(function(){function o(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ie?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case k:return"Fragment";case K:return"Profiler";case Q:return"StrictMode";case ne:return"Suspense";case ae:return"SuspenseList";case oe: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 Z:return"Portal";case re:return e.displayName||"Context";case ee:return(e._context.displayName||"Context")+".Consumer";case te:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case se:return r=e.displayName||null,r!==null?r:o(e.type)||"Memo";case w:r=e._payload,e=e._init;try{return o(e(r))}catch{}}return null}function f(e){return""+e}function u(e){try{f(e);var r=!1}catch{r=!0}if(r){r=console;var n=r.error,a=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",a),f(e)}}function p(e){if(e===k)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===w)return"<...>";try{var r=o(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function i(){var e=O.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function d(e){if(D.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function b(e,r){function n(){G||(G=!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)",r))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function j(){var e=o(this.type);return M[e]||(M[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?e:null}function y(e,r,n,a,g,P){var s=n.ref;return e={$$typeof:L,type:e,key:r,props:n,_owner:a},(s!==void 0?s:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:j}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),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:g}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:P}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function S(e,r,n,a,g,P){var s=r.children;if(s!==void 0)if(a)if(le(s)){for(a=0;a<s.length;a++)E(s[a]);Object.freeze&&Object.freeze(s)}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 E(s);if(D.call(r,"key")){s=o(e);var v=Object.keys(r).filter(function(ue){return ue!=="key"});a=0<v.length?"{key: someKey, "+v.join(": ..., ")+": ...}":"{key: someKey}",U[s+a]||(v=0<v.length?"{"+v.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
2
2
|
let props = %s;
|
|
3
3
|
<%s {...props} />
|
|
4
4
|
React keys must be passed directly to JSX without using spread:
|
|
5
5
|
let props = %s;
|
|
6
|
-
<%s key={someKey} {...props} />`,
|
|
6
|
+
<%s key={someKey} {...props} />`,a,s,v,s),U[s+a]=!0)}if(s=null,n!==void 0&&(u(n),s=""+n),d(r)&&(u(r.key),s=""+r.key),"key"in r){n={};for(var N in r)N!=="key"&&(n[N]=r[N])}else n=r;return s&&b(n,typeof e=="function"?e.displayName||e.name||"Unknown":e),y(e,s,n,i(),g,P)}function E(e){R(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===w&&(e._payload.status==="fulfilled"?R(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function R(e){return typeof e=="object"&&e!==null&&e.$$typeof===L}var T=m,L=Symbol.for("react.transitional.element"),Z=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),Q=Symbol.for("react.strict_mode"),K=Symbol.for("react.profiler"),ee=Symbol.for("react.consumer"),re=Symbol.for("react.context"),te=Symbol.for("react.forward_ref"),ne=Symbol.for("react.suspense"),ae=Symbol.for("react.suspense_list"),se=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),oe=Symbol.for("react.activity"),ie=Symbol.for("react.client.reference"),O=T.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,D=Object.prototype.hasOwnProperty,le=Array.isArray,A=console.createTask?console.createTask:function(){return null};T={react_stack_bottom_frame:function(e){return e()}};var G,M={},$=T.react_stack_bottom_frame.bind(T,l)(),W=A(p(l)),U={};x.Fragment=k,x.jsx=function(e,r,n){var a=1e4>O.recentlyCreatedOwnerStacks++;return S(e,r,n,!1,a?Error("react-stack-top-frame"):$,a?A(p(e)):W)},x.jsxs=function(e,r,n){var a=1e4>O.recentlyCreatedOwnerStacks++;return S(e,r,n,!0,a?Error("react-stack-top-frame"):$,a?A(p(e)):W)}})()),x}var I;function B(){return I||(I=1,process.env.NODE_ENV==="production"?h.exports=q():h.exports=z()),h.exports}var t=B();const J=/iPad|iPhone|iPod/,V=/^((?!chrome|android).)*safari/i,X=()=>{if(typeof window>"u")return!1;const o=window.navigator.userAgent,f=J.test(o),u=V.test(o);return f||u},Y=()=>{const[o]=m.useState(()=>X());return{useSimplifiedFilter:o}},H=({children:o,className:f="",backdropBlur:u=2,tintColor:p="rgba(255, 255, 255, .2)",displacementScale:i=150,turbulenceBaseFrequency:l="0.008 0.008",turbulenceSeed:d=1.5,as:b="div",style:j,...y})=>{const E=`liquid-glass-${m.useId().replace(/:/g,"-")}`,{useSimplifiedFilter:R}=Y();return t.jsxs(t.Fragment,{children:[t.jsx("svg",{style:{display:"none"},suppressHydrationWarning:!0,children:R?t.jsxs("filter",{id:E,x:"-20%",y:"-20%",width:"140%",height:"140%",filterUnits:"objectBoundingBox",children:[t.jsx("feTurbulence",{type:"fractalNoise",baseFrequency:l,numOctaves:2,seed:d,result:"turbulence"}),t.jsx("feGaussianBlur",{in:"turbulence",stdDeviation:"2",result:"blur"}),t.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"}),t.jsx("feBlend",{in:"SourceGraphic",in2:"transparency",mode:"normal"})]}):t.jsxs("filter",{id:E,x:"0%",y:"0%",width:"100%",height:"100%",filterUnits:"objectBoundingBox",children:[t.jsx("feTurbulence",{type:"fractalNoise",baseFrequency:l,numOctaves:1,seed:d,result:"turbulence"}),t.jsxs("feComponentTransfer",{in:"turbulence",result:"mapped",children:[t.jsx("feFuncR",{type:"gamma",amplitude:1,exponent:10,offset:.5}),t.jsx("feFuncG",{type:"gamma",amplitude:0,exponent:1,offset:0}),t.jsx("feFuncB",{type:"gamma",amplitude:0,exponent:1,offset:.5})]}),t.jsx("feGaussianBlur",{in:"turbulence",stdDeviation:3,result:"softMap"}),t.jsx("feSpecularLighting",{in:"softMap",surfaceScale:5,specularConstant:1,specularExponent:100,lightingColor:"white",result:"specLight",children:t.jsx("fePointLight",{x:-200,y:-200,z:300})}),t.jsx("feComposite",{in:"specLight",operator:"arithmetic",k1:0,k2:1,k3:1,k4:0,result:"litImage"}),t.jsx("feDisplacementMap",{in:"SourceGraphic",in2:"softMap",scale:i,xChannelSelector:"R",yChannelSelector:"G"})]})}),t.jsxs(b,{className:`relative overflow-hidden ${f}`,style:{boxShadow:"0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)",...j},...y,children:[t.jsx("div",{className:"absolute inset-0 z-0 overflow-hidden",style:{backdropFilter:`blur(${u}px)`,WebkitBackdropFilter:`blur(${u}px)`,filter:`url(#${E})`,isolation:"isolate",...R&&{transform:"translateZ(0)",willChange:"transform"}}}),t.jsx("div",{className:"absolute inset-0 z-[1]",style:{background:p}}),t.jsx("div",{className:"relative z-[2]",children:o})]})]})};c.LiquidGlass=H,c.useBrowserDetection=Y,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})}));
|
package/dist/liquid-glass.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-blue-500:oklch(62.3% .214 259.815);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-lg:0 4px 4px #00000026;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-0{z-index:0}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.aspect-square{aspect-ratio:1}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-5xl{max-width:var(--container-5xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-8{padding-top:calc(var(--spacing)*8)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-white{color:var(--color-white)}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.uppercase{text-transform:uppercase}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-lg{--tw-drop-shadow-size:drop-shadow(0 4px 4px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
|
|
1
|
+
@import"https://api.fontshare.com/v2/css?f[]=clash-display@400,500,600,700&f[]=satoshi@300,400,500,700,900&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-green-400:oklch(79.2% .209 151.711);--color-blue-500:oklch(62.3% .214 259.815);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--color-void:#0a0f1e;--color-void-light:#1a1f35;--color-electric-blue:#3b82f6;--color-electric-purple:#a855f7;--color-cyan-glow:#22d3ee;--color-indigo-deep:#4f46e5;--color-violet-bright:#8b5cf6;--color-sky-light:#60a5fa;--color-white-ghost:#f5f5f5;--gradient-void:radial-gradient(ellipse at top,#1a1f35,#0a0f1e);--gradient-electric:linear-gradient(135deg,var(--color-electric-purple)0%,var(--color-cyan-glow)100%);--gradient-ocean:linear-gradient(135deg,var(--color-electric-blue)0%,var(--color-indigo-deep)100%);--gradient-mesh:radial-gradient(at 20% 30%,#8b5cf633 0px,transparent 50%),radial-gradient(at 80% 70%,#3b82f633 0px,transparent 50%),radial-gradient(at 50% 50%,#4f46e526 0px,transparent 50%)}body{background:var(--color-void);color:var(--color-white-ghost);cursor:none;font-family:Satoshi,-apple-system,BlinkMacSystemFont,sans-serif;position:relative;overflow-x:hidden}h1,h2,h3,h4,h5,h6{letter-spacing:-.03em;font-family:Clash Display,system-ui,sans-serif;font-weight:600}.custom-cursor{background:var(--color-electric-purple);pointer-events:none;z-index:9999;mix-blend-mode:difference;border-radius:50%;width:20px;height:20px;transition:transform .15s;position:fixed}.custom-cursor:before{content:"";border:1px solid var(--color-white-ghost);opacity:.3;border-radius:50%;position:absolute;inset:-10px}}@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-\[20\%\]{top:20%}.top-\[60\%\]{top:60%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-\[15\%\]{right:15%}.bottom-\[10\%\]{bottom:10%}.left-0{left:calc(var(--spacing)*0)}.left-\[10\%\]{left:10%}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-15{z-index:-15}.-z-20{z-index:-20}.-z-25{z-index:-25}.-z-30{z-index:-30}.z-0{z-index:0}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-6{margin-top:calc(var(--spacing)*6)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-\[350px\]{height:350px}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-3\/4{width:75%}.w-\[350px\]{width:350px}.w-\[400px\]{width:400px}.w-\[500px\]{width:500px}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.flex-1{flex:1}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--color-electric-purple\)\]\/20{border-color:var(--color-electric-purple)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-electric-purple\)\]\/20{border-color:color-mix(in oklab,var(--color-electric-purple)20%,transparent)}}.border-\[var\(--color-electric-purple\)\]\/30{border-color:var(--color-electric-purple)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-electric-purple\)\]\/30{border-color:color-mix(in oklab,var(--color-electric-purple)30%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-\[var\(--color-electric-blue\)\]{background-color:var(--color-electric-blue)}.bg-\[var\(--color-electric-purple\)\]{background-color:var(--color-electric-purple)}.bg-\[var\(--color-indigo-deep\)\]{background-color:var(--color-indigo-deep)}.bg-\[var\(--color-void\)\]{background-color:var(--color-void)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--color-electric-purple\)\]{--tw-gradient-from:var(--color-electric-purple);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[var\(--color-cyan-glow\)\]{--tw-gradient-to:var(--color-cyan-glow);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-3{padding:calc(var(--spacing)*3)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-\[var\(--color-electric-purple\)\]{color:var(--color-electric-purple)}.text-green-400{color:var(--color-green-400)}.text-white{color:var(--color-white)}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-60{opacity:.6}.mix-blend-luminosity{mix-blend-mode:luminosity}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.delay-300{transition-delay:.3s}.delay-1000{transition-delay:1s}@media(hover:hover){.hover\:scale-90:hover{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\:text-\[var\(--color-electric-purple\)\]:hover{color:var(--color-electric-purple)}.hover\:text-white:hover{color:var(--color-white)}}.active\:scale-75:active{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media(min-width:40rem){.sm\:right-3{right:calc(var(--spacing)*3)}.sm\:mt-8{margin-top:calc(var(--spacing)*8)}.sm\:mb-4{margin-bottom:calc(var(--spacing)*4)}.sm\:mb-6{margin-bottom:calc(var(--spacing)*6)}.sm\:mb-12{margin-bottom:calc(var(--spacing)*12)}.sm\:mb-16{margin-bottom:calc(var(--spacing)*16)}.sm\:h-2{height:calc(var(--spacing)*2)}.sm\:h-5{height:calc(var(--spacing)*5)}.sm\:w-2{width:calc(var(--spacing)*2)}.sm\:w-5{width:calc(var(--spacing)*5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:rounded-3xl{border-radius:var(--radius-3xl)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:p-2{padding:calc(var(--spacing)*2)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:px-3{padding-inline:calc(var(--spacing)*3)}.sm\:px-4{padding-inline:calc(var(--spacing)*4)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-8{padding-inline:calc(var(--spacing)*8)}.sm\:py-1{padding-block:calc(var(--spacing)*1)}.sm\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.sm\:py-4{padding-block:calc(var(--spacing)*4)}.sm\:py-12{padding-block:calc(var(--spacing)*12)}.sm\:pr-12{padding-right:calc(var(--spacing)*12)}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:48rem){.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}}@media(min-width:64rem){.lg\:mb-16{margin-bottom:calc(var(--spacing)*16)}.lg\:mb-24{margin-bottom:calc(var(--spacing)*24)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:px-12{padding-inline:calc(var(--spacing)*12)}.lg\:py-16{padding-block:calc(var(--spacing)*16)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:80rem){.xl\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}}.font-display{font-family:Clash Display,system-ui,sans-serif}.font-body{font-family:Satoshi,-apple-system,BlinkMacSystemFont,sans-serif}.text-gradient-electric{background:var(--gradient-electric);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.text-gradient-ocean{background:var(--gradient-ocean);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.bg-mesh{background:var(--gradient-mesh)}.noise-overlay:before{content:"";pointer-events:none;z-index:1;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='5' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.15'/%3E%3C/svg%3E");position:absolute;inset:0}.blob{filter:blur(60px);opacity:.3;border-radius:40% 60% 70% 30%/40% 50% 60%;animation:20s ease-in-out infinite morph;position:absolute}@keyframes morph{0%,to{border-radius:40% 60% 70% 30%/40% 50% 60%;transform:translate(0)rotate(0)}25%{border-radius:60% 40% 30% 70%/60% 30% 70% 40%;transform:translate(50px,-50px)rotate(90deg)}50%{border-radius:30% 70% 50% 50%/50% 60% 40%;transform:translate(-30px,30px)rotate(180deg)}75%{border-radius:70% 30% 60% 40%/30% 70% 50% 50%;transform:translate(30px,50px)rotate(270deg)}}@keyframes liquid-float{0%,to{transform:translateY(0)rotate(0)}25%{transform:translateY(-30px)rotate(2deg)}50%{transform:translateY(-15px)rotate(-2deg)}75%{transform:translateY(-40px)rotate(1deg)}}.animate-liquid-float{animation:8s ease-in-out infinite liquid-float}@keyframes fade-scale-in{0%{opacity:0;transform:scale(.9)translateY(20px)}to{opacity:1;transform:scale(1)translateY(0)}}.animate-fade-scale-in{animation:.8s cubic-bezier(.16,1,.3,1) forwards fade-scale-in}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px #a855f766}50%{box-shadow:0 0 40px #a855f7b3}}.animate-pulse-glow{animation:3s ease-in-out infinite pulse-glow}@keyframes rotate-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-rotate-slow{animation:30s linear infinite rotate-slow}.delay-100{animation-delay:.1s}.delay-200{animation-delay:.2s}.delay-300{animation-delay:.3s}.delay-400{animation-delay:.4s}.delay-500{animation-delay:.5s}.delay-600{animation-delay:.6s}.delay-700{animation-delay:.7s}.delay-800{animation-delay:.8s}.delay-1000{animation-delay:1s}.delay-1200{animation-delay:1.2s}.glass-border-glow{border:1px solid #a855f733;position:relative}.glass-border-glow:before{content:"";border-radius:inherit;pointer-events:none;opacity:0;background:linear-gradient(135deg,#a855f766,#0000,#3b82f666);padding:2px;transition:opacity .3s;position:absolute;inset:-2px;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.glass-border-glow:hover:before{opacity:1}.hover-lift{transition:transform .3s cubic-bezier(.16,1,.3,1),box-shadow .3s}.hover-lift:hover{transform:translateY(-8px)rotate(-1deg);box-shadow:0 20px 60px #a855f74d}.shimmer-text{background-size:200%;background:linear-gradient(90deg,#f5f5f5 25%,var(--color-electric-purple)50%,#f5f5f5 75%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;animation:3s linear infinite shimmer-slide}@keyframes shimmer-slide{to{background-position:200%}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@creativoma/liquid-glass",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A React wrapper component with liquid frosted glass effect using TailwindCSS",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"module": "dist/index.esm.js",
|
|
8
|
-
"types": "dist/index.d.ts",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.esm.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
9
|
"homepage": "https://github.com/creativoma/liquid-glass#readme",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
},
|
|
14
14
|
"exports": {
|
|
15
15
|
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
16
17
|
"import": "./dist/index.esm.js",
|
|
17
|
-
"require": "./dist/index.js"
|
|
18
|
-
"types": "./dist/index.d.ts"
|
|
18
|
+
"require": "./dist/index.js"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"files": [
|
|
@@ -48,26 +48,26 @@
|
|
|
48
48
|
"react-dom": ">=18.0.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@eslint/js": "^9.39.
|
|
52
|
-
"@tailwindcss/postcss": "^4.1.
|
|
53
|
-
"@types/node": "^
|
|
54
|
-
"@types/react": "^19.2.
|
|
51
|
+
"@eslint/js": "^9.39.2",
|
|
52
|
+
"@tailwindcss/postcss": "^4.1.18",
|
|
53
|
+
"@types/node": "^25.2.3",
|
|
54
|
+
"@types/react": "^19.2.14",
|
|
55
55
|
"@types/react-dom": "^19.2.3",
|
|
56
|
-
"@vitejs/plugin-react": "^
|
|
57
|
-
"autoprefixer": "^10.4.
|
|
58
|
-
"eslint": "^9.39.
|
|
59
|
-
"eslint-plugin-react-hooks": "^
|
|
60
|
-
"eslint-plugin-react-refresh": "^0.
|
|
61
|
-
"globals": "^
|
|
56
|
+
"@vitejs/plugin-react": "^5.1.4",
|
|
57
|
+
"autoprefixer": "^10.4.24",
|
|
58
|
+
"eslint": "^9.39.2",
|
|
59
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
60
|
+
"eslint-plugin-react-refresh": "^0.5.0",
|
|
61
|
+
"globals": "^17.3.0",
|
|
62
62
|
"postcss": "^8.5.6",
|
|
63
|
-
"prettier": "^3.
|
|
64
|
-
"prettier-plugin-tailwindcss": "^0.
|
|
65
|
-
"react": "^19.2.
|
|
66
|
-
"react-dom": "^19.2.
|
|
67
|
-
"tailwindcss": "^4.1.
|
|
63
|
+
"prettier": "^3.8.1",
|
|
64
|
+
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
65
|
+
"react": "^19.2.4",
|
|
66
|
+
"react-dom": "^19.2.4",
|
|
67
|
+
"tailwindcss": "^4.1.18",
|
|
68
68
|
"typescript": "^5.9.3",
|
|
69
|
-
"typescript-eslint": "^8.
|
|
70
|
-
"vite": "^7.
|
|
69
|
+
"typescript-eslint": "^8.55.0",
|
|
70
|
+
"vite": "^7.3.1",
|
|
71
71
|
"vite-plugin-dts": "^4.5.4"
|
|
72
72
|
},
|
|
73
73
|
"publishConfig": {
|