@dendelion/func-ui 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/README.md +61 -0
- package/dist/components/backdrop/backdrop.d.ts +15 -0
- package/dist/components/backdrop/backdrop.d.ts.map +1 -0
- package/dist/components/backdrop/index.d.ts +3 -0
- package/dist/components/backdrop/index.d.ts.map +1 -0
- package/dist/components/button/button.d.ts +19 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/index.d.ts +3 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/card/card.d.ts +20 -0
- package/dist/components/card/card.d.ts.map +1 -0
- package/dist/components/card/index.d.ts +3 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/glass/glass.d.ts +15 -0
- package/dist/components/glass/glass.d.ts.map +1 -0
- package/dist/components/glass/index.d.ts +3 -0
- package/dist/components/glass/index.d.ts.map +1 -0
- package/dist/components/glow/glow.d.ts +16 -0
- package/dist/components/glow/glow.d.ts.map +1 -0
- package/dist/components/glow/index.d.ts +3 -0
- package/dist/components/glow/index.d.ts.map +1 -0
- package/dist/components/grain/grain.d.ts +11 -0
- package/dist/components/grain/grain.d.ts.map +1 -0
- package/dist/components/grain/index.d.ts +3 -0
- package/dist/components/grain/index.d.ts.map +1 -0
- package/dist/components/icon-button/icon-button.d.ts +17 -0
- package/dist/components/icon-button/icon-button.d.ts.map +1 -0
- package/dist/components/icon-button/index.d.ts +3 -0
- package/dist/components/icon-button/index.d.ts.map +1 -0
- package/dist/components/stamp/index.d.ts +3 -0
- package/dist/components/stamp/index.d.ts.map +1 -0
- package/dist/components/stamp/stamp.d.ts +21 -0
- package/dist/components/stamp/stamp.d.ts.map +1 -0
- package/dist/components/toast/index.d.ts +5 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/toast-context.d.ts +17 -0
- package/dist/components/toast/toast-context.d.ts.map +1 -0
- package/dist/components/toast/toast-provider.d.ts +14 -0
- package/dist/components/toast/toast-provider.d.ts.map +1 -0
- package/dist/components/toast/use-toast.d.ts +2 -0
- package/dist/components/toast/use-toast.d.ts.map +1 -0
- package/dist/components/tooltip/index.d.ts +3 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +17 -0
- package/dist/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/fonts/KyivTypeSerif-Bold.woff2 +0 -0
- package/dist/fonts/KyivTypeSerif-Heavy.woff2 +0 -0
- package/dist/fonts/KyivTypeSerif-Medium.woff2 +0 -0
- package/dist/fonts/montserrat-alternates-latin-400-normal.woff2 +0 -0
- package/dist/fonts/montserrat-alternates-latin-500-normal.woff2 +0 -0
- package/dist/fonts/montserrat-alternates-latin-600-normal.woff2 +0 -0
- package/dist/fonts/montserrat-alternates-latin-700-normal.woff2 +0 -0
- package/dist/fonts/tiny5-latin-400-normal.woff2 +0 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +514 -0
- package/dist/index.mjs.map +1 -0
- package/dist/utils/style-helpers.d.ts +2 -0
- package/dist/utils/style-helpers.d.ts.map +1 -0
- package/package.json +105 -0
- package/postcss.config.js +6 -0
- package/public/fonts/KyivTypeSerif-Bold.woff2 +0 -0
- package/public/fonts/KyivTypeSerif-Heavy.woff2 +0 -0
- package/public/fonts/KyivTypeSerif-Medium.woff2 +0 -0
- package/public/fonts/montserrat-alternates-latin-400-normal.woff2 +0 -0
- package/public/fonts/montserrat-alternates-latin-500-normal.woff2 +0 -0
- package/public/fonts/montserrat-alternates-latin-600-normal.woff2 +0 -0
- package/public/fonts/montserrat-alternates-latin-700-normal.woff2 +0 -0
- package/public/fonts/tiny5-latin-400-normal.woff2 +0 -0
- package/src/globals.scss +133 -0
- package/src/styles/_mixins.scss +30 -0
- package/src/styles/_tokens.scss +46 -0
- package/tailwind.config.js +7 -0
- package/tailwind.ts +66 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { clsx as Y } from "clsx";
|
|
3
|
+
import { twMerge as Z } from "tailwind-merge";
|
|
4
|
+
import { jsx as c, jsxs as h, Fragment as J } from "react/jsx-runtime";
|
|
5
|
+
import { useId as H, useState as R, useMemo as K, forwardRef as W, useRef as N, useCallback as P, useEffect as D, useLayoutEffect as U, Children as V, cloneElement as Q, createContext as A, useContext as tt } from "react";
|
|
6
|
+
import { createPortal as j } from "react-dom";
|
|
7
|
+
function b(...o) {
|
|
8
|
+
return Z(Y(o));
|
|
9
|
+
}
|
|
10
|
+
const ot = "grain-module__grain___sp9ca", et = {
|
|
11
|
+
grain: ot
|
|
12
|
+
};
|
|
13
|
+
function nt({ opacity: o, className: t, style: e, ..._ }) {
|
|
14
|
+
const a = o != null ? { "--fui-grain-opacity": String(o) } : void 0;
|
|
15
|
+
return /* @__PURE__ */ c(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
"aria-hidden": !0,
|
|
19
|
+
className: b(et.grain, t),
|
|
20
|
+
style: { ...a, ...e },
|
|
21
|
+
..._
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
const st = "glow-module__glow___kEcKf", rt = "glow-module__blob___b1llZ", ct = "glow-module__wobble___kfp96", at = "glow-module__botBlob___XG8Xf", L = {
|
|
26
|
+
glow: st,
|
|
27
|
+
blob: rt,
|
|
28
|
+
wobble: ct,
|
|
29
|
+
botBlob: at
|
|
30
|
+
};
|
|
31
|
+
function lt(o) {
|
|
32
|
+
let t = o | 0;
|
|
33
|
+
return () => {
|
|
34
|
+
t = t + 1831565813 | 0;
|
|
35
|
+
let e = Math.imul(t ^ t >>> 15, 1 | t);
|
|
36
|
+
return e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e, ((e ^ e >>> 14) >>> 0) / 4294967296;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function X(o, t, e, _) {
|
|
40
|
+
const a = 6 + Math.floor(o() * 4), s = 0.12 + o() * 0.28, i = 0.85 + o() * 0.4, d = 0.85 + o() * 0.4, p = o() * Math.PI * 2, u = [];
|
|
41
|
+
for (let r = 0; r < a; r++) {
|
|
42
|
+
const l = p + r / a * Math.PI * 2, f = _ * (1 - s + o() * s * 2);
|
|
43
|
+
u.push([t + Math.cos(l) * f * i, e + Math.sin(l) * f * d]);
|
|
44
|
+
}
|
|
45
|
+
let n = `M${u[0][0].toFixed(1)},${u[0][1].toFixed(1)}`;
|
|
46
|
+
for (let r = 0; r < a; r++) {
|
|
47
|
+
const l = u[(r - 1 + a) % a], f = u[r], g = u[(r + 1) % a], y = u[(r + 2) % a], M = f[0] + (g[0] - l[0]) / 6, I = f[1] + (g[1] - l[1]) / 6, m = g[0] - (y[0] - f[0]) / 6, w = g[1] - (y[1] - f[1]) / 6;
|
|
48
|
+
n += `C${M.toFixed(1)},${I.toFixed(1)} ${m.toFixed(1)},${w.toFixed(1)} ${g[0].toFixed(1)},${g[1].toFixed(1)}`;
|
|
49
|
+
}
|
|
50
|
+
return `${n}Z`;
|
|
51
|
+
}
|
|
52
|
+
function it(o) {
|
|
53
|
+
const t = lt(o), e = 4 + Math.floor(t() * 2), _ = [];
|
|
54
|
+
for (let i = 0; i < e; i++) {
|
|
55
|
+
const d = 13 + t() * 8, p = 270 + t() * 50, u = 350 + t() * 24, n = 24 + t() * 28, r = 6 + t() * 8, l = 196 + t() * 42;
|
|
56
|
+
_.push({
|
|
57
|
+
d: X(t, p, u, d),
|
|
58
|
+
opacity: 0.6 + t() * 0.4,
|
|
59
|
+
dur: n,
|
|
60
|
+
// Stratified phases: blob i starts i/count of the way through its
|
|
61
|
+
// cycle (± jitter), so the wax stays spread through the lamp instead
|
|
62
|
+
// of randomly clumping into one goo column mid-flight.
|
|
63
|
+
delay: -((i + t() * 0.6) / e * n),
|
|
64
|
+
rise: u - l,
|
|
65
|
+
wobbleDur: r,
|
|
66
|
+
wobbleDelay: -(t() * r),
|
|
67
|
+
sway: 3 + t() * 5
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const a = 3 + Math.floor(t() * 2), s = [];
|
|
71
|
+
for (let i = 0; i < a; i++) {
|
|
72
|
+
const d = 12 + t() * 6, p = 268 + t() * 54, u = 352 + t() * 24, n = 36 + t() * 30, r = 9 + t() * 8, l = 205 + t() * 45;
|
|
73
|
+
s.push({
|
|
74
|
+
d: X(t, p, u, d),
|
|
75
|
+
// Near-full alpha INTO the filter — the goo threshold erases dim input.
|
|
76
|
+
// The layer is faded as a whole, after filtering, in the JSX.
|
|
77
|
+
opacity: 0.85 + t() * 0.15,
|
|
78
|
+
dur: n,
|
|
79
|
+
delay: -((i + t() * 0.6) / a * n),
|
|
80
|
+
rise: u - l,
|
|
81
|
+
wobbleDur: r,
|
|
82
|
+
wobbleDelay: -(t() * r),
|
|
83
|
+
sway: 2 + t() * 3
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return { blobs: _, depthBlobs: s };
|
|
87
|
+
}
|
|
88
|
+
function dt({ className: o, seed: t }) {
|
|
89
|
+
const e = H().replace(/:/g, ""), _ = `goo-${e}`, a = `goo-soft-${e}`, s = `clip-${e}`, i = `grad-${e}`, [d] = R(() => Math.floor(Math.random() * 2 ** 31)), { blobs: p, depthBlobs: u } = K(
|
|
90
|
+
() => it(t ?? d),
|
|
91
|
+
[t, d]
|
|
92
|
+
), n = (r) => r.map((l) => /* @__PURE__ */ c(
|
|
93
|
+
"g",
|
|
94
|
+
{
|
|
95
|
+
className: L.blob,
|
|
96
|
+
style: {
|
|
97
|
+
opacity: l.opacity,
|
|
98
|
+
"--lava-dur": `${l.dur.toFixed(1)}s`,
|
|
99
|
+
"--lava-delay": `${l.delay.toFixed(1)}s`,
|
|
100
|
+
"--lava-rise": `${l.rise.toFixed(0)}px`
|
|
101
|
+
},
|
|
102
|
+
children: /* @__PURE__ */ c(
|
|
103
|
+
"path",
|
|
104
|
+
{
|
|
105
|
+
className: L.wobble,
|
|
106
|
+
d: l.d,
|
|
107
|
+
style: {
|
|
108
|
+
"--lava-wdur": `${l.wobbleDur.toFixed(1)}s`,
|
|
109
|
+
"--lava-wdelay": `${l.wobbleDelay.toFixed(1)}s`,
|
|
110
|
+
"--lava-sway": `${l.sway.toFixed(1)}px`
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
},
|
|
115
|
+
l.d
|
|
116
|
+
));
|
|
117
|
+
return /* @__PURE__ */ h(
|
|
118
|
+
"svg",
|
|
119
|
+
{
|
|
120
|
+
className: b(L.glow, o),
|
|
121
|
+
viewBox: "0 0 600 600",
|
|
122
|
+
"aria-hidden": !0,
|
|
123
|
+
role: "presentation",
|
|
124
|
+
children: [
|
|
125
|
+
/* @__PURE__ */ h("defs", { children: [
|
|
126
|
+
/* @__PURE__ */ h("filter", { id: _, colorInterpolationFilters: "sRGB", children: [
|
|
127
|
+
/* @__PURE__ */ c("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "8", result: "blur" }),
|
|
128
|
+
/* @__PURE__ */ c(
|
|
129
|
+
"feColorMatrix",
|
|
130
|
+
{
|
|
131
|
+
in: "blur",
|
|
132
|
+
mode: "matrix",
|
|
133
|
+
values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 21 -9",
|
|
134
|
+
result: "cm"
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
/* @__PURE__ */ c("feBlend", {})
|
|
138
|
+
] }),
|
|
139
|
+
/* @__PURE__ */ h("filter", { id: a, colorInterpolationFilters: "sRGB", children: [
|
|
140
|
+
/* @__PURE__ */ c("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "10", result: "blur" }),
|
|
141
|
+
/* @__PURE__ */ c(
|
|
142
|
+
"feColorMatrix",
|
|
143
|
+
{
|
|
144
|
+
in: "blur",
|
|
145
|
+
mode: "matrix",
|
|
146
|
+
values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 14 -6"
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
] }),
|
|
150
|
+
/* @__PURE__ */ c("clipPath", { id: s, children: /* @__PURE__ */ c("path", { d: "M262,174h60l33.5,182.3c0,0,2.7,12.8,2.5,22.8c-7.5,0-131,0-131,0s-0.7-9.3,0-18C227.6,352.9,262,174,262,174z" }) }),
|
|
151
|
+
/* @__PURE__ */ h("radialGradient", { id: i, cx: "300", cy: "300", r: "400", gradientUnits: "userSpaceOnUse", children: [
|
|
152
|
+
/* @__PURE__ */ c("stop", { offset: "0.0714", stopColor: "currentColor", stopOpacity: "0.19" }),
|
|
153
|
+
/* @__PURE__ */ c("stop", { offset: "0.3107", stopColor: "currentColor", stopOpacity: "0.13" }),
|
|
154
|
+
/* @__PURE__ */ c("stop", { offset: "0.553", stopColor: "currentColor", stopOpacity: "0.06" }),
|
|
155
|
+
/* @__PURE__ */ c("stop", { offset: "0.7828", stopColor: "currentColor", stopOpacity: "0.02" }),
|
|
156
|
+
/* @__PURE__ */ c("stop", { offset: "0.9847", stopColor: "currentColor", stopOpacity: "0" })
|
|
157
|
+
] })
|
|
158
|
+
] }),
|
|
159
|
+
/* @__PURE__ */ c("rect", { fill: `url(#${i})`, width: "600", height: "600" }),
|
|
160
|
+
/* @__PURE__ */ c("g", { filter: `url(#${a})`, clipPath: `url(#${s})`, fill: "currentColor", opacity: 0.2, children: n(u) }),
|
|
161
|
+
/* @__PURE__ */ h("g", { filter: `url(#${_})`, clipPath: `url(#${s})`, fill: "currentColor", children: [
|
|
162
|
+
n(p),
|
|
163
|
+
/* @__PURE__ */ c(
|
|
164
|
+
"path",
|
|
165
|
+
{
|
|
166
|
+
className: L.botBlob,
|
|
167
|
+
d: "M354,381.2c6.8,3.4,5.4,7.4-5.6,10.4c-10.7,3.1-31.1,5.1-54.4,8.4c-23.3,3.3-43.7,0.8-54.4-2.4c-11-3.4-12.4-7.6-5.6-13.8c6.8-7,18.9-14.6,29.6-17.4c11-3.3,20.6-1.8,30.4-1.4c9.8,0.4,19.4,5.1,30.4,8.3C335.1,376.8,347.2,378.6,354,381.2z"
|
|
168
|
+
}
|
|
169
|
+
)
|
|
170
|
+
] })
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
const _t = "backdrop-module__backdrop___CoxJ-", ut = "backdrop-module__glowLayer___esKR8", mt = "backdrop-module__grainLayer___44u-y", pt = "backdrop-module__content___W2hOD", F = {
|
|
176
|
+
backdrop: _t,
|
|
177
|
+
glowLayer: ut,
|
|
178
|
+
grainLayer: mt,
|
|
179
|
+
content: pt
|
|
180
|
+
};
|
|
181
|
+
function $o({ grain: o = !0, glow: t = !0, className: e, children: _ }) {
|
|
182
|
+
return /* @__PURE__ */ h("div", { className: b(F.backdrop, e), children: [
|
|
183
|
+
t && /* @__PURE__ */ c("div", { className: F.glowLayer, children: /* @__PURE__ */ c(dt, {}) }),
|
|
184
|
+
o && /* @__PURE__ */ c(nt, { className: F.grainLayer }),
|
|
185
|
+
/* @__PURE__ */ c("div", { className: F.content, children: _ })
|
|
186
|
+
] });
|
|
187
|
+
}
|
|
188
|
+
const ft = "glass-module__glass___Z6fy2", bt = {
|
|
189
|
+
glass: ft
|
|
190
|
+
}, xo = W(function({ blur: t, className: e, style: _, children: a, ...s }, i) {
|
|
191
|
+
const d = t === 0 ? { backdropFilter: "none", WebkitBackdropFilter: "none" } : t != null ? { "--fui-glass-blur": `${t}px` } : void 0;
|
|
192
|
+
return /* @__PURE__ */ c("div", { ref: i, className: b(bt.glass, e), style: { ...d, ..._ }, ...s, children: a });
|
|
193
|
+
}), ht = "button-module__button___Z331g", gt = "button-module__active___weXhI", yt = "button-module__primary___ppbyq", wt = "button-module__secondary___esy5L", vt = "button-module__ghost___NisA0", $t = "button-module__danger___Wnvuq", xt = "button-module__md___REpcP", Ct = "button-module__sm___QYj0l", kt = "button-module__fullWidth___H0P0F", Nt = "button-module__iconSlot___BGOaK", C = {
|
|
194
|
+
button: ht,
|
|
195
|
+
active: gt,
|
|
196
|
+
primary: yt,
|
|
197
|
+
secondary: wt,
|
|
198
|
+
ghost: vt,
|
|
199
|
+
danger: $t,
|
|
200
|
+
md: xt,
|
|
201
|
+
sm: Ct,
|
|
202
|
+
fullWidth: kt,
|
|
203
|
+
iconSlot: Nt
|
|
204
|
+
}, Co = W(function({
|
|
205
|
+
variant: t = "primary",
|
|
206
|
+
size: e = "md",
|
|
207
|
+
fullWidth: _ = !1,
|
|
208
|
+
icon: a,
|
|
209
|
+
iconRight: s,
|
|
210
|
+
isActive: i = !1,
|
|
211
|
+
className: d,
|
|
212
|
+
children: p,
|
|
213
|
+
...u
|
|
214
|
+
}, n) {
|
|
215
|
+
return /* @__PURE__ */ h(
|
|
216
|
+
"button",
|
|
217
|
+
{
|
|
218
|
+
ref: n,
|
|
219
|
+
type: "button",
|
|
220
|
+
"aria-pressed": i || void 0,
|
|
221
|
+
className: b(
|
|
222
|
+
C.button,
|
|
223
|
+
C[t],
|
|
224
|
+
C[e],
|
|
225
|
+
_ && C.fullWidth,
|
|
226
|
+
i && C.active,
|
|
227
|
+
d
|
|
228
|
+
),
|
|
229
|
+
...u,
|
|
230
|
+
children: [
|
|
231
|
+
a && /* @__PURE__ */ c("span", { className: C.iconSlot, children: a }),
|
|
232
|
+
p,
|
|
233
|
+
s && /* @__PURE__ */ c("span", { className: C.iconSlot, children: s })
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
);
|
|
237
|
+
}), Bt = "icon-button-module__iconButton___avg6i", Mt = "icon-button-module__active___XaJ4h", Lt = "icon-button-module__ghost___Wbxog", Ft = "icon-button-module__danger___p0Xz5", Tt = "icon-button-module__sm___4l7PX", Et = "icon-button-module__md___48iuw", T = {
|
|
238
|
+
iconButton: Bt,
|
|
239
|
+
default: "icon-button-module__default___9frNR",
|
|
240
|
+
active: Mt,
|
|
241
|
+
ghost: Lt,
|
|
242
|
+
danger: Ft,
|
|
243
|
+
sm: Tt,
|
|
244
|
+
md: Et
|
|
245
|
+
}, ko = W(function({ icon: t, label: e, variant: _ = "default", size: a = "md", isActive: s = !1, className: i, ...d }, p) {
|
|
246
|
+
return /* @__PURE__ */ c(
|
|
247
|
+
"button",
|
|
248
|
+
{
|
|
249
|
+
ref: p,
|
|
250
|
+
type: "button",
|
|
251
|
+
"aria-label": e,
|
|
252
|
+
title: e,
|
|
253
|
+
"aria-pressed": s || void 0,
|
|
254
|
+
className: b(
|
|
255
|
+
T.iconButton,
|
|
256
|
+
T[_],
|
|
257
|
+
T[a],
|
|
258
|
+
s && T.active,
|
|
259
|
+
i
|
|
260
|
+
),
|
|
261
|
+
...d,
|
|
262
|
+
children: t
|
|
263
|
+
}
|
|
264
|
+
);
|
|
265
|
+
}), St = "stamp-module__stamp___5qaNY", Gt = "stamp-module__dot___qZyCR", Ot = "stamp-module__neutral___6CXei", Rt = "stamp-module__info___hH0OA", It = "stamp-module__success___vtscx", Pt = "stamp-module__warning___H6sZS", Dt = "stamp-module__error___G-HEQ", Wt = "stamp-module__sm___N-jia", Xt = "stamp-module__md___Cz5Vg", E = {
|
|
266
|
+
stamp: St,
|
|
267
|
+
dot: Gt,
|
|
268
|
+
neutral: Ot,
|
|
269
|
+
info: Rt,
|
|
270
|
+
success: It,
|
|
271
|
+
warning: Pt,
|
|
272
|
+
error: Dt,
|
|
273
|
+
sm: Wt,
|
|
274
|
+
md: Xt
|
|
275
|
+
};
|
|
276
|
+
function No({
|
|
277
|
+
variant: o = "neutral",
|
|
278
|
+
size: t = "sm",
|
|
279
|
+
dot: e = !1,
|
|
280
|
+
fillColor: _,
|
|
281
|
+
textColor: a,
|
|
282
|
+
onClick: s,
|
|
283
|
+
className: i,
|
|
284
|
+
style: d,
|
|
285
|
+
children: p,
|
|
286
|
+
...u
|
|
287
|
+
}) {
|
|
288
|
+
const n = s ? "button" : "span", r = _ || a ? { backgroundColor: _, color: a } : void 0;
|
|
289
|
+
return /* @__PURE__ */ h(
|
|
290
|
+
n,
|
|
291
|
+
{
|
|
292
|
+
type: s ? "button" : void 0,
|
|
293
|
+
onClick: s,
|
|
294
|
+
className: b(E.stamp, E[o], E[t], i),
|
|
295
|
+
style: { ...r, ...d },
|
|
296
|
+
...u,
|
|
297
|
+
children: [
|
|
298
|
+
e && /* @__PURE__ */ c("span", { className: E.dot, "aria-hidden": !0 }),
|
|
299
|
+
p
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
const zt = "tooltip-module__tooltip___e-rkz", Ht = "tooltip-module__ready___LI2J6", z = {
|
|
305
|
+
tooltip: zt,
|
|
306
|
+
ready: Ht
|
|
307
|
+
}, S = 8, G = 8;
|
|
308
|
+
function O(o, t) {
|
|
309
|
+
return (e) => {
|
|
310
|
+
typeof o == "function" && o(e), t(e);
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function Bo({ content: o, children: t, placement: e = "top", delay: _ = 300 }) {
|
|
314
|
+
const a = H(), [s, i] = R(!1), [d, p] = R(null), u = N(null), n = N(null), r = N(void 0), l = P(() => {
|
|
315
|
+
window.clearTimeout(r.current), i(!1), p(null);
|
|
316
|
+
}, []);
|
|
317
|
+
D(() => () => window.clearTimeout(r.current), []), D(() => {
|
|
318
|
+
if (!s) return;
|
|
319
|
+
const m = (w) => {
|
|
320
|
+
w.key === "Escape" && l();
|
|
321
|
+
};
|
|
322
|
+
return window.addEventListener("keydown", m), window.addEventListener("scroll", l, !0), window.addEventListener("resize", l), () => {
|
|
323
|
+
window.removeEventListener("keydown", m), window.removeEventListener("scroll", l, !0), window.removeEventListener("resize", l);
|
|
324
|
+
};
|
|
325
|
+
}, [s, l]), U(() => {
|
|
326
|
+
if (!s) return;
|
|
327
|
+
const m = n.current, w = u.current;
|
|
328
|
+
if (!m || !w) return;
|
|
329
|
+
const v = w.getBoundingClientRect();
|
|
330
|
+
let $, x;
|
|
331
|
+
switch (e) {
|
|
332
|
+
case "bottom":
|
|
333
|
+
$ = m.bottom + S, x = m.left + m.width / 2 - v.width / 2;
|
|
334
|
+
break;
|
|
335
|
+
case "left":
|
|
336
|
+
$ = m.top + m.height / 2 - v.height / 2, x = m.left - v.width - S;
|
|
337
|
+
break;
|
|
338
|
+
case "right":
|
|
339
|
+
$ = m.top + m.height / 2 - v.height / 2, x = m.right + S;
|
|
340
|
+
break;
|
|
341
|
+
default:
|
|
342
|
+
$ = m.top - v.height - S, x = m.left + m.width / 2 - v.width / 2;
|
|
343
|
+
}
|
|
344
|
+
x = Math.min(Math.max(x, G), window.innerWidth - v.width - G), $ = Math.min(Math.max($, G), window.innerHeight - v.height - G), p({ top: $, left: x });
|
|
345
|
+
}, [s, e]);
|
|
346
|
+
const f = o == null || o === !1 || o === "", g = V.only(t), y = g.props, M = (m) => {
|
|
347
|
+
n.current = m.getBoundingClientRect(), i(!0);
|
|
348
|
+
};
|
|
349
|
+
if (f) return t;
|
|
350
|
+
const I = Q(g, {
|
|
351
|
+
onMouseEnter: O(y.onMouseEnter, (m) => {
|
|
352
|
+
const w = m.currentTarget;
|
|
353
|
+
window.clearTimeout(r.current), r.current = window.setTimeout(() => M(w), _);
|
|
354
|
+
}),
|
|
355
|
+
onMouseLeave: O(y.onMouseLeave, l),
|
|
356
|
+
onFocus: O(y.onFocus, (m) => {
|
|
357
|
+
M(m.currentTarget);
|
|
358
|
+
}),
|
|
359
|
+
onBlur: O(y.onBlur, l),
|
|
360
|
+
"aria-describedby": s ? a : y["aria-describedby"]
|
|
361
|
+
});
|
|
362
|
+
return /* @__PURE__ */ h(J, { children: [
|
|
363
|
+
I,
|
|
364
|
+
s && j(
|
|
365
|
+
/* @__PURE__ */ c(
|
|
366
|
+
"div",
|
|
367
|
+
{
|
|
368
|
+
ref: u,
|
|
369
|
+
id: a,
|
|
370
|
+
role: "tooltip",
|
|
371
|
+
className: b(z.tooltip, d && z.ready),
|
|
372
|
+
style: d ? { top: d.top, left: d.left } : void 0,
|
|
373
|
+
children: o
|
|
374
|
+
}
|
|
375
|
+
),
|
|
376
|
+
document.body
|
|
377
|
+
)
|
|
378
|
+
] });
|
|
379
|
+
}
|
|
380
|
+
const q = A(null), Kt = "toast-module__stack___hDi0s", jt = "toast-module__top-left___rIwtH", qt = "toast-module__top-center___OapVt", Yt = "toast-module__top-right___Ci4Ki", Zt = "toast-module__bottom-left___y6xhK", Jt = "toast-module__bottom-center___yYVrc", Ut = "toast-module__bottom-right___JeMil", Vt = "toast-module__toast___y1lVX", Qt = "toast-module__toast-in___TYYwQ", At = "toast-module__title___1Oqh8", to = "toast-module__description___eiUSB", oo = "toast-module__close___IDukn", eo = "toast-module__info___Nh8S9", no = "toast-module__success___hlKLc", so = "toast-module__warning___XUMJt", ro = "toast-module__error___pSFFC", k = {
|
|
381
|
+
stack: Kt,
|
|
382
|
+
topLeft: jt,
|
|
383
|
+
topCenter: qt,
|
|
384
|
+
topRight: Yt,
|
|
385
|
+
bottomLeft: Zt,
|
|
386
|
+
bottomCenter: Jt,
|
|
387
|
+
bottomRight: Ut,
|
|
388
|
+
toast: Vt,
|
|
389
|
+
toastIn: Qt,
|
|
390
|
+
title: At,
|
|
391
|
+
description: to,
|
|
392
|
+
close: oo,
|
|
393
|
+
info: eo,
|
|
394
|
+
success: no,
|
|
395
|
+
warning: so,
|
|
396
|
+
error: ro
|
|
397
|
+
};
|
|
398
|
+
function Mo({
|
|
399
|
+
children: o,
|
|
400
|
+
position: t = "bottom-right",
|
|
401
|
+
defaultDuration: e = 5e3
|
|
402
|
+
}) {
|
|
403
|
+
const [_, a] = R([]), s = N(/* @__PURE__ */ new Map()), i = N(0), d = P((n) => {
|
|
404
|
+
a((l) => l.filter((f) => f.id !== n));
|
|
405
|
+
const r = s.current.get(n);
|
|
406
|
+
r !== void 0 && (window.clearTimeout(r), s.current.delete(n));
|
|
407
|
+
}, []), p = P(
|
|
408
|
+
(n) => {
|
|
409
|
+
i.current += 1;
|
|
410
|
+
const r = `fui-toast-${i.current}`;
|
|
411
|
+
a((f) => [
|
|
412
|
+
...f,
|
|
413
|
+
{
|
|
414
|
+
id: r,
|
|
415
|
+
title: n.title,
|
|
416
|
+
description: n.description,
|
|
417
|
+
variant: n.variant ?? "info"
|
|
418
|
+
}
|
|
419
|
+
]);
|
|
420
|
+
const l = n.duration ?? e;
|
|
421
|
+
return l > 0 && s.current.set(
|
|
422
|
+
r,
|
|
423
|
+
window.setTimeout(() => d(r), l)
|
|
424
|
+
), r;
|
|
425
|
+
},
|
|
426
|
+
[e, d]
|
|
427
|
+
);
|
|
428
|
+
D(() => {
|
|
429
|
+
const n = s.current;
|
|
430
|
+
return () => {
|
|
431
|
+
for (const r of n.values()) window.clearTimeout(r);
|
|
432
|
+
};
|
|
433
|
+
}, []);
|
|
434
|
+
const u = K(() => ({ toast: p, dismiss: d }), [p, d]);
|
|
435
|
+
return /* @__PURE__ */ h(q.Provider, { value: u, children: [
|
|
436
|
+
o,
|
|
437
|
+
j(
|
|
438
|
+
/* @__PURE__ */ c("div", { className: b(k.stack, k[t]), children: _.map((n) => /* @__PURE__ */ h(
|
|
439
|
+
"div",
|
|
440
|
+
{
|
|
441
|
+
role: n.variant === "error" ? "alert" : "status",
|
|
442
|
+
className: b(k.toast, k[n.variant]),
|
|
443
|
+
children: [
|
|
444
|
+
n.title && /* @__PURE__ */ c("p", { className: k.title, children: n.title }),
|
|
445
|
+
n.description && /* @__PURE__ */ c("p", { className: k.description, children: n.description }),
|
|
446
|
+
/* @__PURE__ */ c(
|
|
447
|
+
"button",
|
|
448
|
+
{
|
|
449
|
+
type: "button",
|
|
450
|
+
"aria-label": "Dismiss",
|
|
451
|
+
className: k.close,
|
|
452
|
+
onClick: () => d(n.id),
|
|
453
|
+
children: "×"
|
|
454
|
+
}
|
|
455
|
+
)
|
|
456
|
+
]
|
|
457
|
+
},
|
|
458
|
+
n.id
|
|
459
|
+
)) }),
|
|
460
|
+
document.body
|
|
461
|
+
)
|
|
462
|
+
] });
|
|
463
|
+
}
|
|
464
|
+
function Lo() {
|
|
465
|
+
const o = tt(q);
|
|
466
|
+
if (!o) throw new Error("useToast must be used within a <ToastProvider>");
|
|
467
|
+
return o;
|
|
468
|
+
}
|
|
469
|
+
const co = "card-module__card___HG0v6", ao = "card-module__interactive___lCSFj", lo = "card-module__sm___ug17X", io = "card-module__md___BAzpC", _o = "card-module__title___9LIjW", uo = "card-module__body___b17cz", B = {
|
|
470
|
+
card: co,
|
|
471
|
+
interactive: ao,
|
|
472
|
+
sm: lo,
|
|
473
|
+
md: io,
|
|
474
|
+
title: _o,
|
|
475
|
+
body: uo
|
|
476
|
+
};
|
|
477
|
+
function mo(o) {
|
|
478
|
+
o.target === o.currentTarget && (o.key === "Enter" || o.key === " ") && (o.preventDefault(), o.currentTarget.click());
|
|
479
|
+
}
|
|
480
|
+
function po({ size: o = "md", onClick: t, className: e, children: _, ...a }) {
|
|
481
|
+
const s = t != null;
|
|
482
|
+
return /* @__PURE__ */ c(
|
|
483
|
+
"div",
|
|
484
|
+
{
|
|
485
|
+
className: b(B.card, B[o], s && B.interactive, e),
|
|
486
|
+
onClick: t,
|
|
487
|
+
...s ? { role: "button", tabIndex: 0, onKeyDown: mo } : void 0,
|
|
488
|
+
...a,
|
|
489
|
+
children: _
|
|
490
|
+
}
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
function fo({ className: o, children: t, ...e }) {
|
|
494
|
+
return /* @__PURE__ */ c("h3", { className: b(B.title, o), ...e, children: t });
|
|
495
|
+
}
|
|
496
|
+
function bo({ className: o, children: t, ...e }) {
|
|
497
|
+
return /* @__PURE__ */ c("p", { className: b(B.body, o), ...e, children: t });
|
|
498
|
+
}
|
|
499
|
+
const Fo = Object.assign(po, { Title: fo, Body: bo });
|
|
500
|
+
export {
|
|
501
|
+
$o as Backdrop,
|
|
502
|
+
Co as Button,
|
|
503
|
+
Fo as Card,
|
|
504
|
+
xo as Glass,
|
|
505
|
+
dt as Glow,
|
|
506
|
+
nt as Grain,
|
|
507
|
+
ko as IconButton,
|
|
508
|
+
No as Stamp,
|
|
509
|
+
Mo as ToastProvider,
|
|
510
|
+
Bo as Tooltip,
|
|
511
|
+
b as cn,
|
|
512
|
+
Lo as useToast
|
|
513
|
+
};
|
|
514
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/utils/style-helpers.ts","../src/components/grain/grain.tsx","../src/components/glow/glow.tsx","../src/components/backdrop/backdrop.tsx","../src/components/glass/glass.tsx","../src/components/button/button.tsx","../src/components/icon-button/icon-button.tsx","../src/components/stamp/stamp.tsx","../src/components/tooltip/tooltip.tsx","../src/components/toast/toast-context.ts","../src/components/toast/toast-provider.tsx","../src/components/toast/use-toast.ts","../src/components/card/card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './grain.module.scss';\n\nexport interface GrainProps extends HTMLAttributes<HTMLDivElement> {\n /** Overlay opacity (0–1). Defaults to 0.06. */\n opacity?: number;\n}\n\n/**\n * Animated film-grain overlay. Drop it inside a positioned container to add a\n * drifting noise texture. Purely decorative — `aria-hidden` by default.\n */\nexport function Grain({ opacity, className, style, ...props }: GrainProps) {\n const vars =\n opacity != null ? ({ '--fui-grain-opacity': String(opacity) } as CSSProperties) : undefined;\n // Default opacity lives in the SCSS (0.4 dark / 0.2 light) — override via the `opacity` prop.\n\n return (\n <div\n aria-hidden\n className={cn(styles.grain, className)}\n style={{ ...vars, ...style }}\n {...props}\n />\n );\n}\n","import { type CSSProperties, useId, useMemo, useState } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './glow.module.scss';\n\nexport interface GlowProps {\n className?: string;\n /**\n * Seed for the procedurally generated blobs. Each mount picks a random lamp\n * by default; pass a fixed seed for a reproducible one (e.g. with SSR).\n */\n seed?: number;\n}\n\n// mulberry32 — tiny seeded PRNG so a given seed always yields the same lamp.\nfunction mulberry32(seed: number) {\n let a = seed | 0;\n return () => {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n// An organic closed outline: 6–9 vertices scattered around a (squashed)\n// circle, joined by a Catmull-Rom spline converted to cubic Béziers. The goo\n// filter smooths whatever this produces, so irregularity reads as lava, not\n// polygons.\nfunction blobPath(rng: () => number, cx: number, cy: number, r: number): string {\n const vertices = 6 + Math.floor(rng() * 4);\n const irregularity = 0.12 + rng() * 0.28;\n const squashX = 0.85 + rng() * 0.4;\n const squashY = 0.85 + rng() * 0.4;\n const phase = rng() * Math.PI * 2;\n\n const pts: [number, number][] = [];\n for (let i = 0; i < vertices; i++) {\n const angle = phase + (i / vertices) * Math.PI * 2;\n const radius = r * (1 - irregularity + rng() * irregularity * 2);\n pts.push([cx + Math.cos(angle) * radius * squashX, cy + Math.sin(angle) * radius * squashY]);\n }\n\n let d = `M${pts[0][0].toFixed(1)},${pts[0][1].toFixed(1)}`;\n for (let i = 0; i < vertices; i++) {\n const p0 = pts[(i - 1 + vertices) % vertices];\n const p1 = pts[i];\n const p2 = pts[(i + 1) % vertices];\n const p3 = pts[(i + 2) % vertices];\n const c1x = p1[0] + (p2[0] - p0[0]) / 6;\n const c1y = p1[1] + (p2[1] - p0[1]) / 6;\n const c2x = p2[0] - (p3[0] - p1[0]) / 6;\n const c2y = p2[1] - (p3[1] - p1[1]) / 6;\n d += `C${c1x.toFixed(1)},${c1y.toFixed(1)} ${c2x.toFixed(1)},${c2y.toFixed(1)} ${p2[0].toFixed(1)},${p2[1].toFixed(1)}`;\n }\n return `${d}Z`;\n}\n\ninterface BlobConfig {\n d: string;\n opacity: number;\n dur: number;\n delay: number;\n rise: number;\n wobbleDur: number;\n wobbleDelay: number;\n sway: number;\n}\n\ninterface LampConfig {\n blobs: BlobConfig[];\n depthBlobs: BlobConfig[];\n}\n\nfunction generateLamp(seed: number): LampConfig {\n const rng = mulberry32(seed);\n const count = 4 + Math.floor(rng() * 2);\n const blobs: BlobConfig[] = [];\n for (let i = 0; i < count; i++) {\n const r = 13 + rng() * 8; // narrow band — similar sizes, no giant/tiny pair\n const cx = 270 + rng() * 50; // spread across the pool, inside the glass\n const cy = 350 + rng() * 24; // resting in the pool — the cycle rises from here\n const dur = 24 + rng() * 28; // full rise-hover-sink cycle\n const wobbleDur = 6 + rng() * 8;\n // Climb target in lamp coords. At the 4× backdrop scale the screen top\n // sits at y≈225, so most flights poke a little past the screen edge;\n // the clip shape ends at y=174, comfortably off-screen above it.\n const peak = 196 + rng() * 42;\n blobs.push({\n d: blobPath(rng, cx, cy, r),\n opacity: 0.6 + rng() * 0.4,\n dur,\n // Stratified phases: blob i starts i/count of the way through its\n // cycle (± jitter), so the wax stays spread through the lamp instead\n // of randomly clumping into one goo column mid-flight.\n delay: -(((i + rng() * 0.6) / count) * dur),\n rise: cy - peak,\n wobbleDur,\n wobbleDelay: -(rng() * wobbleDur),\n sway: 3 + rng() * 5,\n });\n }\n\n // Background wax — a dim, slow, softer-edged layer rendered behind the\n // main blobs to give the lamp depth: slightly smaller (perspective),\n // much fainter, and drifting at roughly half speed.\n const depthCount = 3 + Math.floor(rng() * 2);\n const depthBlobs: BlobConfig[] = [];\n for (let i = 0; i < depthCount; i++) {\n const r = 12 + rng() * 6;\n const cx = 268 + rng() * 54;\n const cy = 352 + rng() * 24;\n const dur = 36 + rng() * 30;\n const wobbleDur = 9 + rng() * 8;\n const peak = 205 + rng() * 45; // stays a touch lower — the foreground owns the top edge\n depthBlobs.push({\n d: blobPath(rng, cx, cy, r),\n // Near-full alpha INTO the filter — the goo threshold erases dim input.\n // The layer is faded as a whole, after filtering, in the JSX.\n opacity: 0.85 + rng() * 0.15,\n dur,\n delay: -(((i + rng() * 0.6) / depthCount) * dur),\n rise: cy - peak,\n wobbleDur,\n wobbleDelay: -(rng() * wobbleDur),\n sway: 2 + rng() * 3,\n });\n }\n\n return { blobs, depthBlobs };\n}\n\n/**\n * The signature lava-lamp ambient glow — gooey blobs drifting behind a soft\n * radial halo. Colour follows `--fui-glow` (via `currentColor`), so it retints\n * with the theme; size/position are controlled by the parent. Blob shapes are\n * procedurally generated: random per mount unless `seed` is given.\n */\nexport function Glow({ className, seed }: GlowProps) {\n const uid = useId().replace(/:/g, '');\n const goo = `goo-${uid}`;\n const gooSoft = `goo-soft-${uid}`;\n const clip = `clip-${uid}`;\n const grad = `grad-${uid}`;\n\n const [fallbackSeed] = useState(() => Math.floor(Math.random() * 2 ** 31));\n const { blobs, depthBlobs } = useMemo(\n () => generateLamp(seed ?? fallbackSeed),\n [seed, fallbackSeed],\n );\n\n const renderWax = (configs: BlobConfig[]) =>\n configs.map((b) => (\n <g\n key={b.d}\n className={styles.blob}\n style={\n {\n opacity: b.opacity,\n '--lava-dur': `${b.dur.toFixed(1)}s`,\n '--lava-delay': `${b.delay.toFixed(1)}s`,\n '--lava-rise': `${b.rise.toFixed(0)}px`,\n } as CSSProperties\n }\n >\n <path\n className={styles.wobble}\n d={b.d}\n style={\n {\n '--lava-wdur': `${b.wobbleDur.toFixed(1)}s`,\n '--lava-wdelay': `${b.wobbleDelay.toFixed(1)}s`,\n '--lava-sway': `${b.sway.toFixed(1)}px`,\n } as CSSProperties\n }\n />\n </g>\n ));\n\n return (\n <svg\n className={cn(styles.glow, className)}\n viewBox=\"0 0 600 600\"\n aria-hidden\n role=\"presentation\"\n >\n <defs>\n <filter id={goo} colorInterpolationFilters=\"sRGB\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 21 -9\"\n result=\"cm\"\n />\n <feBlend />\n </filter>\n\n {/* Softer goo for the depth layer — bigger blur, gentler threshold,\n so background wax reads as out-of-focus */}\n <filter id={gooSoft} colorInterpolationFilters=\"sRGB\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"10\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 14 -6\"\n />\n </filter>\n\n <clipPath id={clip}>\n <path d=\"M262,174h60l33.5,182.3c0,0,2.7,12.8,2.5,22.8c-7.5,0-131,0-131,0s-0.7-9.3,0-18C227.6,352.9,262,174,262,174z\" />\n </clipPath>\n\n <radialGradient id={grad} cx=\"300\" cy=\"300\" r=\"400\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0.0714\" stopColor=\"currentColor\" stopOpacity=\"0.19\" />\n <stop offset=\"0.3107\" stopColor=\"currentColor\" stopOpacity=\"0.13\" />\n <stop offset=\"0.553\" stopColor=\"currentColor\" stopOpacity=\"0.06\" />\n <stop offset=\"0.7828\" stopColor=\"currentColor\" stopOpacity=\"0.02\" />\n <stop offset=\"0.9847\" stopColor=\"currentColor\" stopOpacity=\"0\" />\n </radialGradient>\n </defs>\n\n <rect fill={`url(#${grad})`} width=\"600\" height=\"600\" />\n\n {/* Depth layer first — slow, soft-edged wax behind the main blobs.\n Opacity sits on this group so it dims AFTER the goo filter; dimming\n the blobs before it would push them under the threshold entirely. */}\n <g filter={`url(#${gooSoft})`} clipPath={`url(#${clip})`} fill=\"currentColor\" opacity={0.2}>\n {renderWax(depthBlobs)}\n </g>\n\n <g filter={`url(#${goo})`} clipPath={`url(#${clip})`} fill=\"currentColor\">\n {renderWax(blobs)}\n <path\n className={styles.botBlob}\n d=\"M354,381.2c6.8,3.4,5.4,7.4-5.6,10.4c-10.7,3.1-31.1,5.1-54.4,8.4c-23.3,3.3-43.7,0.8-54.4-2.4c-11-3.4-12.4-7.6-5.6-13.8c6.8-7,18.9-14.6,29.6-17.4c11-3.3,20.6-1.8,30.4-1.4c9.8,0.4,19.4,5.1,30.4,8.3C335.1,376.8,347.2,378.6,354,381.2z\"\n />\n </g>\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport { Glow } from '../glow';\nimport { Grain } from '../grain';\nimport styles from './backdrop.module.scss';\n\nexport interface BackdropProps {\n /** Render the drifting film-grain layer. Defaults to true. */\n grain?: boolean;\n /** Render the lava glow layer. Defaults to true. */\n glow?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Full-bleed ambient background: the lava {@link Glow} and film {@link Grain}\n * layered behind its children. Use it as the outermost shell of a page.\n */\nexport function Backdrop({ grain = true, glow = true, className, children }: BackdropProps) {\n return (\n <div className={cn(styles.backdrop, className)}>\n {glow && (\n <div className={styles.glowLayer}>\n <Glow />\n </div>\n )}\n {grain && <Grain className={styles.grainLayer} />}\n <div className={styles.content}>{children}</div>\n </div>\n );\n}\n","import { type CSSProperties, type HTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './glass.module.scss';\n\nexport interface GlassProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Backdrop-blur radius in px. Defaults to the token (50).\n * Pass 0 to disable the filter entirely — useful for Glass nested inside\n * Glass, where the backdrop is already blurred.\n */\n blur?: number;\n}\n\n/**\n * The core frosted-glass surface: a translucent fill behind a heavy backdrop\n * blur, with a soft ambient shadow. The building block for panels and cards.\n */\nexport const Glass = forwardRef<HTMLDivElement, GlassProps>(function Glass(\n { blur, className, style, children, ...props },\n ref,\n) {\n // blur={0} must remove the filter, not apply blur(0px) — a zero-radius\n // backdrop-filter still forces the browser to isolate and re-composite a\n // render surface on every backdrop change.\n const vars: CSSProperties | undefined =\n blur === 0\n ? { backdropFilter: 'none', WebkitBackdropFilter: 'none' }\n : blur != null\n ? ({ '--fui-glass-blur': `${blur}px` } as CSSProperties)\n : undefined;\n\n return (\n <div ref={ref} className={cn(styles.glass, className)} style={{ ...vars, ...style }} {...props}>\n {children}\n </div>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './button.module.scss';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n size?: 'sm' | 'md';\n fullWidth?: boolean;\n /** Leading icon slot. */\n icon?: ReactNode;\n /** Trailing icon slot. */\n iconRight?: ReactNode;\n /** Pressed-in look for toggles and nav tabs. Also sets aria-pressed. */\n isActive?: boolean;\n}\n\n/**\n * A chunky, uppercase button with the signature hard offset shadow that snaps\n * flush on press. Ghost is a shadow-outlined variant; secondary is frosted;\n * danger is for destructive actions.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n icon,\n iconRight,\n isActive = false,\n className,\n children,\n ...props\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isActive || undefined}\n className={cn(\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n isActive && styles.active,\n className,\n )}\n {...props}\n >\n {icon && <span className={styles.iconSlot}>{icon}</span>}\n {children}\n {iconRight && <span className={styles.iconSlot}>{iconRight}</span>}\n </button>\n );\n});\n","import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './icon-button.module.scss';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n /** Accessible name — rendered as aria-label and title. */\n label: string;\n variant?: 'default' | 'ghost' | 'danger';\n size?: 'sm' | 'md';\n /** Pressed-in look for toggles. Also sets aria-pressed. */\n isActive?: boolean;\n}\n\n/**\n * A square icon-only button. Default is a frosted chip with the offset\n * shadow; ghost is chrome-less for dense toolbars; danger for destructive\n * actions.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { icon, label, variant = 'default', size = 'md', isActive = false, className, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n title={label}\n aria-pressed={isActive || undefined}\n className={cn(\n styles.iconButton,\n styles[variant],\n styles[size],\n isActive && styles.active,\n className,\n )}\n {...props}\n >\n {icon}\n </button>\n );\n});\n","import type { CSSProperties, HTMLAttributes, MouseEventHandler } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './stamp.module.scss';\n\nexport type StampVariant = 'neutral' | 'info' | 'success' | 'warning' | 'error';\n\nexport interface StampProps extends HTMLAttributes<HTMLElement> {\n variant?: StampVariant;\n size?: 'sm' | 'md';\n /** Leading square status dot in the text colour. */\n dot?: boolean;\n /** Override the variant background with any CSS colour. */\n fillColor?: string;\n /** Override the variant text colour with any CSS colour. */\n textColor?: string;\n /** When set, the stamp renders as a real button with hover/press states. */\n onClick?: MouseEventHandler<HTMLElement>;\n}\n\n/**\n * A compact status badge on the semantic status tokens. Pass `onClick` to get\n * a genuinely clickable stamp — it renders as a `<button>` with hover lift,\n * no wrapper needed.\n */\nexport function Stamp({\n variant = 'neutral',\n size = 'sm',\n dot = false,\n fillColor,\n textColor,\n onClick,\n className,\n style,\n children,\n ...props\n}: StampProps) {\n const Tag = onClick ? 'button' : 'span';\n const colorOverrides: CSSProperties | undefined =\n fillColor || textColor ? { backgroundColor: fillColor, color: textColor } : undefined;\n\n return (\n <Tag\n type={onClick ? 'button' : undefined}\n onClick={onClick}\n className={cn(styles.stamp, styles[variant], styles[size], className)}\n style={{ ...colorOverrides, ...style }}\n {...props}\n >\n {dot && <span className={styles.dot} aria-hidden />}\n {children}\n </Tag>\n );\n}\n","import {\n Children,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './tooltip.module.scss';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** Tooltip content. Pass undefined/null to disable without unwrapping the child. */\n content?: ReactNode;\n /** A single element that becomes the trigger (handlers are merged in). */\n children: ReactElement;\n placement?: TooltipPlacement;\n /** Hover delay in ms — keyboard focus shows immediately. */\n delay?: number;\n}\n\nconst GAP = 8;\nconst EDGE = 8;\n\nfunction composeHandlers<E>(theirs: unknown, ours: (event: E) => void) {\n return (event: E) => {\n if (typeof theirs === 'function') (theirs as (event: E) => void)(event);\n ours(event);\n };\n}\n\n/**\n * A portal tooltip on hover and keyboard focus. Position is computed against\n * the trigger and clamped to the viewport; Escape, scroll, and resize hide it.\n */\nexport function Tooltip({ content, children, placement = 'top', delay = 300 }: TooltipProps) {\n const id = useId();\n const [open, setOpen] = useState(false);\n const [coords, setCoords] = useState<{ top: number; left: number } | null>(null);\n const bubbleRef = useRef<HTMLDivElement>(null);\n const rectRef = useRef<DOMRect | null>(null);\n const timer = useRef<number | undefined>(undefined);\n\n const hide = useCallback(() => {\n window.clearTimeout(timer.current);\n setOpen(false);\n setCoords(null);\n }, []);\n\n useEffect(() => () => window.clearTimeout(timer.current), []);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') hide();\n };\n window.addEventListener('keydown', onKey);\n window.addEventListener('scroll', hide, true);\n window.addEventListener('resize', hide);\n return () => {\n window.removeEventListener('keydown', onKey);\n window.removeEventListener('scroll', hide, true);\n window.removeEventListener('resize', hide);\n };\n }, [open, hide]);\n\n // Two-phase: render hidden, measure, then place (and clamp to viewport).\n useLayoutEffect(() => {\n if (!open) return;\n const rect = rectRef.current;\n const bubble = bubbleRef.current;\n if (!rect || !bubble) return;\n const b = bubble.getBoundingClientRect();\n\n let top: number;\n let left: number;\n switch (placement) {\n case 'bottom':\n top = rect.bottom + GAP;\n left = rect.left + rect.width / 2 - b.width / 2;\n break;\n case 'left':\n top = rect.top + rect.height / 2 - b.height / 2;\n left = rect.left - b.width - GAP;\n break;\n case 'right':\n top = rect.top + rect.height / 2 - b.height / 2;\n left = rect.right + GAP;\n break;\n default:\n top = rect.top - b.height - GAP;\n left = rect.left + rect.width / 2 - b.width / 2;\n }\n\n left = Math.min(Math.max(left, EDGE), window.innerWidth - b.width - EDGE);\n top = Math.min(Math.max(top, EDGE), window.innerHeight - b.height - EDGE);\n setCoords({ top, left });\n }, [open, placement]);\n\n const disabled = content == null || content === false || content === '';\n\n const child = Children.only(children);\n const childProps = child.props as Record<string, unknown>;\n\n const showNow = (el: Element) => {\n rectRef.current = el.getBoundingClientRect();\n setOpen(true);\n };\n\n if (disabled) return children;\n\n const trigger = cloneElement(child as ReactElement<Record<string, unknown>>, {\n onMouseEnter: composeHandlers(childProps.onMouseEnter, (e: MouseEvent<HTMLElement>) => {\n const el = e.currentTarget;\n window.clearTimeout(timer.current);\n timer.current = window.setTimeout(() => showNow(el), delay);\n }),\n onMouseLeave: composeHandlers(childProps.onMouseLeave, hide),\n onFocus: composeHandlers(childProps.onFocus, (e: FocusEvent<HTMLElement>) => {\n showNow(e.currentTarget);\n }),\n onBlur: composeHandlers(childProps.onBlur, hide),\n 'aria-describedby': open ? id : (childProps['aria-describedby'] as string | undefined),\n });\n\n return (\n <>\n {trigger}\n {open &&\n createPortal(\n <div\n ref={bubbleRef}\n id={id}\n role=\"tooltip\"\n className={cn(styles.tooltip, coords && styles.ready)}\n style={coords ? { top: coords.top, left: coords.left } : undefined}\n >\n {content}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { createContext } from 'react';\nimport type { ReactNode } from 'react';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastOptions {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n /** Auto-dismiss after this many ms; 0 keeps the toast until dismissed. */\n duration?: number;\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id for programmatic dismissal. */\n toast: (options: ToastOptions) => string;\n dismiss: (id: string) => void;\n}\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n","import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/style-helpers';\nimport {\n ToastContext,\n type ToastOptions,\n type ToastPosition,\n type ToastVariant,\n} from './toast-context';\nimport styles from './toast.module.scss';\n\nexport interface ToastProviderProps {\n children: ReactNode;\n position?: ToastPosition;\n /** Default auto-dismiss in ms for toasts that don't set their own. */\n defaultDuration?: number;\n}\n\ninterface ToastItem {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n variant: ToastVariant;\n}\n\n/**\n * Portal-renders the toast stack and provides the `useToast` context.\n * Wrap the app once, near the root.\n */\nexport function ToastProvider({\n children,\n position = 'bottom-right',\n defaultDuration = 5000,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timers = useRef(new Map<string, number>());\n const counter = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n setToasts((current) => current.filter((t) => t.id !== id));\n const handle = timers.current.get(id);\n if (handle !== undefined) {\n window.clearTimeout(handle);\n timers.current.delete(id);\n }\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions) => {\n counter.current += 1;\n const id = `fui-toast-${counter.current}`;\n setToasts((current) => [\n ...current,\n {\n id,\n title: options.title,\n description: options.description,\n variant: options.variant ?? 'info',\n },\n ]);\n const duration = options.duration ?? defaultDuration;\n if (duration > 0) {\n timers.current.set(\n id,\n window.setTimeout(() => dismiss(id), duration),\n );\n }\n return id;\n },\n [defaultDuration, dismiss],\n );\n\n useEffect(() => {\n const pending = timers.current;\n return () => {\n for (const handle of pending.values()) window.clearTimeout(handle);\n };\n }, []);\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {createPortal(\n <div className={cn(styles.stack, styles[position])}>\n {toasts.map((t) => (\n <div\n key={t.id}\n role={t.variant === 'error' ? 'alert' : 'status'}\n className={cn(styles.toast, styles[t.variant])}\n >\n {t.title && <p className={styles.title}>{t.title}</p>}\n {t.description && <p className={styles.description}>{t.description}</p>}\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n className={styles.close}\n onClick={() => dismiss(t.id)}\n >\n ×\n </button>\n </div>\n ))}\n </div>,\n document.body,\n )}\n </ToastContext.Provider>\n );\n}\n","import { useContext } from 'react';\nimport { ToastContext } from './toast-context';\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>');\n return ctx;\n}\n","import type { HTMLAttributes, KeyboardEvent, MouseEventHandler } from 'react';\nimport { cn } from '../../utils/style-helpers';\nimport styles from './card.module.scss';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** `sm` is the dense list-row size; `md` the roomy default. */\n size?: 'sm' | 'md';\n /**\n * Makes the whole card clickable — adds role, tab stop, Enter/Space\n * activation, and hover/press styling.\n */\n onClick?: MouseEventHandler<HTMLDivElement>;\n}\n\nfunction activateOnEnterOrSpace(e: KeyboardEvent<HTMLDivElement>) {\n if (e.target === e.currentTarget && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n e.currentTarget.click();\n }\n}\n\nfunction CardRoot({ size = 'md', onClick, className, children, ...props }: CardProps) {\n const interactive = onClick != null;\n return (\n <div\n className={cn(styles.card, styles[size], interactive && styles.interactive, className)}\n onClick={onClick}\n {...(interactive\n ? { role: 'button', tabIndex: 0, onKeyDown: activateOnEnterOrSpace }\n : undefined)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction Title({ className, children, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3 className={cn(styles.title, className)} {...props}>\n {children}\n </h3>\n );\n}\n\nfunction Body({ className, children, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return (\n <p className={cn(styles.body, className)} {...props}>\n {children}\n </p>\n );\n}\n\n/** A frosted card surface with the film offset shadow. Compose with Card.Title / Card.Body. */\nexport const Card = Object.assign(CardRoot, { Title, Body });\n"],"names":["cn","inputs","twMerge","clsx","Grain","opacity","className","style","props","vars","jsx","styles","mulberry32","seed","a","t","blobPath","rng","cx","cy","r","vertices","irregularity","squashX","squashY","phase","pts","i","angle","radius","d","p0","p1","p2","p3","c1x","c1y","c2x","c2y","generateLamp","count","blobs","dur","wobbleDur","peak","depthCount","depthBlobs","Glow","uid","useId","goo","gooSoft","clip","grad","fallbackSeed","useState","useMemo","renderWax","configs","b","jsxs","Backdrop","grain","glow","children","Glass","forwardRef","blur","ref","Button","variant","size","fullWidth","icon","iconRight","isActive","IconButton","label","Stamp","dot","fillColor","textColor","onClick","Tag","colorOverrides","GAP","EDGE","composeHandlers","theirs","ours","event","Tooltip","content","placement","delay","id","open","setOpen","coords","setCoords","bubbleRef","useRef","rectRef","timer","hide","useCallback","useEffect","onKey","e","useLayoutEffect","rect","bubble","top","left","disabled","child","Children","childProps","showNow","el","trigger","cloneElement","Fragment","createPortal","ToastContext","createContext","ToastProvider","position","defaultDuration","toasts","setToasts","timers","counter","dismiss","current","handle","toast","options","duration","pending","value","useToast","ctx","useContext","activateOnEnterOrSpace","CardRoot","interactive","Title","Body","Card"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/style-helpers.ts"],"names":[],"mappings":"AAGA,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,UAElE"}
|