@scriptedpixels/liquid-glass-vue 0.0.3 → 0.0.5

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
@@ -8,8 +8,6 @@ Card Example | Button Example
8
8
 
9
9
  ## Demo
10
10
 
11
- <!-- [See it in action but touch it](https://liquid-glass.maxrovensky.com) -->
12
-
13
11
  ## Features
14
12
 
15
13
  - Proper edgy bending and refraction
@@ -28,41 +26,20 @@ Card Example | Button Example
28
26
  ### Installation
29
27
 
30
28
  ```bash
31
- npm install liquid-glass-vue
29
+ npm install @scriptedpixels/liquid-glass-vue
32
30
  ```
33
31
 
34
32
  ### Basic Usage
35
33
 
36
34
  ```tsx
37
- import LiquidGlass from 'liquid-glass-vue'
38
-
39
- function App() {
40
- return (
41
- <LiquidGlass>
42
- <div className="p-6">
43
- <h2>Your content here</h2>
44
- <p>This will have the liquid glass effect</p>
45
- </div>
46
- </LiquidGlass>
47
- )
48
- }
35
+ import LiquidGlass from '@scriptedpixels/liquid-glass-vue'
36
+
37
+
49
38
  ```
50
39
 
51
40
  ### Button Example
52
41
 
53
42
  ```tsx
54
- <LiquidGlass
55
- displacementScale={64}
56
- blurAmount={0.1}
57
- saturation={130}
58
- aberrationIntensity={2}
59
- elasticity={0.35}
60
- cornerRadius={100}
61
- padding="8px 16px"
62
- onClick={() => console.log('Button clicked!')}
63
- >
64
- <span className="text-white font-medium">Click Me</span>
65
- </LiquidGlass>
66
43
  ```
67
44
 
68
45
  ### Mouse Container Example
@@ -70,23 +47,7 @@ function App() {
70
47
  When you want the glass effect to respond to mouse movement over a larger area (like a parent container), use the `mouseContainer` prop:
71
48
 
72
49
  ```tsx
73
- function App() {
74
- const containerRef = useRef<HTMLDivElement>(null)
75
-
76
- return (
77
- <div ref={containerRef} className="w-full h-screen bg-image">
78
- <LiquidGlass
79
- mouseContainer={containerRef}
80
- elasticity={0.3}
81
- style={{ position: 'fixed', top: '50%', left: '50%' }}
82
- >
83
- <div className="p-6">
84
- <h2>Glass responds to mouse anywhere in the container</h2>
85
- </div>
86
- </LiquidGlass>
87
- </div>
88
- )
89
- }
50
+
90
51
  ```
91
52
 
92
53
  ## Props
package/dist/index.css ADDED
File without changes
package/dist/index.js ADDED
@@ -0,0 +1,491 @@
1
+ import { defineComponent as K, computed as c, createElementBlock as I, openBlock as C, normalizeStyle as p, createElementVNode as i, createStaticVNode as H, unref as j, ref as v, normalizeClass as M, createVNode as V, renderSlot as w, onMounted as G, watch as _, onUnmounted as $, Fragment as D, createCommentVNode as X, withCtx as ee, createBlock as te, createApp as ae } from "vue";
2
+ const ie = "data:image/jpeg;base64,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cUAUAkEkziomgGgkoxZGgxZFQFQlYnQHRdPfj/10KCSCKESCNiVkViPSLpD0h6I0Q0I0A2IoBWBIJIBKBIJoJIJ2R2J0JWBUJ0JUB0XTv479dFZDYiglYigkhEgjZFQjRFQjRFQjQigFYigHYigmgEgmglYlYnQlQlYlQHQlQnQ9P/kf1yVkNiNCNkNiVENiNiViNEViNkVCVgKCViViViSCViSCVgdCViVCViVCdgVCVCdD1D+U/XBWQ2I0I2Q2JUQ2I0JWQ0I2JUQ2JUI2JUI2J0JWJWJWA2R0BWJ0I2JUJ2BUJUJ0P//EABkQAQEBAQEBAAAAAAAAAAAAAAECABEDEP/aAAgBAQABAgB1atWrVq1atWrVq1atWrVq1atWrVq1atWrVq+OrVq1atWrVq1atWrVq1atWrVq1atWrVq1atXxVppppppdWrVq1atWrVq1NNNNNNNNNNNPVWmmmmms6tWrVq1atWpppppppppppppp6q0000uc51atWrVq1ammmmmmmmmmmmmt1Vpppc5znVq1atWrVqaaaaaaaaaaaaaeqtNLnOc51atWrVq1ammmmmmmmmmmmmnqrS5znOc6tWrVq16222mmmmmmlVppp6tKuc5znOrVq1a9TbbbbTTTTTSq000qtLnOc5zq1atWrW0222200000qqqtKqrnOc5zq1atTbbbbbbbbTTTSqqqqqq5znOc6tTTTbbbbbbbbTTTSqqqqrlVznOctNNNtttttttttNNNNKqqqrqznKqrTTTTbbbbbbbbbTTTSqqqqrqznOc5aaaabbbbbbbbbaaaaVVVVVdWc5znVq1NNttttttttttNNKqqqqudWc5znVq16tbbbbbbbbbbTTSqqqq5XVnOc6tWrVrb1tttttttttNNKqqqqrWrK5VWmmm2230bbbbbbaaaXOc5zlVa1KuVVppptttt9G22222mmlzlVznK6tWVVWmmmm2222222222mlznOc5znLWppVVWmmm22222229bTWrOc5znOcq1qaaVpWmm222222229erVqznOc5znKtatStK0rTbTTbbbberXr1as5znOc5aVpppppWlabaabbbb1ta9WrVnOc5znU0rTTTTTTTTTbTTbbbTWvVq1as5znOdTTStNNNNNNNNNtNNtttN6tWvVq1ZznOrU00rTTTTTTTTTTTTTbTWvVq1atWrOc6tTTTStNNNNNNNNNNtNNtNa9WrVq1Z1Z1NNNNNK1q1NNNNNNNNNNNtNatWrVq1atWrU00000rWrVq1atWrVq1alaaa1atWrVq1NNNammmmla1atWrVq1aterVq16tWrVnVqa1NK1qaaaVX/xAAWEAADAAAAAAAAAAAAAAAAAAAhgJD/2gAIAQEAAz8AaExf/8QAGhEBAQEBAQEBAAAAAAAAAAAAAQISEQADEP/aAAgBAgEBAgDx48ePHjx48ePHjx48ePHjx48ePHjx48ePHj86IiIiIiInjx48ePHjx48IiIiIj0oooooooooRERER73ve60UUUUUUVrWiiiiiihERERER73ve97ooooorRWiiiiihKERERER73ve973RRRRWtFFFFFFCIiIiIiPe973ve60UUVrRRRRRRQiIlCIiI973ve973pRRWiiiiiiiiiiiiiiihEe973ve973RRWtFFFFFFFFFFFFFFFFFFa13ve973WitaKKKKKKKKKKKKKKKKKK1rWtd1rutFa1oooooooooooosssooorWta1rWta1rRRRRRRRRRRZZZZZZZZZWta1rWta1rRRRRRRRRZZZZZZZZZZZZe9a1rWta1rWitaKLLLLLLLLLLLLLLLLL3rWta1rWtFbLLLLLLLLLLLLLLLLLLLL3vWta1rWita1ssssssss+hZZZZZZZZe961rWta0Vre97LLLLLLLLLLLPoWWWWWXrWta1oorWta3ssss+hZZZZ9Cyyyyyyyyiita1orWta1ve9llllllllllllllllFFa0VorWta1ve9llllllllllllllllllFFFaK1rWta1rWiyyyyyyyyyyyyiiiiiiitFFa1rWta1oosoosssssoooosoooorRRRWta1rWta0UUUUUWUUUUUUUUUUUVoooorWta1rWtaKKKKKKmiiiiiiiiiiiiiiitd73ve61oSiiipoqaKKKKKKKKKK0UUUVrve973vREREZoSihEooooorRRRRWtd73ve9EREREREoSiiiiitFllllla73ve9ERERERESiiiiiitH0PoWWWWVrXe96IiIiMoiJRRRRRRWjwlFFllllFFd6IiIiIlCUUUUUUUUUePHjx48ePCIiIiIiIiUUUUUUUUUUUePHjx48ePHjx48ePHjx48IiUUUUUUJRRRX//xAAWEQADAAAAAAAAAAAAAAAAAAABYJD/2gAIAQIBAz8AtEV7/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAECEP/aAAgBAwEBAgCtNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcrTTTTTTTTTTTTTTTTTTTTTTTTTTTTTXKrTTTTTTTU000000000000000000001FVpppppqampqaaaaaaaaaaaaaaaaaaaa5Vaaaaampqampqammmmmmmmmmmlaaaaaaiq0001NTU1NTU1NTTTTTTTTTTSqqtNNNcqtNNSyzU1LNTU1NTTTTTTTTTSqqq001ytNLLLLNTU1NTU1NTbbbTTTTTSqqq001ytNLLLLLNTU1NTU3NttttNNNNNKqq001KrSyyyyyzU1NTU3Nzc02220000qqqqrSqqyyyyyzU1NTU3Nzc3NttttNNNKqqqqqqssssss1NTU3Nzc3NzbbbbTTTSqqqqqqrLLLLLNTU1Nzc3Nzc22220000qqqqqqqqssss1NTU3Nzc3NzbbbbbTTSqqqqqqqqqqzU1NTc3Nzc3Nzbc22000qqqqqqqqqqqtTU3Nzc3Nzc3NtzbTTSqqqqrKqqqqqtNNzc23Nzc3Nzc3NTU1KqqqrKqqqqqtNNNNttzc3Nzc3NzU1NLLLLLKqqqqqqqq0022223Nzc3NzU1NSyyyyyyqqqqqqqrTTbbbbc3Nzc3NTU1LLLLLLKsqqqqqqrTTTTbbbc3Nzc1NTUsssssssqqqqqqrTTTTTbbbTc3NTU1NTUsssssqqqqqqqq0000222023NTU1NTUsssssqqqqqqqq000000003NTU1NTU1LLLLLNKrTSqqqqtNNNNNNtNNTU1NSzUssss00qq0qqqqrTTTTTTTTTU1NTUs1LLLNNNKrTTTSqqq00000000001NTU1LNTU0000qtNNNKqqqtNNNNNNNNTU1NTUs1NNNNNKss1NNNK00qtK0000001NNTU0s000000qq000001NKrStNNNNK1NNNNStNNNNNKqtNNNNNNNK0000000rU0000rTTTTTSq00000rTTTTTTTTTTTTTTTTStNNNNKr/xAAUEQEAAAAAAAAAAAAAAAAAAACg/9oACAEDAQM/AAAf/9k=", ne = ["id"], le = ["offset"], se = ["id"], oe = ["href"], re = {
3
+ in: "EDGE_INTENSITY",
4
+ result: "EDGE_MASK"
5
+ }, ue = ["tableValues"], ce = ["scale"], Ae = ["scale"], de = ["scale"], Ne = ["stdDeviation"], P = /* @__PURE__ */ K({
6
+ __name: "GlassFilter",
7
+ props: {
8
+ id: {},
9
+ displacementScale: {},
10
+ aberrationIntensity: {},
11
+ width: {},
12
+ height: {}
13
+ },
14
+ setup(T) {
15
+ const e = T, r = c(() => Math.max(30, 80 - e.aberrationIntensity * 2)), s = c(() => e.displacementScale * -1), u = c(() => e.displacementScale * (-1 - e.aberrationIntensity * 0.05)), l = c(() => e.displacementScale * (-1 - e.aberrationIntensity * 0.1)), h = c(() => Math.max(0.1, 0.5 - e.aberrationIntensity * 0.1)), g = c(() => `0 ${e.aberrationIntensity * 0.05} 1`);
16
+ return (A, t) => (C(), I("svg", {
17
+ style: p({ position: "absolute", width: e.width + "px", height: e.height + "px" }),
18
+ "aria-hidden": "true"
19
+ }, [
20
+ i("defs", null, [
21
+ i("radialGradient", {
22
+ id: `${e.id}-edge-mask`,
23
+ cx: "50%",
24
+ cy: "50%",
25
+ r: "50%"
26
+ }, [
27
+ t[0] || (t[0] = i("stop", {
28
+ offset: "0%",
29
+ "stop-color": "black",
30
+ "stop-opacity": "0"
31
+ }, null, -1)),
32
+ i("stop", {
33
+ offset: `${r.value}%`,
34
+ "stop-color": "black",
35
+ "stop-opacity": "0"
36
+ }, null, 8, le),
37
+ t[1] || (t[1] = i("stop", {
38
+ offset: "100%",
39
+ "stop-color": "white",
40
+ "stop-opacity": "1"
41
+ }, null, -1))
42
+ ], 8, ne),
43
+ i("filter", {
44
+ id: e.id,
45
+ x: "-35%",
46
+ y: "-35%",
47
+ width: "170%",
48
+ height: "170%",
49
+ "color-interpolation-filters": "sRGB"
50
+ }, [
51
+ i("feImage", {
52
+ id: "feimage",
53
+ x: "0",
54
+ y: "0",
55
+ width: "100%",
56
+ height: "100%",
57
+ result: "DISPLACEMENT_MAP",
58
+ href: j(ie),
59
+ preserveAspectRatio: "xMidYMid slice"
60
+ }, null, 8, oe),
61
+ t[2] || (t[2] = i("feColorMatrix", {
62
+ in: "DISPLACEMENT_MAP",
63
+ type: "matrix",
64
+ values: `0.3 0.3 0.3 0 0
65
+ 0.3 0.3 0.3 0 0
66
+ 0.3 0.3 0.3 0 0
67
+ 0 0 0 1 0`,
68
+ result: "EDGE_INTENSITY"
69
+ }, null, -1)),
70
+ i("feComponentTransfer", re, [
71
+ i("feFuncA", {
72
+ type: "discrete",
73
+ tableValues: g.value
74
+ }, null, 8, ue)
75
+ ]),
76
+ t[3] || (t[3] = i("feOffset", {
77
+ in: "SourceGraphic",
78
+ dx: "0",
79
+ dy: "0",
80
+ result: "CENTER_ORIGINAL"
81
+ }, null, -1)),
82
+ i("feDisplacementMap", {
83
+ in: "SourceGraphic",
84
+ in2: "DISPLACEMENT_MAP",
85
+ scale: s.value,
86
+ xChannelSelector: "R",
87
+ yChannelSelector: "B",
88
+ result: "RED_DISPLACED"
89
+ }, null, 8, ce),
90
+ t[4] || (t[4] = i("feColorMatrix", {
91
+ in: "RED_DISPLACED",
92
+ type: "matrix",
93
+ values: `1 0 0 0 0
94
+ 0 0 0 0 0
95
+ 0 0 0 0 0
96
+ 0 0 0 1 0`,
97
+ result: "RED_CHANNEL"
98
+ }, null, -1)),
99
+ i("feDisplacementMap", {
100
+ in: "SourceGraphic",
101
+ in2: "DISPLACEMENT_MAP",
102
+ scale: u.value,
103
+ xChannelSelector: "R",
104
+ yChannelSelector: "B",
105
+ result: "GREEN_DISPLACED"
106
+ }, null, 8, Ae),
107
+ t[5] || (t[5] = i("feColorMatrix", {
108
+ in: "GREEN_DISPLACED",
109
+ type: "matrix",
110
+ values: `0 0 0 0 0
111
+ 0 1 0 0 0
112
+ 0 0 0 0 0
113
+ 0 0 0 1 0`,
114
+ result: "GREEN_CHANNEL"
115
+ }, null, -1)),
116
+ i("feDisplacementMap", {
117
+ in: "SourceGraphic",
118
+ in2: "DISPLACEMENT_MAP",
119
+ scale: l.value,
120
+ xChannelSelector: "R",
121
+ yChannelSelector: "B",
122
+ result: "BLUE_DISPLACED"
123
+ }, null, 8, de),
124
+ t[6] || (t[6] = i("feColorMatrix", {
125
+ in: "BLUE_DISPLACED",
126
+ type: "matrix",
127
+ values: `0 0 0 0 0
128
+ 0 0 0 0 0
129
+ 0 0 1 0 0
130
+ 0 0 0 1 0`,
131
+ result: "BLUE_CHANNEL"
132
+ }, null, -1)),
133
+ t[7] || (t[7] = i("feBlend", {
134
+ in: "GREEN_CHANNEL",
135
+ in2: "BLUE_CHANNEL",
136
+ mode: "screen",
137
+ result: "GB_COMBINED"
138
+ }, null, -1)),
139
+ t[8] || (t[8] = i("feBlend", {
140
+ in: "RED_CHANNEL",
141
+ in2: "GB_COMBINED",
142
+ mode: "screen",
143
+ result: "RGB_COMBINED"
144
+ }, null, -1)),
145
+ i("feGaussianBlur", {
146
+ in: "RGB_COMBINED",
147
+ stdDeviation: h.value,
148
+ result: "ABERRATED_BLURRED"
149
+ }, null, 8, Ne),
150
+ t[9] || (t[9] = H('<feComposite in="ABERRATED_BLURRED" in2="EDGE_MASK" operator="in" result="EDGE_ABERRATION"></feComposite><feComponentTransfer in="EDGE_MASK" result="INVERTED_MASK"><feFuncA type="table" tableValues="1 0"></feFuncA></feComponentTransfer><feComposite in="CENTER_ORIGINAL" in2="INVERTED_MASK" operator="in" result="CENTER_CLEAN"></feComposite><feComposite in="EDGE_ABERRATION" in2="CENTER_CLEAN" operator="over"></feComposite>', 4))
151
+ ], 8, se)
152
+ ])
153
+ ], 4));
154
+ }
155
+ }), pe = /* @__PURE__ */ K({
156
+ __name: "GlassContainer",
157
+ props: {
158
+ className: { default: "" },
159
+ style: { default: () => ({}) },
160
+ displacementScale: { default: 25 },
161
+ blurAmount: { default: 12 },
162
+ saturation: { default: 180 },
163
+ aberrationIntensity: { default: 2 },
164
+ mouseOffset: { default: () => ({ x: 0, y: 0 }) },
165
+ active: { type: Boolean, default: !1 },
166
+ overLight: { type: Boolean, default: !1 },
167
+ cornerRadius: { default: 999 },
168
+ padding: { default: "24px 32px" },
169
+ glassSize: { default: () => ({ width: 270, height: 69 }) },
170
+ onClick: {}
171
+ },
172
+ emits: ["mouse-enter", "mouse-leave", "mouse-down", "mouse-up", "click"],
173
+ setup(T, { expose: e, emit: r }) {
174
+ const s = T, u = r, l = `glass-filter-${Math.random().toString(36).substr(2, 9)}`, h = c(() => ({
175
+ filter: `url(#${l})`,
176
+ backdropFilter: `blur(${(s.overLight ? 20 : 4) + s.blurAmount * 32}px) saturate(${s.saturation}%)`
177
+ })), g = v(null);
178
+ return e({ glassContainerRef: g }), (A, t) => (C(), I("div", {
179
+ ref_key: "glassContainerRef",
180
+ ref: g,
181
+ class: M(`relative ${s.className} ${s.active ? "active" : ""} ${s.onClick ? "cursor-pointer" : ""}`),
182
+ style: p(s.style),
183
+ onClick: t[4] || (t[4] = (y) => s.onClick && s.onClick())
184
+ }, [
185
+ V(P, {
186
+ id: l,
187
+ displacementScale: s.displacementScale,
188
+ aberrationIntensity: s.aberrationIntensity,
189
+ width: s.glassSize.width,
190
+ height: s.glassSize.height
191
+ }, null, 8, ["displacementScale", "aberrationIntensity", "width", "height"]),
192
+ i("div", {
193
+ class: "glass",
194
+ style: p({
195
+ borderRadius: `${s.cornerRadius}px`,
196
+ position: "relative",
197
+ display: "inline-flex",
198
+ alignItems: "center",
199
+ gap: "24px",
200
+ padding: s.padding,
201
+ overflow: "hidden",
202
+ transition: "all 0.2s ease-in-out",
203
+ boxShadow: s.overLight ? "0px 16px 70px rgba(0, 0, 0, 0.75)" : "0px 12px 40px rgba(0, 0, 0, 0.25)"
204
+ }),
205
+ onMouseenter: t[0] || (t[0] = (y) => u("mouse-enter")),
206
+ onMouseleave: t[1] || (t[1] = (y) => u("mouse-leave")),
207
+ onMousedown: t[2] || (t[2] = (y) => u("mouse-down")),
208
+ onMouseup: t[3] || (t[3] = (y) => u("mouse-up"))
209
+ }, [
210
+ i("span", {
211
+ class: "glass__warp",
212
+ style: p({
213
+ ...h.value,
214
+ position: "absolute",
215
+ inset: "0"
216
+ })
217
+ }, null, 4),
218
+ i("div", {
219
+ class: "transition-all duration-150 ease-in-out text-white",
220
+ style: p({
221
+ position: "relative",
222
+ zIndex: 1,
223
+ font: "500 20px/1 system-ui",
224
+ textShadow: s.overLight ? "0px 2px 12px rgba(0, 0, 0, 0)" : "0px 2px 12px rgba(0, 0, 0, 0.4)"
225
+ })
226
+ }, [
227
+ w(A.$slots, "default", {}, void 0, !0)
228
+ ], 4)
229
+ ], 36)
230
+ ], 6));
231
+ }
232
+ }), me = (T, e) => {
233
+ const r = T.__vccOpts || T;
234
+ for (const [s, u] of e)
235
+ r[s] = u;
236
+ return r;
237
+ }, Te = /* @__PURE__ */ me(pe, [["__scopeId", "data-v-689fee6a"]]), qe = /* @__PURE__ */ K({
238
+ __name: "LiquidGlass",
239
+ props: {
240
+ displacementScale: { default: 70 },
241
+ blurAmount: { default: 0.0625 },
242
+ saturation: { default: 140 },
243
+ aberrationIntensity: { default: 2 },
244
+ elasticity: { default: 0.15 },
245
+ cornerRadius: { default: 999 },
246
+ globalMousePos: { default: void 0 },
247
+ mouseOffset: { default: void 0 },
248
+ mouseContainer: { default: null },
249
+ className: { default: "" },
250
+ padding: { default: "24px 32px" },
251
+ style: {},
252
+ overLight: { type: Boolean, default: !1 },
253
+ onClick: { type: Function, default: () => ({}) }
254
+ },
255
+ setup(T) {
256
+ const e = T, r = v(null), s = v(!1), u = v(!1), l = v({ width: 400, height: 400 }), h = v({ x: 0, y: 0 }), g = v({ x: 0, y: 0 }), A = c(() => e.globalMousePos || h.value), t = c(() => e.mouseOffset || g.value), y = (n) => {
257
+ var m;
258
+ const a = e.mouseContainer || ((m = r.value) == null ? void 0 : m.glassContainerRef);
259
+ if (!a) return;
260
+ const o = a.getBoundingClientRect(), d = o.left + o.width / 2, N = o.top + o.height / 2;
261
+ g.value = {
262
+ x: (n.clientX - d) / o.width * 100,
263
+ y: (n.clientY - N) / o.height * 100
264
+ }, h.value = {
265
+ x: n.clientX,
266
+ y: n.clientY
267
+ };
268
+ };
269
+ G(() => {
270
+ const n = () => {
271
+ var a;
272
+ if ((a = r.value) != null && a.glassContainerRef) {
273
+ const o = r.value.glassContainerRef.getBoundingClientRect();
274
+ l.value = { width: o.width, height: o.height };
275
+ }
276
+ };
277
+ return n(), window.addEventListener("resize", n), () => window.removeEventListener("resize", n);
278
+ }), _([() => e.globalMousePos, () => e.mouseOffset, r], ([n, a]) => {
279
+ var d;
280
+ if (n && a)
281
+ return;
282
+ const o = e.mouseContainer || ((d = r.value) == null ? void 0 : d.glassContainerRef);
283
+ o && o.addEventListener("mousemove", y);
284
+ }, { immediate: !0 }), $(() => {
285
+ });
286
+ const Z = c(() => {
287
+ var x;
288
+ if (!A.value.x || !A.value.y || !((x = r.value) != null && x.glassContainerRef))
289
+ return 0;
290
+ const n = r.value.glassContainerRef.getBoundingClientRect(), a = n.left + n.width / 2, o = n.top + n.height / 2, d = l.value.width, N = l.value.height, m = Math.max(0, Math.abs(A.value.x - a) - d / 2), b = Math.max(0, Math.abs(A.value.y - o) - N / 2), R = Math.sqrt(m * m + b * b), f = 200;
291
+ return R > f ? 0 : 1 - R / f;
292
+ }), S = c(() => {
293
+ var N;
294
+ if (!((N = r.value) != null && N.glassContainerRef))
295
+ return { x: 0, y: 0 };
296
+ const n = Z.value, a = r.value.glassContainerRef.getBoundingClientRect(), o = a.left + a.width / 2, d = a.top + a.height / 2;
297
+ return {
298
+ x: (A.value.x - o) * e.elasticity * 0.1 * n,
299
+ y: (A.value.y - d) * e.elasticity * 0.1 * n
300
+ };
301
+ }), O = c(() => {
302
+ var F;
303
+ if (!A.value.x || !A.value.y || !((F = r.value) != null && F.glassContainerRef))
304
+ return "scale(1)";
305
+ const n = r.value.glassContainerRef.getBoundingClientRect(), a = n.left + n.width / 2, o = n.top + n.height / 2, d = l.value.width, N = l.value.height, m = A.value.x - a, b = A.value.y - o, R = Math.max(0, Math.abs(m) - d / 2), f = Math.max(0, Math.abs(b) - N / 2), x = Math.sqrt(R * R + f * f), Q = 200;
306
+ if (x > Q)
307
+ return "scale(1)";
308
+ const k = 1 - x / Q, L = Math.sqrt(m * m + b * b);
309
+ if (L === 0)
310
+ return "scale(1)";
311
+ const W = m / L, z = b / L, B = Math.min(L / 300, 1) * e.elasticity * k, J = 1 + Math.abs(W) * B * 0.3 - Math.abs(z) * B * 0.15, Y = 1 + Math.abs(z) * B * 0.3 - Math.abs(W) * B * 0.15;
312
+ return `scaleX(${Math.max(0.8, J)}) scaleY(${Math.max(0.8, Y)})`;
313
+ }), E = c(() => `translate(calc(-50% + ${S.value.x}px), calc(-50% + ${S.value.y}px)) ${u.value && e.onClick ? "scale(0.96)" : O.value}`), U = c(() => ({
314
+ ...e.style,
315
+ transform: E.value,
316
+ transition: "all ease-out 0.2s"
317
+ })), q = c(() => {
318
+ var n, a, o;
319
+ return {
320
+ position: ((n = e.style) == null ? void 0 : n.position) || "relative",
321
+ top: ((a = e.style) == null ? void 0 : a.top) || "50%",
322
+ left: ((o = e.style) == null ? void 0 : o.left) || "50%"
323
+ };
324
+ });
325
+ return (n, a) => {
326
+ var o, d;
327
+ return C(), I(D, null, [
328
+ V(P, {
329
+ id: `liquid-glass-filter-${((d = (o = r.value) == null ? void 0 : o.glassContainerRef) == null ? void 0 : d.id) || "default"}`,
330
+ displacementScale: e.overLight ? e.displacementScale * 0.5 : e.displacementScale,
331
+ aberrationIntensity: e.aberrationIntensity,
332
+ width: l.value.width,
333
+ height: l.value.height
334
+ }, null, 8, ["id", "displacementScale", "aberrationIntensity", "width", "height"]),
335
+ i("div", {
336
+ class: M(`bg-black transition-all duration-150 ease-in-out pointer-events-none ${e.overLight ? "opacity-20" : "opacity-0"}`),
337
+ style: p({
338
+ ...q.value,
339
+ height: l.value.height + "px",
340
+ width: l.value.width + "px",
341
+ borderRadius: `${e.cornerRadius}px`,
342
+ transform: E.value,
343
+ transition: U.value.transition
344
+ })
345
+ }, null, 6),
346
+ i("div", {
347
+ class: M(`bg-black transition-all duration-150 ease-in-out pointer-events-none mix-blend-overlay ${e.overLight ? "opacity-100" : "opacity-0"}`),
348
+ style: p({
349
+ ...q.value,
350
+ height: l.value.height + "px",
351
+ width: l.value.width + "px",
352
+ borderRadius: `${e.cornerRadius}px`,
353
+ transform: E.value,
354
+ transition: U.value.transition
355
+ })
356
+ }, null, 6),
357
+ V(Te, {
358
+ ref_key: "glassRef",
359
+ ref: r,
360
+ class: M(e.className),
361
+ style: p(U.value),
362
+ cornerRadius: e.cornerRadius,
363
+ displacementScale: e.overLight ? e.displacementScale * 0.5 : e.displacementScale,
364
+ blurAmount: e.blurAmount,
365
+ saturation: e.saturation,
366
+ aberrationIntensity: e.aberrationIntensity,
367
+ glassSize: l.value,
368
+ padding: e.padding,
369
+ mouseOffset: t.value,
370
+ onMouseEnter: a[0] || (a[0] = (N) => s.value = !0),
371
+ onMouseLeave: a[1] || (a[1] = (N) => s.value = !1),
372
+ onMouseDown: a[2] || (a[2] = (N) => u.value = !0),
373
+ onMouseUp: a[3] || (a[3] = (N) => u.value = !1),
374
+ active: u.value,
375
+ overLight: e.overLight,
376
+ onClick: a[4] || (a[4] = (N) => e.onClick && e.onClick())
377
+ }, {
378
+ default: ee(() => [
379
+ w(n.$slots, "default")
380
+ ]),
381
+ _: 3
382
+ }, 8, ["class", "style", "cornerRadius", "displacementScale", "blurAmount", "saturation", "aberrationIntensity", "glassSize", "padding", "mouseOffset", "active", "overLight"]),
383
+ i("span", {
384
+ style: p({
385
+ ...q.value,
386
+ height: l.value.height + "px",
387
+ width: l.value.width + "px",
388
+ borderRadius: `${e.cornerRadius}px`,
389
+ transform: E.value,
390
+ transition: U.value.transition,
391
+ pointerEvents: "none",
392
+ mixBlendMode: "screen",
393
+ opacity: 0.2,
394
+ padding: "1.5px",
395
+ WebkitMask: "linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0)",
396
+ WebkitMaskComposite: "xor",
397
+ maskComposite: "exclude",
398
+ boxShadow: "0 0 0 0.5px rgba(255, 255, 255, 0.5) inset, 0 1px 3px rgba(255, 255, 255, 0.25) inset, 0 1px 4px rgba(0, 0, 0, 0.35)",
399
+ background: `linear-gradient(
400
+ ${135 + t.value.x * 1.2}deg,
401
+ rgba(255, 255, 255, 0.0) 0%,
402
+ rgba(255, 255, 255, ${0.12 + Math.abs(t.value.x) * 8e-3}) ${Math.max(10, 33 + t.value.y * 0.3)}%,
403
+ rgba(255, 255, 255, ${0.4 + Math.abs(t.value.x) * 0.012}) ${Math.min(90, 66 + t.value.y * 0.4)}%,
404
+ rgba(255, 255, 255, 0.0) 100%
405
+ )`
406
+ })
407
+ }, null, 4),
408
+ i("span", {
409
+ style: p({
410
+ ...q.value,
411
+ height: l.value.height + "px",
412
+ width: l.value.width + "px",
413
+ borderRadius: `${e.cornerRadius}px`,
414
+ transform: E.value,
415
+ transition: U.value.transition,
416
+ pointerEvents: "none",
417
+ mixBlendMode: "overlay",
418
+ padding: "1.5px",
419
+ WebkitMask: "linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0)",
420
+ WebkitMaskComposite: "xor",
421
+ maskComposite: "exclude",
422
+ boxShadow: "0 0 0 0.5px rgba(255, 255, 255, 0.5) inset, 0 1px 3px rgba(255, 255, 255, 0.25) inset, 0 1px 4px rgba(0, 0, 0, 0.35)",
423
+ background: `linear-gradient(
424
+ ${135 + t.value.x * 1.2}deg,
425
+ rgba(255, 255, 255, 0.0) 0%,
426
+ rgba(255, 255, 255, ${0.32 + Math.abs(t.value.x) * 8e-3}) ${Math.max(10, 33 + t.value.y * 0.3)}%,
427
+ rgba(255, 255, 255, ${0.6 + Math.abs(t.value.x) * 0.012}) ${Math.min(90, 66 + t.value.y * 0.4)}%,
428
+ rgba(255, 255, 255, 0.0) 100%
429
+ )`
430
+ })
431
+ }, null, 4),
432
+ e.onClick ? (C(), I(D, { key: 0 }, [
433
+ i("div", {
434
+ style: p({
435
+ ...q.value,
436
+ height: l.value.height + "px",
437
+ width: l.value.width + 1 + "px",
438
+ borderRadius: `${e.cornerRadius}px`,
439
+ transform: E.value,
440
+ pointerEvents: "none",
441
+ transition: "all 0.2s ease-out",
442
+ opacity: s.value || u.value ? 0.5 : 0,
443
+ backgroundImage: "radial-gradient(circle at 50% 0%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 50%)",
444
+ mixBlendMode: "overlay"
445
+ })
446
+ }, null, 4),
447
+ i("div", {
448
+ style: p({
449
+ ...q.value,
450
+ height: l.value.height + "px",
451
+ width: l.value.width + 1 + "px",
452
+ borderRadius: `${e.cornerRadius}px`,
453
+ transform: E.value,
454
+ pointerEvents: "none",
455
+ transition: "all 0.2s ease-out",
456
+ opacity: u.value ? 0.5 : 0,
457
+ backgroundImage: "radial-gradient(circle at 50% 0%, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 80%)",
458
+ mixBlendMode: "overlay"
459
+ })
460
+ }, null, 4),
461
+ i("div", {
462
+ style: p({
463
+ ...U.value,
464
+ height: l.value.height + "px",
465
+ width: l.value.width + 1 + "px",
466
+ borderRadius: `${e.cornerRadius}px`,
467
+ position: q.value.position,
468
+ top: q.value.top,
469
+ left: q.value.left,
470
+ pointerEvents: "none",
471
+ transition: "all 0.2s ease-out",
472
+ opacity: s.value ? 0.4 : u.value ? 0.8 : 0,
473
+ backgroundImage: "radial-gradient(circle at 50% 0%, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%)",
474
+ mixBlendMode: "overlay"
475
+ })
476
+ }, null, 4)
477
+ ], 64)) : X("", !0)
478
+ ], 64);
479
+ };
480
+ }
481
+ }), ge = /* @__PURE__ */ K({
482
+ __name: "App",
483
+ setup(T) {
484
+ return (e, r) => (C(), te(qe));
485
+ }
486
+ });
487
+ ae(ge).mount("#app");
488
+ export {
489
+ ge as App
490
+ };
491
+ //# sourceMappingURL=index.js.map