@goliapkg/gds 1.6.1 → 1.7.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/dist/index.js +5 -5
- package/dist/l0-tokens/color-derive.d.ts +4 -0
- package/dist/l0-tokens/color-derive.d.ts.map +1 -1
- package/dist/l0-tokens/index.js +1 -1
- package/dist/l1-systems/index.js +1 -1
- package/dist/l3-atoms/glow-dot.d.ts +4 -0
- package/dist/l3-atoms/glow-dot.d.ts.map +1 -1
- package/dist/l3-atoms/index.js +1 -1
- package/dist/{l3-atoms-LtIFAn9Y.js → l3-atoms-Cvu01YHO.js} +5 -5
- package/dist/l3-atoms-Cvu01YHO.js.map +1 -0
- package/dist/l4-molecules/card.d.ts +9 -6
- package/dist/l4-molecules/card.d.ts.map +1 -1
- package/dist/l4-molecules/index.js +1 -1
- package/dist/{l4-molecules-Bnt38HxY.js → l4-molecules-CSmApFmt.js} +19 -15
- package/dist/l4-molecules-CSmApFmt.js.map +1 -0
- package/dist/l5-organisms/data-table/data-table-toolbar.d.ts +4 -1
- package/dist/l5-organisms/data-table/data-table-toolbar.d.ts.map +1 -1
- package/dist/l5-organisms/data-table/data-table-types.d.ts +7 -1
- package/dist/l5-organisms/data-table/data-table-types.d.ts.map +1 -1
- package/dist/l5-organisms/data-table/data-table.d.ts.map +1 -1
- package/dist/l5-organisms/index.js +1 -1
- package/dist/{l5-organisms-C7LXv0jT.js → l5-organisms-Css3AvsZ.js} +192 -175
- package/dist/{l5-organisms-C7LXv0jT.js.map → l5-organisms-Css3AvsZ.js.map} +1 -1
- package/dist/{scales-C80FTPsL.js → scales-B23Guac-.js} +6 -1
- package/dist/scales-B23Guac-.js.map +1 -0
- package/dist/theme.css +1 -0
- package/dist/{use-theme-C0aWVw70.js → use-theme-CONuDdW3.js} +2 -2
- package/dist/{use-theme-C0aWVw70.js.map → use-theme-CONuDdW3.js.map} +1 -1
- package/package.json +1 -1
- package/dist/l3-atoms-LtIFAn9Y.js.map +0 -1
- package/dist/l4-molecules-Bnt38HxY.js.map +0 -1
- package/dist/scales-C80FTPsL.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as e, c as t, d as n, i as r, l as i, n as a, o, r as s, s as c, t as l, u } from "./l0-tokens-DZkyVlac.js";
|
|
2
|
-
import { $ as d, A as f, B as p, C as m, D as h, E as g, F as _, G as v, H as y, I as b, J as x, K as S, L as C, M as w, N as T, O as E, P as D, Q as O, R as k, S as A, T as j, U as M, V as N, W as P, X as F, Y as I, Z as L, _ as R, a as z, b as B, c as V, d as H, et as U, f as W, g as G, h as K, i as q, j as J, k as Y, l as X, m as Z, n as Q, o as $, p as ee, q as te, r as ne, s as re, t as ie, tt as ae, u as oe, v as se, w as ce, x as le, y as ue, z as de } from "./scales-
|
|
2
|
+
import { $ as d, A as f, B as p, C as m, D as h, E as g, F as _, G as v, H as y, I as b, J as x, K as S, L as C, M as w, N as T, O as E, P as D, Q as O, R as k, S as A, T as j, U as M, V as N, W as P, X as F, Y as I, Z as L, _ as R, a as z, b as B, c as V, d as H, et as U, f as W, g as G, h as K, i as q, j as J, k as Y, l as X, m as Z, n as Q, o as $, p as ee, q as te, r as ne, s as re, t as ie, tt as ae, u as oe, v as se, w as ce, x as le, y as ue, z as de } from "./scales-B23Guac-.js";
|
|
3
3
|
import { a as fe, c as pe, i as me, n as he, o as ge, r as _e, s as ve, t as ye } from "./gesture-system-v-bjvnCe.js";
|
|
4
|
-
import { _ as be, a as xe, c as Se, d as Ce, f as we, g as Te, h as Ee, i as De, l as Oe, m as ke, n as Ae, o as je, p as Me, r as Ne, s as Pe, t as Fe, u as Ie, v as Le } from "./use-theme-
|
|
4
|
+
import { _ as be, a as xe, c as Se, d as Ce, f as we, g as Te, h as Ee, i as De, l as Oe, m as ke, n as Ae, o as je, p as Me, r as Ne, s as Pe, t as Fe, u as Ie, v as Le } from "./use-theme-CONuDdW3.js";
|
|
5
5
|
import { n as Re, r as ze, t as Be } from "./glass-CQTlX7IO.js";
|
|
6
6
|
import { n as Ve, t as He } from "./button-avu-rQU4.js";
|
|
7
7
|
import { i as Ue, n as We, r as Ge, t as Ke } from "./motion-DUPegem-.js";
|
|
@@ -15,17 +15,17 @@ import { n as Mt, r as Nt, t as Pt } from "./textarea-BJCl_aH2.js";
|
|
|
15
15
|
import { n as Ft, t as It } from "./progress-wAKN3Czz.js";
|
|
16
16
|
import { t as Lt } from "./portal-Bbl6F_Wj.js";
|
|
17
17
|
import { t as Rt } from "./skeleton-C9FFZSYN.js";
|
|
18
|
-
import { $ as zt, A as Bt, B as Vt, C as Ht, Ct as Ut, D as Wt, E as Gt, F as Kt, G as qt, H as Jt, I as Yt, J as Xt, K as Zt, L as Qt, M as $t, N as en, O as tn, P as nn, Q as rn, R as an, S as on, St as sn, T as cn, U as ln, V as un, W as dn, X as fn, Y as pn, Z as mn, _ as hn, _t as gn, a as _n, at as vn, b as yn, bt as bn, c as xn, ct as Sn, d as Cn, dt as wn, et as Tn, f as En, ft as Dn, g as On, gt as kn, h as An, ht as jn, i as Mn, it as Nn, j as Pn, k as Fn, l as In, lt as Ln, m as Rn, mt as zn, n as Bn, nt as Vn, o as Hn, ot as Un, p as Wn, pt as Gn, q as Kn, r as qn, rt as Jn, s as Yn, st as Xn, t as Zn, tt as Qn, u as $n, ut as er, v as tr, vt as nr, w as rr, wt as ir, x as ar, xt as or, y as sr, yt as cr, z as lr } from "./l3-atoms-
|
|
18
|
+
import { $ as zt, A as Bt, B as Vt, C as Ht, Ct as Ut, D as Wt, E as Gt, F as Kt, G as qt, H as Jt, I as Yt, J as Xt, K as Zt, L as Qt, M as $t, N as en, O as tn, P as nn, Q as rn, R as an, S as on, St as sn, T as cn, U as ln, V as un, W as dn, X as fn, Y as pn, Z as mn, _ as hn, _t as gn, a as _n, at as vn, b as yn, bt as bn, c as xn, ct as Sn, d as Cn, dt as wn, et as Tn, f as En, ft as Dn, g as On, gt as kn, h as An, ht as jn, i as Mn, it as Nn, j as Pn, k as Fn, l as In, lt as Ln, m as Rn, mt as zn, n as Bn, nt as Vn, o as Hn, ot as Un, p as Wn, pt as Gn, q as Kn, r as qn, rt as Jn, s as Yn, st as Xn, t as Zn, tt as Qn, u as $n, ut as er, v as tr, vt as nr, w as rr, wt as ir, x as ar, xt as or, y as sr, yt as cr, z as lr } from "./l3-atoms-Cvu01YHO.js";
|
|
19
19
|
import { n as ur, r as dr, t as fr } from "./avatar-l3SaMCmU.js";
|
|
20
20
|
import { n as pr, r as mr, t as hr } from "./resize-handle-ilSc7QRM.js";
|
|
21
21
|
import { a as gr, i as _r, n as vr, r as yr, t as br } from "./switch-DC85Os9r.js";
|
|
22
22
|
import { i as xr, n as Sr, r as Cr, t as wr } from "./dom-17XgfxMq.js";
|
|
23
23
|
import { t as Tr } from "./loading-dots-fB4X_Zh0.js";
|
|
24
24
|
import { i as Er, n as Dr, r as Or, t as kr } from "./stepper-DWJfv7TA.js";
|
|
25
|
-
import { $ as Ar, $t as jr, A as Mr, At as Nr, B as Pr, Bt as Fr, C as Ir, Cn as Lr, Ct as Rr, D as zr, Dt as Br, E as Vr, En as Hr, Et as Ur, F as Wr, Ft as Gr, G as Kr, Gt as qr, H as Jr, Ht as Yr, I as Xr, It as Zr, J as Qr, Jt as $r, K as ei, Kt as ti, L as ni, Lt as ri, M as ii, Mt as ai, N as oi, Nt as si, O as ci, Ot as li, P as ui, Pt as di, Q as fi, Qt as pi, R as mi, Rt as hi, S as gi, Sn as _i, St as vi, T as yi, Tn as bi, Tt as xi, U as Si, Ut as Ci, V as wi, Vt as Ti, W as Ei, Wt as Di, X as Oi, Xt as ki, Y as Ai, Yt as ji, Z as Mi, Zt as Ni, _ as Pi, _n as Fi, _t as Ii, a as Li, an as Ri, at as zi, b as Bi, bn as Vi, bt as Hi, c as Ui, cn as Wi, ct as Gi, d as Ki, dn as qi, dt as Ji, en as Yi, et as Xi, f as Zi, fn as Qi, ft as $i, g as ea, gn as ta, gt as na, h as ra, hn as ia, ht as aa, i as oa, in as sa, it as ca, j as la, jt as ua, k as da, kt as fa, l as pa, ln as ma, lt as ha, m as ga, mn as _a, mt as va, n as ya, nn as ba, nt as xa, o as Sa, on as Ca, ot as wa, p as Ta, pn as Ea, pt as Da, q as Oa, qt as ka, r as Aa, rn as ja, rt as Ma, s as Na, sn as Pa, st as Fa, t as Ia, tn as La, tt as Ra, u as za, un as Ba, ut as Va, v as Ha, vn as Ua, vt as Wa, w as Ga, wn as Ka, wt as qa, x as Ja, xn as Ya, xt as Xa, y as Za, yn as Qa, yt as $a, z as eo, zt as to } from "./l4-molecules-
|
|
25
|
+
import { $ as Ar, $t as jr, A as Mr, At as Nr, B as Pr, Bt as Fr, C as Ir, Cn as Lr, Ct as Rr, D as zr, Dt as Br, E as Vr, En as Hr, Et as Ur, F as Wr, Ft as Gr, G as Kr, Gt as qr, H as Jr, Ht as Yr, I as Xr, It as Zr, J as Qr, Jt as $r, K as ei, Kt as ti, L as ni, Lt as ri, M as ii, Mt as ai, N as oi, Nt as si, O as ci, Ot as li, P as ui, Pt as di, Q as fi, Qt as pi, R as mi, Rt as hi, S as gi, Sn as _i, St as vi, T as yi, Tn as bi, Tt as xi, U as Si, Ut as Ci, V as wi, Vt as Ti, W as Ei, Wt as Di, X as Oi, Xt as ki, Y as Ai, Yt as ji, Z as Mi, Zt as Ni, _ as Pi, _n as Fi, _t as Ii, a as Li, an as Ri, at as zi, b as Bi, bn as Vi, bt as Hi, c as Ui, cn as Wi, ct as Gi, d as Ki, dn as qi, dt as Ji, en as Yi, et as Xi, f as Zi, fn as Qi, ft as $i, g as ea, gn as ta, gt as na, h as ra, hn as ia, ht as aa, i as oa, in as sa, it as ca, j as la, jt as ua, k as da, kt as fa, l as pa, ln as ma, lt as ha, m as ga, mn as _a, mt as va, n as ya, nn as ba, nt as xa, o as Sa, on as Ca, ot as wa, p as Ta, pn as Ea, pt as Da, q as Oa, qt as ka, r as Aa, rn as ja, rt as Ma, s as Na, sn as Pa, st as Fa, t as Ia, tn as La, tt as Ra, u as za, un as Ba, ut as Va, v as Ha, vn as Ua, vt as Wa, w as Ga, wn as Ka, wt as qa, x as Ja, xn as Ya, xt as Xa, y as Za, yn as Qa, yt as $a, z as eo, zt as to } from "./l4-molecules-CSmApFmt.js";
|
|
26
26
|
import { a as no, i as ro, n as io, o as ao, r as oo, s as so, t as co } from "./hooks-BE-_EmDI.js";
|
|
27
27
|
import { a as lo, i as uo, n as fo, o as po, r as mo, t as ho } from "./toast-DN5xANLM.js";
|
|
28
|
-
import { $ as go, A as _o, At as vo, B as yo, C as bo, Ct as xo, D as So, Dt as Co, E as wo, Et as To, F as Eo, G as Do, H as Oo, I as ko, J as Ao, K as jo, L as Mo, M as No, Mt as Po, N as Fo, O as Io, Ot as Lo, P as Ro, Q as zo, R as Bo, S as Vo, St as Ho, T as Uo, Tt as Wo, U as Go, V as Ko, W as qo, X as Jo, Y as Yo, Z as Xo, _ as Zo, _t as Qo, a as $o, at as es, b as ts, bt as ns, c as rs, ct as is, d as as, dt as os, et as ss, f as cs, ft as ls, g as us, gt as ds, h as fs, ht as ps, i as ms, it as hs, j as gs, jt as _s, k as vs, kt as ys, l as bs, lt as xs, m as Ss, mt as Cs, n as ws, nt as Ts, o as Es, ot as Ds, p as Os, pt as ks, q as As, r as js, rt as Ms, s as Ns, st as Ps, t as Fs, tt as Is, u as Ls, ut as Rs, v as zs, vt as Bs, w as Vs, wt as Hs, x as Us, xt as Ws, y as Gs, yt as Ks, z as qs } from "./l5-organisms-
|
|
28
|
+
import { $ as go, A as _o, At as vo, B as yo, C as bo, Ct as xo, D as So, Dt as Co, E as wo, Et as To, F as Eo, G as Do, H as Oo, I as ko, J as Ao, K as jo, L as Mo, M as No, Mt as Po, N as Fo, O as Io, Ot as Lo, P as Ro, Q as zo, R as Bo, S as Vo, St as Ho, T as Uo, Tt as Wo, U as Go, V as Ko, W as qo, X as Jo, Y as Yo, Z as Xo, _ as Zo, _t as Qo, a as $o, at as es, b as ts, bt as ns, c as rs, ct as is, d as as, dt as os, et as ss, f as cs, ft as ls, g as us, gt as ds, h as fs, ht as ps, i as ms, it as hs, j as gs, jt as _s, k as vs, kt as ys, l as bs, lt as xs, m as Ss, mt as Cs, n as ws, nt as Ts, o as Es, ot as Ds, p as Os, pt as ks, q as As, r as js, rt as Ms, s as Ns, st as Ps, t as Fs, tt as Is, u as Ls, ut as Rs, v as zs, vt as Bs, w as Vs, wt as Hs, x as Us, xt as Ws, y as Gs, yt as Ks, z as qs } from "./l5-organisms-Css3AvsZ.js";
|
|
29
29
|
import { A as Js, B as Ys, C as Xs, D as Zs, E as Qs, F as $s, I as ec, L as tc, M as nc, N as rc, O as ic, P as ac, R as oc, S as sc, T as cc, _ as lc, a as uc, b as dc, c as fc, d as pc, f as mc, g as hc, h as gc, i as _c, j as vc, k as yc, l as bc, m as xc, n as Sc, o as Cc, p as wc, r as Tc, s as Ec, t as Dc, u as Oc, v as kc, w as Ac, x as jc, y as Mc, z as Nc } from "./l6-charts-DPMj1m0E.js";
|
|
30
30
|
import { $ as Pc, A as Fc, B as Ic, C as Lc, D as Rc, E as zc, F as Bc, G as Vc, H as Hc, I as Uc, J as Wc, K as Gc, L as Kc, M as qc, N as Jc, O as Yc, P as Xc, Q as Zc, R as Qc, S as $c, T as el, U as tl, V as nl, W as rl, X as il, Y as al, Z as ol, _ as sl, a as cl, b as ll, c as ul, d as dl, et as fl, f as pl, g as ml, h as hl, i as gl, j as _l, k as vl, l as yl, m as bl, n as xl, nt as Sl, o as Cl, p as wl, q as Tl, r as El, s as Dl, t as Ol, tt as kl, u as Al, v as jl, w as Ml, x as Nl, y as Pl, z as Fl } from "./l7-patterns-8fc4b3eE.js";
|
|
31
31
|
import { i as Il, n as Ll, r as Rl, t as zl } from "./gesture-irjS0hVM.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-derive.d.ts","sourceRoot":"","sources":["../../src/l0-tokens/color-derive.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"color-derive.d.ts","sourceRoot":"","sources":["../../src/l0-tokens/color-derive.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bf,CAAA;AAQV,MAAM,MAAM,cAAc,GAAG;IAE3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IAGpB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IAGf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAGD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAwCpE;AAGD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAsCrE;AAsBD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,GAAG,OAAO,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8DxB"}
|
package/dist/l0-tokens/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { a as e, c as t, d as n, i as r, l as i, n as a, o, r as s, s as c, t as l, u } from "../l0-tokens-DZkyVlac.js";
|
|
2
|
-
import { $ as d, A as f, B as p, C as m, D as h, E as g, F as _, G as v, H as y, I as b, J as x, K as S, L as C, M as w, N as T, O as E, P as D, Q as O, R as k, S as A, T as j, U as M, V as N, W as P, X as F, Y as I, Z as L, _ as R, a as z, b as B, c as V, d as H, et as U, f as W, g as G, h as K, i as q, j as J, k as Y, l as X, m as Z, n as Q, o as $, p as ee, q as te, r as ne, s as re, t as ie, tt as ae, u as oe, v as se, w as ce, x as le, y as ue, z as de } from "../scales-
|
|
2
|
+
import { $ as d, A as f, B as p, C as m, D as h, E as g, F as _, G as v, H as y, I as b, J as x, K as S, L as C, M as w, N as T, O as E, P as D, Q as O, R as k, S as A, T as j, U as M, V as N, W as P, X as F, Y as I, Z as L, _ as R, a as z, b as B, c as V, d as H, et as U, f as W, g as G, h as K, i as q, j as J, k as Y, l as X, m as Z, n as Q, o as $, p as ee, q as te, r as ne, s as re, t as ie, tt as ae, u as oe, v as se, w as ce, x as le, y as ue, z as de } from "../scales-B23Guac-.js";
|
|
3
3
|
import { a as fe, c as pe, i as me, n as he, o as ge, r as _e, s as ve, t as ye } from "../gesture-system-v-bjvnCe.js";
|
|
4
4
|
export { Q as DEFAULT_PRIMARY, w as FIXED_COLORS, t as GDS_DEPS, i as GDS_INFRA, u as GDS_INTERNAL_UTILS, n as LAYER_DEP_CONSTRAINTS, de as analogous, ne as applyDefaultCssVars, b as autoFixColor, C as bestTextColor, l as between, a as breakpointToCssVars, s as breakpoints, p as complement, j as componentHeight, g as contentWidth, N as contrastRatio, y as darken, h as densitySizeMap, T as deriveDarkPalette, D as deriveLightPalette, r as detectOverlap, e as deviceCategory, ye as drag, ee as duration, Z as easing, z as flexMono, $ as fontFeature, re as fontPreset, V as fontStack, X as fontToCssVars, oe as fontWeight, q as generateDefaultCssVars, he as gestureConfig, _e as gestureToCssVars, se as glassParams, ue as glassToCssVars, M as hexToHsl, P as hexToRgb, v as hslToHex, S as hslToRgb, te as hueShift, E as iconSize, me as inertia, K as keyframePresets, x as lerpColor, I as lighten, fe as longPress, F as luminance, o as maxWidth, c as minWidth, G as motionToCssVars, _ as paletteToVars, ge as pinchZoom, H as presetToStyle, ve as pullToRefresh, m as radiusScale, ce as radiusToCssVars, ie as resolveAxesToCssVars, L as rgbToHex, O as rgbToHsl, d as saturate, k as scoreColor, le as shadowToCssVars, A as shadowValue, Y as sizeToCssVars, f as spacing, R as springPresets, B as supportsBackdropFilter, pe as swipe, W as symbols, J as touchTarget, U as triadic, ae as withAlpha };
|
package/dist/l1-systems/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g, v as _ } from "../use-theme-
|
|
1
|
+
import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g, v as _ } from "../use-theme-CONuDdW3.js";
|
|
2
2
|
import { useEffect as v } from "react";
|
|
3
3
|
//#region src/l1-systems/use-fonts.ts
|
|
4
4
|
var y = "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;600;700&family=Noto+Sans+JP:wght@300;400;500;600;700&family=Noto+Sans+KR:wght@300;400;500;600;700&display=swap", b = ["https://fonts.googleapis.com", "https://fonts.gstatic.com"], x = "gds-cjk-fonts";
|
|
@@ -2,10 +2,14 @@ type GlowDotColor = 'accent' | 'danger' | 'success' | 'warning';
|
|
|
2
2
|
type GlowDotSize = 'default' | 'lg' | 'sm';
|
|
3
3
|
type GlowDotProps = React.HTMLAttributes<HTMLSpanElement> & {
|
|
4
4
|
color?: GlowDotColor;
|
|
5
|
+
/** Enable pulse animation for attention states */
|
|
6
|
+
pulse?: boolean;
|
|
5
7
|
size?: GlowDotSize;
|
|
6
8
|
};
|
|
7
9
|
export declare const GlowDot: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLSpanElement> & {
|
|
8
10
|
color?: GlowDotColor;
|
|
11
|
+
/** Enable pulse animation for attention states */
|
|
12
|
+
pulse?: boolean;
|
|
9
13
|
size?: GlowDotSize;
|
|
10
14
|
} & import("react").RefAttributes<HTMLSpanElement>>;
|
|
11
15
|
export type { GlowDotColor, GlowDotProps, GlowDotSize };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glow-dot.d.ts","sourceRoot":"","sources":["../../src/l3-atoms/glow-dot.tsx"],"names":[],"mappings":"AAKA,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAC/D,KAAK,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1C,KAAK,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG;IAC1D,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,CAAA;AAeD,eAAO,MAAM,OAAO;
|
|
1
|
+
{"version":3,"file":"glow-dot.d.ts","sourceRoot":"","sources":["../../src/l3-atoms/glow-dot.tsx"],"names":[],"mappings":"AAKA,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAC/D,KAAK,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1C,KAAK,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG;IAC1D,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,CAAA;AAeD,eAAO,MAAM,OAAO;YAnBV,YAAY;IACpB,kDAAkD;YAC1C,OAAO;WACR,WAAW;mDA4BnB,CAAA;AAED,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAA"}
|
package/dist/l3-atoms/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as e, A as t, B as n, C as r, Ct as i, D as a, E as o, F as s, G as c, H as l, I as u, J as d, K as f, L as p, M as m, N as h, O as g, P as _, Q as v, R as y, S as b, St as x, T as S, U as C, V as w, W as T, X as E, Y as D, Z as O, _ as k, _t as A, a as j, at as M, b as N, bt as P, c as F, ct as I, d as L, dt as R, et as z, f as B, ft as V, g as H, gt as U, h as W, ht as G, i as K, it as q, j as J, k as Y, l as X, lt as Z, m as Q, mt as $, n as ee, nt as te, o as ne, ot as re, p as ie, pt as ae, q as oe, r as se, rt as ce, s as le, st as ue, t as de, tt as fe, u as pe, ut as me, v as he, vt as ge, w as _e, wt as ve, x as ye, xt as be, y as xe, yt as Se, z as Ce } from "../l3-atoms-
|
|
1
|
+
import { $ as e, A as t, B as n, C as r, Ct as i, D as a, E as o, F as s, G as c, H as l, I as u, J as d, K as f, L as p, M as m, N as h, O as g, P as _, Q as v, R as y, S as b, St as x, T as S, U as C, V as w, W as T, X as E, Y as D, Z as O, _ as k, _t as A, a as j, at as M, b as N, bt as P, c as F, ct as I, d as L, dt as R, et as z, f as B, ft as V, g as H, gt as U, h as W, ht as G, i as K, it as q, j as J, k as Y, l as X, lt as Z, m as Q, mt as $, n as ee, nt as te, o as ne, ot as re, p as ie, pt as ae, q as oe, r as se, rt as ce, s as le, st as ue, t as de, tt as fe, u as pe, ut as me, v as he, vt as ge, w as _e, wt as ve, x as ye, xt as be, y as xe, yt as Se, z as Ce } from "../l3-atoms-Cvu01YHO.js";
|
|
2
2
|
import { n as we, r as Te, t as Ee } from "../avatar-l3SaMCmU.js";
|
|
3
3
|
import { n as De, r as Oe, t as ke } from "../resize-handle-ilSc7QRM.js";
|
|
4
4
|
import { a as Ae, i as je, n as Me, r as Ne, t as Pe } from "../switch-DC85Os9r.js";
|
|
@@ -448,13 +448,13 @@ var k = m(function({ targetDate: t, onComplete: n, showDays: r = !0, showSeconds
|
|
|
448
448
|
sm: "h-1.5 w-1.5",
|
|
449
449
|
default: "h-2.5 w-2.5",
|
|
450
450
|
lg: "h-3.5 w-3.5"
|
|
451
|
-
}, I = m(function({ color: t = "accent",
|
|
451
|
+
}, I = m(function({ color: t = "accent", pulse: n, size: r = "default", className: i, ...a }, o) {
|
|
452
452
|
return /* @__PURE__ */ b("span", {
|
|
453
|
-
ref:
|
|
454
|
-
className: e("inline-block rounded-full", P[t], F[
|
|
453
|
+
ref: o,
|
|
454
|
+
className: e("inline-block rounded-full", P[t], F[r], n === !0 && "animate-pulse", i),
|
|
455
455
|
"data-component": "glow-dot",
|
|
456
456
|
"data-variant": t,
|
|
457
|
-
...
|
|
457
|
+
...a
|
|
458
458
|
});
|
|
459
459
|
}), ve = m(function({ children: t, className: n, from: r = "#6366f1", to: i = "#ec4899", ...a }, o) {
|
|
460
460
|
return /* @__PURE__ */ b("span", {
|
|
@@ -1930,4 +1930,4 @@ var Kt = m(function({ children: t, className: n, duration: r = 300, scale: i = 1
|
|
|
1930
1930
|
//#endregion
|
|
1931
1931
|
export { Oe as $, it as A, We as B, gt as C, w as Ct, ct as D, ut as E, Ze as F, Le as G, Ve as H, W as I, Pe as J, Ie as K, Xe as L, tt as M, $e as N, st as O, Qe as P, ke as Q, qe as R, vt as S, ne as St, dt as T, Be as U, Ue as V, Re as W, je as X, R as Y, Ae as Z, wt as _, ue as _t, Bt as a, ve as at, Ct as b, ae as bt, Lt as c, M as ct, Q as d, k as dt, Te as et, Pt as f, _e as ft, Et as g, E as gt, kt as h, de as ht, Ut as i, ye as it, rt as j, ot as k, Ft as l, j as lt, At as m, fe as mt, Gt as n, L as nt, zt as o, I as ot, jt as p, me as pt, Fe as q, Wt as r, be as rt, Rt as s, N as st, Kt as t, we as tt, Z as u, A as ut, Tt as v, le as vt, pt as w, ee as wt, xt as x, re as xt, St as y, se as yt, Ke as z };
|
|
1932
1932
|
|
|
1933
|
-
//# sourceMappingURL=l3-atoms-
|
|
1933
|
+
//# sourceMappingURL=l3-atoms-Cvu01YHO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l3-atoms-Cvu01YHO.js","names":[],"sources":["../src/l3-atoms/animated-border.tsx","../src/l3-atoms/animated-counter.tsx","../src/l3-atoms/animated-number.tsx","../src/l3-atoms/avatar-badge.tsx","../src/l3-atoms/barcode.tsx","../src/l3-atoms/blinking.tsx","../src/l3-atoms/bounce-dot.tsx","../src/l3-atoms/checkbox-group.tsx","../src/l3-atoms/color-swatch.tsx","../src/l3-atoms/copy-button.tsx","../src/l3-atoms/count-badge.tsx","../src/l3-atoms/count-up.tsx","../src/l3-atoms/countdown.tsx","../src/l3-atoms/countdown-badge.tsx","../src/l3-atoms/cursor-follow.tsx","../src/l3-atoms/diff-indicator.tsx","../src/l3-atoms/glow-dot.tsx","../src/l3-atoms/gradient-text.tsx","../src/l3-atoms/heat-cell.tsx","../src/l3-atoms/hotkey.tsx","../src/l3-atoms/tooltip.tsx","../src/l3-atoms/info-tip.tsx","../src/l3-atoms/key-value.tsx","../src/l3-atoms/keyboard-shortcut.tsx","../src/l3-atoms/live-dot.tsx","../src/l3-atoms/magnetic-button.tsx","../src/l3-atoms/marquee.tsx","../src/l3-atoms/meter.tsx","../src/l3-atoms/number-flow.tsx","../src/l3-atoms/online-indicator.tsx","../src/l3-atoms/orbit.tsx","../src/l3-atoms/percentage.tsx","../src/l3-atoms/percentage-circle.tsx","../src/l3-atoms/price.tsx","../src/l3-atoms/progress-circle.tsx","../src/l3-atoms/progress-ring.tsx","../src/l3-atoms/pulse-indicator.tsx","../src/l3-atoms/pulse-ring.tsx","../src/l3-atoms/qr-code.tsx","../src/l3-atoms/quick-action.tsx","../src/l3-atoms/radio-group.tsx","../src/l3-atoms/rating.tsx","../src/l3-atoms/relative-time.tsx","../src/l3-atoms/ribbon.tsx","../src/l3-atoms/ribbon-banner.tsx","../src/l3-atoms/ripple-effect.tsx","../src/l3-atoms/scroll-progress.tsx","../src/l3-atoms/scroll-to-top.tsx","../src/l3-atoms/segmented-control.tsx","../src/l3-atoms/shortcut-display.tsx","../src/l3-atoms/skeleton-group.tsx","../src/l3-atoms/sparkle.tsx","../src/l3-atoms/stagger.tsx","../src/l3-atoms/star-rating.tsx","../src/l3-atoms/status-badge.tsx","../src/l3-atoms/status-dot.tsx","../src/l3-atoms/switch-group.tsx","../src/l3-atoms/text-badge.tsx","../src/l3-atoms/text-effect.tsx","../src/l3-atoms/textarea-counter.tsx","../src/l3-atoms/theme-toggle.tsx","../src/l3-atoms/toggle-group.tsx","../src/l3-atoms/trend-arrow.tsx","../src/l3-atoms/trend-indicator.tsx","../src/l3-atoms/truncated-list.tsx","../src/l3-atoms/typewriter.tsx","../src/l3-atoms/verified-badge.tsx","../src/l3-atoms/visual-counter.tsx","../src/l3-atoms/volume-slider.tsx","../src/l3-atoms/zoom-on-hover.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AnimatedBorderProps = { children: ReactNode; className?: string; variant?: 'dash' | 'gradient' | 'pulse' }\n\nconst variantClasses = {\n dash: 'border-2 border-dashed border-accent/40 animate-[dash-march_1s_linear_infinite]',\n gradient: 'border-0 bg-gradient-to-r from-accent via-success to-accent bg-[length:200%_100%] animate-[gradient-shift_3s_ease_infinite] p-[2px]',\n pulse: 'border-2 border-accent animate-[border-pulse_2s_ease-in-out_infinite]',\n}\n\nexport function AnimatedBorder({ children, className, variant = 'gradient' }: AnimatedBorderProps) {\n if (variant === 'gradient') {\n return (\n <div className={cx('rounded-lg', variantClasses.gradient, className)} data-component=\"animated-border\">\n <div className=\"rounded-[calc(0.5rem-2px)] bg-bg\">{children}</div>\n </div>\n )\n }\n return (\n <div className={cx('rounded-lg', variantClasses[variant], className)} data-component=\"animated-border\">\n {children}\n </div>\n )\n}\n\nexport type { AnimatedBorderProps }\n","// animated-counter — number display with animated transitions\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AnimatedCounterProps = React.HTMLAttributes<HTMLSpanElement> & {\n duration?: number\n format?: (n: number) => string\n prefix?: string\n suffix?: string\n value: number\n}\n\nconst defaultFormat = (n: number): string => {\n if (Number.isInteger(n)) return n.toLocaleString()\n return n.toLocaleString(undefined, { maximumFractionDigits: 2 })\n}\n\nexport const AnimatedCounter = forwardRef<HTMLSpanElement, AnimatedCounterProps>(\n function AnimatedCounter(\n { className, duration = 500, format = defaultFormat, prefix, suffix, value, ...props },\n ref,\n ) {\n const [display, setDisplay] = useState(value)\n const prevRef = useRef(value)\n const rafRef = useRef<number>(0)\n\n useEffect(() => {\n const from = prevRef.current\n const to = value\n prevRef.current = to\n\n if (from === to) return\n\n const startTime = performance.now()\n const diff = to - from\n\n const animate = (now: number) => {\n const elapsed = now - startTime\n const progress = Math.min(1, elapsed / duration)\n // ease out cubic\n const eased = 1 - Math.pow(1 - progress, 3)\n setDisplay(from + diff * eased)\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(animate)\n } else {\n setDisplay(to)\n }\n }\n\n rafRef.current = requestAnimationFrame(animate)\n return () => cancelAnimationFrame(rafRef.current)\n }, [value, duration])\n\n return (\n <span\n className={cx('tabular-nums select-none', className)}\n data-component=\"animated-counter\"\n ref={ref}\n {...props}\n >\n {prefix !== undefined && <span>{prefix}</span>}\n {format(display)}\n {suffix !== undefined && <span>{suffix}</span>}\n </span>\n )\n },\n)\n\nexport type { AnimatedCounterProps }\n","// animated-number — number display that animates when value changes\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type AnimatedNumberProps = {\n value: number\n duration?: number\n format?: (n: number) => string\n className?: string\n}\n\nfunction defaultFormat(n: number): string {\n return n.toLocaleString()\n}\n\nfunction easeOut(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\nexport const AnimatedNumber = forwardRef<HTMLSpanElement, AnimatedNumberProps>(\n function AnimatedNumber(\n { value, duration = 500, format = defaultFormat, className },\n ref,\n ) {\n const [display, setDisplay] = useState(value)\n const prevRef = useRef(value)\n\n useEffect(() => {\n const from = prevRef.current\n prevRef.current = value\n\n if (duration <= 0) {\n setDisplay(value)\n return\n }\n\n const start = performance.now()\n let raf: number\n\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n setDisplay(from + (value - from) * easeOut(progress))\n if (progress < 1) {\n raf = requestAnimationFrame(tick)\n }\n }\n\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [value, duration])\n\n return (\n <span ref={ref} className={cx('tabular-nums', className)} data-component=\"animated-number\">\n {format(display)}\n </span>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { Badge } from '../l2-primitives/badge'\nimport { cx } from '../utils/cx'\nimport type { AvatarProps } from './avatar'\nimport { Avatar } from './avatar'\n\ntype AvatarBadgeProps = AvatarProps & {\n count?: number\n maxCount?: number\n}\n\nexport const AvatarBadge = forwardRef<HTMLSpanElement, AvatarBadgeProps>(\n function AvatarBadge({ count, maxCount = 99, className, ...avatarProps }, ref) {\n const showBadge = count !== undefined && count > 0\n\n return (\n <span className={cx('relative inline-flex', className)} data-component=\"avatar-badge\" ref={ref}>\n <Avatar {...avatarProps} />\n {showBadge && (\n <Badge\n className=\"absolute -top-1 -right-1 z-10\"\n count={count}\n countMax={maxCount}\n />\n )}\n </span>\n )\n },\n)\n\nexport type { AvatarBadgeProps }\n","// barcode — simple barcode display using SVG (code 128 style appearance)\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type BarcodeProps = {\n value: string\n width?: number\n height?: number\n showValue?: boolean\n color?: string\n className?: string\n}\n\n// generate bar pattern from character codes\nfunction generateBars(value: string): number[] {\n const bars: number[] = []\n\n // start pattern — thick bars\n bars.push(3, 1, 1, 1, 3, 1)\n\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n // alternate thick/thin based on char code bits\n bars.push(\n (code & 1) !== 0 ? 2 : 1,\n (code & 2) !== 0 ? 2 : 1,\n (code & 4) !== 0 ? 2 : 1,\n (code & 8) !== 0 ? 2 : 1,\n (code & 16) !== 0 ? 2 : 1,\n 1,\n )\n }\n\n // stop pattern — thick bars\n bars.push(3, 1, 1, 1, 3)\n\n return bars\n}\n\nexport const Barcode = forwardRef<SVGSVGElement, BarcodeProps>(\n function Barcode(\n { value, width = 200, height = 60, showValue = true, color = 'currentColor', className },\n ref,\n ) {\n const bars = useMemo(() => generateBars(value), [value])\n\n const totalUnits = bars.reduce((sum, b) => sum + b, 0)\n const barHeight = showValue ? height - 16 : height\n const unitWidth = width / totalUnits\n\n let x = 0\n const rects: Array<{ x: number; w: number }> = []\n for (let i = 0; i < bars.length; i++) {\n const w = bars[i] * unitWidth\n // even indices are bars, odd are spaces\n if (i % 2 === 0) {\n rects.push({ x, w })\n }\n x += w\n }\n\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cx('shrink-0', className)}\n data-component=\"barcode\"\n data-testid=\"barcode-svg\"\n role=\"img\"\n aria-label={`Barcode: ${value}`}\n >\n {rects.map((r, i) => (\n <rect key={i} x={r.x} y={0} width={r.w} height={barHeight} fill={color} />\n ))}\n {showValue && (\n <text\n x={width / 2}\n y={height - 2}\n textAnchor=\"middle\"\n fontSize={11}\n fill={color}\n fontFamily=\"monospace\"\n data-testid=\"barcode-text\"\n >\n {value}\n </text>\n )}\n </svg>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst speedMap = {\n default: 'animate-pulse',\n fast: 'animate-pulse [animation-duration:0.5s]',\n slow: 'animate-pulse [animation-duration:3s]',\n} as const\n\ntype BlinkingSpeed = 'slow' | 'default' | 'fast'\n\ntype BlinkingProps = React.HTMLAttributes<HTMLSpanElement> & {\n active?: boolean\n speed?: BlinkingSpeed\n}\n\nexport const Blinking = forwardRef<HTMLSpanElement, BlinkingProps>(\n function Blinking({ active = true, children, className, speed = 'default', ...props }, ref) {\n return (\n <span\n className={cx(active && speedMap[speed], className)}\n data-component=\"blinking\"\n ref={ref}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n\nexport type { BlinkingProps, BlinkingSpeed }\n","// bounce-dot — bouncing dot loader animation\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype BounceDotProps = React.HTMLAttributes<HTMLDivElement> & {\n color?: string\n count?: number\n size?: 'default' | 'lg' | 'sm'\n}\n\nconst sizeClasses = {\n default: 'h-2 w-2',\n lg: 'h-3 w-3',\n sm: 'h-1.5 w-1.5',\n} as const\n\nexport const BounceDot = forwardRef<HTMLDivElement, BounceDotProps>(\n function BounceDot({ className, color, count = 3, size = 'default', ...props }, ref) {\n const dots = Array.from({ length: count }, (_, i) => i)\n\n return (\n <div\n className={cx('inline-flex items-center gap-1', className)}\n data-component=\"bounce-dot\"\n ref={ref}\n role=\"status\"\n {...props}\n >\n {dots.map((i) => (\n <span\n className={cx(\n 'animate-[bounce-dot_1.4s_ease-in-out_infinite] rounded-full bg-fg-muted',\n sizeClasses[size],\n )}\n key={i}\n style={{\n animationDelay: `${i * 160}ms`,\n ...(color !== undefined ? { backgroundColor: color } : {}),\n }}\n />\n ))}\n </div>\n )\n },\n)\n\nexport type { BounceDotProps }\n","// checkbox-group — group of checkboxes with optional select-all\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { Checkbox } from './checkbox'\n\ntype CheckboxGroupOption = {\n label: string\n value: string\n}\n\ntype CheckboxGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n disabled?: boolean\n onChange: (value: string[]) => void\n options: CheckboxGroupOption[]\n selectAll?: boolean\n value: string[]\n}\n\nexport const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n function CheckboxGroup({ className, disabled = false, onChange, options, selectAll = false, value, ...props }, ref) {\n const allSelected = options.length > 0 && options.every((o) => value.includes(o.value))\n\n const handleToggle = (optValue: string, checked: boolean) => {\n if (checked) {\n onChange([...value, optValue])\n } else {\n onChange(value.filter((v) => v !== optValue))\n }\n }\n\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n onChange(options.map((o) => o.value))\n } else {\n onChange([])\n }\n }\n\n return (\n <div ref={ref} className={cx('flex flex-col gds-gap', className)} data-component=\"checkbox-group\" role=\"group\" {...props}>\n {selectAll && (\n <Checkbox checked={allSelected} disabled={disabled} label=\"Select all\" onChange={handleSelectAll} />\n )}\n {options.map((opt) => (\n <Checkbox\n checked={value.includes(opt.value)}\n disabled={disabled}\n key={opt.value}\n label={opt.label}\n onChange={(checked) => handleToggle(opt.value, checked)}\n />\n ))}\n </div>\n )\n },\n)\n\nexport type { CheckboxGroupOption, CheckboxGroupProps }\n","// color-swatch — color display block with optional copy-to-clipboard\nimport { cva } from 'class-variance-authority'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst colorSwatchVariants = cva('rounded-md', {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-10 w-10',\n lg: 'h-14 w-14',\n sm: 'h-7 w-7',\n },\n },\n})\n\ntype ColorSwatchProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof colorSwatchVariants> & {\n color: string\n copyable?: boolean\n label?: string\n }\n\nexport const ColorSwatch = forwardRef<HTMLSpanElement, ColorSwatchProps>(\n function ColorSwatch({ className, color, copyable = false, label, size, ...props }, ref) {\n const [copied, setCopied] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleClick = useCallback(async () => {\n if (!copyable) return\n await navigator.clipboard.writeText(color)\n setCopied(true)\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n }\n timerRef.current = setTimeout(() => {\n setCopied(false)\n timerRef.current = null\n }, 2000)\n }, [color, copyable])\n\n const swatchEl = (\n <span\n className={cx(colorSwatchVariants({ size }), 'block')}\n style={{ backgroundColor: color }}\n />\n )\n\n return (\n <span\n className={cx('inline-flex flex-col items-center gap-1', className)}\n data-component=\"color-swatch\"\n ref={ref}\n {...props}\n >\n {copyable ? (\n <button\n aria-label={`Copy ${color}`}\n className={cx('rounded-md select-none', focusCls)}\n onClick={handleClick}\n type=\"button\"\n >\n {swatchEl}\n </button>\n ) : (\n swatchEl\n )}\n <span className=\"font-mono text-[10px] text-fg-muted\">\n {copied ? 'Copied!' : color}\n </span>\n {label !== undefined && (\n <span className=\"text-[10px] text-fg-muted/60\">{label}</span>\n )}\n </span>\n )\n },\n)\n\nexport { colorSwatchVariants }\nexport type { ColorSwatchProps }\n","// copy-button — button that copies text to clipboard with feedback\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { cx } from '../utils/cx'\n\nexport type CopyButtonProps = {\n text: string\n label?: string\n copiedLabel?: string\n variant?: 'default' | 'ghost'\n size?: 'default' | 'sm'\n className?: string\n}\n\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n function CopyButton(\n {\n text,\n label = 'Copy',\n copiedLabel = 'Copied!',\n variant = 'default',\n size = 'default',\n className,\n },\n ref,\n ) {\n const [copied, setCopied] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n }\n }, [])\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(text).catch(() => {})\n setCopied(true)\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setCopied(false), 1500)\n }, [text])\n\n const buttonVariant = variant === 'ghost' ? 'ghost' : 'secondary'\n\n return (\n <Button\n ref={ref}\n variant={buttonVariant}\n size={size}\n className={cx(className)}\n onClick={handleCopy}\n data-component=\"copy-button\"\n icon={\n copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M2 7l3 3 7-7\" />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" />\n <path d=\"M10 4V2.5A1.5 1.5 0 008.5 1h-6A1.5 1.5 0 001 2.5v6A1.5 1.5 0 002.5 10H4\" />\n </svg>\n )\n }\n >\n {copied ? copiedLabel : label}\n </Button>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantMap = {\n accent: 'bg-accent text-accent-fg',\n danger: 'bg-danger text-white',\n success: 'bg-success text-white',\n} as const\n\ntype CountBadgeVariant = 'accent' | 'danger' | 'success'\n\ntype CountBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n count: number\n max?: number\n variant?: CountBadgeVariant\n}\n\nexport const CountBadge = forwardRef<HTMLSpanElement, CountBadgeProps>(\n function CountBadge({ className, count, max = 99, variant = 'danger', ...props }, ref) {\n const display = count > max ? `${max}+` : String(count)\n\n return (\n <span\n className={cx(\n 'inline-flex min-w-5 select-none items-center justify-center rounded-full px-1.5 py-0.5 text-[10px] font-bold leading-none',\n variantMap[variant],\n className,\n )}\n data-component=\"count-badge\"\n data-variant={variant}\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport type { CountBadgeProps, CountBadgeVariant }\n","// count-up — animated number counter from 0 to target\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type CountUpProps = {\n value: number\n duration?: number\n decimals?: number\n prefix?: string\n suffix?: string\n separator?: string\n className?: string\n}\n\nfunction formatNumber(n: number, decimals: number, separator: string): string {\n const fixed = n.toFixed(decimals)\n if (separator === '') return fixed\n\n const [intPart, decPart] = fixed.split('.')\n const formatted = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator)\n if (decPart !== undefined) return `${formatted}.${decPart}`\n return formatted\n}\n\n// ease-out cubic\nfunction easeOut(t: number): number {\n const t1 = t - 1\n return t1 * t1 * t1 + 1\n}\n\nexport const CountUp = forwardRef<HTMLSpanElement, CountUpProps>(\n function CountUp(\n { value, duration = 1500, decimals = 0, prefix, suffix, separator = ',', className },\n ref,\n ) {\n const [current, setCurrent] = useState(0)\n\n useEffect(() => {\n if (duration <= 0) {\n setCurrent(value)\n return\n }\n const start = performance.now()\n let raf: number\n\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n setCurrent(easeOut(progress) * value)\n if (progress < 1) {\n raf = requestAnimationFrame(tick)\n }\n }\n\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [value, duration])\n\n return (\n <span ref={ref} className={cx('tabular-nums', className)} data-component=\"count-up\">\n {prefix ?? ''}{formatNumber(current, decimals, separator)}{suffix ?? ''}\n </span>\n )\n },\n)\n","// countdown — countdown timer to a target date\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type CountdownProps = {\n targetDate: Date | string | number\n onComplete?: () => void\n showDays?: boolean\n showSeconds?: boolean\n className?: string\n}\n\ntype TimeRemaining = {\n days: number\n hours: number\n minutes: number\n seconds: number\n total: number\n}\n\nfunction calcRemaining(target: number): TimeRemaining {\n const total = Math.max(0, target - Date.now())\n const seconds = Math.floor((total / 1000) % 60)\n const minutes = Math.floor((total / 1000 / 60) % 60)\n const hours = Math.floor((total / 1000 / 60 / 60) % 24)\n const days = Math.floor(total / 1000 / 60 / 60 / 24)\n return { days, hours, minutes, seconds, total }\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nexport const Countdown = forwardRef<HTMLDivElement, CountdownProps>(\n function Countdown(\n {\n targetDate,\n onComplete,\n showDays = true,\n showSeconds = true,\n className,\n },\n ref,\n ) {\n const target = new Date(targetDate).getTime()\n const [remaining, setRemaining] = useState<TimeRemaining>(() => calcRemaining(target))\n\n useEffect(() => {\n if (remaining.total <= 0) return\n\n const interval = setInterval(() => {\n const next = calcRemaining(target)\n setRemaining(next)\n if (next.total <= 0) {\n clearInterval(interval)\n if (onComplete !== undefined) onComplete()\n }\n }, 1000)\n\n return () => clearInterval(interval)\n }, [target, onComplete, remaining.total])\n\n const segments: Array<{ label: string; value: string }> = []\n\n if (showDays) {\n segments.push({ label: 'D', value: pad(remaining.days) })\n }\n segments.push({ label: 'H', value: pad(remaining.hours) })\n segments.push({ label: 'M', value: pad(remaining.minutes) })\n if (showSeconds) {\n segments.push({ label: 'S', value: pad(remaining.seconds) })\n }\n\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-center gap-1', className)}\n data-component=\"countdown\"\n >\n {segments.map((seg, i) => (\n <div key={seg.label} className=\"flex items-center gap-1\">\n {i > 0 && (\n <span className=\"text-fg-muted gds-text-body\" data-testid=\"separator\">:</span>\n )}\n <span\n className=\"inline-flex items-center justify-center rounded bg-bg-tertiary px-1.5 py-0.5 tabular-nums gds-radius-button gds-text-body text-fg\"\n data-testid={`segment-${seg.label}`}\n >\n {seg.value}\n </span>\n </div>\n ))}\n </div>\n )\n },\n)\n","// countdown-badge — badge showing a count with max overflow\nimport { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst countdownBadgeVariants = cva(\n 'inline-flex select-none items-center justify-center rounded-full text-[10px] font-bold text-accent-fg min-w-[18px] h-[18px] px-1',\n {\n defaultVariants: { variant: 'default' },\n variants: {\n variant: {\n danger: 'bg-danger animate-pulse',\n default: 'bg-accent',\n },\n },\n },\n)\n\ntype CountdownBadgeProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof countdownBadgeVariants> & {\n count: number\n max?: number\n }\n\nexport const CountdownBadge = forwardRef<HTMLSpanElement, CountdownBadgeProps>(\n function CountdownBadge({ className, count, max = 99, variant, ...props }, ref) {\n if (count <= 0) return null\n\n const display = count > max ? `${max}+` : String(count)\n\n return (\n <span\n className={cx(countdownBadgeVariants({ variant }), className)}\n data-component=\"countdown-badge\"\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport { countdownBadgeVariants }\nexport type { CountdownBadgeProps }\n","import { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\n\ntype CursorFollowProps = React.HTMLAttributes<HTMLDivElement> & {\n offset?: { x?: number; y?: number }\n smooth?: boolean\n}\n\nexport const CursorFollow = forwardRef<HTMLDivElement, CursorFollowProps>(\n function CursorFollow({ children, className, offset, smooth = true, ...props }, ref) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ x: 0, y: 0 })\n\n const ox = offset?.x ?? 0\n const oy = offset?.y ?? 0\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const rect = containerRef.current?.getBoundingClientRect()\n if (rect === undefined) return\n setPos({ x: e.clientX - rect.left + ox, y: e.clientY - rect.top + oy })\n },\n [ox, oy],\n )\n\n return (\n <div\n className={cx('relative', className)}\n data-component=\"cursor-follow\"\n onMouseMove={handleMouseMove}\n ref={mergeRefs(containerRef, ref)}\n {...props}\n >\n <div\n className=\"pointer-events-none absolute\"\n style={{\n transform: `translate(${pos.x}px, ${pos.y}px)`,\n transition: smooth ? 'transform 80ms ease-out' : undefined,\n }}\n >\n {children}\n </div>\n </div>\n )\n },\n)\n\nexport type { CursorFollowProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DiffIndicatorProps = React.HTMLAttributes<HTMLSpanElement> & {\n inverted?: boolean\n unit?: string\n value: number\n}\n\nexport const DiffIndicator = forwardRef<HTMLSpanElement, DiffIndicatorProps>(\n function DiffIndicator({ className, inverted = false, unit, value, ...props }, ref) {\n const isPositive = value > 0\n const isNegative = value < 0\n // inverted: lower is good (e.g. error rate), so positive = bad, negative = good\n const isGood = inverted ? isNegative : isPositive\n const isBad = inverted ? isPositive : isNegative\n\n const colorCls = isGood ? 'text-success' : isBad ? 'text-danger' : 'text-fg-muted'\n const arrow = isPositive ? '\\u2191' : isNegative ? '\\u2193' : ''\n const sign = isPositive ? '+' : ''\n const display = `${arrow}${sign}${value}${unit !== undefined ? unit : ''}`\n\n return (\n <span\n className={cx('inline-flex items-center gap-0.5 text-sm font-medium tabular-nums', colorCls, className)}\n data-component=\"diff-indicator\"\n data-direction={isPositive ? 'up' : isNegative ? 'down' : 'neutral'}\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport type { DiffIndicatorProps }\n","// glow-dot — colored dot with glow effect (LED indicator)\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype GlowDotColor = 'accent' | 'danger' | 'success' | 'warning'\ntype GlowDotSize = 'default' | 'lg' | 'sm'\n\ntype GlowDotProps = React.HTMLAttributes<HTMLSpanElement> & {\n color?: GlowDotColor\n /** Enable pulse animation for attention states */\n pulse?: boolean\n size?: GlowDotSize\n}\n\nconst colorMap: Record<GlowDotColor, string> = {\n accent: 'bg-accent shadow-[0_0_6px_var(--color-accent)]',\n success: 'bg-success shadow-[0_0_6px_var(--color-success)]',\n warning: 'bg-warning shadow-[0_0_6px_var(--color-warning)]',\n danger: 'bg-danger shadow-[0_0_6px_var(--color-danger)]',\n}\n\nconst sizeMap: Record<GlowDotSize, string> = {\n sm: 'h-1.5 w-1.5',\n default: 'h-2.5 w-2.5',\n lg: 'h-3.5 w-3.5',\n}\n\nexport const GlowDot = forwardRef<HTMLSpanElement, GlowDotProps>(\n function GlowDot({ color = 'accent', pulse, size = 'default', className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cx('inline-block rounded-full', colorMap[color], sizeMap[size], pulse === true && 'animate-pulse', className)}\n data-component=\"glow-dot\"\n data-variant={color}\n {...props}\n />\n )\n },\n)\n\nexport type { GlowDotColor, GlowDotProps, GlowDotSize }\n","// gradient-text — text with gradient color fill\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype GradientTextProps = React.HTMLAttributes<HTMLSpanElement> & {\n children: string\n from?: string\n to?: string\n}\n\nexport const GradientText = forwardRef<HTMLSpanElement, GradientTextProps>(\n function GradientText({ children, className, from = '#6366f1', to = '#ec4899', ...props }, ref) {\n return (\n <span\n className={cx('inline-block bg-clip-text text-transparent', className)}\n data-component=\"gradient-text\"\n ref={ref}\n style={{\n backgroundImage: `linear-gradient(to right, ${from}, ${to})`,\n }}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n\nexport type { GradientTextProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype HeatCellProps = React.HTMLAttributes<HTMLDivElement> & {\n color?: string\n max?: number\n showValue?: boolean\n size?: number\n value: number\n}\n\nconst HeatCell = forwardRef<HTMLDivElement, HeatCellProps>(\n function HeatCell({ className, color = 'var(--color-accent)', max = 100, showValue = false, size = 32, value, ...props }, ref) {\n const intensity = max > 0 ? Math.min(Math.max(value / max, 0), 1) : 0\n\n return (\n <div\n className={cx('inline-flex items-center justify-center rounded text-[10px] font-medium', className)}\n data-component=\"heat-cell\"\n ref={ref}\n style={{ backgroundColor: color, height: size, opacity: 0.1 + intensity * 0.9, width: size }}\n {...props}\n >\n {showValue && <span className=\"text-white mix-blend-difference\">{value}</span>}\n </div>\n )\n },\n)\n\nexport { HeatCell }\nexport type { HeatCellProps }\n","// hotkey — keyboard shortcut key combination display\nimport { forwardRef } from 'react'\n\nimport { Kbd } from '../l2-primitives/kbd'\nimport { cx } from '../utils/cx'\n\ntype HotkeyProps = React.HTMLAttributes<HTMLSpanElement> & {\n keys: string[]\n}\n\nexport const Hotkey = forwardRef<HTMLSpanElement, HotkeyProps>(\n function Hotkey({ className, keys, ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gap-1', className)}\n data-component=\"hotkey\"\n ref={ref}\n {...props}\n >\n {keys.map((key, i) => (\n <span className=\"contents\" key={i}>\n {i > 0 && <span className=\"text-[10px] text-fg-muted\">+</span>}\n <Kbd>{key}</Kbd>\n </span>\n ))}\n </span>\n )\n },\n)\n\nexport type { HotkeyProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst positionClasses: Record<string, string> = {\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n}\n\nconst arrowClasses: Record<string, string> = {\n bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-bg-tertiary border-x-transparent border-t-transparent border-4',\n left: 'left-full top-1/2 -translate-y-1/2 border-l-bg-tertiary border-y-transparent border-r-transparent border-4',\n right: 'right-full top-1/2 -translate-y-1/2 border-r-bg-tertiary border-y-transparent border-l-transparent border-4',\n top: 'top-full left-1/2 -translate-x-1/2 border-t-bg-tertiary border-x-transparent border-b-transparent border-4',\n}\n\ntype TooltipProps = React.HTMLAttributes<HTMLDivElement> & {\n content: ReactNode\n delay?: number\n glass?: boolean\n interactive?: boolean\n maxWidth?: number\n placement?: 'bottom' | 'left' | 'right' | 'top'\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n function Tooltip(\n {\n children,\n className,\n content,\n delay = 300,\n glass,\n interactive = false,\n maxWidth,\n placement = 'top',\n ...props\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const enterTimer = useRef<ReturnType<typeof setTimeout>>(undefined)\n const leaveTimer = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const handleEnter = useCallback(() => {\n clearTimeout(leaveTimer.current)\n enterTimer.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const handleLeave = useCallback(() => {\n clearTimeout(enterTimer.current)\n if (interactive) {\n leaveTimer.current = setTimeout(() => setOpen(false), 150)\n } else {\n setOpen(false)\n }\n }, [interactive])\n\n return (\n <div\n className={cx('relative inline-flex', className)}\n data-component=\"tooltip\"\n data-state={open ? 'open' : 'closed'}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n ref={ref}\n {...props}\n >\n {children}\n {open && (\n <div\n className={cx(\n 'pointer-events-none absolute z-50 animate-popup whitespace-nowrap gds-radius-tooltip gds-pad-x-sm gds-pad-y-sm gds-text-label text-fg',\n interactive && 'pointer-events-auto',\n glass === true ? glassClass(glass) : 'bg-bg-tertiary',\n glass === true && 'border border-white/10',\n )}\n onMouseEnter={interactive ? handleEnter : undefined}\n onMouseLeave={interactive ? handleLeave : undefined}\n style={maxWidth !== undefined ? { maxWidth, whiteSpace: 'normal' } : undefined}\n >\n <span className={cx('absolute', arrowClasses[placement])} />\n <span className={positionClasses[placement] ? '' : ''}>{content}</span>\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { TooltipProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { Tooltip } from './tooltip'\n\ntype InfoTipProps = React.HTMLAttributes<HTMLDivElement> & {\n content: ReactNode\n size?: 'default' | 'sm'\n}\n\nconst sizeClasses = {\n default: 'h-4 w-4',\n sm: 'h-3.5 w-3.5',\n} as const\n\nexport const InfoTip = forwardRef<HTMLDivElement, InfoTipProps>(\n function InfoTip({ className, content, size = 'default', ...props }, ref) {\n return (\n <Tooltip content={content} ref={ref} {...props}>\n <span className={cx('inline-flex cursor-help items-center text-fg-muted/60 hover:text-fg-muted', className)} data-component=\"info-tip\">\n <svg className={sizeClasses[size]} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4M12 8h.01\" />\n </svg>\n </span>\n </Tooltip>\n )\n },\n)\n\nexport type { InfoTipProps }\n","// key-value — simple inline key: value pair for compact data display\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype KeyValueProps = React.HTMLAttributes<HTMLDivElement> & {\n label: string\n mono?: boolean\n value: ReactNode\n}\n\nexport const KeyValue = forwardRef<HTMLDivElement, KeyValueProps>(\n function KeyValue({ label, value, mono = false, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-baseline gap-1.5 gds-text-body', className)}\n data-component=\"key-value\"\n {...props}\n >\n <span className=\"shrink-0 text-fg-muted gds-text-caption\">{label}</span>\n <span className={cx('text-fg', mono && 'font-mono')}>{value}</span>\n </div>\n )\n },\n)\n\nexport type { KeyValueProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect } from 'react'\n\nimport { Kbd } from '../l2-primitives/kbd'\nimport { cx } from '../utils/cx'\n\ntype KeyboardShortcutProps = {\n keys: string\n onTrigger: () => void\n showBadge?: boolean\n disabled?: boolean\n className?: string\n}\n\nfunction parseKeys(keys: string) {\n const parts = keys.toLowerCase().split('+')\n const modifiers = {\n ctrl: false,\n meta: false,\n shift: false,\n alt: false,\n }\n let mainKey = ''\n\n for (const part of parts) {\n if (part === 'ctrl') {\n modifiers.ctrl = true\n } else if (part === 'meta' || part === 'cmd') {\n modifiers.meta = true\n } else if (part === 'shift') {\n modifiers.shift = true\n } else if (part === 'alt') {\n modifiers.alt = true\n } else {\n mainKey = part\n }\n }\n\n return { modifiers, mainKey }\n}\n\nfunction formatKeyLabel(part: string): string {\n const map: Record<string, string> = {\n ctrl: 'Ctrl',\n meta: '\\u2318',\n cmd: '\\u2318',\n shift: '\\u21E7',\n alt: 'Alt',\n }\n return map[part.toLowerCase()] ?? part.toUpperCase()\n}\n\nexport const KeyboardShortcut = forwardRef<HTMLSpanElement, KeyboardShortcutProps>(\n function KeyboardShortcut(\n { keys, onTrigger, showBadge = false, disabled = false, className },\n ref,\n ) {\n const { modifiers, mainKey } = parseKeys(keys)\n\n const handler = useCallback(\n (e: KeyboardEvent) => {\n if (disabled) return\n if (e.ctrlKey !== modifiers.ctrl) return\n if (e.metaKey !== modifiers.meta) return\n if (e.shiftKey !== modifiers.shift) return\n if (e.altKey !== modifiers.alt) return\n if (e.key.toLowerCase() !== mainKey) return\n\n e.preventDefault()\n onTrigger()\n },\n [disabled, modifiers.ctrl, modifiers.meta, modifiers.shift, modifiers.alt, mainKey, onTrigger],\n )\n\n useEffect(() => {\n window.addEventListener('keydown', handler)\n return () => window.removeEventListener('keydown', handler)\n }, [handler])\n\n if (!showBadge) return null\n\n const parts = keys.split('+')\n const badges: ReactNode[] = parts.map((part, i) => (\n <Kbd key={i}>{formatKeyLabel(part)}</Kbd>\n ))\n\n return (\n <span ref={ref} className={cx('inline-flex items-center gap-1', className)} data-component=\"keyboard-shortcut\">\n {badges}\n </span>\n )\n },\n)\n\nexport type { KeyboardShortcutProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype LiveDotProps = React.HTMLAttributes<HTMLSpanElement> & {\n label?: string\n}\n\nexport const LiveDot = forwardRef<HTMLSpanElement, LiveDotProps>(\n function LiveDot({ className, label = 'LIVE', ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gap-1.5', className)}\n data-component=\"live-dot\"\n ref={ref}\n {...props}\n >\n <span className=\"relative flex h-2 w-2\">\n <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-danger opacity-75\" />\n <span className=\"relative inline-flex h-2 w-2 rounded-full bg-danger\" />\n </span>\n <span className=\"text-xs font-bold uppercase tracking-wide text-danger\">{label}</span>\n </span>\n )\n },\n)\n\nexport type { LiveDotProps }\n","// magnetic-button — element that subtly moves toward the cursor when hovering\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\n\nexport type MagneticButtonProps = {\n children: React.ReactNode\n strength?: number\n radius?: number\n className?: string\n}\n\nexport const MagneticButton = forwardRef<HTMLDivElement, MagneticButtonProps>(\n function MagneticButton({ children, strength = 0.3, radius = 100, className }, ref) {\n const innerRef = useRef<HTMLDivElement>(null)\n const [transform, setTransform] = useState({ x: 0, y: 0 })\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const el = innerRef.current\n if (el === null) return\n const rect = el.getBoundingClientRect()\n const cx = rect.left + rect.width / 2\n const cy = rect.top + rect.height / 2\n const dx = e.clientX - cx\n const dy = e.clientY - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > radius) {\n setTransform({ x: 0, y: 0 })\n return\n }\n setTransform({ x: dx * strength, y: dy * strength })\n },\n [strength, radius],\n )\n\n const handleMouseLeave = useCallback(() => {\n setTransform({ x: 0, y: 0 })\n }, [])\n\n return (\n <div\n ref={mergeRefs(innerRef, ref)}\n data-component=\"magnetic-button\"\n className={cx('inline-block', className)}\n style={{\n transform: `translate(${transform.x}px, ${transform.y}px)`,\n transition: 'transform 200ms ease-out',\n }}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n )\n },\n)\n","// marquee — infinite horizontal scrolling content\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MarqueeProps = {\n children: React.ReactNode\n speed?: number\n direction?: 'left' | 'right'\n pauseOnHover?: boolean\n className?: string\n}\n\nexport const Marquee = forwardRef<HTMLDivElement, MarqueeProps>(\n function Marquee(\n { children, speed = 30, direction = 'left', pauseOnHover = true, className },\n ref,\n ) {\n const innerRef = useRef<HTMLDivElement>(null)\n const [duration, setDuration] = useState(10)\n\n useEffect(() => {\n if (innerRef.current === null) return\n const width = innerRef.current.scrollWidth / 2\n if (width > 0) setDuration(width / speed)\n }, [speed, children])\n\n const translateFrom = direction === 'left' ? '0%' : '-50%'\n const translateTo = direction === 'left' ? '-50%' : '0%'\n\n return (\n <div\n ref={ref}\n className={cx('overflow-hidden', className)}\n data-component=\"marquee\"\n >\n <div\n ref={innerRef}\n className={cx('inline-flex will-change-transform', pauseOnHover && 'hover:[animation-play-state:paused]')}\n style={{\n animation: `marquee-scroll ${duration}s linear infinite`,\n '--marquee-from': translateFrom,\n '--marquee-to': translateTo,\n } as React.CSSProperties}\n >\n <div className=\"flex shrink-0\">{children}</div>\n <div className=\"flex shrink-0\" aria-hidden>{children}</div>\n </div>\n </div>\n )\n },\n)\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst meterVariants = cva('overflow-hidden gds-radius-badge bg-bg-tertiary', {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-2.5',\n lg: 'h-4',\n sm: 'h-1.5',\n },\n },\n})\n\nconst variantColors: Record<string, string> = {\n danger: 'bg-danger',\n default: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n}\n\nfunction getAutoColor(pct: number): string {\n if (pct >= 0.8) return 'bg-danger'\n if (pct >= 0.6) return 'bg-warning'\n if (pct >= 0.4) return 'bg-accent'\n return 'bg-success'\n}\n\ntype MeterProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof meterVariants> & {\n label?: string\n max?: number\n min?: number\n showValue?: boolean\n value: number\n variant?: 'auto' | 'danger' | 'default' | 'success' | 'warning'\n }\n\nexport const Meter = forwardRef<HTMLDivElement, MeterProps>(\n function Meter(\n {\n className,\n label,\n max = 100,\n min = 0,\n showValue = true,\n size,\n value,\n variant = 'auto',\n ...props\n },\n ref,\n ) {\n const range = max - min\n const pct = range > 0 ? Math.max(0, Math.min(1, (value - min) / range)) : 0\n const barColor = variant === 'auto' ? getAutoColor(pct) : (variantColors[variant] ?? 'bg-accent')\n\n return (\n <div\n className={cx('w-full', className)}\n data-component=\"meter\"\n ref={ref}\n {...props}\n >\n {(label !== undefined || showValue) && (\n <div className=\"mb-1 flex items-center justify-between\">\n {label !== undefined && (\n <span className=\"gds-text-body font-medium text-fg\">{label}</span>\n )}\n {showValue && (\n <span className=\"font-mono gds-text-label text-fg-muted tabular-nums\">\n {Math.round(pct * 100)}%\n </span>\n )}\n </div>\n )}\n <div\n aria-label={label}\n aria-valuemax={max}\n aria-valuemin={min}\n aria-valuenow={value}\n className={meterVariants({ size })}\n role=\"meter\"\n >\n <div\n className={cx('h-full gds-radius-badge transition-all duration-500', barColor)}\n style={{ width: `${pct * 100}%` }}\n />\n </div>\n </div>\n )\n },\n)\n\nexport { meterVariants }\nexport type { MeterProps }\n","import { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NumberFlowProps = { className?: string; format?: (n: number) => string; value: number }\n\nexport const NumberFlow = forwardRef<HTMLSpanElement, NumberFlowProps>(\n function NumberFlow({ className, format = String, value }, ref) {\n const chars = useMemo(() => format(value).split(''), [value, format])\n return (\n <span className={cx('inline-flex items-center tabular-nums select-none', className)} data-component=\"number-flow\" ref={ref}>\n {chars.map((char, i) => {\n if (char >= '0' && char <= '9') {\n return (\n <span className=\"inline-block overflow-hidden\" key={`${i}-slot`} style={{ lineHeight: 1 }}>\n <span className=\"inline-block transition-transform duration-300 ease-out\">{char}</span>\n </span>\n )\n }\n return <span key={`${i}-static`}>{char}</span>\n })}\n </span>\n )\n },\n)\n\nexport type { NumberFlowProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype OnlineIndicatorProps = React.HTMLAttributes<HTMLSpanElement> & {\n label?: string\n online: boolean\n}\n\nexport const OnlineIndicator = forwardRef<HTMLSpanElement, OnlineIndicatorProps>(\n function OnlineIndicator({ className, label, online, ...props }, ref) {\n const dotCls = online ? 'bg-success' : 'bg-fg-muted/40'\n const text = label ?? (online ? 'Online' : 'Offline')\n\n return (\n <span\n className={cx('inline-flex items-center gds-gap-sm', className)}\n data-component=\"online-indicator\"\n ref={ref}\n {...props}\n >\n <span className={cx('h-2 w-2 shrink-0 rounded-full', dotCls)} />\n <span className=\"gds-text-label text-fg-muted\">{text}</span>\n </span>\n )\n },\n)\n\nexport type { OnlineIndicatorProps }\n","import type { ReactNode } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype OrbitProps = { children: ReactNode[]; className?: string; duration?: number; radius?: number }\n\nexport function Orbit({ children, className, duration = 10, radius = 100 }: OrbitProps) {\n const count = children.length\n return (\n <div className={cx('relative select-none', className)} data-component=\"orbit\" style={{ height: radius * 2, width: radius * 2 }}>\n {children.map((child, i) => {\n const angle = (360 / count) * i\n return (\n <div className=\"absolute top-1/2 left-1/2\" key={i} style={{ animation: `orbit-spin ${duration}s linear infinite`, animationDelay: `${-(duration / count) * i}s`, height: 0, width: 0 }}>\n <div className=\"-translate-x-1/2 -translate-y-1/2\" style={{ transform: `rotate(${angle}deg) translateX(${radius}px) rotate(-${angle}deg)` }}>\n {child}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport type { OrbitProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PercentageProps = React.HTMLAttributes<HTMLSpanElement> & {\n precision?: number\n showSign?: boolean\n value: number\n}\n\nexport const Percentage = forwardRef<HTMLSpanElement, PercentageProps>(\n function Percentage({ className, precision = 1, showSign = false, value, ...props }, ref) {\n const isPositive = value > 0\n const isNegative = value < 0\n const colorCls = isPositive ? 'text-success' : isNegative ? 'text-danger' : 'text-fg-muted'\n const sign = showSign && isPositive ? '+' : ''\n const display = `${sign}${value.toFixed(precision)}%`\n\n return (\n <span\n className={cx('inline-flex tabular-nums text-sm font-medium', colorCls, className)}\n data-component=\"percentage\"\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport type { PercentageProps }\n","// percentage-circle — circular percentage display with color coding\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PercentageCircleProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: 'default' | 'lg' | 'sm'\n value: number\n}\n\nconst sizeClasses = {\n default: 'h-16 w-16 text-lg',\n lg: 'h-20 w-20 text-xl',\n sm: 'h-12 w-12 text-sm',\n} as const\n\nconst strokeWidths = {\n default: 3,\n lg: 3.5,\n sm: 2.5,\n} as const\n\nexport const PercentageCircle = forwardRef<HTMLDivElement, PercentageCircleProps>(\n function PercentageCircle({ className, size = 'default', value, ...props }, ref) {\n const clamped = Math.max(0, Math.min(100, value))\n\n const colorClass = useMemo(() => {\n if (clamped >= 80) return 'text-success'\n if (clamped >= 50) return 'text-warning'\n return 'text-danger'\n }, [clamped])\n\n const radius = 18\n const circumference = 2 * Math.PI * radius\n const offset = circumference - (clamped / 100) * circumference\n\n return (\n <div\n className={cx(\n 'relative inline-flex items-center justify-center select-none',\n sizeClasses[size],\n className,\n )}\n data-component=\"percentage-circle\"\n ref={ref}\n {...props}\n >\n <svg\n className=\"absolute inset-0 h-full w-full -rotate-90\"\n viewBox=\"0 0 40 40\"\n >\n <circle\n className=\"text-fg-muted/10\"\n cx=\"20\"\n cy=\"20\"\n fill=\"none\"\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={strokeWidths[size]}\n />\n <circle\n className={cx('transition-all duration-500', colorClass)}\n cx=\"20\"\n cy=\"20\"\n fill=\"none\"\n r={radius}\n stroke=\"currentColor\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidths[size]}\n />\n </svg>\n <span className={cx('font-mono font-bold', colorClass)}>{clamped}%</span>\n </div>\n )\n },\n)\n\nexport type { PercentageCircleProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PriceProps = React.HTMLAttributes<HTMLSpanElement> & {\n currency?: string\n showSign?: boolean\n value: number\n}\n\nexport const Price = forwardRef<HTMLSpanElement, PriceProps>(\n function Price({ className, currency = '\\u00a5', showSign = false, value, ...props }, ref) {\n const isNeg = value < 0\n const isPos = value > 0\n const colorCls = isNeg ? 'text-danger' : isPos ? 'text-success' : 'text-fg'\n const sign = showSign && isPos ? '+' : ''\n const formatted = Math.abs(value).toLocaleString()\n\n return (\n <span\n className={cx('tabular-nums', colorCls, className)}\n data-component=\"price\"\n ref={ref}\n {...props}\n >\n {isNeg ? '-' : sign}{currency}{formatted}\n </span>\n )\n },\n)\n\nexport type { PriceProps }\n","// progress-circle — circular progress indicator using SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantColors: Record<string, string> = {\n accent: 'stroke-accent',\n danger: 'stroke-danger',\n success: 'stroke-success',\n warning: 'stroke-warning',\n}\n\ntype ProgressCircleProps = {\n value: number\n size?: number\n strokeWidth?: number\n showValue?: boolean\n variant?: 'accent' | 'danger' | 'success' | 'warning'\n className?: string\n}\n\nconst ProgressCircle = forwardRef<SVGSVGElement, ProgressCircleProps>(\n function ProgressCircle(\n { value, size = 64, strokeWidth = 4, showValue = true, variant = 'accent', className },\n ref,\n ) {\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const clamped = Math.max(0, Math.min(100, value))\n const offset = circumference * (1 - clamped / 100)\n const center = size / 2\n const colorCls = variantColors[variant] ?? 'stroke-accent'\n\n return (\n <svg\n ref={ref}\n className={cx('shrink-0', className)}\n data-component=\"progress-circle\"\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n width={size}\n >\n <circle\n className=\"stroke-border/30\"\n cx={center}\n cy={center}\n fill=\"none\"\n r={radius}\n strokeWidth={strokeWidth}\n />\n <circle\n className={cx('transition-all duration-500', colorCls)}\n cx={center}\n cy={center}\n fill=\"none\"\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n style={{ transform: 'rotate(-90deg)', transformOrigin: 'center' }}\n />\n {showValue && (\n <text\n className=\"fill-fg font-medium\"\n dominantBaseline=\"central\"\n fontSize={size * 0.22}\n textAnchor=\"middle\"\n x={center}\n y={center}\n >\n {Math.round(clamped)}%\n </text>\n )}\n </svg>\n )\n },\n)\n\nexport { ProgressCircle }\nexport type { ProgressCircleProps }\n","// progress-ring — circular progress indicator with percentage label\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ProgressRingProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: number\n strokeWidth?: number\n value: number\n}\n\nexport const ProgressRing = forwardRef<HTMLDivElement, ProgressRingProps>(\n function ProgressRing({ className, size = 48, strokeWidth = 4, value, ...props }, ref) {\n const clamped = Math.max(0, Math.min(100, value))\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const offset = circumference * (1 - clamped / 100)\n const center = size / 2\n\n return (\n <div\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={clamped}\n className={cx(\n 'inline-flex items-center justify-center select-none',\n className,\n )}\n data-component=\"progress-ring\"\n ref={ref}\n role=\"progressbar\"\n {...props}\n >\n <svg\n className=\"rotate-[-90deg]\"\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n width={size}\n >\n <circle\n className=\"stroke-bg-tertiary\"\n cx={center}\n cy={center}\n fill=\"none\"\n r={radius}\n strokeWidth={strokeWidth}\n />\n <circle\n className=\"stroke-accent transition-all duration-500\"\n cx={center}\n cy={center}\n fill=\"none\"\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n />\n </svg>\n <span\n className=\"absolute font-mono text-xs font-bold text-fg\"\n style={{ fontSize: size * 0.22 }}\n >\n {clamped}%\n </span>\n </div>\n )\n },\n)\n\nexport type { ProgressRingProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst colorMap = {\n accent: 'bg-accent',\n danger: 'bg-danger',\n success: 'bg-success',\n warning: 'bg-warning',\n} as const\n\nconst sizeMap = {\n default: 'h-2.5 w-2.5',\n lg: 'h-3.5 w-3.5',\n sm: 'h-2 w-2',\n} as const\n\ntype PulseIndicatorProps = React.HTMLAttributes<HTMLSpanElement> & {\n color?: 'accent' | 'danger' | 'success' | 'warning'\n label?: string\n size?: 'default' | 'lg' | 'sm'\n}\n\nexport const PulseIndicator = forwardRef<HTMLSpanElement, PulseIndicatorProps>(\n function PulseIndicator({ className, color = 'success', label, size = 'default', ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center', label !== undefined && 'gds-gap-sm', className)}\n data-component=\"pulse-indicator\"\n ref={ref}\n {...props}\n >\n <span className=\"relative inline-flex\">\n <span className={cx('rounded-full', colorMap[color], sizeMap[size])} />\n <span className={cx('absolute inset-0 animate-ping rounded-full opacity-50', colorMap[color])} />\n </span>\n {label !== undefined && (\n <span className=\"gds-text-label text-fg-muted\">{label}</span>\n )}\n </span>\n )\n },\n)\n\nexport type { PulseIndicatorProps }\n","// pulse-ring — concentric pulsing ring animation\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PulseRingProps = React.HTMLAttributes<HTMLDivElement> & {\n active?: boolean\n color?: string\n count?: number\n size?: number\n}\n\nexport const PulseRing = forwardRef<HTMLDivElement, PulseRingProps>(\n function PulseRing({ active = true, className, color, count = 3, size = 80, ...props }, ref) {\n if (!active) {\n return (\n <div\n className={cx('relative inline-flex', className)}\n data-component=\"pulse-ring\"\n ref={ref}\n {...props}\n />\n )\n }\n\n const rings = Array.from({ length: count }, (_, i) => i)\n\n return (\n <div\n className={cx(\n 'relative inline-flex items-center justify-center',\n className,\n )}\n data-component=\"pulse-ring\"\n ref={ref}\n style={{ height: size, width: size }}\n {...props}\n >\n {rings.map((i) => (\n <span\n className=\"absolute inset-0 rounded-full border-2 opacity-0\"\n key={i}\n style={{\n animation: `gds-pulse-ring ${1.5 + count * 0.2}s ease-out ${i * (1.5 / count)}s infinite`,\n borderColor: color ?? 'var(--color-accent)',\n }}\n />\n ))}\n <style>{`\n @keyframes gds-pulse-ring {\n 0% { transform: scale(0.3); opacity: 0.8; }\n 100% { transform: scale(1); opacity: 0; }\n }\n `}</style>\n </div>\n )\n },\n)\n\nexport type { PulseRingProps }\n","// qr-code — decorative data matrix visualization using SVG\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type QRCodeProps = {\n value: string\n size?: number\n color?: string\n bgColor?: string\n className?: string\n}\n\n// simple hash from string to seed deterministic pattern\nfunction hashStr(str: string): number {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0\n }\n return Math.abs(hash)\n}\n\n// seeded pseudo-random\nfunction seededRand(seed: number): () => number {\n let s = seed\n return () => {\n s = (s * 1103515245 + 12345) & 0x7fffffff\n return s / 0x7fffffff\n }\n}\n\nconst GRID = 21\nconst MODULE = 1\n\n// draw a finder pattern (7x7) at position\nfunction finderPattern(ox: number, oy: number): Array<{ x: number; y: number }> {\n const cells: Array<{ x: number; y: number }> = []\n for (let r = 0; r < 7; r++) {\n for (let c = 0; c < 7; c++) {\n const isOuter = r === 0 || r === 6 || c === 0 || c === 6\n const isInner = r >= 2 && r <= 4 && c >= 2 && c <= 4\n if (isOuter || isInner) {\n cells.push({ x: ox + c, y: oy + r })\n }\n }\n }\n return cells\n}\n\nexport const QRCode = forwardRef<SVGSVGElement, QRCodeProps>(\n function QRCode({ value, size = 128, color = 'currentColor', bgColor = 'transparent', className }, ref) {\n const cells = useMemo(() => {\n const result: Array<{ x: number; y: number }> = []\n\n // finder patterns\n result.push(...finderPattern(0, 0))\n result.push(...finderPattern(GRID - 7, 0))\n result.push(...finderPattern(0, GRID - 7))\n\n // data area — hash-based fill\n const rand = seededRand(hashStr(value))\n for (let r = 0; r < GRID; r++) {\n for (let c = 0; c < GRID; c++) {\n const inFinder =\n (r < 8 && c < 8) ||\n (r < 8 && c >= GRID - 8) ||\n (r >= GRID - 8 && c < 8)\n if (inFinder) continue\n if (rand() > 0.55) {\n result.push({ x: c, y: r })\n }\n }\n }\n return result\n }, [value])\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${GRID} ${GRID}`}\n className={cx('shrink-0', className)}\n data-component=\"qr-code\"\n data-testid=\"qr-code-svg\"\n role=\"img\"\n aria-label={`QR code for: ${value}`}\n >\n <rect width={GRID} height={GRID} fill={bgColor} />\n {cells.map((cell, i) => (\n <rect key={i} x={cell.x} y={cell.y} width={MODULE} height={MODULE} fill={color} />\n ))}\n </svg>\n )\n },\n)\n","// quick-action — floating action button / quick action shortcut\nimport { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst quickActionVariants = cva(\n 'inline-flex shrink-0 select-none items-center justify-center rounded-full transition-transform active:scale-95 hover:scale-105',\n {\n defaultVariants: { size: 'default', variant: 'primary' },\n variants: {\n variant: {\n primary: 'bg-accent text-accent-fg gds-shadow-lg',\n secondary: 'border border-border bg-surface text-fg gds-shadow-md',\n },\n size: {\n default: 'h-11 w-11',\n lg: 'h-14 w-14',\n sm: 'h-9 w-9',\n },\n },\n },\n)\n\ntype QuickActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> &\n VariantProps<typeof quickActionVariants> & {\n icon: ReactNode\n label?: string\n }\n\nexport const QuickAction = forwardRef<HTMLButtonElement, QuickActionProps>(\n function QuickAction({ className, disabled, icon, label, onClick, size, variant, ...props }, ref) {\n return (\n <div className=\"inline-flex flex-col items-center gap-1\">\n <button\n className={cx(\n quickActionVariants({ size, variant }),\n focusCls,\n disabled === true && 'pointer-events-none opacity-40',\n className,\n )}\n data-component=\"quick-action\"\n data-variant={variant ?? 'primary'}\n disabled={disabled}\n onClick={onClick}\n ref={ref}\n type=\"button\"\n {...props}\n >\n <span className=\"gds-icon-child\">{icon}</span>\n </button>\n {label !== undefined && (\n <span className=\"select-none text-[10px] text-fg-muted\">{label}</span>\n )}\n </div>\n )\n },\n)\n\nexport { quickActionVariants }\nexport type { QuickActionProps }\n","import { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype RadioOption = {\n disabled?: boolean\n label: string\n value: string\n}\n\ntype RadioGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n direction?: 'horizontal' | 'vertical'\n disabled?: boolean\n onChange?: (value: string) => void\n options: RadioOption[]\n value?: string\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup(\n {\n className,\n direction = 'vertical',\n disabled = false,\n onChange,\n options,\n value,\n ...props\n },\n ref,\n ) {\n return (\n <div\n className={cx(\n 'flex gds-gap',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className,\n )}\n data-component=\"radio-group\"\n ref={ref}\n role=\"radiogroup\"\n {...props}\n >\n {options.map((opt) => {\n const selected = opt.value === value\n const isDisabled = disabled || opt.disabled === true\n\n return (\n <button\n aria-checked={selected}\n className={cx(\n 'inline-flex select-none items-center gds-gap-sm gds-text-body',\n focusCls,\n isDisabled && 'cursor-not-allowed opacity-50',\n )}\n disabled={isDisabled}\n key={opt.value}\n onClick={() => onChange?.(opt.value)}\n role=\"radio\"\n type=\"button\"\n >\n <span\n className={cx(\n 'inline-flex gds-icon shrink-0 items-center justify-center gds-radius-badge border transition-colors',\n selected ? 'border-accent' : 'border-border hover:border-accent/50',\n )}\n >\n {selected && <span className=\"h-2 w-2 gds-radius-badge bg-accent\" />}\n </span>\n <span className=\"text-fg\">{opt.label}</span>\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { RadioGroupProps, RadioOption }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nconst sizeMap = {\n default: 'gds-sq-xs',\n lg: 'gds-sq-sm',\n sm: 'gds-icon',\n}\n\n// default star SVG\nfunction DefaultStar({ filled }: { filled: boolean }) {\n return (\n <svg\n className={cx(\n sizeMap.default,\n filled ? 'fill-warning text-warning' : 'text-fg-muted/20',\n )}\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\ntype RatingProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n max?: number\n onChange?: (value: number) => void\n readonly?: boolean\n renderStar?: (filled: boolean, index: number) => ReactNode\n size?: 'default' | 'lg' | 'sm'\n value: number\n}\n\nexport const Rating = forwardRef<HTMLDivElement, RatingProps>(\n function Rating(\n {\n className,\n max = 5,\n onChange,\n readonly = false,\n renderStar,\n size = 'default',\n value,\n ...props\n },\n ref,\n ) {\n const [hovered, setHovered] = useState<number | null>(null)\n\n const handleLeave = useCallback(() => setHovered(null), [])\n\n return (\n <div\n className={cx('inline-flex gds-gap-xs', className)}\n data-component=\"rating\"\n onMouseLeave={readonly ? undefined : handleLeave}\n ref={ref}\n role=\"group\"\n {...props}\n >\n {Array.from({ length: max }, (_, i) => {\n const starIndex = i + 1\n const filled = hovered !== null ? starIndex <= hovered : starIndex <= value\n\n if (readonly) {\n return (\n <span className={sizeMap[size]} key={i}>\n {renderStar !== undefined ? renderStar(filled, i) : <DefaultStar filled={filled} />}\n </span>\n )\n }\n\n return (\n <button\n className={cx(\n 'transition-transform hover:scale-110',\n focusCls,\n )}\n key={i}\n onClick={() => onChange?.(starIndex)}\n onMouseEnter={() => setHovered(starIndex)}\n type=\"button\"\n >\n <span className={sizeMap[size]}>\n {renderStar !== undefined ? renderStar(filled, i) : <DefaultStar filled={filled} />}\n </span>\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { RatingProps }\n","// relative-time — live-updating relative time display\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype RelativeTimeProps = React.HTMLAttributes<HTMLTimeElement> & {\n date: Date | number | string\n prefix?: string\n}\n\nfunction formatRelativeTime(date: Date | number | string): string {\n const d = date instanceof Date ? date : new Date(date)\n const now = Date.now()\n const diffMs = now - d.getTime()\n const seconds = Math.floor(diffMs / 1000)\n\n if (seconds < 60) return 'just now'\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n if (days === 1) return 'yesterday'\n if (days < 30) return `${days}d ago`\n const months = Math.floor(days / 30)\n if (months < 12) return `${months}mo ago`\n return `${Math.floor(months / 12)}y ago`\n}\n\nfunction formatDateTime(date: Date): string {\n return date.toLocaleString()\n}\n\nexport const RelativeTime = forwardRef<HTMLTimeElement, RelativeTimeProps>(\n function RelativeTime({ className, date, prefix, ...props }, ref) {\n const [text, setText] = useState(() => formatRelativeTime(date))\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n useEffect(() => {\n setText(formatRelativeTime(date))\n intervalRef.current = setInterval(() => {\n setText(formatRelativeTime(date))\n }, 30_000)\n return () => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current)\n }\n }\n }, [date])\n\n const d = date instanceof Date ? date : new Date(date)\n const fullDateTime = formatDateTime(d)\n\n return (\n <time\n className={cx('font-mono text-fg-muted', className)}\n data-component=\"relative-time\"\n dateTime={d.toISOString()}\n ref={ref}\n title={fullDateTime}\n {...props}\n >\n {prefix !== undefined ? `${prefix} ${text}` : text}\n </time>\n )\n },\n)\n\nexport type { RelativeTimeProps }\n","// ribbon — corner ribbon/banner for containers\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantMap = {\n accent: 'bg-accent text-accent-fg',\n danger: 'bg-danger text-white',\n success: 'bg-success text-white',\n warning: 'bg-warning text-white',\n} as const\n\ntype RibbonProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n label: string\n variant?: 'accent' | 'danger' | 'success' | 'warning'\n position?: 'top-left' | 'top-right'\n}\n\nexport const Ribbon = forwardRef<HTMLDivElement, RibbonProps>(\n function Ribbon({ children, label, variant = 'accent', position = 'top-right', className, ...props }, ref) {\n const isRight = position === 'top-right'\n return (\n <div ref={ref} className={cx('relative overflow-hidden', className)} data-component=\"ribbon\" {...props}>\n <div\n className={cx(\n 'pointer-events-none absolute top-3 z-10 px-6 py-0.5 text-[10px] font-bold uppercase tracking-wider shadow-sm',\n variantMap[variant],\n isRight ? '-right-6 rotate-45' : '-left-6 -rotate-45',\n )}\n >\n {label}\n </div>\n {children}\n </div>\n )\n },\n)\n\nexport type { RibbonProps }\n","// ribbon-banner — corner ribbon overlay for containers\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype RibbonBannerProps = React.HTMLAttributes<HTMLDivElement> & {\n color?: string\n position?: 'top-left' | 'top-right'\n text: string\n}\n\nexport const RibbonBanner = forwardRef<HTMLDivElement, RibbonBannerProps>(\n function RibbonBanner({ className, color, position = 'top-right', text, ...props }, ref) {\n const isRight = position === 'top-right'\n\n return (\n <div\n className={cx(\n 'absolute top-0 z-10 overflow-hidden',\n isRight ? 'right-0' : 'left-0',\n className,\n )}\n data-component=\"ribbon-banner\"\n ref={ref}\n style={{ height: 80, width: 80 }}\n {...props}\n >\n <div\n className=\"flex items-center justify-center text-xs font-bold text-accent-fg select-none\"\n style={{\n backgroundColor: color ?? 'var(--color-accent)',\n left: isRight ? undefined : -20,\n position: 'absolute',\n right: isRight ? -20 : undefined,\n top: 16,\n transform: isRight ? 'rotate(45deg)' : 'rotate(-45deg)',\n width: 120,\n }}\n >\n {text}\n </div>\n </div>\n )\n },\n)\n\nexport type { RibbonBannerProps }\n","// ripple-effect — material design ripple on click\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype Ripple = { id: number; x: number; y: number; size: number }\n\nexport type RippleEffectProps = {\n children: React.ReactNode\n color?: string\n disabled?: boolean\n className?: string\n}\n\nlet nextId = 0\n\nexport const RippleEffect = forwardRef<HTMLDivElement, RippleEffectProps>(\n function RippleEffect({ children, color = 'currentColor', disabled = false, className }, ref) {\n const [ripples, setRipples] = useState<Ripple[]>([])\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n const size = Math.max(rect.width, rect.height) * 2\n setRipples((prev) => [...prev, { id: nextId++, x, y, size }])\n },\n [disabled],\n )\n\n const removeRipple = useCallback((id: number) => {\n setRipples((prev) => prev.filter((r) => r.id !== id))\n }, [])\n\n return (\n <div\n ref={ref}\n data-component=\"ripple-effect\"\n className={cx('relative overflow-hidden', className)}\n onPointerDown={handlePointerDown}\n >\n {children}\n {ripples.map((r) => (\n <span\n key={r.id}\n className=\"pointer-events-none absolute animate-ripple rounded-full\"\n style={{\n left: r.x - r.size / 2,\n top: r.y - r.size / 2,\n width: r.size,\n height: r.size,\n backgroundColor: color,\n }}\n onAnimationEnd={() => removeRipple(r.id)}\n />\n ))}\n </div>\n )\n },\n)\n","// scroll-progress — page scroll progress bar\nimport { forwardRef, useCallback, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ScrollProgressProps = React.HTMLAttributes<HTMLDivElement> & {\n color?: string\n height?: number\n}\n\nexport const ScrollProgress = forwardRef<HTMLDivElement, ScrollProgressProps>(\n function ScrollProgress({ className, color, height = 3, ...props }, ref) {\n const [progress, setProgress] = useState(0)\n\n const handleScroll = useCallback(() => {\n const scrollTop = document.documentElement.scrollTop\n const scrollHeight =\n document.documentElement.scrollHeight -\n document.documentElement.clientHeight\n if (scrollHeight > 0) {\n setProgress((scrollTop / scrollHeight) * 100)\n }\n }, [])\n\n useEffect(() => {\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [handleScroll])\n\n return (\n <div\n className={cx('fixed top-0 right-0 left-0 z-50', className)}\n data-component=\"scroll-progress\"\n ref={ref}\n style={{ height: `${height}px` }}\n {...props}\n >\n <div\n className=\"h-full bg-accent transition-[width] duration-100 ease-out\"\n style={{\n width: `${progress}%`,\n ...(color !== undefined ? { backgroundColor: color } : {}),\n }}\n />\n </div>\n )\n },\n)\n\nexport type { ScrollProgressProps }\n","// scroll-to-top — floating button that appears when scrolled down\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type ScrollToTopProps = {\n threshold?: number\n smooth?: boolean\n className?: string\n}\n\nexport const ScrollToTop = forwardRef<HTMLButtonElement, ScrollToTopProps>(\n function ScrollToTop({ threshold = 300, smooth = true, className }, ref) {\n const [visible, setVisible] = useState(() => {\n if (typeof window === 'undefined') return false\n return window.scrollY >= threshold\n })\n\n useEffect(() => {\n const handler = () => setVisible(window.scrollY >= threshold)\n window.addEventListener('scroll', handler, { passive: true })\n return () => window.removeEventListener('scroll', handler)\n }, [threshold])\n\n if (!visible) return null\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Scroll to top\"\n onClick={() => window.scrollTo({ top: 0, behavior: smooth ? 'smooth' : 'auto' })}\n className={cx(\n 'fixed bottom-6 right-6 z-40 flex h-10 w-10 items-center justify-center rounded-full bg-accent text-accent-fg shadow-lg transition-opacity hover:bg-accent/90',\n focusCls,\n className,\n )}\n data-component=\"scroll-to-top\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M8 12V4M4 7l4-3 4 3\" />\n </svg>\n </button>\n )\n },\n)\n","// segmented-control — mutually exclusive button group (iOS-style)\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype SegmentedControlOption = {\n value: string\n label: string\n}\n\ntype SegmentedControlSize = 'default' | 'sm'\n\ntype SegmentedControlProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n options: SegmentedControlOption[]\n value: string\n onChange: (value: string) => void\n size?: SegmentedControlSize\n disabled?: boolean\n glass?: boolean\n}\n\nconst sizeClasses: Record<SegmentedControlSize, string> = {\n default: 'px-3 py-1.5 text-xs',\n sm: 'px-2 py-1 text-[11px]',\n}\n\nconst SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControl({ options, value, onChange, size = 'default', disabled, glass, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex select-none gds-radius-button bg-bg-tertiary p-0.5',\n glass === true && glassClass(glass),\n disabled === true && 'pointer-events-none opacity-50',\n className,\n )}\n data-component=\"segmented-control\"\n data-state={disabled === true ? 'disabled' : 'enabled'}\n role=\"radiogroup\"\n {...props}\n >\n {options.map((option) => {\n const isActive = option.value === value\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n disabled={disabled}\n onClick={() => {\n if (!isActive) {\n onChange(option.value)\n }\n }}\n className={cx(\n 'gds-radius-button transition-all',\n sizeClasses[size ?? 'default'],\n focusCls,\n isActive\n ? 'bg-bg font-medium text-fg gds-shadow-sm'\n : 'text-fg-muted hover:text-fg',\n )}\n >\n {option.label}\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport { SegmentedControl }\nexport type { SegmentedControlOption, SegmentedControlProps, SegmentedControlSize }\n","// shortcut-display — keyboard shortcut with optional description\nimport { forwardRef } from 'react'\n\nimport { Kbd } from '../l2-primitives/kbd'\nimport { cx } from '../utils/cx'\n\ntype ShortcutDisplayProps = React.HTMLAttributes<HTMLSpanElement> & {\n description?: string\n keys: string[]\n}\n\nexport const ShortcutDisplay = forwardRef<HTMLSpanElement, ShortcutDisplayProps>(\n function ShortcutDisplay({ className, description, keys, ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gap-2', className)}\n data-component=\"shortcut-display\"\n ref={ref}\n {...props}\n >\n <span className=\"inline-flex items-center gap-0.5\">\n {keys.map((key, i) => (\n <Kbd key={i}>{key}</Kbd>\n ))}\n </span>\n {description !== undefined && (\n <span className=\"text-xs text-fg-muted\">{description}</span>\n )}\n </span>\n )\n },\n)\n\nexport type { ShortcutDisplayProps }\n","// skeleton-group — predefined skeleton layouts for common loading patterns\nimport { forwardRef } from 'react'\n\nimport { Skeleton } from '../l2-primitives/skeleton'\nimport { cx } from '../utils/cx'\n\ntype SkeletonGroupVariant = 'avatar-text' | 'card' | 'form-field'\n\ntype SkeletonGroupProps = {\n className?: string\n count?: number\n variant?: SkeletonGroupVariant\n}\n\nconst layouts: Record<SkeletonGroupVariant, () => React.ReactNode> = {\n 'avatar-text': () => (\n <div className=\"flex items-center gap-3\">\n <Skeleton variant=\"circle\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"text\" width=\"40%\" />\n </div>\n </div>\n ),\n card: () => (\n <div className=\"flex flex-col gap-3\">\n <Skeleton variant=\"rect\" />\n <Skeleton variant=\"text\" />\n <Skeleton variant=\"text\" width=\"80%\" />\n <Skeleton variant=\"text\" width=\"50%\" />\n </div>\n ),\n 'form-field': () => (\n <div className=\"flex flex-col gap-2\">\n <Skeleton variant=\"text\" width=\"30%\" />\n <Skeleton variant=\"rect\" height={36} />\n </div>\n ),\n}\n\nexport const SkeletonGroup = forwardRef<HTMLDivElement, SkeletonGroupProps>(\n function SkeletonGroup({ className, count = 1, variant = 'avatar-text' }, ref) {\n const render = layouts[variant]\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gap-4', className)}\n data-component=\"skeleton-group\"\n data-variant={variant}\n >\n {Array.from({ length: count }, (_, i) => (\n <div key={i}>{render()}</div>\n ))}\n </div>\n )\n },\n)\n\nexport type { SkeletonGroupProps, SkeletonGroupVariant }\n","// sparkle — animated sparkle/star particles around a child element\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type SparkleProps = {\n children: React.ReactNode\n active?: boolean\n count?: number\n color?: string\n className?: string\n}\n\nconst STAR_PATH = 'M12 0l3 9 9 3-9 3-3 9-3-9-9-3 9-3z'\n\nfunction starStyle(i: number, count: number): React.CSSProperties {\n const angle = (360 / count) * i\n const rad = (angle * Math.PI) / 180\n const dist = 70 + (i % 3) * 15\n const x = Math.cos(rad) * dist\n const y = Math.sin(rad) * dist\n return {\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 10,\n height: 10,\n transform: `translate(${x}%, ${y}%)`,\n animation: `gds-sparkle 1.4s ease-in-out ${i * 0.2}s infinite`,\n opacity: 0,\n }\n}\n\nexport const Sparkle = forwardRef<HTMLSpanElement, SparkleProps>(\n function Sparkle(\n { children, active = true, count = 3, color = 'var(--gds-accent)', className },\n ref,\n ) {\n const particles = Array.from({ length: count }, (_, i) => i)\n\n return (\n <span ref={ref} className={cx('relative inline-block', className)} data-component=\"sparkle\">\n {children}\n {active &&\n particles.map((i) => (\n <svg\n key={i}\n viewBox=\"0 0 24 24\"\n fill={color}\n style={starStyle(i, count)}\n aria-hidden=\"true\"\n >\n <path d={STAR_PATH} />\n </svg>\n ))}\n {active && (\n <style>{`\n @keyframes gds-sparkle {\n 0%, 100% { opacity: 0; transform: scale(0) rotate(0deg); }\n 50% { opacity: 1; transform: scale(1) rotate(180deg); }\n }\n `}</style>\n )}\n </span>\n )\n },\n)\n","import type { ReactNode } from 'react'\nimport { Children } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype StaggerProps = { animation?: 'fade' | 'scale' | 'slide-up'; children: ReactNode[]; className?: string; delay?: number }\n\nconst animationClasses: Record<string, string> = {\n fade: 'animate-[stagger-fade_0.4s_ease_both]',\n scale: 'animate-[stagger-scale_0.4s_ease_both]',\n 'slide-up': 'animate-[stagger-slide-up_0.4s_ease_both]',\n}\n\nexport function Stagger({ animation = 'fade', children, className, delay = 80 }: StaggerProps) {\n const items = Children.toArray(children)\n return (\n <div className={cx('', className)} data-component=\"stagger\">\n {items.map((child, i) => (\n <div className={animationClasses[animation]} key={i} style={{ animationDelay: `${i * delay}ms` }}>\n {child}\n </div>\n ))}\n </div>\n )\n}\n\nexport type { StaggerProps }\n","// star-rating — read-only star rating display with half-star support\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst sizeMap = { sm: 14, default: 18, lg: 24 }\nconst STAR_D = 'M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z'\n\ntype StarRatingProps = {\n value: number\n max?: number\n size?: 'sm' | 'default' | 'lg'\n color?: string\n className?: string\n}\n\nfunction StarIcon({ fill, s, color }: { fill: 'full' | 'half' | 'empty'; s: number; color: string }) {\n const id = `half-${Math.random().toString(36).slice(2, 8)}`\n if (fill === 'full') {\n return <svg width={s} height={s} viewBox=\"0 0 24 24\" fill={color} stroke={color} strokeWidth={1}><path d={STAR_D} /></svg>\n }\n if (fill === 'half') {\n return (\n <svg width={s} height={s} viewBox=\"0 0 24 24\" stroke={color} strokeWidth={1}>\n <defs><clipPath id={id}><rect x=\"0\" y=\"0\" width=\"12\" height=\"24\" /></clipPath></defs>\n <path d={STAR_D} fill=\"none\" /><path d={STAR_D} fill={color} clipPath={`url(#${id})`} />\n </svg>\n )\n }\n return <svg width={s} height={s} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1} className=\"text-fg-muted/30\"><path d={STAR_D} /></svg>\n}\n\nconst StarRating = forwardRef<HTMLDivElement, StarRatingProps>(\n function StarRating({ value, max = 5, size = 'default', color = 'currentColor', className }, ref) {\n const s = sizeMap[size]\n const c = color === 'currentColor' ? 'var(--color-warning)' : color\n\n return (\n <div ref={ref} className={cx('inline-flex items-center gap-0.5', className)} data-component=\"star-rating\" role=\"img\" aria-label={`${value} out of ${max} stars`}>\n {Array.from({ length: max }, (_, i) => {\n const diff = value - i\n const fill = diff >= 1 ? 'full' : diff >= 0.5 ? 'half' : 'empty'\n return <StarIcon key={i} fill={fill} s={s} color={c} />\n })}\n </div>\n )\n },\n)\n\nexport { StarRating }\nexport type { StarRatingProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype StatusType = 'active' | 'draft' | 'error' | 'inactive' | 'pending' | 'warning'\n\nconst statusColorMap: Record<StatusType, string> = {\n active: 'bg-success/10 text-success',\n draft: 'bg-fg-muted/10 text-fg-muted',\n error: 'bg-danger/10 text-danger',\n inactive: 'bg-fg-muted/10 text-fg-muted',\n pending: 'bg-warning/10 text-warning',\n warning: 'bg-warning/10 text-warning',\n}\n\ntype StatusBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n glass?: boolean\n icon?: ReactNode\n label?: string\n size?: 'default' | 'sm'\n status: StatusType\n}\n\nexport const StatusBadge = forwardRef<HTMLSpanElement, StatusBadgeProps>(\n function StatusBadge(\n { className, glass, icon, label, size = 'default', status, ...props },\n ref,\n ) {\n const displayLabel = label ?? status\n const sizeClasses = size === 'sm' ? 'gds-pad-x-sm py-px gds-text-caption' : 'gds-pad-x-sm gds-pad-y-sm gds-text-body'\n\n return (\n <span\n className={cx(\n 'inline-flex select-none items-center gds-gap-xs gds-radius-badge font-medium',\n sizeClasses,\n statusColorMap[status],\n glassClass(glass),\n glass === true && 'border border-white/10 bg-white/5',\n className,\n )}\n data-component=\"status-badge\"\n data-state={status}\n ref={ref}\n {...props}\n >\n {icon !== undefined && (\n <span className=\"gds-icon-child-sm\">{icon}</span>\n )}\n {displayLabel}\n </span>\n )\n },\n)\n\nconst statusBadgeVariants = {\n status: statusColorMap,\n size: {\n default: 'gds-pad-x-sm gds-pad-y-sm gds-text-body',\n sm: 'gds-pad-x-sm py-px gds-text-caption',\n },\n} as const\n\nexport { statusBadgeVariants }\nexport type { StatusBadgeProps, StatusType }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype StatusDotStatus = 'connected' | 'connecting' | 'disconnected'\n\ntype StatusDotProps = React.HTMLAttributes<HTMLSpanElement> & {\n label?: string\n status: StatusDotStatus\n}\n\nconst dotCls: Record<StatusDotStatus, string> = {\n connected: 'bg-success',\n connecting: 'bg-warning animate-pulse',\n disconnected: 'bg-danger',\n}\n\nexport const StatusDot = forwardRef<HTMLSpanElement, StatusDotProps>(\n function StatusDot({ className, label, status, ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gds-gap-sm', className)}\n data-component=\"status-dot\"\n data-state={status}\n ref={ref}\n {...props}\n >\n <span className={cx('h-2 w-2 shrink-0 rounded-full', dotCls[status])} />\n {label !== undefined && <span className=\"gds-text-label text-fg-muted\">{label}</span>}\n </span>\n )\n },\n)\n\nconst statusDotVariants = {\n status: dotCls,\n} as const\n\nexport { statusDotVariants }\nexport type { StatusDotProps, StatusDotStatus }\n","// switch-group — list of labeled switches for settings pages\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { Switch } from './switch'\n\ntype SwitchGroupItem = {\n checked: boolean\n description?: string\n id: string\n label: string\n}\n\ntype SwitchGroupProps = {\n className?: string\n disabled?: boolean\n items: SwitchGroupItem[]\n onChange: (id: string, checked: boolean) => void\n}\n\nexport const SwitchGroup = forwardRef<HTMLDivElement, SwitchGroupProps>(\n function SwitchGroup({ className, disabled = false, items, onChange }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gap-3', className)}\n data-component=\"switch-group\"\n role=\"group\"\n >\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center justify-between gap-4 gds-pad-x gds-pad-y-sm\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"gds-text-body font-medium text-fg\">{item.label}</div>\n {item.description !== undefined && (\n <div className=\"mt-0.5 gds-text-caption text-fg-muted\">{item.description}</div>\n )}\n </div>\n <Switch\n checked={item.checked}\n disabled={disabled}\n onChange={(checked) => onChange(item.id, checked)}\n />\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { SwitchGroupItem, SwitchGroupProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantMap = {\n accent: 'bg-accent/15 text-accent',\n danger: 'bg-danger/15 text-danger',\n muted: 'bg-fg-muted/10 text-fg-muted',\n success: 'bg-success/15 text-success',\n warning: 'bg-warning/15 text-warning',\n} as const\n\nconst sizeMap = {\n default: 'px-1.5 py-0.5 text-[10px]',\n sm: 'px-1 py-px text-[9px]',\n} as const\n\ntype TextBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n label: string\n size?: 'default' | 'sm'\n variant?: 'accent' | 'danger' | 'muted' | 'success' | 'warning'\n}\n\nexport const TextBadge = forwardRef<HTMLSpanElement, TextBadgeProps>(\n function TextBadge({ className, label, size = 'default', variant = 'accent', ...props }, ref) {\n return (\n <span\n className={cx(\n 'inline-flex select-none items-center rounded-full font-bold uppercase leading-none tracking-wider',\n variantMap[variant],\n sizeMap[size],\n className,\n )}\n data-component=\"text-badge\"\n data-variant={variant}\n ref={ref}\n {...props}\n >\n {label}\n </span>\n )\n },\n)\n\nexport type { TextBadgeProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TextEffectType = 'glow' | 'gradient' | 'highlight'\n\ntype TextEffectProps = React.HTMLAttributes<HTMLSpanElement> & {\n children: string\n effect: TextEffectType\n gradientFrom?: string\n gradientTo?: string\n}\n\nexport const TextEffect = forwardRef<HTMLSpanElement, TextEffectProps>(\n function TextEffect(\n { children, className, effect, gradientFrom, gradientTo, style, ...props },\n ref,\n ) {\n const from = gradientFrom ?? 'var(--gds-accent)'\n const to = gradientTo ?? 'var(--gds-success)'\n\n if (effect === 'gradient') {\n return (\n <span\n className={cx(\n 'bg-clip-text text-transparent',\n className,\n )}\n data-component=\"text-effect\"\n data-variant={effect}\n ref={ref}\n style={{\n backgroundImage: `linear-gradient(135deg, ${from}, ${to})`,\n ...style,\n }}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n if (effect === 'highlight') {\n return (\n <span\n className={cx(\n 'box-decoration-clone bg-accent/20 px-1',\n className,\n )}\n data-component=\"text-effect\"\n data-variant={effect}\n ref={ref}\n style={style}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n // glow\n return (\n <span\n className={cx(className)}\n data-component=\"text-effect\"\n data-variant={effect}\n ref={ref}\n style={{\n textShadow: `0 0 8px var(--gds-accent), 0 0 16px var(--gds-accent)`,\n ...style,\n }}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n\nexport type { TextEffectProps, TextEffectType }\n","// textarea-counter — textarea with character count display\nimport { forwardRef } from 'react'\n\nimport type { TextareaProps } from '../l2-primitives/textarea'\nimport { Textarea } from '../l2-primitives/textarea'\nimport { cx } from '../utils/cx'\n\ntype TextareaCounterProps = Omit<TextareaProps, 'onChange'> & {\n maxLength?: number\n onChange: (value: string) => void\n value: string\n}\n\nexport const TextareaCounter = forwardRef<HTMLTextAreaElement, TextareaCounterProps>(\n function TextareaCounter({ className, error, maxLength, onChange, value, ...props }, ref) {\n const count = value.length\n const nearLimit = maxLength !== undefined && count >= maxLength * 0.9\n\n return (\n <div className={cx('flex flex-col', className)} data-component=\"textarea-counter\">\n <Textarea\n error={error ?? nearLimit}\n maxLength={maxLength}\n onChange={(e) => onChange(e.target.value)}\n ref={ref}\n value={value}\n {...props}\n />\n <div className={cx(\n 'mt-1 text-right text-[11px]',\n nearLimit ? 'text-danger' : 'text-fg-muted',\n )}>\n {maxLength !== undefined ? `${count} / ${maxLength}` : count}\n </div>\n </div>\n )\n },\n)\n\nexport type { TextareaCounterProps }\n","// theme-toggle — dark/light mode toggle with icon transition\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype ThemeToggleMode = 'dark' | 'light'\n\nexport type ThemeToggleProps = {\n mode: ThemeToggleMode\n onChange: (mode: ThemeToggleMode) => void\n size?: 'default' | 'sm'\n className?: string\n}\n\nconst sizeMap = {\n default: 'h-8 w-8',\n sm: 'h-6 w-6',\n}\n\nconst iconSizeMap = {\n default: 16,\n sm: 14,\n}\n\nexport const ThemeToggle = forwardRef<HTMLButtonElement, ThemeToggleProps>(\n function ThemeToggle({ mode, onChange, size = 'default', className }, ref) {\n const isDark = mode === 'dark'\n const iconSize = iconSizeMap[size]\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n onClick={() => onChange(isDark ? 'light' : 'dark')}\n className={cx(\n 'inline-flex items-center justify-center rounded-full text-fg-muted transition-colors hover:text-fg select-none',\n sizeMap[size],\n focusCls,\n className,\n )}\n data-component=\"theme-toggle\"\n data-state={mode}\n >\n {isDark ? (\n // sun icon — shown in dark mode, click to switch to light\n <svg width={iconSize} height={iconSize} viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" className=\"transition-transform duration-200\">\n <circle cx=\"8\" cy=\"8\" r=\"3\" />\n <path d=\"M8 1v2M8 13v2M1 8h2M13 8h2M3.05 3.05l1.41 1.41M11.54 11.54l1.41 1.41M3.05 12.95l1.41-1.41M11.54 4.46l1.41-1.41\" />\n </svg>\n ) : (\n // moon icon — shown in light mode, click to switch to dark\n <svg width={iconSize} height={iconSize} viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" className=\"transition-transform duration-200\">\n <path d=\"M13.5 8.5a5.5 5.5 0 01-7-7A5.5 5.5 0 108 14a5.48 5.48 0 005.5-5.5z\" />\n </svg>\n )}\n </button>\n )\n },\n)\n","// toggle-group — group of toggle buttons, one or more can be active\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype ToggleGroupItem = {\n value: string\n label: ReactNode\n}\n\ntype ToggleGroupSize = 'default' | 'lg' | 'sm'\n\ntype ToggleGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n items: ToggleGroupItem[]\n value: string[]\n onChange: (value: string[]) => void\n exclusive?: boolean\n size?: ToggleGroupSize\n disabled?: boolean\n}\n\nconst toggleGroupVariants = {\n size: {\n sm: 'px-2 py-1 text-[11px]',\n default: 'px-3 py-1.5 text-xs',\n lg: 'px-4 py-2 text-sm',\n },\n} as const\n\nconst toggleItemVariants = toggleGroupVariants\n\nconst ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(\n function ToggleGroup(\n { items, value, onChange, exclusive, size = 'default', disabled, className, ...props },\n ref,\n ) {\n function handleClick(itemValue: string) {\n if (exclusive === true) {\n // exclusive: always select the clicked one (no deselect)\n if (!value.includes(itemValue)) {\n onChange([itemValue])\n }\n return\n }\n // multi: toggle\n if (value.includes(itemValue)) {\n onChange(value.filter((v) => v !== itemValue))\n } else {\n onChange([...value, itemValue])\n }\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex select-none overflow-hidden gds-radius-button border border-border bg-bg',\n disabled === true && 'pointer-events-none opacity-50',\n className,\n )}\n data-component=\"toggle-group\"\n data-state={disabled === true ? 'disabled' : 'enabled'}\n role=\"group\"\n {...props}\n >\n {items.map((item, index) => {\n const isActive = value.includes(item.value)\n const isLast = index === items.length - 1\n return (\n <button\n key={item.value}\n aria-pressed={isActive}\n className={cx(\n 'transition-colors',\n toggleGroupVariants.size[size ?? 'default'],\n !isLast && 'border-r border-border',\n focusCls,\n isActive ? 'bg-accent/10 text-accent' : 'text-fg-muted hover:bg-bg-tertiary',\n )}\n disabled={disabled}\n onClick={() => handleClick(item.value)}\n type=\"button\"\n >\n {item.label}\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport { ToggleGroup, toggleGroupVariants, toggleItemVariants }\nexport type { ToggleGroupItem, ToggleGroupProps, ToggleGroupSize }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TrendArrowDirection = 'up' | 'down' | 'flat'\ntype TrendArrowSize = 'sm' | 'default'\n\ntype TrendArrowProps = React.HTMLAttributes<HTMLSpanElement> & {\n direction: TrendArrowDirection\n size?: TrendArrowSize\n}\n\nconst sizeMap: Record<TrendArrowSize, number> = { sm: 12, default: 16 }\n\nconst TrendArrow = forwardRef<HTMLSpanElement, TrendArrowProps>(\n function TrendArrow({ className, direction, size = 'default', ...props }, ref) {\n const s = sizeMap[size]\n const colorCls = direction === 'up' ? 'text-success' : direction === 'down' ? 'text-danger' : 'text-fg-muted'\n\n return (\n <span className={cx('inline-flex', colorCls, className)} data-component=\"trend-arrow\" data-direction={direction} ref={ref} {...props}>\n <svg fill=\"none\" height={s} stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} viewBox=\"0 0 24 24\" width={s}>\n {direction === 'up' && <path d=\"M12 19V5M5 12l7-7 7 7\" />}\n {direction === 'down' && <path d=\"M12 5v14M19 12l-7 7-7-7\" />}\n {direction === 'flat' && <path d=\"M5 12h14\" />}\n </svg>\n </span>\n )\n },\n)\n\nexport { TrendArrow }\nexport type { TrendArrowDirection, TrendArrowProps, TrendArrowSize }\n","import { cx } from '../utils/cx'\n\ntype TrendIndicatorProps = { className?: string; inverse?: boolean; label?: string; value: number }\n\nexport function TrendIndicator({ className, inverse = false, label, value }: TrendIndicatorProps) {\n const isPositive = value > 0\n const isNegative = value < 0\n const isZero = value === 0\n\n const colorClass = isZero\n ? 'text-fg-muted'\n : isPositive\n ? (inverse ? 'text-danger' : 'text-success')\n : (inverse ? 'text-success' : 'text-danger')\n\n const arrow = isPositive ? '\\u25B2' : isNegative ? '\\u25BC' : '\\u2500'\n const sign = isPositive ? '+' : ''\n\n return (\n <span className={cx('inline-flex items-center gap-1 text-sm font-medium select-none', colorClass, className)} data-component=\"trend-indicator\">\n <span className=\"text-[10px]\">{arrow}</span>\n <span>{sign}{value}%</span>\n {label !== undefined && <span className=\"text-xs font-normal text-fg-muted\">{label}</span>}\n </span>\n )\n}\n\nexport type { TrendIndicatorProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TruncatedListProps = React.HTMLAttributes<HTMLDivElement> & {\n items: ReactNode[]\n max?: number\n moreLabel?: (count: number) => string\n}\n\nexport const TruncatedList = forwardRef<HTMLDivElement, TruncatedListProps>(\n function TruncatedList({ className, items, max = 3, moreLabel, ...props }, ref) {\n const visible = items.slice(0, max)\n const remaining = items.length - max\n\n return (\n <div\n className={cx('inline-flex flex-wrap items-center gds-gap-sm', className)}\n data-component=\"truncated-list\"\n ref={ref}\n {...props}\n >\n {visible.map((item, i) => (\n <span key={i}>{item}</span>\n ))}\n {remaining > 0 && (\n <span className=\"gds-text-label text-fg-muted\">\n {moreLabel !== undefined ? moreLabel(remaining) : `+${remaining} more`}\n </span>\n )}\n </div>\n )\n },\n)\n\nexport type { TruncatedListProps }\n","// typewriter — characters appear one by one\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type TypewriterProps = {\n text: string\n speed?: number\n delay?: number\n cursor?: boolean\n onComplete?: () => void\n className?: string\n}\n\nexport const Typewriter = forwardRef<HTMLSpanElement, TypewriterProps>(\n function Typewriter(\n { text, speed = 50, delay = 0, cursor = true, onComplete, className },\n ref,\n ) {\n const [length, setLength] = useState(0)\n const [started, setStarted] = useState(delay <= 0)\n\n useEffect(() => {\n if (delay <= 0) return\n const timer = setTimeout(() => setStarted(true), delay)\n return () => clearTimeout(timer)\n }, [delay])\n\n useEffect(() => {\n if (!started) return\n if (length >= text.length) {\n if (onComplete !== undefined) onComplete()\n return\n }\n const timer = setTimeout(() => setLength((prev) => prev + 1), speed)\n return () => clearTimeout(timer)\n }, [length, text.length, speed, started, onComplete])\n\n // reset when text changes\n useEffect(() => {\n setLength(0)\n if (delay <= 0) setStarted(true)\n }, [text, delay])\n\n return (\n <span ref={ref} className={cx(className)} data-component=\"typewriter\">\n {text.slice(0, length)}\n {cursor && (\n <span\n className=\"inline-block animate-pulse\"\n data-testid=\"cursor\"\n aria-hidden\n >\n |\n </span>\n )}\n </span>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype VerifiedBadgeVariant = 'default' | 'gold' | 'official'\n\ntype VerifiedBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n size?: 'default' | 'sm'\n variant?: VerifiedBadgeVariant\n}\n\nconst variantColors: Record<VerifiedBadgeVariant, string> = {\n default: 'text-accent',\n gold: 'text-warning',\n official: 'text-success',\n}\n\nconst sizeMap = { default: 16, sm: 12 } as const\n\nexport const VerifiedBadge = forwardRef<HTMLSpanElement, VerifiedBadgeProps>(\n function VerifiedBadge({ className, size = 'default', variant = 'default', ...props }, ref) {\n const s = sizeMap[size]\n return (\n <span\n className={cx('inline-flex shrink-0 items-center', variantColors[variant], className)}\n data-component=\"verified-badge\"\n data-variant={variant}\n ref={ref}\n {...props}\n >\n <svg fill=\"currentColor\" height={s} viewBox=\"0 0 24 24\" width={s}>\n <path d=\"M12 1l3.09 2.26L19 3.27l.01 3.91L22 10.18 19.82 13l.18 3.91-3.91 1.01L13.09 21 12 23l-3.09-2.26L5 21.73l-.01-3.91L2 14.82 4.18 12l-.18-3.91 3.91-1.01L10.91 4 12 1zm-1.5 12.5l5-5-1.41-1.41L10.5 10.67 8.41 8.59 7 10l3.5 3.5z\" />\n </svg>\n </span>\n )\n },\n)\n\nexport type { VerifiedBadgeProps, VerifiedBadgeVariant }\n","// visual-counter — number display with +/- controls\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype VisualCounterProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n value: number\n onChange: (value: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n}\n\nexport const VisualCounter = forwardRef<HTMLDivElement, VisualCounterProps>(\n function VisualCounter(\n { value, onChange, min, max, step = 1, disabled = false, className, ...props },\n ref,\n ) {\n const atMin = min !== undefined && value <= min\n const atMax = max !== undefined && value >= max\n\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-center gap-1 select-none', className)}\n data-component=\"visual-counter\"\n {...props}\n >\n <button\n type=\"button\"\n className={cx('flex h-7 w-7 items-center justify-center rounded-md border border-border text-fg-muted transition-colors hover:bg-bg-tertiary disabled:opacity-40', focusCls)}\n disabled={disabled || atMin}\n onClick={() => onChange(Math.max(min ?? -Infinity, value - step))}\n >\n −\n </button>\n <span className=\"min-w-[2rem] text-center tabular-nums gds-text text-fg\">{value}</span>\n <button\n type=\"button\"\n className={cx('flex h-7 w-7 items-center justify-center rounded-md border border-border text-fg-muted transition-colors hover:bg-bg-tertiary disabled:opacity-40', focusCls)}\n disabled={disabled || atMax}\n onClick={() => onChange(Math.min(max ?? Infinity, value + step))}\n >\n +\n </button>\n </div>\n )\n },\n)\n\nexport type { VisualCounterProps }\n","import { useCallback } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype VolumeSliderProps = { className?: string; onChange: (v: number) => void; value: number }\n\nconst TOTAL_BARS = 10\n\nexport function VolumeSlider({ className, onChange, value }: VolumeSliderProps) {\n const filledBars = Math.round((value / 100) * TOTAL_BARS)\n\n const handleBarClick = useCallback(\n (barIndex: number) => { onChange(Math.round(((barIndex + 1) / TOTAL_BARS) * 100)) },\n [onChange],\n )\n\n return (\n <div className={cx('inline-flex flex-col-reverse items-center gap-1 select-none', className)} data-component=\"volume-slider\">\n {Array.from({ length: TOTAL_BARS }, (_, i) => (\n <button\n className={cx('h-2 w-8 cursor-pointer rounded-sm transition-colors', i < filledBars ? 'bg-accent' : 'bg-bg-tertiary')}\n key={i}\n onClick={() => handleBarClick(i)}\n type=\"button\"\n />\n ))}\n </div>\n )\n}\n\nexport type { VolumeSliderProps }\n","// zoom-on-hover — wrapper that scales content on hover\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ZoomOnHoverProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n duration?: number\n scale?: number\n}\n\nexport const ZoomOnHover = forwardRef<HTMLDivElement, ZoomOnHoverProps>(\n function ZoomOnHover({ children, className, duration = 300, scale = 1.1, ...props }, ref) {\n return (\n <div\n className={cx('overflow-hidden', className)}\n data-component=\"zoom-on-hover\"\n ref={ref}\n {...props}\n >\n <div\n className=\"transition-transform ease-out\"\n style={{ transitionDuration: `${duration}ms` }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = `scale(${scale})`\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'scale(1)'\n }}\n >\n {children}\n </div>\n </div>\n )\n },\n)\n\nexport type { ZoomOnHoverProps }\n"],"mappings":"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"}
|
|
@@ -2,22 +2,25 @@ import type { ReactNode } from 'react';
|
|
|
2
2
|
type CardPadding = 'default' | 'lg' | 'none' | 'sm';
|
|
3
3
|
export type CardProps = {
|
|
4
4
|
children: ReactNode;
|
|
5
|
+
className?: string;
|
|
5
6
|
/** Enable frosted glass translucency effect */
|
|
6
7
|
glass?: boolean;
|
|
7
|
-
/** Inner padding preset */
|
|
8
|
-
padding?: CardPadding;
|
|
9
8
|
/** Show pulse skeleton placeholder */
|
|
10
9
|
loading?: boolean;
|
|
11
|
-
|
|
10
|
+
/** Click handler — adds cursor-pointer and hover effect */
|
|
11
|
+
onClick?: () => void;
|
|
12
|
+
/** Inner padding preset */
|
|
13
|
+
padding?: CardPadding;
|
|
12
14
|
};
|
|
13
15
|
export declare const Card: import("react").ForwardRefExoticComponent<CardProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
14
16
|
export type CardHeaderProps = {
|
|
15
|
-
title: string;
|
|
16
|
-
description?: string;
|
|
17
17
|
action?: ReactNode;
|
|
18
|
+
children?: ReactNode;
|
|
18
19
|
className?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
title?: string;
|
|
19
22
|
};
|
|
20
|
-
export declare function CardHeader({
|
|
23
|
+
export declare function CardHeader({ action, children, className, description, title }: CardHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
21
24
|
export type CardContentProps = {
|
|
22
25
|
children: ReactNode;
|
|
23
26
|
className?: string;
|