react-marketing-ui 0.0.2 → 0.0.4
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/accordion.js +1 -1
- package/dist/accordion.js.map +1 -1
- package/dist/accordion.mjs +222 -2
- package/dist/accordion.mjs.map +1 -1
- package/dist/action-swap.js +1 -0
- package/dist/action-swap.mjs +77 -3
- package/dist/action-swap.mjs.map +1 -1
- package/dist/animated-beam.js +1 -0
- package/dist/animated-beam.mjs +127 -2
- package/dist/animated-beam.mjs.map +1 -1
- package/dist/button.js +1 -1
- package/dist/button.js.map +1 -1
- package/dist/button.mjs +115 -2
- package/dist/button.mjs.map +1 -1
- package/dist/card.js +1 -2
- package/dist/card.js.map +1 -1
- package/dist/card.mjs +135 -3
- package/dist/card.mjs.map +1 -1
- package/dist/dia-text-reveal.js +1 -0
- package/dist/dia-text-reveal.mjs +331 -2
- package/dist/dia-text-reveal.mjs.map +1 -1
- package/dist/elevated-input.js +1 -1
- package/dist/elevated-input.js.map +1 -1
- package/dist/elevated-input.mjs +48 -2
- package/dist/elevated-input.mjs.map +1 -1
- package/dist/fade-in.js +1 -0
- package/dist/fade-in.mjs +84 -2
- package/dist/fade-in.mjs.map +1 -1
- package/dist/feature-card.js +1 -1
- package/dist/feature-card.js.map +1 -1
- package/dist/feature-card.mjs +34 -2
- package/dist/feature-card.mjs.map +1 -1
- package/dist/flowchart-parts.js +1 -1
- package/dist/flowchart-parts.js.map +1 -1
- package/dist/flowchart-parts.mjs +91 -2
- package/dist/flowchart-parts.mjs.map +1 -1
- package/dist/glossy-button.js +1 -1
- package/dist/glossy-button.js.map +1 -1
- package/dist/glossy-button.mjs +82 -2
- package/dist/glossy-button.mjs.map +1 -1
- package/dist/grainient.js +1 -0
- package/dist/grainient.mjs +327 -2
- package/dist/grainient.mjs.map +1 -1
- package/dist/highlighter.js +1 -0
- package/dist/highlighter.mjs +122 -3
- package/dist/highlighter.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2642 -32
- package/dist/index.mjs.map +1 -1
- package/dist/input.js +1 -0
- package/dist/input.mjs +107 -2
- package/dist/input.mjs.map +1 -1
- package/dist/lib/breakpoints.js +1 -1
- package/dist/lib/breakpoints.js.map +1 -1
- package/dist/lib/breakpoints.mjs +34 -1
- package/dist/lib/breakpoints.mjs.map +1 -1
- package/dist/lib/cn.js +1 -1
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/cn.mjs +17 -1
- package/dist/lib/cn.mjs.map +1 -1
- package/dist/lib/ease.js +1 -0
- package/dist/lib/ease.mjs +9 -1
- package/dist/lib/ease.mjs.map +1 -1
- package/dist/lib/surface.js +1 -0
- package/dist/lib/surface.mjs +37 -1
- package/dist/lib/surface.mjs.map +1 -1
- package/dist/lib/use-media-query.js +1 -0
- package/dist/lib/use-media-query.mjs +16 -1
- package/dist/lib/use-media-query.mjs.map +1 -1
- package/dist/liquid-metal.js +1 -0
- package/dist/liquid-metal.mjs +40 -2
- package/dist/liquid-metal.mjs.map +1 -1
- package/dist/navigation-menu-icons.js +1 -1
- package/dist/navigation-menu-icons.js.map +1 -1
- package/dist/navigation-menu-icons.mjs +36 -1
- package/dist/navigation-menu-icons.mjs.map +1 -1
- package/dist/navigation-menu-styles.js +1 -1
- package/dist/navigation-menu-styles.js.map +1 -1
- package/dist/navigation-menu-styles.mjs +11 -1
- package/dist/navigation-menu-styles.mjs.map +1 -1
- package/dist/navigation-menu.js +1 -2
- package/dist/navigation-menu.js.map +1 -1
- package/dist/navigation-menu.mjs +350 -5
- package/dist/navigation-menu.mjs.map +1 -1
- package/dist/password-input.js +1 -0
- package/dist/password-input.mjs +171 -3
- package/dist/password-input.mjs.map +1 -1
- package/dist/rainbow-button.js +1 -0
- package/dist/rainbow-button.mjs +45 -2
- package/dist/rainbow-button.mjs.map +1 -1
- package/dist/range-slider.js +1 -0
- package/dist/range-slider.mjs +82 -1
- package/dist/range-slider.mjs.map +1 -1
- package/dist/rolling-badge.js +1 -0
- package/dist/rolling-badge.mjs +68 -2
- package/dist/rolling-badge.mjs.map +1 -1
- package/dist/savings-badge.js +1 -1
- package/dist/savings-badge.js.map +1 -1
- package/dist/savings-badge.mjs +22 -2
- package/dist/savings-badge.mjs.map +1 -1
- package/dist/shine-border.js +1 -0
- package/dist/shine-border.mjs +44 -2
- package/dist/shine-border.mjs.map +1 -1
- package/dist/sparkles-text.js +1 -0
- package/dist/sparkles-text.mjs +84 -3
- package/dist/sparkles-text.mjs.map +1 -1
- package/dist/tabs.js +1 -0
- package/dist/tabs.mjs +118 -2
- package/dist/tabs.mjs.map +1 -1
- package/dist/theme-toggle.js +1 -0
- package/dist/theme-toggle.mjs +248 -5
- package/dist/theme-toggle.mjs.map +1 -1
- package/package.json +68 -68
- package/dist/chunk-3SB6HUBA.mjs +0 -31
- package/dist/chunk-3SB6HUBA.mjs.map +0 -1
- package/dist/chunk-4PBVBXGY.mjs +0 -84
- package/dist/chunk-4PBVBXGY.mjs.map +0 -1
- package/dist/chunk-4VCFWVSJ.mjs +0 -42
- package/dist/chunk-4VCFWVSJ.mjs.map +0 -1
- package/dist/chunk-5QQAPGR2.mjs +0 -109
- package/dist/chunk-5QQAPGR2.mjs.map +0 -1
- package/dist/chunk-6MB4UKRX.mjs +0 -19
- package/dist/chunk-6MB4UKRX.mjs.map +0 -1
- package/dist/chunk-6T5LR34O.mjs +0 -45
- package/dist/chunk-6T5LR34O.mjs.map +0 -1
- package/dist/chunk-AYLCYDUM.mjs +0 -275
- package/dist/chunk-AYLCYDUM.mjs.map +0 -1
- package/dist/chunk-AYY7D2RJ.mjs +0 -112
- package/dist/chunk-AYY7D2RJ.mjs.map +0 -1
- package/dist/chunk-CTZEI2YS.mjs +0 -324
- package/dist/chunk-CTZEI2YS.mjs.map +0 -1
- package/dist/chunk-DA3I3Y5O.mjs +0 -71
- package/dist/chunk-DA3I3Y5O.mjs.map +0 -1
- package/dist/chunk-EYHT2EWJ.mjs +0 -18
- package/dist/chunk-EYHT2EWJ.mjs.map +0 -1
- package/dist/chunk-IHLGCS63.mjs +0 -36
- package/dist/chunk-IHLGCS63.mjs.map +0 -1
- package/dist/chunk-JVXJ6SFX.mjs +0 -38
- package/dist/chunk-JVXJ6SFX.mjs.map +0 -1
- package/dist/chunk-KBHYXLRG.mjs +0 -13
- package/dist/chunk-KBHYXLRG.mjs.map +0 -1
- package/dist/chunk-KMXUQYR3.mjs +0 -74
- package/dist/chunk-KMXUQYR3.mjs.map +0 -1
- package/dist/chunk-KNPOZ34H.mjs +0 -88
- package/dist/chunk-KNPOZ34H.mjs.map +0 -1
- package/dist/chunk-KRNWCJ4D.mjs +0 -219
- package/dist/chunk-KRNWCJ4D.mjs.map +0 -1
- package/dist/chunk-M5MESV26.mjs +0 -124
- package/dist/chunk-M5MESV26.mjs.map +0 -1
- package/dist/chunk-MJYBPJBA.mjs +0 -115
- package/dist/chunk-MJYBPJBA.mjs.map +0 -1
- package/dist/chunk-NNHPQ67J.mjs +0 -10
- package/dist/chunk-NNHPQ67J.mjs.map +0 -1
- package/dist/chunk-OCZFHVVD.mjs +0 -71
- package/dist/chunk-OCZFHVVD.mjs.map +0 -1
- package/dist/chunk-QAWSH567.mjs +0 -19
- package/dist/chunk-QAWSH567.mjs.map +0 -1
- package/dist/chunk-R2E2J42H.mjs +0 -38
- package/dist/chunk-R2E2J42H.mjs.map +0 -1
- package/dist/chunk-TPGLLSYV.mjs +0 -65
- package/dist/chunk-TPGLLSYV.mjs.map +0 -1
- package/dist/chunk-VJENJHXJ.mjs +0 -72
- package/dist/chunk-VJENJHXJ.mjs.map +0 -1
- package/dist/chunk-W22G7XHR.mjs +0 -104
- package/dist/chunk-W22G7XHR.mjs.map +0 -1
- package/dist/chunk-WDR5VPZJ.mjs +0 -79
- package/dist/chunk-WDR5VPZJ.mjs.map +0 -1
- package/dist/chunk-WLUGKBH7.mjs +0 -37
- package/dist/chunk-WLUGKBH7.mjs.map +0 -1
- package/dist/chunk-WYJYLDUA.mjs +0 -84
- package/dist/chunk-WYJYLDUA.mjs.map +0 -1
- package/dist/chunk-XZEDZVXT.mjs +0 -38
- package/dist/chunk-XZEDZVXT.mjs.map +0 -1
- package/dist/chunk-YKGP5JIL.mjs +0 -328
- package/dist/chunk-YKGP5JIL.mjs.map +0 -1
- package/dist/chunk-YM3U2OBE.mjs +0 -99
- package/dist/chunk-YM3U2OBE.mjs.map +0 -1
package/dist/chunk-WDR5VPZJ.mjs
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-QAWSH567.mjs';
|
|
2
|
-
import { cva } from 'class-variance-authority';
|
|
3
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
var glossLayer = cn(
|
|
6
|
-
"pointer-events-none absolute inset-0 z-[-1] rounded-[inherit]",
|
|
7
|
-
"[background-color:var(--btn-face)] [box-shadow:var(--shadow-button)]",
|
|
8
|
-
"transition-shadow duration-150",
|
|
9
|
-
// Pressed (and disabled): bevel + cast go transparent, the rim stays.
|
|
10
|
-
"group-active/glossy:[box-shadow:var(--shadow-button-pressed)]",
|
|
11
|
-
"group-disabled/glossy:[box-shadow:var(--shadow-button-pressed)]",
|
|
12
|
-
// Dome — fixed direction, per-variant stops. Above the face, below the tint.
|
|
13
|
-
"before:absolute before:inset-0 before:rounded-[inherit] before:content-[''] before:[background-image:var(--gradient-button)]",
|
|
14
|
-
// Interaction tint. Hidden outright when disabled, and on touch (no hover
|
|
15
|
-
// state to speak of) so the root's active:opacity can carry the press instead.
|
|
16
|
-
"after:absolute after:inset-0 after:rounded-[inherit] after:content-[''] after:opacity-0",
|
|
17
|
-
"after:[background-color:var(--btn-tint-hover)] after:transition-opacity after:duration-150 after:[will-change:opacity]",
|
|
18
|
-
"group-hover/glossy:after:opacity-100",
|
|
19
|
-
"group-active/glossy:after:[background-color:var(--btn-tint-active)]",
|
|
20
|
-
"group-disabled/glossy:after:hidden [@media(hover:none)]:after:hidden"
|
|
21
|
-
);
|
|
22
|
-
var glossyButtonVariants = cva(
|
|
23
|
-
cn(
|
|
24
|
-
"glossy group/glossy relative isolate inline-flex cursor-pointer select-none items-center justify-center gap-1 whitespace-nowrap rounded-full font-normal",
|
|
25
|
-
// Label colour rides the variant. Kept as a utility rather than a plain
|
|
26
|
-
// declaration on `.glossy` so a caller's own text-* class still wins.
|
|
27
|
-
"[color:var(--btn-fg)]",
|
|
28
|
-
"disabled:cursor-default disabled:opacity-50",
|
|
29
|
-
// Touch devices get no hover layer, so the whole key dims on press instead.
|
|
30
|
-
"[@media(hover:none)]:active:opacity-80"
|
|
31
|
-
),
|
|
32
|
-
{
|
|
33
|
-
variants: {
|
|
34
|
-
size: {
|
|
35
|
-
sm: "h-8 px-2.5 text-sm",
|
|
36
|
-
md: "h-9 px-5 text-[17px]",
|
|
37
|
-
lg: "h-11 px-6 text-[17px]"
|
|
38
|
-
},
|
|
39
|
-
/**
|
|
40
|
-
* Written out as literal class names — Tailwind's scanner is static, so a
|
|
41
|
-
* `glossy-${variant}` template would never make it into the stylesheet.
|
|
42
|
-
* `neutral` is the bare recipe, so it needs no class of its own.
|
|
43
|
-
*/
|
|
44
|
-
variant: {
|
|
45
|
-
neutral: "",
|
|
46
|
-
accent: "glossy-accent",
|
|
47
|
-
destructive: "glossy-destructive",
|
|
48
|
-
special: "glossy-special",
|
|
49
|
-
positive: "glossy-positive",
|
|
50
|
-
attention: "glossy-attention",
|
|
51
|
-
highlight: "glossy-highlight",
|
|
52
|
-
inverse: "glossy-inverse"
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
defaultVariants: { size: "md", variant: "neutral" }
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
function GlossyButton({
|
|
59
|
-
size,
|
|
60
|
-
variant,
|
|
61
|
-
actionOrLink,
|
|
62
|
-
children,
|
|
63
|
-
disabled,
|
|
64
|
-
className,
|
|
65
|
-
"aria-label": ariaLabel
|
|
66
|
-
}) {
|
|
67
|
-
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
68
|
-
/* @__PURE__ */ jsx("span", { "data-fx-layer": "gloss", "aria-hidden": true, className: glossLayer }),
|
|
69
|
-
/* @__PURE__ */ jsx("span", { className: "px-0.5", children })
|
|
70
|
-
] });
|
|
71
|
-
const buttonClassName = cn(glossyButtonVariants({ size, variant }), className);
|
|
72
|
-
if (typeof actionOrLink === "string")
|
|
73
|
-
return /* @__PURE__ */ jsx("a", { href: actionOrLink, className: cn(buttonClassName, "no-underline"), "aria-label": ariaLabel, children: content });
|
|
74
|
-
return /* @__PURE__ */ jsx("button", { type: "button", className: buttonClassName, onClick: actionOrLink, disabled, "aria-label": ariaLabel, children: content });
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export { GlossyButton, glossyButtonVariants };
|
|
78
|
-
//# sourceMappingURL=chunk-WDR5VPZJ.mjs.map
|
|
79
|
-
//# sourceMappingURL=chunk-WDR5VPZJ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/glossy-button.tsx"],"names":[],"mappings":";;;;AAmCA,IAAM,UAAA,GAAa,EAAA;AAAA,EACjB,+DAAA;AAAA,EACA,sEAAA;AAAA,EACA,gCAAA;AAAA;AAAA,EAEA,+DAAA;AAAA,EACA,iEAAA;AAAA;AAAA,EAEA,8HAAA;AAAA;AAAA;AAAA,EAGA,yFAAA;AAAA,EACA,wHAAA;AAAA,EACA,sCAAA;AAAA,EACA,qEAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,oBAAA,GAAuB,GAAA;AAAA,EAC3B,EAAA;AAAA,IACE,0JAAA;AAAA;AAAA;AAAA,IAGA,uBAAA;AAAA,IACA,6CAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,EAAA;AAAA,QACT,MAAA,EAAQ,eAAA;AAAA,QACR,WAAA,EAAa,oBAAA;AAAA,QACb,OAAA,EAAS,gBAAA;AAAA,QACT,QAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAW,kBAAA;AAAA,QACX,SAAA,EAAW,kBAAA;AAAA,QACX,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,SAAA;AAAU;AAEtD;AAeO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA,EAAc;AAChB,CAAA,EAAsB;AACpB,EAAA,MAAM,0BACJ,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAK,eAAA,EAAc,OAAA,EAAQ,aAAA,EAAa,IAAA,EAAM,WAAW,UAAA,EAAY,CAAA;AAAA,oBACtE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAU,QAAA,EAAS;AAAA,GAAA,EACrC,CAAA;AAGF,EAAA,MAAM,eAAA,GAAkB,GAAG,oBAAA,CAAqB,EAAE,MAAM,OAAA,EAAS,GAAG,SAAS,CAAA;AAE7E,EAAA,IAAI,OAAO,YAAA,KAAiB,QAAA;AAC1B,IAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,cAAc,CAAA,EAAG,YAAA,EAAY,SAAA,EAChF,QAAA,EAAA,OAAA,EACH,CAAA;AAGJ,EAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,eAAA,EAAiB,OAAA,EAAS,YAAA,EAAc,QAAA,EAAoB,YAAA,EAAY,SAAA,EACtG,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ","file":"chunk-WDR5VPZJ.mjs","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Physically-lit button: a domed, back-lit key built from one effect layer.\n *\n * The geometry lives in a single `box-shadow` list that gets swapped wholesale on\n * press, so the bevel and cast can drop out while the rim survives without any\n * of them being separate elements:\n *\n * • the gloss span — face fill + the shadow list (bevel, rim, cast).\n * • its `before:` — the dome gradient, painted over the face.\n * • its `after:` — the hover/press tint, the only thing that cross-fades.\n *\n * The recipe lives in `global.css`. Every colour is a `--btn-*` primitive, and\n * the two shadow composites are declared on `.glossy` — on the key itself, not\n * on `:root` — because a var() inside a custom property is substituted where the\n * property is *declared*. That's what lets one `.glossy-<variant>` class restyle\n * the whole recipe by setting primitives, and it's why there are no `dark:`\n * variants here: `.dark` overrides the same primitives.\n *\n * The span is a sibling of the label rather than its parent so the label never\n * inherits the effect layers' stacking or transitions; `isolate` on the root\n * contains the span's negative z-index.\n *\n * Server-renderable: every state is pure CSS. Passing a function as\n * `actionOrLink` requires a client-component parent, as with any onClick prop.\n */\n\n/**\n * The whole visual treatment. Absolutely positioned behind the label, with the\n * dome (`before:`) and the interaction tint (`after:`) stacked over the face.\n * Only the tint animates opacity; the shadow list animates by being replaced.\n */\nconst glossLayer = cn(\n 'pointer-events-none absolute inset-0 z-[-1] rounded-[inherit]',\n '[background-color:var(--btn-face)] [box-shadow:var(--shadow-button)]',\n 'transition-shadow duration-150',\n // Pressed (and disabled): bevel + cast go transparent, the rim stays.\n 'group-active/glossy:[box-shadow:var(--shadow-button-pressed)]',\n 'group-disabled/glossy:[box-shadow:var(--shadow-button-pressed)]',\n // Dome — fixed direction, per-variant stops. Above the face, below the tint.\n \"before:absolute before:inset-0 before:rounded-[inherit] before:content-[''] before:[background-image:var(--gradient-button)]\",\n // Interaction tint. Hidden outright when disabled, and on touch (no hover\n // state to speak of) so the root's active:opacity can carry the press instead.\n \"after:absolute after:inset-0 after:rounded-[inherit] after:content-[''] after:opacity-0\",\n 'after:[background-color:var(--btn-tint-hover)] after:transition-opacity after:duration-150 after:[will-change:opacity]',\n 'group-hover/glossy:after:opacity-100',\n 'group-active/glossy:after:[background-color:var(--btn-tint-active)]',\n 'group-disabled/glossy:after:hidden [@media(hover:none)]:after:hidden',\n);\n\nconst glossyButtonVariants = cva(\n cn(\n 'glossy group/glossy relative isolate inline-flex cursor-pointer select-none items-center justify-center gap-1 whitespace-nowrap rounded-full font-normal',\n // Label colour rides the variant. Kept as a utility rather than a plain\n // declaration on `.glossy` so a caller's own text-* class still wins.\n '[color:var(--btn-fg)]',\n 'disabled:cursor-default disabled:opacity-50',\n // Touch devices get no hover layer, so the whole key dims on press instead.\n '[@media(hover:none)]:active:opacity-80',\n ),\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 text-sm',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n },\n /**\n * Written out as literal class names — Tailwind's scanner is static, so a\n * `glossy-${variant}` template would never make it into the stylesheet.\n * `neutral` is the bare recipe, so it needs no class of its own.\n */\n variant: {\n neutral: '',\n accent: 'glossy-accent',\n destructive: 'glossy-destructive',\n special: 'glossy-special',\n positive: 'glossy-positive',\n attention: 'glossy-attention',\n highlight: 'glossy-highlight',\n inverse: 'glossy-inverse',\n },\n },\n defaultVariants: { size: 'md', variant: 'neutral' },\n },\n);\n\nexport type GlossyButtonProps = VariantProps<typeof glossyButtonVariants> & {\n /**\n * String → renders as a plain <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n /** Button-only — an anchor can't be disabled. */\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n};\n\nexport function GlossyButton({\n size,\n variant,\n actionOrLink,\n children,\n disabled,\n className,\n 'aria-label': ariaLabel,\n}: GlossyButtonProps) {\n const content = (\n <>\n <span data-fx-layer=\"gloss\" aria-hidden={true} className={glossLayer} />\n <span className=\"px-0.5\">{children}</span>\n </>\n );\n\n const buttonClassName = cn(glossyButtonVariants({ size, variant }), className);\n\n if (typeof actionOrLink === 'string')\n return (\n <a href={actionOrLink} className={cn(buttonClassName, 'no-underline')} aria-label={ariaLabel}>\n {content}\n </a>\n );\n\n return (\n <button type=\"button\" className={buttonClassName} onClick={actionOrLink} disabled={disabled} aria-label={ariaLabel}>\n {content}\n </button>\n );\n}\n\nexport { glossyButtonVariants };\n"]}
|
package/dist/chunk-WLUGKBH7.mjs
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-QAWSH567.mjs';
|
|
2
|
-
import { LiquidMetal as LiquidMetal$1 } from '@paper-design/shaders-react';
|
|
3
|
-
import { jsx } from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
function LiquidMetal({
|
|
6
|
-
colorBack = "#aaaaac",
|
|
7
|
-
colorTint = "#ffffff",
|
|
8
|
-
speed = 0.5,
|
|
9
|
-
repetition = 4,
|
|
10
|
-
distortion = 0.1,
|
|
11
|
-
scale = 1,
|
|
12
|
-
className,
|
|
13
|
-
style
|
|
14
|
-
}) {
|
|
15
|
-
return /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: cn("pointer-events-none absolute inset-0 z-0 overflow-hidden", className), style, children: /* @__PURE__ */ jsx(
|
|
16
|
-
LiquidMetal$1,
|
|
17
|
-
{
|
|
18
|
-
colorBack,
|
|
19
|
-
colorTint,
|
|
20
|
-
speed,
|
|
21
|
-
repetition,
|
|
22
|
-
distortion,
|
|
23
|
-
softness: 0,
|
|
24
|
-
shiftRed: 0.3,
|
|
25
|
-
shiftBlue: -0.3,
|
|
26
|
-
angle: 45,
|
|
27
|
-
shape: "none",
|
|
28
|
-
scale,
|
|
29
|
-
fit: "cover",
|
|
30
|
-
style: { width: "100%", height: "100%" }
|
|
31
|
-
}
|
|
32
|
-
) });
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export { LiquidMetal };
|
|
36
|
-
//# sourceMappingURL=chunk-WLUGKBH7.mjs.map
|
|
37
|
-
//# sourceMappingURL=chunk-WLUGKBH7.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/liquid-metal.tsx"],"names":["LiquidMetalShader"],"mappings":";;;;AA8BO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA,GAAY,SAAA;AAAA,EACZ,SAAA,GAAY,SAAA;AAAA,EACZ,KAAA,GAAQ,GAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,UAAA,GAAa,GAAA;AAAA,EACb,KAAA,GAAQ,CAAA;AAAA,EACR,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACE,GAAA,CAAC,SAAI,aAAA,EAAa,IAAA,EAAM,WAAW,EAAA,CAAG,0DAAA,EAA4D,SAAS,CAAA,EAAG,KAAA,EAC5G,QAAA,kBAAA,GAAA;AAAA,IAACA,aAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,GAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,EAAA;AAAA,MACP,KAAA,EAAM,MAAA;AAAA,MACN,KAAA;AAAA,MACA,GAAA,EAAI,OAAA;AAAA,MACJ,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA;AAAO;AAAA,GACzC,EACF,CAAA;AAEJ","file":"chunk-WLUGKBH7.mjs","sourcesContent":["'use client';\n\nimport { LiquidMetal as LiquidMetalShader } from '@paper-design/shaders-react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── Shader wrapper ────────────────────────────────────── */\n\nexport type LiquidMetalProps = {\n /** Base background color of the liquid metal. */\n colorBack?: string;\n /** Tint / highlight color for the chrome effect. */\n colorTint?: string;\n /** Animation speed (0.1–2.0 recommended). */\n speed?: number;\n /** Pattern stripe density (1–10). */\n repetition?: number;\n /** Wave distortion amount (0–1). */\n distortion?: number;\n /** Texture zoom (0.01–4). */\n scale?: number;\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Full-bleed animated liquid-metal shader. Absolutely positioned to fill its\n * nearest positioned ancestor; the WebGL canvas is decorative, so it is hidden\n * from assistive tech and never intercepts pointer events.\n */\nexport function LiquidMetal({\n colorBack = '#aaaaac',\n colorTint = '#ffffff',\n speed = 0.5,\n repetition = 4,\n distortion = 0.1,\n scale = 1,\n className,\n style,\n}: LiquidMetalProps) {\n return (\n <div aria-hidden={true} className={cn('pointer-events-none absolute inset-0 z-0 overflow-hidden', className)} style={style}>\n <LiquidMetalShader\n colorBack={colorBack}\n colorTint={colorTint}\n speed={speed}\n repetition={repetition}\n distortion={distortion}\n softness={0}\n shiftRed={0.3}\n shiftBlue={-0.3}\n angle={45}\n shape=\"none\"\n scale={scale}\n fit=\"cover\"\n style={{ width: '100%', height: '100%' }}\n />\n </div>\n );\n}\n"]}
|
package/dist/chunk-WYJYLDUA.mjs
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { easeOut } from './chunk-NNHPQ67J.mjs';
|
|
2
|
-
import { useInView, motion } from 'framer-motion';
|
|
3
|
-
import { createContext, useRef, useCallback, useEffect, useContext, useState } from 'react';
|
|
4
|
-
import { jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
var viewport = { once: true, margin: "-60px" };
|
|
7
|
-
var ROW_TOLERANCE = 8;
|
|
8
|
-
var StaggerContext = createContext(null);
|
|
9
|
-
function FadeIn({ children, className, delay = 0, duration = 1, yOffset = 20, start = true }) {
|
|
10
|
-
const ref = useRef(null);
|
|
11
|
-
const inView = useInView(ref, viewport);
|
|
12
|
-
const hidden = { opacity: 0, y: yOffset };
|
|
13
|
-
return /* @__PURE__ */ jsx(
|
|
14
|
-
motion.div,
|
|
15
|
-
{
|
|
16
|
-
ref,
|
|
17
|
-
className,
|
|
18
|
-
initial: hidden,
|
|
19
|
-
animate: inView && start ? { opacity: 1, y: 0 } : hidden,
|
|
20
|
-
transition: { duration, delay, ease: easeOut },
|
|
21
|
-
children
|
|
22
|
-
}
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
function Stagger({ children, className, staggerDelay = 0.15, baseDelay = 0, start = true }) {
|
|
26
|
-
const queue = useRef([]);
|
|
27
|
-
const frame = useRef(null);
|
|
28
|
-
const started = useRef(start);
|
|
29
|
-
started.current = start;
|
|
30
|
-
const flush = useCallback(() => {
|
|
31
|
-
frame.current = null;
|
|
32
|
-
const batch = queue.current;
|
|
33
|
-
queue.current = [];
|
|
34
|
-
const positioned = batch.map((entry) => ({
|
|
35
|
-
...entry,
|
|
36
|
-
rect: entry.element.getBoundingClientRect()
|
|
37
|
-
}));
|
|
38
|
-
positioned.sort(
|
|
39
|
-
(a, b) => Math.abs(a.rect.top - b.rect.top) > ROW_TOLERANCE ? a.rect.top - b.rect.top : a.rect.left - b.rect.left
|
|
40
|
-
);
|
|
41
|
-
for (const [index, entry] of positioned.entries()) entry.reveal(baseDelay + index * staggerDelay);
|
|
42
|
-
}, [baseDelay, staggerDelay]);
|
|
43
|
-
const register = useCallback(
|
|
44
|
-
(element, reveal) => {
|
|
45
|
-
queue.current.push({ element, reveal });
|
|
46
|
-
if (started.current) frame.current ??= requestAnimationFrame(flush);
|
|
47
|
-
},
|
|
48
|
-
[flush]
|
|
49
|
-
);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (start && queue.current.length > 0) frame.current ??= requestAnimationFrame(flush);
|
|
52
|
-
}, [start, flush]);
|
|
53
|
-
return /* @__PURE__ */ jsx(StaggerContext, { value: register, children: /* @__PURE__ */ jsx("div", { className, children }) });
|
|
54
|
-
}
|
|
55
|
-
function StaggerItem({ children, className }) {
|
|
56
|
-
const register = useContext(StaggerContext);
|
|
57
|
-
const ref = useRef(null);
|
|
58
|
-
const claimed = useRef(false);
|
|
59
|
-
const [delay, setDelay] = useState(null);
|
|
60
|
-
const onViewportEnter = useCallback(() => {
|
|
61
|
-
if (claimed.current) return;
|
|
62
|
-
claimed.current = true;
|
|
63
|
-
const element = ref.current;
|
|
64
|
-
if (register && element) register(element, setDelay);
|
|
65
|
-
else setDelay(0);
|
|
66
|
-
}, [register]);
|
|
67
|
-
return /* @__PURE__ */ jsx(
|
|
68
|
-
motion.div,
|
|
69
|
-
{
|
|
70
|
-
ref,
|
|
71
|
-
className,
|
|
72
|
-
initial: { opacity: 0, y: 18 },
|
|
73
|
-
animate: delay === null ? { opacity: 0, y: 18 } : { opacity: 1, y: 0 },
|
|
74
|
-
transition: { duration: 0.45, delay: delay ?? 0, ease: easeOut },
|
|
75
|
-
viewport,
|
|
76
|
-
onViewportEnter,
|
|
77
|
-
children
|
|
78
|
-
}
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export { FadeIn, Stagger, StaggerItem };
|
|
83
|
-
//# sourceMappingURL=chunk-WYJYLDUA.mjs.map
|
|
84
|
-
//# sourceMappingURL=chunk-WYJYLDUA.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/fade-in.tsx"],"names":[],"mappings":"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","file":"chunk-WYJYLDUA.mjs","sourcesContent":["'use client';\n\nimport { motion, useInView } from 'framer-motion';\nimport { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { easeOut } from '../lib/ease.js';\n\n/** Holds an entrance back until an external cue is ready. */\ntype Gate = {\n /** While `false`, the entrance stays in its initial state even once in view. @defaultValue `true` */\n start?: boolean;\n};\n\nexport type FadeInProps = Gate & {\n children: React.ReactNode;\n className?: string;\n delay?: number;\n duration?: number;\n yOffset?: number;\n};\n\nexport type StaggerProps = Gate & {\n children: React.ReactNode;\n className?: string;\n staggerDelay?: number;\n baseDelay?: number;\n};\n\nexport type StaggerItemProps = {\n children: React.ReactNode;\n className?: string;\n};\n\n/** Shared viewport config so every entrance in this file triggers at the same threshold. */\nconst viewport = { once: true, margin: '-60px' } as const;\n\n/** Rows in a grid can differ by a fraction of a pixel; treat near-equal tops as the same row. */\nconst ROW_TOLERANCE = 8;\n\n/** Registers a newly visible item and receives back the delay it should animate with. */\ntype RegisterItem = (element: Element, reveal: (delay: number) => void) => void;\n\nconst StaggerContext = createContext<RegisterItem | null>(null);\n\n/**\n * Wraps children in a framer-motion div that fades+slides up\n * when it enters the viewport.\n */\nexport function FadeIn({ children, className, delay = 0, duration = 1, yOffset = 20, start = true }: FadeInProps) {\n const ref = useRef<HTMLDivElement>(null);\n const inView = useInView(ref, viewport);\n const hidden = { opacity: 0, y: yOffset };\n\n return (\n <motion.div\n ref={ref}\n className={className}\n initial={hidden}\n animate={inView && start ? { opacity: 1, y: 0 } : hidden}\n transition={{ duration, delay, ease: easeOut }}\n >\n {children}\n </motion.div>\n );\n}\n\n/**\n * Coordinates staggered entrances for the `<StaggerItem>`s inside it.\n *\n * Unlike framer-motion's `staggerChildren`, the cascade is driven by each\n * item's own visibility rather than the container's: items that scroll into\n * view together are batched into one frame, sorted top-to-bottom then\n * left-to-right, and given progressively later delays.\n *\n * While `start` is `false`, items that come into view queue up instead of\n * revealing, so the whole cascade lands as one batch when the cue arrives.\n */\nexport function Stagger({ children, className, staggerDelay = 0.15, baseDelay = 0, start = true }: StaggerProps) {\n const queue = useRef<{ element: Element; reveal: (delay: number) => void }[]>([]);\n const frame = useRef<number | null>(null);\n const started = useRef(start);\n started.current = start;\n\n const flush = useCallback(() => {\n frame.current = null;\n const batch = queue.current;\n queue.current = [];\n\n const positioned = batch.map((entry) => ({\n ...entry,\n rect: entry.element.getBoundingClientRect(),\n }));\n positioned.sort((a, b) =>\n Math.abs(a.rect.top - b.rect.top) > ROW_TOLERANCE ? a.rect.top - b.rect.top : a.rect.left - b.rect.left,\n );\n for (const [index, entry] of positioned.entries()) entry.reveal(baseDelay + index * staggerDelay);\n }, [baseDelay, staggerDelay]);\n\n const register = useCallback<RegisterItem>(\n (element, reveal) => {\n queue.current.push({ element, reveal });\n if (started.current) frame.current ??= requestAnimationFrame(flush);\n },\n [flush],\n );\n\n // biome-ignore lint/plugin: drains an imperative queue of pending reveals when the gate opens.\n useEffect(() => {\n if (start && queue.current.length > 0) frame.current ??= requestAnimationFrame(flush);\n }, [start, flush]);\n\n return (\n <StaggerContext value={register}>\n <div className={className}>{children}</div>\n </StaggerContext>\n );\n}\n\n/** Use inside <Stagger> to mark each animated child. */\nexport function StaggerItem({ children, className }: StaggerItemProps) {\n const register = useContext(StaggerContext);\n const ref = useRef<HTMLDivElement>(null);\n const claimed = useRef(false);\n const [delay, setDelay] = useState<number | null>(null);\n\n const onViewportEnter = useCallback(() => {\n if (claimed.current) return;\n claimed.current = true;\n const element = ref.current;\n if (register && element) register(element, setDelay);\n else setDelay(0);\n }, [register]);\n\n return (\n <motion.div\n ref={ref}\n className={className}\n initial={{ opacity: 0, y: 18 }}\n animate={delay === null ? { opacity: 0, y: 18 } : { opacity: 1, y: 0 }}\n transition={{ duration: 0.45, delay: delay ?? 0, ease: easeOut }}\n viewport={viewport}\n onViewportEnter={onViewportEnter}\n >\n {children}\n </motion.div>\n );\n}\n"]}
|
package/dist/chunk-XZEDZVXT.mjs
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// src/lib/surface.ts
|
|
2
|
-
var SURFACE_BG = {
|
|
3
|
-
1: "bg-surface-1",
|
|
4
|
-
2: "bg-surface-2",
|
|
5
|
-
3: "bg-surface-3",
|
|
6
|
-
4: "bg-surface-4",
|
|
7
|
-
5: "bg-surface-5",
|
|
8
|
-
6: "bg-surface-6",
|
|
9
|
-
7: "bg-surface-7",
|
|
10
|
-
8: "bg-surface-8"
|
|
11
|
-
};
|
|
12
|
-
var SURFACE_VAR = {
|
|
13
|
-
1: "[--popup-surface:var(--surface-1)]",
|
|
14
|
-
2: "[--popup-surface:var(--surface-2)]",
|
|
15
|
-
3: "[--popup-surface:var(--surface-3)]",
|
|
16
|
-
4: "[--popup-surface:var(--surface-4)]",
|
|
17
|
-
5: "[--popup-surface:var(--surface-5)]",
|
|
18
|
-
6: "[--popup-surface:var(--surface-6)]",
|
|
19
|
-
7: "[--popup-surface:var(--surface-7)]",
|
|
20
|
-
8: "[--popup-surface:var(--surface-8)]"
|
|
21
|
-
};
|
|
22
|
-
var SURFACE_SHADOW_COMBINED = {
|
|
23
|
-
1: "shadow-elevated-1",
|
|
24
|
-
2: "shadow-elevated-2",
|
|
25
|
-
3: "shadow-elevated-3",
|
|
26
|
-
4: "shadow-elevated-4",
|
|
27
|
-
5: "shadow-elevated-5",
|
|
28
|
-
6: "shadow-elevated-6",
|
|
29
|
-
7: "shadow-elevated-7",
|
|
30
|
-
8: "shadow-elevated-8"
|
|
31
|
-
};
|
|
32
|
-
function solidSurface(level, shadowLevel = level) {
|
|
33
|
-
return `${SURFACE_BG[level]} ${SURFACE_SHADOW_COMBINED[shadowLevel]} ${SURFACE_VAR[level]}`;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export { solidSurface };
|
|
37
|
-
//# sourceMappingURL=chunk-XZEDZVXT.mjs.map
|
|
38
|
-
//# sourceMappingURL=chunk-XZEDZVXT.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/surface.ts"],"names":[],"mappings":";AAEA,IAAM,UAAA,GAA2C;AAAA,EAC/C,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,WAAA,GAA4C;AAAA,EAChD,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG,oCAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAMA,IAAM,uBAAA,GAAwD;AAAA,EAC5D,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG,mBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAaO,SAAS,YAAA,CAAa,KAAA,EAAqB,WAAA,GAA4B,KAAA,EAAe;AAC3F,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA,EAAI,uBAAA,CAAwB,WAAW,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,KAAK,CAAC,CAAA,CAAA;AAC3F","file":"chunk-XZEDZVXT.mjs","sourcesContent":["export type SurfaceLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\nconst SURFACE_BG: Record<SurfaceLevel, string> = {\n 1: 'bg-surface-1',\n 2: 'bg-surface-2',\n 3: 'bg-surface-3',\n 4: 'bg-surface-4',\n 5: 'bg-surface-5',\n 6: 'bg-surface-6',\n 7: 'bg-surface-7',\n 8: 'bg-surface-8',\n};\n\nconst SURFACE_VAR: Record<SurfaceLevel, string> = {\n 1: '[--popup-surface:var(--surface-1)]',\n 2: '[--popup-surface:var(--surface-2)]',\n 3: '[--popup-surface:var(--surface-3)]',\n 4: '[--popup-surface:var(--surface-4)]',\n 5: '[--popup-surface:var(--surface-5)]',\n 6: '[--popup-surface:var(--surface-6)]',\n 7: '[--popup-surface:var(--surface-7)]',\n 8: '[--popup-surface:var(--surface-8)]',\n};\n\n/**\n * Drops + rim insets in a single `box-shadow` (no `::after`). Used by `solidSurface()`.\n * Literal Tailwind classes so the scanner picks them up.\n */\nconst SURFACE_SHADOW_COMBINED: Record<SurfaceLevel, string> = {\n 1: 'shadow-elevated-1',\n 2: 'shadow-elevated-2',\n 3: 'shadow-elevated-3',\n 4: 'shadow-elevated-4',\n 5: 'shadow-elevated-5',\n 6: 'shadow-elevated-6',\n 7: 'shadow-elevated-7',\n 8: 'shadow-elevated-8',\n};\n\n/**\n * Elevation for a free-floating surface: background, elevation variable, and the drop shadow with\n * its rim inset painted in the same `box-shadow` — which leaves `::after` free for other purposes.\n *\n * Suits containers with no opaque children near their edges. A child painted over the rim (a sticky\n * label, a pinned input, a dialog header) covers it, since nothing re-paints the rim above the\n * children.\n *\n * When `level !== shadowLevel` the rim color tracks `shadowLevel` — the two cannot be controlled\n * independently.\n */\nexport function solidSurface(level: SurfaceLevel, shadowLevel: SurfaceLevel = level): string {\n return `${SURFACE_BG[level]} ${SURFACE_SHADOW_COMBINED[shadowLevel]} ${SURFACE_VAR[level]}`;\n}\n"]}
|
package/dist/chunk-YKGP5JIL.mjs
DELETED
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-QAWSH567.mjs';
|
|
2
|
-
import { useReducedMotion, useInView, motion } from 'framer-motion';
|
|
3
|
-
import { useMemo, useRef, useState, useCallback, useEffect } from 'react';
|
|
4
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
function HeightClipper({ height, delay, children }) {
|
|
7
|
-
return /* @__PURE__ */ jsx(
|
|
8
|
-
motion.span,
|
|
9
|
-
{
|
|
10
|
-
className: "block w-full overflow-hidden",
|
|
11
|
-
animate: height === void 0 ? {} : { height },
|
|
12
|
-
transition: {
|
|
13
|
-
height: { duration: 0.4, ease: [0.4, 0, 0.2, 1], delay }
|
|
14
|
-
},
|
|
15
|
-
children
|
|
16
|
-
}
|
|
17
|
-
);
|
|
18
|
-
}
|
|
19
|
-
function ExitingLine({ text, textColor, duration, fallDuration, opacityEase, wrap = false, onDone }) {
|
|
20
|
-
return /* @__PURE__ */ jsx(
|
|
21
|
-
motion.span,
|
|
22
|
-
{
|
|
23
|
-
"aria-hidden": true,
|
|
24
|
-
className: cn(
|
|
25
|
-
wrap ? "pointer-events-none absolute top-0 left-0 w-full" : "pointer-events-none absolute top-0 left-1/2 whitespace-nowrap"
|
|
26
|
-
),
|
|
27
|
-
style: { color: textColor },
|
|
28
|
-
initial: wrap ? { opacity: 1, y: 0 } : { opacity: 1, x: "-50%", y: 0 },
|
|
29
|
-
animate: wrap ? { opacity: 0, y: 14 } : { opacity: 0, x: "-50%", y: 14 },
|
|
30
|
-
transition: {
|
|
31
|
-
opacity: { duration, ease: opacityEase },
|
|
32
|
-
y: { duration: fallDuration, ease: [0.22, 0.61, 0.36, 1] }
|
|
33
|
-
},
|
|
34
|
-
onAnimationComplete: onDone,
|
|
35
|
-
children: text
|
|
36
|
-
}
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
function WidthReservation({ texts }) {
|
|
40
|
-
return /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "invisible block h-0 overflow-hidden", children: texts.map((t) => /* @__PURE__ */ jsx("span", { className: "block", children: t }, t)) });
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// src/components/dia-text-reveal.sweep.ts
|
|
44
|
-
var BAND_HALF = 17;
|
|
45
|
-
var SWEEP_START = -BAND_HALF;
|
|
46
|
-
var SWEEP_END = 100 + BAND_HALF;
|
|
47
|
-
var sweepEaseFn = (t) => t < 0.5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2;
|
|
48
|
-
var coverageAt = (progress) => Math.min(1, sweepEaseFn(progress) * (SWEEP_END - SWEEP_START) / 100);
|
|
49
|
-
var COVERAGE_SPAN = (() => {
|
|
50
|
-
let lo = 0;
|
|
51
|
-
let hi = 1;
|
|
52
|
-
for (let i = 0; i < 40; i += 1) {
|
|
53
|
-
const mid = (lo + hi) / 2;
|
|
54
|
-
if (coverageAt(mid) < 1) lo = mid;
|
|
55
|
-
else hi = mid;
|
|
56
|
-
}
|
|
57
|
-
return hi;
|
|
58
|
-
})();
|
|
59
|
-
var EXIT_FADE_BIAS = 0.4;
|
|
60
|
-
var exitEase = (t) => coverageAt(t * COVERAGE_SPAN) ** EXIT_FADE_BIAS;
|
|
61
|
-
var makeExitEase = (leadFraction) => {
|
|
62
|
-
if (leadFraction <= 0) return exitEase;
|
|
63
|
-
if (leadFraction >= 1) return () => 0;
|
|
64
|
-
return (t) => t <= leadFraction ? 0 : exitEase((t - leadFraction) / (1 - leadFraction));
|
|
65
|
-
};
|
|
66
|
-
var SWEEP_SCALE = 3;
|
|
67
|
-
var BAND_HALF_IMAGE = BAND_HALF / SWEEP_SCALE;
|
|
68
|
-
var positionFor = (pos) => (pos - 50 * SWEEP_SCALE) / (1 - SWEEP_SCALE);
|
|
69
|
-
var SWEEP_FROM = `${positionFor(SWEEP_START).toFixed(3)}%`;
|
|
70
|
-
var SWEEP_TO = `${positionFor(SWEEP_END).toFixed(3)}%`;
|
|
71
|
-
var SWEEP_SIZE = `${SWEEP_SCALE * 100}% 100%`;
|
|
72
|
-
var EASE_SAMPLES = 24;
|
|
73
|
-
var sweepEaseCss = `linear(${Array.from({ length: EASE_SAMPLES + 1 }, (_, i) => sweepEaseFn(i / EASE_SAMPLES).toFixed(5)).join(
|
|
74
|
-
", "
|
|
75
|
-
)})`;
|
|
76
|
-
function buildSweepGradient(colors, textColor) {
|
|
77
|
-
const bandStart = 50 - BAND_HALF_IMAGE;
|
|
78
|
-
const bandEnd = 50 + BAND_HALF_IMAGE;
|
|
79
|
-
const n = colors.length;
|
|
80
|
-
const parts = [`${textColor} 0%`, `${textColor} ${bandStart.toFixed(3)}%`];
|
|
81
|
-
for (const [i, c] of colors.entries()) {
|
|
82
|
-
const pct = n === 1 ? 50 : bandStart + i / (n - 1) * BAND_HALF_IMAGE * 2;
|
|
83
|
-
parts.push(`${c} ${pct.toFixed(3)}%`);
|
|
84
|
-
}
|
|
85
|
-
parts.push(`transparent ${bandEnd.toFixed(3)}%`, "transparent 100%");
|
|
86
|
-
return `linear-gradient(90deg, ${parts.join(", ")})`;
|
|
87
|
-
}
|
|
88
|
-
function buildSweepStyle({ colors, textColor, duration, delay, sweep, paused, reduced }) {
|
|
89
|
-
return {
|
|
90
|
-
color: "transparent",
|
|
91
|
-
backgroundClip: "text",
|
|
92
|
-
WebkitBackgroundClip: "text",
|
|
93
|
-
backgroundImage: buildSweepGradient(colors, textColor),
|
|
94
|
-
backgroundRepeat: "no-repeat",
|
|
95
|
-
backgroundSize: SWEEP_SIZE,
|
|
96
|
-
backgroundPositionX: reduced ? SWEEP_TO : SWEEP_FROM,
|
|
97
|
-
"--dia-sweep-from": SWEEP_FROM,
|
|
98
|
-
"--dia-sweep-to": SWEEP_TO,
|
|
99
|
-
...sweep !== null && !reduced && {
|
|
100
|
-
animationName: sweep.cycle % 2 === 0 ? "dia-sweep-a" : "dia-sweep-b",
|
|
101
|
-
animationDuration: `${duration}s`,
|
|
102
|
-
animationDelay: `${delay}s`,
|
|
103
|
-
animationTimingFunction: sweepEaseCss,
|
|
104
|
-
animationFillMode: "both",
|
|
105
|
-
animationIterationCount: 1,
|
|
106
|
-
animationPlayState: paused ? "paused" : "running"
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// src/components/dia-text-reveal.utils.ts
|
|
112
|
-
function measureWidths(el, texts) {
|
|
113
|
-
const parent = el.parentElement;
|
|
114
|
-
if (!parent) return texts.map(() => 0);
|
|
115
|
-
const ghost = el.cloneNode();
|
|
116
|
-
if (!(ghost instanceof HTMLElement)) return texts.map(() => 0);
|
|
117
|
-
Object.assign(ghost.style, {
|
|
118
|
-
position: "absolute",
|
|
119
|
-
visibility: "hidden",
|
|
120
|
-
pointerEvents: "none",
|
|
121
|
-
width: "auto",
|
|
122
|
-
whiteSpace: "nowrap"
|
|
123
|
-
});
|
|
124
|
-
parent.appendChild(ghost);
|
|
125
|
-
const widths = texts.map((t) => {
|
|
126
|
-
ghost.textContent = t;
|
|
127
|
-
return ghost.getBoundingClientRect().width;
|
|
128
|
-
});
|
|
129
|
-
ghost.remove();
|
|
130
|
-
return widths;
|
|
131
|
-
}
|
|
132
|
-
var DEFAULT_COLORS = ["#c679c4", "#fa3d1d", "#ffb005", "#e1e1fe", "#0358f7"];
|
|
133
|
-
var EXIT_LEAD_RATIO = 0.3;
|
|
134
|
-
function DiaTextReveal({
|
|
135
|
-
text,
|
|
136
|
-
colors = DEFAULT_COLORS,
|
|
137
|
-
textColor = "var(--color-foreground)",
|
|
138
|
-
duration = 1,
|
|
139
|
-
delay = 0,
|
|
140
|
-
repeat = false,
|
|
141
|
-
repeatDelay = 0.5,
|
|
142
|
-
exitDuration,
|
|
143
|
-
exitLead,
|
|
144
|
-
startOnView = true,
|
|
145
|
-
start = true,
|
|
146
|
-
once = true,
|
|
147
|
-
className,
|
|
148
|
-
fixedWidth = false,
|
|
149
|
-
wrap = false,
|
|
150
|
-
...props
|
|
151
|
-
}) {
|
|
152
|
-
const texts = Array.isArray(text) ? text : [text];
|
|
153
|
-
const isMulti = texts.length > 1;
|
|
154
|
-
const prefersReducedMotion = useReducedMotion();
|
|
155
|
-
const exitSpan = exitDuration ?? duration * COVERAGE_SPAN;
|
|
156
|
-
const lead = Math.max(0, exitLead ?? duration * EXIT_LEAD_RATIO);
|
|
157
|
-
const exitTotal = lead + exitSpan;
|
|
158
|
-
const leadFraction = exitTotal > 0 ? lead / exitTotal : 0;
|
|
159
|
-
const exitOpacityEase = useMemo(() => makeExitEase(leadFraction), [leadFraction]);
|
|
160
|
-
const spanRef = useRef(null);
|
|
161
|
-
const optsRef = useRef({ repeat, repeatDelay, texts });
|
|
162
|
-
optsRef.current = { repeat, repeatDelay, texts };
|
|
163
|
-
const indexRef = useRef(0);
|
|
164
|
-
const hasPlayedRef = useRef(false);
|
|
165
|
-
const timerRef = useRef(void 0);
|
|
166
|
-
const pendingRepeatRef = useRef(false);
|
|
167
|
-
const [activeIndex, setActiveIndex] = useState(0);
|
|
168
|
-
const [sweep, setSweep] = useState(null);
|
|
169
|
-
const [exiting, setExiting] = useState(null);
|
|
170
|
-
const clearExiting = useCallback(() => setExiting(null), []);
|
|
171
|
-
const [measuredWidths, setMeasuredWidths] = useState([]);
|
|
172
|
-
const [wrapHeight, setWrapHeight] = useState(null);
|
|
173
|
-
const innerRef = useRef(null);
|
|
174
|
-
const isInView = useInView(spanRef, { once, amount: 0.1 });
|
|
175
|
-
const isLiveInView = useInView(spanRef, {
|
|
176
|
-
once: false,
|
|
177
|
-
amount: 0.1
|
|
178
|
-
});
|
|
179
|
-
useEffect(() => {
|
|
180
|
-
const el = spanRef.current;
|
|
181
|
-
if (!(el && isMulti) || wrap) return;
|
|
182
|
-
const measure = () => setMeasuredWidths(measureWidths(el, texts));
|
|
183
|
-
measure();
|
|
184
|
-
if (document.fonts.status !== "loaded") document.fonts.ready.then(measure);
|
|
185
|
-
}, [Array.isArray(text) ? text.join("\0") : text, isMulti, wrap, texts]);
|
|
186
|
-
useEffect(() => {
|
|
187
|
-
const el = innerRef.current;
|
|
188
|
-
if (!(el && wrap && isMulti)) return;
|
|
189
|
-
const observer = new ResizeObserver(([entry]) => {
|
|
190
|
-
if (!entry) return;
|
|
191
|
-
const h = entry.contentRect.height;
|
|
192
|
-
setWrapHeight(
|
|
193
|
-
(prev) => prev !== null && prev.h === h ? prev : {
|
|
194
|
-
h,
|
|
195
|
-
shrink: prev !== null && h < prev.h
|
|
196
|
-
}
|
|
197
|
-
);
|
|
198
|
-
});
|
|
199
|
-
observer.observe(el);
|
|
200
|
-
return () => observer.disconnect();
|
|
201
|
-
}, [wrap, isMulti]);
|
|
202
|
-
const advance = useCallback(() => {
|
|
203
|
-
const opts = optsRef.current;
|
|
204
|
-
const current = indexRef.current;
|
|
205
|
-
const next = (current + 1) % opts.texts.length;
|
|
206
|
-
indexRef.current = next;
|
|
207
|
-
setExiting({ index: current, token: Date.now() });
|
|
208
|
-
setActiveIndex(next);
|
|
209
|
-
setSweep((prev) => ({
|
|
210
|
-
cycle: (prev?.cycle ?? 0) + 1,
|
|
211
|
-
lead: true
|
|
212
|
-
}));
|
|
213
|
-
}, []);
|
|
214
|
-
const scheduleRepeat = useCallback(() => {
|
|
215
|
-
timerRef.current = setTimeout(() => {
|
|
216
|
-
timerRef.current = void 0;
|
|
217
|
-
advance();
|
|
218
|
-
}, optsRef.current.repeatDelay * 1e3);
|
|
219
|
-
}, [advance]);
|
|
220
|
-
const onSweepEnd = useCallback(
|
|
221
|
-
(event) => {
|
|
222
|
-
if (!event.animationName.startsWith("dia-sweep")) return;
|
|
223
|
-
if (!optsRef.current.repeat) return;
|
|
224
|
-
scheduleRepeat();
|
|
225
|
-
},
|
|
226
|
-
[scheduleRepeat]
|
|
227
|
-
);
|
|
228
|
-
useEffect(() => {
|
|
229
|
-
if (prefersReducedMotion) return;
|
|
230
|
-
if (startOnView && !isInView) return;
|
|
231
|
-
if (!start) return;
|
|
232
|
-
if (once && hasPlayedRef.current) return;
|
|
233
|
-
hasPlayedRef.current = true;
|
|
234
|
-
setSweep((prev) => prev === null ? { cycle: 0, lead: false } : { cycle: prev.cycle + 1, lead: false });
|
|
235
|
-
}, [isInView, start, startOnView, once, prefersReducedMotion]);
|
|
236
|
-
useEffect(() => {
|
|
237
|
-
if (!repeat || prefersReducedMotion) return;
|
|
238
|
-
if (!isLiveInView) {
|
|
239
|
-
if (timerRef.current === void 0) return;
|
|
240
|
-
clearTimeout(timerRef.current);
|
|
241
|
-
timerRef.current = void 0;
|
|
242
|
-
pendingRepeatRef.current = true;
|
|
243
|
-
} else if (pendingRepeatRef.current) {
|
|
244
|
-
pendingRepeatRef.current = false;
|
|
245
|
-
scheduleRepeat();
|
|
246
|
-
}
|
|
247
|
-
}, [isLiveInView, repeat, prefersReducedMotion, scheduleRepeat]);
|
|
248
|
-
useEffect(() => () => clearTimeout(timerRef.current), []);
|
|
249
|
-
const paused = repeat && sweep !== null && !isLiveInView;
|
|
250
|
-
const revealStyle = buildSweepStyle({
|
|
251
|
-
colors,
|
|
252
|
-
textColor,
|
|
253
|
-
duration,
|
|
254
|
-
delay: delay + (sweep?.lead ? lead : 0),
|
|
255
|
-
sweep,
|
|
256
|
-
paused,
|
|
257
|
-
reduced: prefersReducedMotion === true
|
|
258
|
-
});
|
|
259
|
-
if (!isMulti)
|
|
260
|
-
return /* @__PURE__ */ jsx(
|
|
261
|
-
motion.span,
|
|
262
|
-
{
|
|
263
|
-
ref: spanRef,
|
|
264
|
-
className: cn("align-baseline text-inherit leading-[100%]", className),
|
|
265
|
-
style: revealStyle,
|
|
266
|
-
...props,
|
|
267
|
-
onAnimationEnd: onSweepEnd,
|
|
268
|
-
children: texts[activeIndex]
|
|
269
|
-
}
|
|
270
|
-
);
|
|
271
|
-
const fixedW = !wrap && fixedWidth && measuredWidths.length > 0 ? Math.max(...measuredWidths) : void 0;
|
|
272
|
-
const animatedW = wrap || fixedWidth ? void 0 : measuredWidths[activeIndex];
|
|
273
|
-
const animatedH = wrap ? wrapHeight?.h : void 0;
|
|
274
|
-
const heightDelay = exiting !== null && wrapHeight?.shrink ? exitTotal : 0;
|
|
275
|
-
const incoming = /* @__PURE__ */ jsx(
|
|
276
|
-
"span",
|
|
277
|
-
{
|
|
278
|
-
ref: innerRef,
|
|
279
|
-
className: cn("inline-block", wrap && "w-full", !wrap && "whitespace-nowrap"),
|
|
280
|
-
style: revealStyle,
|
|
281
|
-
onAnimationEnd: onSweepEnd,
|
|
282
|
-
children: texts[activeIndex]
|
|
283
|
-
}
|
|
284
|
-
);
|
|
285
|
-
return /* @__PURE__ */ jsxs(
|
|
286
|
-
motion.span,
|
|
287
|
-
{
|
|
288
|
-
ref: spanRef,
|
|
289
|
-
className: cn(
|
|
290
|
-
wrap ? "relative inline-block w-full text-center align-baseline text-inherit" : "relative inline-block whitespace-nowrap text-center align-baseline text-inherit leading-[100%]",
|
|
291
|
-
className
|
|
292
|
-
),
|
|
293
|
-
style: {
|
|
294
|
-
...fixedW !== void 0 && { width: fixedW }
|
|
295
|
-
},
|
|
296
|
-
animate: {
|
|
297
|
-
...animatedW !== void 0 && { width: animatedW }
|
|
298
|
-
},
|
|
299
|
-
transition: {
|
|
300
|
-
width: { duration: 0.4, ease: [0.4, 0, 0.2, 1] }
|
|
301
|
-
},
|
|
302
|
-
...props,
|
|
303
|
-
children: [
|
|
304
|
-
wrap ? /* @__PURE__ */ jsxs(HeightClipper, { height: animatedH, delay: heightDelay, children: [
|
|
305
|
-
/* @__PURE__ */ jsx(WidthReservation, { texts }),
|
|
306
|
-
incoming
|
|
307
|
-
] }) : incoming,
|
|
308
|
-
exiting && !prefersReducedMotion && /* @__PURE__ */ jsx(
|
|
309
|
-
ExitingLine,
|
|
310
|
-
{
|
|
311
|
-
text: texts[exiting.index],
|
|
312
|
-
textColor,
|
|
313
|
-
duration: 0.4,
|
|
314
|
-
fallDuration: 0.25,
|
|
315
|
-
opacityEase: exitOpacityEase,
|
|
316
|
-
wrap,
|
|
317
|
-
onDone: clearExiting
|
|
318
|
-
},
|
|
319
|
-
exiting.token
|
|
320
|
-
)
|
|
321
|
-
]
|
|
322
|
-
}
|
|
323
|
-
);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
export { DiaTextReveal };
|
|
327
|
-
//# sourceMappingURL=chunk-YKGP5JIL.mjs.map
|
|
328
|
-
//# sourceMappingURL=chunk-YKGP5JIL.mjs.map
|