@zentauri-ui/zentauri-components 1.7.8 → 1.8.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/README.md +7 -4
- package/cli/registry.json +2 -0
- package/dist/design-system/animated-number.d.ts +32 -0
- package/dist/design-system/animated-number.d.ts.map +1 -0
- package/dist/design-system/index.d.ts +2 -0
- package/dist/design-system/index.d.ts.map +1 -1
- package/dist/design-system/marquee.d.ts +40 -0
- package/dist/design-system/marquee.d.ts.map +1 -0
- package/dist/ui/animated-number/animated-number.d.ts +4 -0
- package/dist/ui/animated-number/animated-number.d.ts.map +1 -0
- package/dist/ui/animated-number/animations.d.ts +59 -0
- package/dist/ui/animated-number/animations.d.ts.map +1 -0
- package/dist/ui/animated-number/index.d.ts +4 -0
- package/dist/ui/animated-number/index.d.ts.map +1 -0
- package/dist/ui/animated-number/types.d.ts +31 -0
- package/dist/ui/animated-number/types.d.ts.map +1 -0
- package/dist/ui/animated-number/variants.d.ts +5 -0
- package/dist/ui/animated-number/variants.d.ts.map +1 -0
- package/dist/ui/animated-number.js +181 -0
- package/dist/ui/animated-number.js.map +1 -0
- package/dist/ui/animated-number.mjs +177 -0
- package/dist/ui/animated-number.mjs.map +1 -0
- package/dist/ui/marquee/index.d.ts +4 -0
- package/dist/ui/marquee/index.d.ts.map +1 -0
- package/dist/ui/marquee/marquee.d.ts +6 -0
- package/dist/ui/marquee/marquee.d.ts.map +1 -0
- package/dist/ui/marquee/types.d.ts +15 -0
- package/dist/ui/marquee/types.d.ts.map +1 -0
- package/dist/ui/marquee/variants.d.ts +7 -0
- package/dist/ui/marquee/variants.d.ts.map +1 -0
- package/dist/ui/marquee.js +171 -0
- package/dist/ui/marquee.js.map +1 -0
- package/dist/ui/marquee.mjs +168 -0
- package/dist/ui/marquee.mjs.map +1 -0
- package/package.json +1 -1
- package/src/design-system/animated-number.ts +53 -0
- package/src/design-system/index.ts +2 -0
- package/src/design-system/marquee.ts +62 -0
- package/src/ui/animated-number/animated-number.test.tsx +64 -0
- package/src/ui/animated-number/animated-number.tsx +120 -0
- package/src/ui/animated-number/animations.ts +22 -0
- package/src/ui/animated-number/index.ts +4 -0
- package/src/ui/animated-number/types.ts +39 -0
- package/src/ui/animated-number/variants.ts +14 -0
- package/src/ui/marquee/index.ts +9 -0
- package/src/ui/marquee/marquee.test.tsx +138 -0
- package/src/ui/marquee/marquee.tsx +114 -0
- package/src/ui/marquee/types.ts +19 -0
- package/src/ui/marquee/variants.ts +24 -0
package/README.md
CHANGED
|
@@ -15,12 +15,12 @@ Published artifacts live under `dist/`. Imports use **per-entry subpaths**: `@ze
|
|
|
15
15
|
|
|
16
16
|
| Metric | Result |
|
|
17
17
|
| ---------- | ---------------- |
|
|
18
|
-
| Test files |
|
|
19
|
-
| Tests |
|
|
18
|
+
| Test files | 66 passed (66) |
|
|
19
|
+
| Tests | 438 passed (438) |
|
|
20
20
|
|
|
21
21
|
| Area | Test files | Tests |
|
|
22
22
|
| --------------------------- | ---------- | ----- |
|
|
23
|
-
| Components and UI utilities |
|
|
23
|
+
| Components and UI utilities | 38 | 344 |
|
|
24
24
|
| React hooks | 26 | 85 |
|
|
25
25
|
| CLI and import rewriting | 2 | 9 |
|
|
26
26
|
|
|
@@ -35,6 +35,7 @@ Published artifacts live under `dist/`. Imports use **per-entry subpaths**: `@ze
|
|
|
35
35
|
| `cli/cli.integration.test.ts` | 4 |
|
|
36
36
|
| `src/ui/buttons/button.test.tsx` | 41 |
|
|
37
37
|
| `src/ui/inputs/input.test.tsx` | 40 |
|
|
38
|
+
| `src/ui/marquee/marquee.test.tsx` | 9 |
|
|
38
39
|
| `src/ui/otp-input/otp-input.test.tsx` | 10 |
|
|
39
40
|
| `src/ui/tree-view/tree-view.test.tsx` | 10 |
|
|
40
41
|
| `src/ui/card/card.test.tsx` | 7 |
|
|
@@ -55,6 +56,7 @@ Published artifacts live under `dist/`. Imports use **per-entry subpaths**: `@ze
|
|
|
55
56
|
| `src/ui/tabs/tabs.test.tsx` | 3 |
|
|
56
57
|
| `src/ui/stepper/stepper.test.tsx` | 12 |
|
|
57
58
|
| `src/ui/timeline/timeline.test.tsx` | 14 |
|
|
59
|
+
| `src/ui/animated-number/animated-number.test.tsx` | 9 |
|
|
58
60
|
| `src/ui/toggle/toggle.test.tsx` | 5 |
|
|
59
61
|
| `src/ui/slider/slider.test.tsx` | 9 |
|
|
60
62
|
| `src/ui/typography/typography.test.tsx` | 7 |
|
|
@@ -147,6 +149,7 @@ Import static primitives from `@zentauri-ui/zentauri-components/ui/<subpath>` wh
|
|
|
147
149
|
| Empty state | `empty-state` | `empty-state/animated` |
|
|
148
150
|
| File upload | `file-upload` | — |
|
|
149
151
|
| Input | `inputs` | `inputs/animated` |
|
|
152
|
+
| Marquee | `marquee` | — |
|
|
150
153
|
| Modal | `modal` | `modal/animated` |
|
|
151
154
|
| OTP input | `otp-input` | — |
|
|
152
155
|
| Pagination | `pagination` | — |
|
|
@@ -669,7 +672,7 @@ From this package directory in the monorepo:
|
|
|
669
672
|
|
|
670
673
|
- `pnpm build` (or `npm run build`) — production bundle via `tsup` (Rollup treeshake + `scripts/prepend-use-client.mjs` via `onSuccess` so each UI entry under `dist/ui/`, the chart entry under `dist/charts/`, and `dist/ui/<name>/animated.*` starts with `"use client"` where needed)
|
|
671
674
|
- `pnpm dev` — `tsup` watch mode (same `onSuccess` hook after each rebuild)
|
|
672
|
-
- `pnpm test` / `pnpm test:watch` — **Vitest** and **Testing Library** unit tests // covered
|
|
675
|
+
- `pnpm test` / `pnpm test:watch` — **Vitest** and **Testing Library** unit tests // covered 438 test cases in total
|
|
673
676
|
- **`pnpm run generate:registry`** — runs `scripts/generate-registry.mjs`, which reads **`uiComponentNames`**, **`chartEntryNames`**, and **`hooksEntryNames`** from `tsup.config.ts`, merges in **`spinner`**, applies fixed **`nameAliases`**, and writes **`cli/registry.json`** (`components` + `hooks`). Run this after adding or renaming UI/chart areas or hook entries so the CLI stays in sync (the script prints counts).
|
|
674
677
|
|
|
675
678
|
## Github Release log
|
package/cli/registry.json
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare const zuiAnimatedNumberBase = "relative flex w-full overflow-hidden [perspective:1000px]";
|
|
2
|
+
export declare const zuiAnimatedNumberAppearance: {
|
|
3
|
+
readonly default: "text-[color:var(--zui-animated-number-default-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-animated-number-default-fg-dark,oklch(98.4%_0.003_247.858))]";
|
|
4
|
+
readonly success: "text-[color:var(--zui-animated-number-success-fg,oklch(62.7%_0.194_149.214))] dark:text-[color:var(--zui-animated-number-success-fg-dark,oklch(79.2%_0.209_151.711))]";
|
|
5
|
+
readonly warning: "text-[color:var(--zui-animated-number-warning-fg,oklch(66.6%_0.179_58.318))] dark:text-[color:var(--zui-animated-number-warning-fg-dark,oklch(82.8%_0.189_84.429))]";
|
|
6
|
+
readonly error: "text-[color:var(--zui-animated-number-error-fg,oklch(57.7%_0.245_27.325))] dark:text-[color:var(--zui-animated-number-error-fg-dark,oklch(70.4%_0.191_22.216))]";
|
|
7
|
+
readonly info: "text-[color:var(--zui-animated-number-info-fg,oklch(58.8%_0.158_241.966))] dark:text-[color:var(--zui-animated-number-info-fg-dark,oklch(74.6%_0.16_232.661))]";
|
|
8
|
+
readonly ghost: "text-[color:var(--zui-animated-number-ghost-fg,oklch(55.4%_0.046_257.417))] dark:text-[color:var(--zui-animated-number-ghost-fg-dark,oklch(70.4%_0.04_256.788))]";
|
|
9
|
+
readonly purple: "text-[color:var(--zui-animated-number-purple-fg,oklch(55.8%_0.288_302.321))] dark:text-[color:var(--zui-animated-number-purple-fg-dark,oklch(71.4%_0.203_305.504))]";
|
|
10
|
+
readonly pink: "text-[color:var(--zui-animated-number-pink-fg,oklch(59.2%_0.249_0.584))] dark:text-[color:var(--zui-animated-number-pink-fg-dark,oklch(71.8%_0.202_349.761))]";
|
|
11
|
+
readonly orange: "text-[color:var(--zui-animated-number-orange-fg,oklch(64.6%_0.222_41.116))] dark:text-[color:var(--zui-animated-number-orange-fg-dark,oklch(75%_0.183_55.934))]";
|
|
12
|
+
readonly yellow: "text-[color:var(--zui-animated-number-yellow-fg,oklch(68.1%_0.162_75.834))] dark:text-[color:var(--zui-animated-number-yellow-fg-dark,oklch(85.2%_0.199_91.936))]";
|
|
13
|
+
readonly teal: "text-[color:var(--zui-animated-number-teal-fg,oklch(60%_0.118_184.704))] dark:text-[color:var(--zui-animated-number-teal-fg-dark,oklch(77.7%_0.152_181.912))]";
|
|
14
|
+
readonly indigo: "text-[color:var(--zui-animated-number-indigo-fg,oklch(51.1%_0.262_276.966))] dark:text-[color:var(--zui-animated-number-indigo-fg-dark,oklch(67.3%_0.182_276.935))]";
|
|
15
|
+
readonly gray: "text-[color:var(--zui-animated-number-gray-fg,oklch(44.6%_0.03_256.802))] dark:text-[color:var(--zui-animated-number-gray-fg-dark,oklch(70.7%_0.022_261.325))]";
|
|
16
|
+
readonly violet: "text-[color:var(--zui-animated-number-violet-fg,oklch(54.1%_0.281_293.009))] dark:text-[color:var(--zui-animated-number-violet-fg-dark,oklch(70.2%_0.183_293.541))]";
|
|
17
|
+
readonly "gradient-blue": "bg-linear-to-r from-[var(--zui-animated-number-gradient-blue-from,oklch(42.4%_0.199_265.638))] dark:from-[var(--zui-animated-number-gradient-blue-from-dark,oklch(54.6%_0.245_262.881))] to-[var(--zui-animated-number-gradient-blue-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-blue-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent";
|
|
18
|
+
readonly "gradient-green": "bg-linear-to-r from-[var(--zui-animated-number-gradient-green-from,oklch(44.8%_0.119_151.328))] dark:from-[var(--zui-animated-number-gradient-green-from-dark,oklch(62.7%_0.194_149.214))] to-[var(--zui-animated-number-gradient-green-to,oklch(45.3%_0.124_130.933))] dark:to-[var(--zui-animated-number-gradient-green-to-dark,oklch(64.8%_0.2_131.684))] bg-clip-text text-transparent";
|
|
19
|
+
readonly "gradient-red": "bg-linear-to-r from-[var(--zui-animated-number-gradient-red-from,oklch(44.4%_0.177_26.899))] dark:from-[var(--zui-animated-number-gradient-red-from-dark,oklch(57.7%_0.245_27.325))] to-[var(--zui-animated-number-gradient-red-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-red-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent";
|
|
20
|
+
readonly "gradient-yellow": "bg-linear-to-r from-[var(--zui-animated-number-gradient-yellow-from,oklch(47.6%_0.114_61.907))] dark:from-[var(--zui-animated-number-gradient-yellow-from-dark,oklch(68.1%_0.162_75.834))] to-[var(--zui-animated-number-gradient-yellow-to,oklch(47%_0.157_37.304))] dark:to-[var(--zui-animated-number-gradient-yellow-to-dark,oklch(64.6%_0.222_41.116))] bg-clip-text text-transparent";
|
|
21
|
+
readonly "gradient-purple": "bg-linear-to-r from-[var(--zui-animated-number-gradient-purple-from,oklch(43.8%_0.218_303.724))] dark:from-[var(--zui-animated-number-gradient-purple-from-dark,oklch(55.8%_0.288_302.321))] to-[var(--zui-animated-number-gradient-purple-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-purple-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent";
|
|
22
|
+
readonly "gradient-teal": "bg-linear-to-r from-[var(--zui-animated-number-gradient-teal-from,oklch(43.7%_0.078_188.216))] dark:from-[var(--zui-animated-number-gradient-teal-from-dark,oklch(60%_0.118_184.704))] to-[var(--zui-animated-number-gradient-teal-to,oklch(45%_0.085_224.283))] dark:to-[var(--zui-animated-number-gradient-teal-to-dark,oklch(60.9%_0.126_221.723))] bg-clip-text text-transparent";
|
|
23
|
+
readonly "gradient-indigo": "bg-linear-to-r from-[var(--zui-animated-number-gradient-indigo-from,oklch(39.8%_0.195_277.366))] dark:from-[var(--zui-animated-number-gradient-indigo-from-dark,oklch(51.1%_0.262_276.966))] to-[var(--zui-animated-number-gradient-indigo-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-indigo-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent";
|
|
24
|
+
readonly "gradient-pink": "bg-linear-to-r from-[var(--zui-animated-number-gradient-pink-from,oklch(45.9%_0.187_3.815))] dark:from-[var(--zui-animated-number-gradient-pink-from-dark,oklch(59.2%_0.249_0.584))] to-[var(--zui-animated-number-gradient-pink-to,oklch(45.5%_0.188_13.697))] dark:to-[var(--zui-animated-number-gradient-pink-to-dark,oklch(58.6%_0.253_17.585))] bg-clip-text text-transparent";
|
|
25
|
+
readonly "gradient-orange": "bg-linear-to-r from-[var(--zui-animated-number-gradient-orange-from,oklch(47%_0.157_37.304))] dark:from-[var(--zui-animated-number-gradient-orange-from-dark,oklch(64.6%_0.222_41.116))] to-[var(--zui-animated-number-gradient-orange-to,oklch(44.4%_0.177_26.899))] dark:to-[var(--zui-animated-number-gradient-orange-to-dark,oklch(57.7%_0.245_27.325))] bg-clip-text text-transparent";
|
|
26
|
+
};
|
|
27
|
+
export declare const zuiAnimatedNumberSize: {
|
|
28
|
+
readonly sm: "text-2xl font-semibold tabular-nums";
|
|
29
|
+
readonly md: "text-4xl font-semibold tabular-nums";
|
|
30
|
+
readonly lg: "text-6xl font-bold tabular-nums";
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=animated-number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animated-number.d.ts","sourceRoot":"","sources":["../../src/design-system/animated-number.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,8DAC2B,CAAC;AAE9D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;CA2C9B,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./accordion";
|
|
2
2
|
export * from "./alert";
|
|
3
|
+
export * from "./animated-number";
|
|
3
4
|
export * from "./avatar";
|
|
4
5
|
export * from "./badge";
|
|
5
6
|
export * from "./breadcrumb";
|
|
@@ -15,6 +16,7 @@ export * from "./dynamic-stepper";
|
|
|
15
16
|
export * from "./empty-state";
|
|
16
17
|
export * from "./file-upload";
|
|
17
18
|
export * from "./inputs";
|
|
19
|
+
export * from "./marquee";
|
|
18
20
|
export * from "./modal";
|
|
19
21
|
export * from "./otp-input";
|
|
20
22
|
export * from "./pagination";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const zuiMarqueeBase = "group/marquee relative isolate flex min-w-0 overflow-hidden rounded-xl border border-transparent bg-[var(--zui-marquee-bg,transparent)] text-[color:var(--zui-marquee-fg,inherit)] [--zui-marquee-gap:1rem]";
|
|
2
|
+
export declare const zuiMarqueeAppearances: {
|
|
3
|
+
readonly default: "[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]";
|
|
4
|
+
readonly outline: "border-[color:var(--zui-marquee-outline-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:#ffffff] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-outline-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-bg:oklch(20.8%_0.042_265.755)] dark:[--zui-marquee-fg:#ffffff]";
|
|
5
|
+
readonly ghost: "[--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(27.9%_0.041_260.031)] dark:[--zui-marquee-fg:oklch(96.8%_0.007_247.896)]";
|
|
6
|
+
readonly card: "border-[color:var(--zui-marquee-card-border,oklch(92.9%_0.013_255.508))] bg-[var(--zui-marquee-card-bg,#ffffff)] shadow-sm shadow-slate-950/5 [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-card-border-dark,oklch(37.2%_0.044_257.287))] dark:bg-[var(--zui-marquee-card-bg-dark,oklch(20.8%_0.042_265.755_/_0.9))] dark:shadow-black/20 dark:[--zui-marquee-fg:#ffffff]";
|
|
7
|
+
readonly separated: "border-y border-x-0 rounded-none border-[color:var(--zui-marquee-separated-border,oklch(86.9%_0.022_252.894))] [--zui-marquee-bg:transparent] [--zui-marquee-fg:oklch(20.8%_0.042_265.755)] dark:border-[color:var(--zui-marquee-separated-border-dark,oklch(37.2%_0.044_257.287))] dark:[--zui-marquee-fg:#ffffff]";
|
|
8
|
+
readonly sky: "border-[color:var(--zui-marquee-sky-border,oklch(62.3%_0.214_259.815_/_0.28))] [--zui-marquee-bg:oklch(97.7%_0.013_236.62)] [--zui-marquee-fg:oklch(39.1%_0.09_240.876)] dark:border-[color:var(--zui-marquee-sky-border-dark,oklch(70.7%_0.165_254.624_/_0.3))] dark:[--zui-marquee-bg:oklch(39.1%_0.09_240.876_/_0.28)] dark:[--zui-marquee-fg:oklch(95.1%_0.026_236.824)]";
|
|
9
|
+
readonly rose: "border-[color:var(--zui-marquee-rose-border,oklch(58.6%_0.253_17.585_/_0.24))] [--zui-marquee-bg:oklch(96.9%_0.015_12.422)] [--zui-marquee-fg:oklch(41%_0.159_10.272)] dark:border-[color:var(--zui-marquee-rose-border-dark,oklch(71.2%_0.194_13.428_/_0.3))] dark:[--zui-marquee-bg:oklch(41%_0.159_10.272_/_0.28)] dark:[--zui-marquee-fg:oklch(94.1%_0.03_12.58)]";
|
|
10
|
+
readonly purple: "border-[color:var(--zui-marquee-purple-border,oklch(62.7%_0.265_303.9_/_0.24))] [--zui-marquee-bg:oklch(97.7%_0.014_308.299)] [--zui-marquee-fg:oklch(38.1%_0.176_304.987)] dark:border-[color:var(--zui-marquee-purple-border-dark,oklch(71.4%_0.203_305.504_/_0.3))] dark:[--zui-marquee-bg:oklch(38.1%_0.176_304.987_/_0.28)] dark:[--zui-marquee-fg:oklch(94.6%_0.033_307.174)]";
|
|
11
|
+
readonly pink: "border-[color:var(--zui-marquee-pink-border,oklch(65.6%_0.241_354.308_/_0.24))] [--zui-marquee-bg:oklch(97.1%_0.014_343.198)] [--zui-marquee-fg:oklch(40.8%_0.153_2.432)] dark:border-[color:var(--zui-marquee-pink-border-dark,oklch(71.8%_0.202_349.761_/_0.3))] dark:[--zui-marquee-bg:oklch(40.8%_0.153_2.432_/_0.28)] dark:[--zui-marquee-fg:oklch(94.8%_0.028_342.258)]";
|
|
12
|
+
readonly orange: "border-[color:var(--zui-marquee-orange-border,oklch(70.5%_0.213_47.604_/_0.26))] [--zui-marquee-bg:oklch(98%_0.016_73.684)] [--zui-marquee-fg:oklch(40.8%_0.123_38.172)] dark:border-[color:var(--zui-marquee-orange-border-dark,oklch(75%_0.183_55.934_/_0.32))] dark:[--zui-marquee-bg:oklch(40.8%_0.123_38.172_/_0.28)] dark:[--zui-marquee-fg:oklch(95.4%_0.038_75.164)]";
|
|
13
|
+
readonly yellow: "border-[color:var(--zui-marquee-yellow-border,oklch(79.5%_0.184_86.047_/_0.3))] [--zui-marquee-bg:oklch(98.7%_0.026_102.212)] [--zui-marquee-fg:oklch(42.1%_0.095_57.708)] dark:border-[color:var(--zui-marquee-yellow-border-dark,oklch(85.2%_0.199_91.936_/_0.32))] dark:[--zui-marquee-bg:oklch(42.1%_0.095_57.708_/_0.28)] dark:[--zui-marquee-fg:oklch(97.3%_0.071_103.193)]";
|
|
14
|
+
readonly teal: "border-[color:var(--zui-marquee-teal-border,oklch(70.4%_0.14_182.503_/_0.28))] [--zui-marquee-bg:oklch(98.4%_0.014_180.72)] [--zui-marquee-fg:oklch(38.6%_0.063_188.416)] dark:border-[color:var(--zui-marquee-teal-border-dark,oklch(77.7%_0.152_181.912_/_0.32))] dark:[--zui-marquee-bg:oklch(38.6%_0.063_188.416_/_0.28)] dark:[--zui-marquee-fg:oklch(95.3%_0.051_180.801)]";
|
|
15
|
+
readonly indigo: "border-[color:var(--zui-marquee-indigo-border,oklch(58.5%_0.233_277.117_/_0.24))] [--zui-marquee-bg:oklch(96.2%_0.018_272.314)] [--zui-marquee-fg:oklch(35.9%_0.144_278.697)] dark:border-[color:var(--zui-marquee-indigo-border-dark,oklch(67.3%_0.182_276.935_/_0.32))] dark:[--zui-marquee-bg:oklch(35.9%_0.144_278.697_/_0.28)] dark:[--zui-marquee-fg:oklch(93%_0.034_272.788)]";
|
|
16
|
+
readonly emerald: "border-[color:var(--zui-marquee-emerald-border,oklch(69.6%_0.17_162.48_/_0.28))] [--zui-marquee-bg:oklch(97.9%_0.021_166.113)] [--zui-marquee-fg:oklch(37.8%_0.077_168.94)] dark:border-[color:var(--zui-marquee-emerald-border-dark,oklch(76.5%_0.177_163.223_/_0.32))] dark:[--zui-marquee-bg:oklch(37.8%_0.077_168.94_/_0.28)] dark:[--zui-marquee-fg:oklch(95%_0.052_163.051)]";
|
|
17
|
+
readonly "gradient-blue": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-marquee-gradient-blue-to,oklch(54.6%_0.245_262.881))] [--zui-marquee-fg:#ffffff]";
|
|
18
|
+
readonly "gradient-green": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-marquee-gradient-green-to,oklch(62.7%_0.194_149.214))] [--zui-marquee-fg:#ffffff]";
|
|
19
|
+
readonly "gradient-red": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-marquee-gradient-red-to,oklch(57.7%_0.245_27.325))] [--zui-marquee-fg:#ffffff]";
|
|
20
|
+
readonly "gradient-yellow": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-yellow-from,oklch(85.2%_0.199_91.936))] to-[var(--zui-marquee-gradient-yellow-to,oklch(79.5%_0.184_86.047))] [--zui-marquee-fg:oklch(27.9%_0.077_45.635)]";
|
|
21
|
+
readonly "gradient-purple": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-purple-from,oklch(71.4%_0.203_305.504))] to-[var(--zui-marquee-gradient-purple-to,oklch(62.7%_0.265_303.9))] [--zui-marquee-fg:#ffffff]";
|
|
22
|
+
readonly "gradient-teal": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-teal-from,oklch(77.7%_0.152_181.912))] to-[var(--zui-marquee-gradient-teal-to,oklch(70.4%_0.14_182.503))] [--zui-marquee-fg:#ffffff]";
|
|
23
|
+
readonly "gradient-indigo": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-indigo-from,oklch(67.3%_0.182_276.935))] to-[var(--zui-marquee-gradient-indigo-to,oklch(58.5%_0.233_277.117))] [--zui-marquee-fg:#ffffff]";
|
|
24
|
+
readonly "gradient-pink": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-pink-from,oklch(71.8%_0.202_349.761))] to-[var(--zui-marquee-gradient-pink-to,oklch(65.6%_0.241_354.308))] [--zui-marquee-fg:#ffffff]";
|
|
25
|
+
readonly "gradient-orange": "border-transparent bg-linear-to-r from-[var(--zui-marquee-gradient-orange-from,oklch(75%_0.183_55.934))] to-[var(--zui-marquee-gradient-orange-to,oklch(70.5%_0.213_47.604))] [--zui-marquee-fg:#ffffff]";
|
|
26
|
+
};
|
|
27
|
+
export declare const zuiMarqueeOrientations: {
|
|
28
|
+
readonly horizontal: "w-full flex-row";
|
|
29
|
+
readonly vertical: "h-64 flex-col";
|
|
30
|
+
};
|
|
31
|
+
export declare const zuiMarqueeSizes: {
|
|
32
|
+
readonly sm: "p-2 text-xs";
|
|
33
|
+
readonly md: "p-3 text-sm";
|
|
34
|
+
readonly lg: "p-4 text-base";
|
|
35
|
+
};
|
|
36
|
+
export declare const zuiMarqueeFade: {
|
|
37
|
+
readonly false: "";
|
|
38
|
+
readonly true: "[mask-image:linear-gradient(to_right,transparent,black_12%,black_88%,transparent)] data-[orientation=vertical]:[mask-image:linear-gradient(to_bottom,transparent,black_12%,black_88%,transparent)]";
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=marquee.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marquee.d.ts","sourceRoot":"","sources":["../../src/design-system/marquee.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,gNACoL,CAAC;AAEhN,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;CA0CxB,CAAC;AAEX,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAEX,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,eAAO,MAAM,cAAc;;;CAGjB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AnimatedNumberCounterProps, AnimatedNumberProps } from "./types";
|
|
2
|
+
export declare const AnimatedNumber: ({ number, wrapperClassName, className, ref, appearance, size, type, delayInSecond, transition, initial, whileInView, viewport, ...rest }: AnimatedNumberProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare const AnimatedNumberCounter: ({ number, className, ref: externalRef, appearance, size, duration, viewport, ...rest }: AnimatedNumberCounterProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=animated-number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animated-number.d.ts","sourceRoot":"","sources":["../../../src/ui/animated-number/animated-number.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAQ1E,eAAO,MAAM,cAAc,GAAI,0IAc5B,mBAAmB,4CAsCrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,wFASnC,0BAA0B,4CA6C5B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export declare const animationInitialType: {
|
|
2
|
+
up: {
|
|
3
|
+
y: string;
|
|
4
|
+
};
|
|
5
|
+
down: {
|
|
6
|
+
y: string;
|
|
7
|
+
};
|
|
8
|
+
scaleUp: {
|
|
9
|
+
scale: number;
|
|
10
|
+
};
|
|
11
|
+
scaleDown: {
|
|
12
|
+
scale: number;
|
|
13
|
+
};
|
|
14
|
+
rotateX: {
|
|
15
|
+
rotateX: string;
|
|
16
|
+
};
|
|
17
|
+
rotateY: {
|
|
18
|
+
rotateY: string;
|
|
19
|
+
};
|
|
20
|
+
skewX: {
|
|
21
|
+
skewX: number;
|
|
22
|
+
};
|
|
23
|
+
skewY: {
|
|
24
|
+
skewY: number;
|
|
25
|
+
};
|
|
26
|
+
fade: {
|
|
27
|
+
opacity: number;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export declare const animationFinalType: {
|
|
31
|
+
up: {
|
|
32
|
+
y: number;
|
|
33
|
+
};
|
|
34
|
+
down: {
|
|
35
|
+
y: number;
|
|
36
|
+
};
|
|
37
|
+
scaleUp: {
|
|
38
|
+
scale: number;
|
|
39
|
+
};
|
|
40
|
+
scaleDown: {
|
|
41
|
+
scale: number;
|
|
42
|
+
};
|
|
43
|
+
rotateX: {
|
|
44
|
+
rotateX: string;
|
|
45
|
+
};
|
|
46
|
+
rotateY: {
|
|
47
|
+
rotateY: string;
|
|
48
|
+
};
|
|
49
|
+
skewX: {
|
|
50
|
+
skewX: number;
|
|
51
|
+
};
|
|
52
|
+
skewY: {
|
|
53
|
+
skewY: number;
|
|
54
|
+
};
|
|
55
|
+
fade: {
|
|
56
|
+
opacity: number;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=animations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/ui/animated-number/animations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUhC,CAAC;AACF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/animated-number/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { VariantProps } from "class-variance-authority";
|
|
2
|
+
import { MotionProps } from "framer-motion";
|
|
3
|
+
import { RefObject } from "react";
|
|
4
|
+
import { animatedNumberAppearance } from "./variants";
|
|
5
|
+
type MotionTransitionWithoutDelay = Omit<NonNullable<MotionProps["transition"]>, "delay"> & {
|
|
6
|
+
delay?: never;
|
|
7
|
+
};
|
|
8
|
+
export type MotionPropsWithoutTransitionDelay = Omit<MotionProps, "transition"> & {
|
|
9
|
+
transition?: MotionTransitionWithoutDelay;
|
|
10
|
+
};
|
|
11
|
+
export type AnimatedNumberProps = MotionPropsWithoutTransitionDelay & {
|
|
12
|
+
number: number;
|
|
13
|
+
wrapperClassName?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
ref?: RefObject<HTMLDivElement>;
|
|
16
|
+
appearance?: VariantProps<typeof animatedNumberAppearance>["appearance"];
|
|
17
|
+
size?: VariantProps<typeof animatedNumberAppearance>["size"];
|
|
18
|
+
type?: "up" | "down" | "scaleUp" | "scaleDown" | "rotateX" | "rotateY" | "skewX" | "skewY" | "fade";
|
|
19
|
+
delayInSecond?: number;
|
|
20
|
+
transition?: MotionProps["transition"];
|
|
21
|
+
};
|
|
22
|
+
export type AnimatedNumberCounterProps = MotionProps & {
|
|
23
|
+
number: number;
|
|
24
|
+
className?: string;
|
|
25
|
+
ref?: RefObject<HTMLParagraphElement>;
|
|
26
|
+
appearance?: VariantProps<typeof animatedNumberAppearance>["appearance"];
|
|
27
|
+
size?: VariantProps<typeof animatedNumberAppearance>["size"];
|
|
28
|
+
duration?: number;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/animated-number/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,KAAK,4BAA4B,GAAG,IAAI,CACtC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EACtC,OAAO,CACR,GAAG;IACF,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,WAAW,EACX,YAAY,CACb,GAAG;IACF,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,iCAAiC,GAAG;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,YAAY,CAAC,OAAO,wBAAwB,CAAC,CAAC,YAAY,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,WAAW,GAAG;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,YAAY,CAAC,OAAO,wBAAwB,CAAC,CAAC,YAAY,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const animatedNumberAppearance: (props?: ({
|
|
2
|
+
appearance?: "default" | "violet" | "gray" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | "ghost" | "error" | "success" | "warning" | "info" | null | undefined;
|
|
3
|
+
size?: "md" | "sm" | "lg" | null | undefined;
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
|
+
//# sourceMappingURL=variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/ui/animated-number/variants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB;;;8EASnC,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkZS5756ZC_js = require('../chunk-ZS5756ZC.js');
|
|
5
|
+
var framerMotion = require('framer-motion');
|
|
6
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
// src/design-system/animated-number.ts
|
|
11
|
+
var zuiAnimatedNumberBase = "relative flex w-full overflow-hidden [perspective:1000px]";
|
|
12
|
+
var zuiAnimatedNumberAppearance = {
|
|
13
|
+
default: "text-[color:var(--zui-animated-number-default-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-animated-number-default-fg-dark,oklch(98.4%_0.003_247.858))]",
|
|
14
|
+
success: "text-[color:var(--zui-animated-number-success-fg,oklch(62.7%_0.194_149.214))] dark:text-[color:var(--zui-animated-number-success-fg-dark,oklch(79.2%_0.209_151.711))]",
|
|
15
|
+
warning: "text-[color:var(--zui-animated-number-warning-fg,oklch(66.6%_0.179_58.318))] dark:text-[color:var(--zui-animated-number-warning-fg-dark,oklch(82.8%_0.189_84.429))]",
|
|
16
|
+
error: "text-[color:var(--zui-animated-number-error-fg,oklch(57.7%_0.245_27.325))] dark:text-[color:var(--zui-animated-number-error-fg-dark,oklch(70.4%_0.191_22.216))]",
|
|
17
|
+
info: "text-[color:var(--zui-animated-number-info-fg,oklch(58.8%_0.158_241.966))] dark:text-[color:var(--zui-animated-number-info-fg-dark,oklch(74.6%_0.16_232.661))]",
|
|
18
|
+
ghost: "text-[color:var(--zui-animated-number-ghost-fg,oklch(55.4%_0.046_257.417))] dark:text-[color:var(--zui-animated-number-ghost-fg-dark,oklch(70.4%_0.04_256.788))]",
|
|
19
|
+
purple: "text-[color:var(--zui-animated-number-purple-fg,oklch(55.8%_0.288_302.321))] dark:text-[color:var(--zui-animated-number-purple-fg-dark,oklch(71.4%_0.203_305.504))]",
|
|
20
|
+
pink: "text-[color:var(--zui-animated-number-pink-fg,oklch(59.2%_0.249_0.584))] dark:text-[color:var(--zui-animated-number-pink-fg-dark,oklch(71.8%_0.202_349.761))]",
|
|
21
|
+
orange: "text-[color:var(--zui-animated-number-orange-fg,oklch(64.6%_0.222_41.116))] dark:text-[color:var(--zui-animated-number-orange-fg-dark,oklch(75%_0.183_55.934))]",
|
|
22
|
+
yellow: "text-[color:var(--zui-animated-number-yellow-fg,oklch(68.1%_0.162_75.834))] dark:text-[color:var(--zui-animated-number-yellow-fg-dark,oklch(85.2%_0.199_91.936))]",
|
|
23
|
+
teal: "text-[color:var(--zui-animated-number-teal-fg,oklch(60%_0.118_184.704))] dark:text-[color:var(--zui-animated-number-teal-fg-dark,oklch(77.7%_0.152_181.912))]",
|
|
24
|
+
indigo: "text-[color:var(--zui-animated-number-indigo-fg,oklch(51.1%_0.262_276.966))] dark:text-[color:var(--zui-animated-number-indigo-fg-dark,oklch(67.3%_0.182_276.935))]",
|
|
25
|
+
gray: "text-[color:var(--zui-animated-number-gray-fg,oklch(44.6%_0.03_256.802))] dark:text-[color:var(--zui-animated-number-gray-fg-dark,oklch(70.7%_0.022_261.325))]",
|
|
26
|
+
violet: "text-[color:var(--zui-animated-number-violet-fg,oklch(54.1%_0.281_293.009))] dark:text-[color:var(--zui-animated-number-violet-fg-dark,oklch(70.2%_0.183_293.541))]",
|
|
27
|
+
"gradient-blue": "bg-linear-to-r from-[var(--zui-animated-number-gradient-blue-from,oklch(42.4%_0.199_265.638))] dark:from-[var(--zui-animated-number-gradient-blue-from-dark,oklch(54.6%_0.245_262.881))] to-[var(--zui-animated-number-gradient-blue-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-blue-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent",
|
|
28
|
+
"gradient-green": "bg-linear-to-r from-[var(--zui-animated-number-gradient-green-from,oklch(44.8%_0.119_151.328))] dark:from-[var(--zui-animated-number-gradient-green-from-dark,oklch(62.7%_0.194_149.214))] to-[var(--zui-animated-number-gradient-green-to,oklch(45.3%_0.124_130.933))] dark:to-[var(--zui-animated-number-gradient-green-to-dark,oklch(64.8%_0.2_131.684))] bg-clip-text text-transparent",
|
|
29
|
+
"gradient-red": "bg-linear-to-r from-[var(--zui-animated-number-gradient-red-from,oklch(44.4%_0.177_26.899))] dark:from-[var(--zui-animated-number-gradient-red-from-dark,oklch(57.7%_0.245_27.325))] to-[var(--zui-animated-number-gradient-red-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-red-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent",
|
|
30
|
+
"gradient-yellow": "bg-linear-to-r from-[var(--zui-animated-number-gradient-yellow-from,oklch(47.6%_0.114_61.907))] dark:from-[var(--zui-animated-number-gradient-yellow-from-dark,oklch(68.1%_0.162_75.834))] to-[var(--zui-animated-number-gradient-yellow-to,oklch(47%_0.157_37.304))] dark:to-[var(--zui-animated-number-gradient-yellow-to-dark,oklch(64.6%_0.222_41.116))] bg-clip-text text-transparent",
|
|
31
|
+
"gradient-purple": "bg-linear-to-r from-[var(--zui-animated-number-gradient-purple-from,oklch(43.8%_0.218_303.724))] dark:from-[var(--zui-animated-number-gradient-purple-from-dark,oklch(55.8%_0.288_302.321))] to-[var(--zui-animated-number-gradient-purple-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-purple-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent",
|
|
32
|
+
"gradient-teal": "bg-linear-to-r from-[var(--zui-animated-number-gradient-teal-from,oklch(43.7%_0.078_188.216))] dark:from-[var(--zui-animated-number-gradient-teal-from-dark,oklch(60%_0.118_184.704))] to-[var(--zui-animated-number-gradient-teal-to,oklch(45%_0.085_224.283))] dark:to-[var(--zui-animated-number-gradient-teal-to-dark,oklch(60.9%_0.126_221.723))] bg-clip-text text-transparent",
|
|
33
|
+
"gradient-indigo": "bg-linear-to-r from-[var(--zui-animated-number-gradient-indigo-from,oklch(39.8%_0.195_277.366))] dark:from-[var(--zui-animated-number-gradient-indigo-from-dark,oklch(51.1%_0.262_276.966))] to-[var(--zui-animated-number-gradient-indigo-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-indigo-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent",
|
|
34
|
+
"gradient-pink": "bg-linear-to-r from-[var(--zui-animated-number-gradient-pink-from,oklch(45.9%_0.187_3.815))] dark:from-[var(--zui-animated-number-gradient-pink-from-dark,oklch(59.2%_0.249_0.584))] to-[var(--zui-animated-number-gradient-pink-to,oklch(45.5%_0.188_13.697))] dark:to-[var(--zui-animated-number-gradient-pink-to-dark,oklch(58.6%_0.253_17.585))] bg-clip-text text-transparent",
|
|
35
|
+
"gradient-orange": "bg-linear-to-r from-[var(--zui-animated-number-gradient-orange-from,oklch(47%_0.157_37.304))] dark:from-[var(--zui-animated-number-gradient-orange-from-dark,oklch(64.6%_0.222_41.116))] to-[var(--zui-animated-number-gradient-orange-to,oklch(44.4%_0.177_26.899))] dark:to-[var(--zui-animated-number-gradient-orange-to-dark,oklch(57.7%_0.245_27.325))] bg-clip-text text-transparent"
|
|
36
|
+
};
|
|
37
|
+
var zuiAnimatedNumberSize = {
|
|
38
|
+
sm: "text-2xl font-semibold tabular-nums",
|
|
39
|
+
md: "text-4xl font-semibold tabular-nums",
|
|
40
|
+
lg: "text-6xl font-bold tabular-nums"
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// src/ui/animated-number/variants.ts
|
|
44
|
+
var animatedNumberAppearance = classVarianceAuthority.cva("inline-flex", {
|
|
45
|
+
variants: {
|
|
46
|
+
appearance: zuiAnimatedNumberAppearance,
|
|
47
|
+
size: zuiAnimatedNumberSize
|
|
48
|
+
},
|
|
49
|
+
defaultVariants: {
|
|
50
|
+
appearance: "default",
|
|
51
|
+
size: "md"
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// src/ui/animated-number/animations.ts
|
|
56
|
+
var animationInitialType = {
|
|
57
|
+
up: { y: "-100%" },
|
|
58
|
+
down: { y: "100%" },
|
|
59
|
+
scaleUp: { scale: 0 },
|
|
60
|
+
scaleDown: { scale: 1.25 },
|
|
61
|
+
rotateX: { rotateX: "0" },
|
|
62
|
+
rotateY: { rotateY: "0" },
|
|
63
|
+
skewX: { skewX: 20 },
|
|
64
|
+
skewY: { skewY: 20 },
|
|
65
|
+
fade: { opacity: 0 }
|
|
66
|
+
};
|
|
67
|
+
var animationFinalType = {
|
|
68
|
+
up: { y: 0 },
|
|
69
|
+
down: { y: 0 },
|
|
70
|
+
scaleUp: { scale: 1 },
|
|
71
|
+
scaleDown: { scale: 1 },
|
|
72
|
+
rotateX: { rotateX: "360deg" },
|
|
73
|
+
rotateY: { rotateY: "360deg" },
|
|
74
|
+
skewX: { skewX: 0 },
|
|
75
|
+
skewY: { skewY: 0 },
|
|
76
|
+
fade: { opacity: 1 }
|
|
77
|
+
};
|
|
78
|
+
var DEFAULT_VIEWPORT = { once: true, amount: 0.2 };
|
|
79
|
+
var AnimatedNumber = ({
|
|
80
|
+
number,
|
|
81
|
+
wrapperClassName,
|
|
82
|
+
className,
|
|
83
|
+
ref,
|
|
84
|
+
appearance,
|
|
85
|
+
size,
|
|
86
|
+
type = "up",
|
|
87
|
+
delayInSecond = 0.1,
|
|
88
|
+
transition,
|
|
89
|
+
initial,
|
|
90
|
+
whileInView,
|
|
91
|
+
viewport,
|
|
92
|
+
...rest
|
|
93
|
+
}) => {
|
|
94
|
+
const numbersList = [...number.toString()];
|
|
95
|
+
const reducedMotion = framerMotion.useReducedMotion();
|
|
96
|
+
const motionless = Boolean(reducedMotion);
|
|
97
|
+
const digitVariants = {
|
|
98
|
+
hidden: animationInitialType[type],
|
|
99
|
+
visible: animationFinalType[type]
|
|
100
|
+
};
|
|
101
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
framerMotion.motion.div,
|
|
103
|
+
{
|
|
104
|
+
ref,
|
|
105
|
+
initial: motionless ? false : "hidden",
|
|
106
|
+
whileInView: motionless ? void 0 : "visible",
|
|
107
|
+
viewport: viewport ?? DEFAULT_VIEWPORT,
|
|
108
|
+
transition: {
|
|
109
|
+
staggerChildren: delayInSecond
|
|
110
|
+
},
|
|
111
|
+
className: chunkZS5756ZC_js.cn(wrapperClassName, zuiAnimatedNumberBase),
|
|
112
|
+
children: numbersList.map((digit, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
113
|
+
framerMotion.motion.span,
|
|
114
|
+
{
|
|
115
|
+
className: chunkZS5756ZC_js.cn(
|
|
116
|
+
"inline-block",
|
|
117
|
+
animatedNumberAppearance({ appearance, size }),
|
|
118
|
+
className
|
|
119
|
+
),
|
|
120
|
+
variants: digitVariants,
|
|
121
|
+
transition,
|
|
122
|
+
...rest,
|
|
123
|
+
children: digit
|
|
124
|
+
},
|
|
125
|
+
index + "-" + digit
|
|
126
|
+
))
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
var AnimatedNumberCounter = ({
|
|
131
|
+
number,
|
|
132
|
+
className,
|
|
133
|
+
ref: externalRef,
|
|
134
|
+
appearance,
|
|
135
|
+
size,
|
|
136
|
+
duration = 2,
|
|
137
|
+
viewport,
|
|
138
|
+
...rest
|
|
139
|
+
}) => {
|
|
140
|
+
const [currentNumber, setCurrentNumber] = react.useState(0);
|
|
141
|
+
const reducedMotion = framerMotion.useReducedMotion();
|
|
142
|
+
const internalRef = react.useRef(null);
|
|
143
|
+
const isInView = framerMotion.useInView(internalRef, {
|
|
144
|
+
once: false,
|
|
145
|
+
amount: 0.2,
|
|
146
|
+
...viewport
|
|
147
|
+
});
|
|
148
|
+
react.useEffect(() => {
|
|
149
|
+
if (!isInView) return;
|
|
150
|
+
if (reducedMotion) {
|
|
151
|
+
setCurrentNumber(number);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const controls = framerMotion.animate(currentNumber, number, {
|
|
155
|
+
duration,
|
|
156
|
+
ease: "circOut",
|
|
157
|
+
onUpdate: (latest) => setCurrentNumber(Math.round(latest))
|
|
158
|
+
});
|
|
159
|
+
return () => controls.stop();
|
|
160
|
+
}, [isInView, number, duration, reducedMotion]);
|
|
161
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
162
|
+
framerMotion.motion.p,
|
|
163
|
+
{
|
|
164
|
+
className: chunkZS5756ZC_js.cn(animatedNumberAppearance({ appearance, size }), className),
|
|
165
|
+
ref: (node) => {
|
|
166
|
+
internalRef.current = node;
|
|
167
|
+
if (externalRef) {
|
|
168
|
+
externalRef.current = node;
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
...rest,
|
|
172
|
+
children: currentNumber
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
exports.AnimatedNumber = AnimatedNumber;
|
|
178
|
+
exports.AnimatedNumberCounter = AnimatedNumberCounter;
|
|
179
|
+
exports.animatedNumberAppearance = animatedNumberAppearance;
|
|
180
|
+
//# sourceMappingURL=animated-number.js.map
|
|
181
|
+
//# sourceMappingURL=animated-number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/design-system/animated-number.ts","../../src/ui/animated-number/variants.ts","../../src/ui/animated-number/animations.ts","../../src/ui/animated-number/animated-number.tsx"],"names":["cva","useReducedMotion","jsx","motion","cn","useState","useRef","useInView","useEffect","animate"],"mappings":"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","file":"animated-number.js","sourcesContent":["export const zuiAnimatedNumberBase =\n \"relative flex w-full overflow-hidden [perspective:1000px]\";\n\nexport const zuiAnimatedNumberAppearance = {\n default:\n \"text-[color:var(--zui-animated-number-default-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-animated-number-default-fg-dark,oklch(98.4%_0.003_247.858))]\",\n success:\n \"text-[color:var(--zui-animated-number-success-fg,oklch(62.7%_0.194_149.214))] dark:text-[color:var(--zui-animated-number-success-fg-dark,oklch(79.2%_0.209_151.711))]\",\n warning:\n \"text-[color:var(--zui-animated-number-warning-fg,oklch(66.6%_0.179_58.318))] dark:text-[color:var(--zui-animated-number-warning-fg-dark,oklch(82.8%_0.189_84.429))]\",\n error:\n \"text-[color:var(--zui-animated-number-error-fg,oklch(57.7%_0.245_27.325))] dark:text-[color:var(--zui-animated-number-error-fg-dark,oklch(70.4%_0.191_22.216))]\",\n info: \"text-[color:var(--zui-animated-number-info-fg,oklch(58.8%_0.158_241.966))] dark:text-[color:var(--zui-animated-number-info-fg-dark,oklch(74.6%_0.16_232.661))]\",\n ghost:\n \"text-[color:var(--zui-animated-number-ghost-fg,oklch(55.4%_0.046_257.417))] dark:text-[color:var(--zui-animated-number-ghost-fg-dark,oklch(70.4%_0.04_256.788))]\",\n purple:\n \"text-[color:var(--zui-animated-number-purple-fg,oklch(55.8%_0.288_302.321))] dark:text-[color:var(--zui-animated-number-purple-fg-dark,oklch(71.4%_0.203_305.504))]\",\n pink: \"text-[color:var(--zui-animated-number-pink-fg,oklch(59.2%_0.249_0.584))] dark:text-[color:var(--zui-animated-number-pink-fg-dark,oklch(71.8%_0.202_349.761))]\",\n orange:\n \"text-[color:var(--zui-animated-number-orange-fg,oklch(64.6%_0.222_41.116))] dark:text-[color:var(--zui-animated-number-orange-fg-dark,oklch(75%_0.183_55.934))]\",\n yellow:\n \"text-[color:var(--zui-animated-number-yellow-fg,oklch(68.1%_0.162_75.834))] dark:text-[color:var(--zui-animated-number-yellow-fg-dark,oklch(85.2%_0.199_91.936))]\",\n teal: \"text-[color:var(--zui-animated-number-teal-fg,oklch(60%_0.118_184.704))] dark:text-[color:var(--zui-animated-number-teal-fg-dark,oklch(77.7%_0.152_181.912))]\",\n indigo:\n \"text-[color:var(--zui-animated-number-indigo-fg,oklch(51.1%_0.262_276.966))] dark:text-[color:var(--zui-animated-number-indigo-fg-dark,oklch(67.3%_0.182_276.935))]\",\n gray: \"text-[color:var(--zui-animated-number-gray-fg,oklch(44.6%_0.03_256.802))] dark:text-[color:var(--zui-animated-number-gray-fg-dark,oklch(70.7%_0.022_261.325))]\",\n violet:\n \"text-[color:var(--zui-animated-number-violet-fg,oklch(54.1%_0.281_293.009))] dark:text-[color:var(--zui-animated-number-violet-fg-dark,oklch(70.2%_0.183_293.541))]\",\n \"gradient-blue\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-blue-from,oklch(42.4%_0.199_265.638))] dark:from-[var(--zui-animated-number-gradient-blue-from-dark,oklch(54.6%_0.245_262.881))] to-[var(--zui-animated-number-gradient-blue-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-blue-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent\",\n \"gradient-green\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-green-from,oklch(44.8%_0.119_151.328))] dark:from-[var(--zui-animated-number-gradient-green-from-dark,oklch(62.7%_0.194_149.214))] to-[var(--zui-animated-number-gradient-green-to,oklch(45.3%_0.124_130.933))] dark:to-[var(--zui-animated-number-gradient-green-to-dark,oklch(64.8%_0.2_131.684))] bg-clip-text text-transparent\",\n \"gradient-red\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-red-from,oklch(44.4%_0.177_26.899))] dark:from-[var(--zui-animated-number-gradient-red-from-dark,oklch(57.7%_0.245_27.325))] to-[var(--zui-animated-number-gradient-red-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-red-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent\",\n \"gradient-yellow\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-yellow-from,oklch(47.6%_0.114_61.907))] dark:from-[var(--zui-animated-number-gradient-yellow-from-dark,oklch(68.1%_0.162_75.834))] to-[var(--zui-animated-number-gradient-yellow-to,oklch(47%_0.157_37.304))] dark:to-[var(--zui-animated-number-gradient-yellow-to-dark,oklch(64.6%_0.222_41.116))] bg-clip-text text-transparent\",\n \"gradient-purple\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-purple-from,oklch(43.8%_0.218_303.724))] dark:from-[var(--zui-animated-number-gradient-purple-from-dark,oklch(55.8%_0.288_302.321))] to-[var(--zui-animated-number-gradient-purple-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-purple-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent\",\n \"gradient-teal\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-teal-from,oklch(43.7%_0.078_188.216))] dark:from-[var(--zui-animated-number-gradient-teal-from-dark,oklch(60%_0.118_184.704))] to-[var(--zui-animated-number-gradient-teal-to,oklch(45%_0.085_224.283))] dark:to-[var(--zui-animated-number-gradient-teal-to-dark,oklch(60.9%_0.126_221.723))] bg-clip-text text-transparent\",\n \"gradient-indigo\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-indigo-from,oklch(39.8%_0.195_277.366))] dark:from-[var(--zui-animated-number-gradient-indigo-from-dark,oklch(51.1%_0.262_276.966))] to-[var(--zui-animated-number-gradient-indigo-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-indigo-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent\",\n \"gradient-pink\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-pink-from,oklch(45.9%_0.187_3.815))] dark:from-[var(--zui-animated-number-gradient-pink-from-dark,oklch(59.2%_0.249_0.584))] to-[var(--zui-animated-number-gradient-pink-to,oklch(45.5%_0.188_13.697))] dark:to-[var(--zui-animated-number-gradient-pink-to-dark,oklch(58.6%_0.253_17.585))] bg-clip-text text-transparent\",\n \"gradient-orange\":\n \"bg-linear-to-r from-[var(--zui-animated-number-gradient-orange-from,oklch(47%_0.157_37.304))] dark:from-[var(--zui-animated-number-gradient-orange-from-dark,oklch(64.6%_0.222_41.116))] to-[var(--zui-animated-number-gradient-orange-to,oklch(44.4%_0.177_26.899))] dark:to-[var(--zui-animated-number-gradient-orange-to-dark,oklch(57.7%_0.245_27.325))] bg-clip-text text-transparent\",\n} as const;\n\nexport const zuiAnimatedNumberSize = {\n sm: \"text-2xl font-semibold tabular-nums\",\n md: \"text-4xl font-semibold tabular-nums\",\n lg: \"text-6xl font-bold tabular-nums\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport { zuiAnimatedNumberAppearance, zuiAnimatedNumberSize } from \"../../design-system/animated-number\";\n\nexport const animatedNumberAppearance = cva(\"inline-flex\",{\n variants: {\n appearance: zuiAnimatedNumberAppearance,\n size: zuiAnimatedNumberSize\n },\n defaultVariants: {\n appearance: \"default\",\n size: \"md\",\n },\n});","export const animationInitialType = {\n up: { y: \"-100%\" },\n down: { y: \"100%\" },\n scaleUp: { scale: 0 },\n scaleDown: { scale: 1.25 },\n rotateX: { rotateX: \"0\" },\n rotateY: { rotateY: \"0\" },\n skewX: { skewX: 20 },\n skewY: { skewY: 20 },\n fade: { opacity: 0 },\n};\nexport const animationFinalType = {\n up: { y: 0 },\n down: { y: 0 },\n scaleUp: { scale: 1 },\n scaleDown: { scale: 1 },\n rotateX: { rotateX: \"360deg\" },\n rotateY: { rotateY: \"360deg\" },\n skewX: { skewX: 0 },\n skewY: { skewY: 0 },\n fade: { opacity: 1 },\n};\n","\"use client\";\nimport { animate, motion, useInView, useReducedMotion, type UseInViewOptions } from \"framer-motion\";\nimport { animatedNumberAppearance } from \"./variants\";\nimport { AnimatedNumberCounterProps, AnimatedNumberProps } from \"./types\";\nimport { cn } from \"../../lib/utils\";\nimport { zuiAnimatedNumberBase } from \"../../design-system/animated-number\";\nimport { animationFinalType, animationInitialType } from \"./animations\";\nimport { useEffect, useRef, useState } from \"react\";\n\nconst DEFAULT_VIEWPORT = { once: true, amount: 0.2 } as const;\n\nexport const AnimatedNumber = ({\n number,\n wrapperClassName,\n className,\n ref,\n appearance,\n size,\n type = \"up\",\n delayInSecond = 0.1,\n transition,\n initial,\n whileInView,\n viewport,\n ...rest\n}: AnimatedNumberProps) => {\n const numbersList = [...number.toString()];\n const reducedMotion = useReducedMotion();\n const motionless = Boolean(reducedMotion);\n\n const digitVariants = {\n hidden: animationInitialType[type],\n visible: animationFinalType[type],\n };\n\n return (\n <motion.div\n ref={ref}\n initial={motionless ? false : \"hidden\"}\n whileInView={motionless ? undefined : \"visible\"}\n viewport={viewport ?? DEFAULT_VIEWPORT}\n transition={{\n staggerChildren: delayInSecond,\n }}\n className={cn(wrapperClassName, zuiAnimatedNumberBase)}\n >\n {numbersList.map((digit, index) => (\n <motion.span\n key={index + \"-\" + digit}\n className={cn(\n \"inline-block\",\n animatedNumberAppearance({ appearance, size }),\n className,\n )}\n variants={digitVariants}\n transition={transition}\n {...rest}\n >\n {digit}\n </motion.span>\n ))}\n </motion.div>\n );\n};\n\nexport const AnimatedNumberCounter = ({\n number,\n className,\n ref: externalRef,\n appearance,\n size,\n duration = 2,\n viewport,\n ...rest\n}: AnimatedNumberCounterProps) => {\n const [currentNumber, setCurrentNumber] = useState(0);\n const reducedMotion = useReducedMotion();\n const internalRef = useRef<HTMLParagraphElement>(null);\n // once: false gives real two-way tracking so isInView flips false when scrolled away,\n // preventing offscreen animations when the number prop changes later.\n const isInView = useInView(internalRef, {\n once: false,\n amount: 0.2,\n ...viewport,\n } as UseInViewOptions);\n\n useEffect(() => {\n if (!isInView) return;\n\n if (reducedMotion) {\n setCurrentNumber(number);\n return;\n }\n\n const controls = animate(currentNumber, number, {\n duration,\n ease: \"circOut\",\n onUpdate: (latest) => setCurrentNumber(Math.round(latest)),\n });\n\n return () => controls.stop();\n // currentNumber intentionally omitted — captured value gives smooth from→to on prop changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isInView, number, duration, reducedMotion]);\n\n return (\n <motion.p\n className={cn(animatedNumberAppearance({ appearance, size }), className)}\n ref={(node: HTMLParagraphElement) => {\n internalRef.current = node;\n if (externalRef) {\n externalRef.current = node;\n }\n }}\n {...rest}\n >\n {currentNumber}\n </motion.p>\n );\n};\n"]}
|