@once-ui-system/core 1.5.1 → 1.5.3
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 +54 -0
- package/dist/README.md +54 -0
- package/dist/components/Avatar.d.ts +2 -0
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +2 -2
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/CelebrationFx.d.ts +16 -0
- package/dist/components/CelebrationFx.d.ts.map +1 -0
- package/dist/components/CelebrationFx.js +310 -0
- package/dist/components/CelebrationFx.js.map +1 -0
- package/dist/components/CountdownFx.d.ts +11 -0
- package/dist/components/CountdownFx.d.ts.map +1 -0
- package/dist/components/CountdownFx.js +49 -0
- package/dist/components/CountdownFx.js.map +1 -0
- package/dist/components/Heading.d.ts.map +1 -1
- package/dist/components/MatrixFx.d.ts +11 -1
- package/dist/components/MatrixFx.d.ts.map +1 -1
- package/dist/components/MatrixFx.js +480 -118
- package/dist/components/MatrixFx.js.map +1 -1
- package/dist/components/Media.d.ts.map +1 -1
- package/dist/components/Media.js +10 -5
- package/dist/components/Media.js.map +1 -1
- package/dist/components/Pulse.d.ts.map +1 -1
- package/dist/components/Pulse.js +1 -0
- package/dist/components/Pulse.js.map +1 -1
- package/dist/components/SegmentedControl.d.ts +1 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +3 -3
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/ShineFx.d.ts +1 -0
- package/dist/components/ShineFx.d.ts.map +1 -1
- package/dist/components/ShineFx.js +3 -2
- package/dist/components/ShineFx.js.map +1 -1
- package/dist/components/ShineFx.module.scss +18 -1
- package/dist/components/StylePanel.js +1 -1
- package/dist/components/StylePanel.js.map +1 -1
- package/dist/components/WeatherFx.d.ts +17 -0
- package/dist/components/WeatherFx.d.ts.map +1 -0
- package/dist/components/WeatherFx.js +769 -0
- package/dist/components/WeatherFx.js.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -0
- package/dist/components/index.js.map +1 -1
- package/dist/data/emoji-data.json +10 -8
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +3 -0
- package/dist/icons.js.map +1 -1
- package/dist/modules/code/CodeBlock.js +1 -1
- package/dist/modules/code/CodeBlock.js.map +1 -1
- package/dist/modules/data/BarChart.d.ts +2 -0
- package/dist/modules/data/BarChart.d.ts.map +1 -1
- package/dist/modules/data/BarChart.js +43 -41
- package/dist/modules/data/BarChart.js.map +1 -1
- package/dist/modules/data/Gauge.module.css +27 -0
- package/dist/modules/data/LineBarChart.d.ts +2 -0
- package/dist/modules/data/LineBarChart.d.ts.map +1 -1
- package/dist/modules/data/LineBarChart.js +35 -33
- package/dist/modules/data/LineBarChart.js.map +1 -1
- package/dist/modules/data/LineChart.d.ts +2 -0
- package/dist/modules/data/LineChart.d.ts.map +1 -1
- package/dist/modules/data/LineChart.js +43 -41
- package/dist/modules/data/LineChart.js.map +1 -1
- package/dist/modules/data/LinearGauge.d.ts +18 -0
- package/dist/modules/data/LinearGauge.d.ts.map +1 -0
- package/dist/modules/data/LinearGauge.js +78 -0
- package/dist/modules/data/LinearGauge.js.map +1 -0
- package/dist/modules/data/RadialGauge.d.ts +25 -0
- package/dist/modules/data/RadialGauge.d.ts.map +1 -0
- package/dist/modules/data/RadialGauge.js +94 -0
- package/dist/modules/data/RadialGauge.js.map +1 -0
- package/dist/modules/data/index.d.ts +2 -0
- package/dist/modules/data/index.d.ts.map +1 -1
- package/dist/modules/data/index.js +2 -0
- package/dist/modules/data/index.js.map +1 -1
- package/dist/modules/index.d.ts +3 -16
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +2 -15
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/navigation/MegaMenu.d.ts.map +1 -1
- package/dist/modules/navigation/MegaMenu.js +11 -11
- package/dist/modules/navigation/MegaMenu.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<br/>
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
<picture>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://docs.once-ui.com/trademarks/icon-dark.svg" width="64" height="64">
|
|
6
|
+
<source media="(prefers-color-scheme: light)" srcset="https://docs.once-ui.com/trademarks/icon-light.svg" width="64" height="64">
|
|
7
|
+
<img alt="Once UI Logo" src="https://docs.once-ui.com/trademarks/icon-dark.svg" width="64" height="64">
|
|
8
|
+
</picture><picture>
|
|
9
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://docs.once-ui.com/trademarks/type-dark.svg" width="200" height="64">
|
|
10
|
+
<source media="(prefers-color-scheme: light)" srcset="https://docs.once-ui.com/trademarks/type-light.svg" width="200" height="64">
|
|
11
|
+
<img alt="Once UI Wordmark" src="https://docs.once-ui.com/trademarks/type-dark.svg" width="200" height="64">
|
|
12
|
+
</picture>
|
|
13
|
+
|
|
14
|
+
<br/>
|
|
15
|
+
|
|
16
|
+
The indie design system for Next.js apps
|
|
17
|
+
|
|
18
|
+
[](https://www.npmjs.com/package/@once-ui-system/core)
|
|
19
|
+
[](./LICENSE.md)
|
|
20
|
+
[](https://www.npmjs.com/package/@once-ui-system/core)
|
|
21
|
+
[](https://discord.com/invite/5EyAQ4eNdS)
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
<br/>
|
|
27
|
+
|
|
28
|
+
## Documentation
|
|
29
|
+
|
|
30
|
+
Learn how to set up and build with Once UI at [docs.once-ui.com](https://docs.once-ui.com/once-ui/quick-start).
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install @once-ui-system/core
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Authors
|
|
39
|
+
|
|
40
|
+
Built and maintained by [**Lorant One**](https://lorant.one).
|
|
41
|
+
|
|
42
|
+
## Community
|
|
43
|
+
|
|
44
|
+
Join the [Design Engineers Club](https://discord.com/invite/5EyAQ4eNdS) for help, support and discussion.
|
|
45
|
+
|
|
46
|
+
Found a bug? Report it [here](https://github.com/once-ui-system/core/issues/new?labels=bug&template=bug_report.md). Got a feature request? Submit it [here](https://github.com/once-ui-system/core/issues/new?labels=feature%20request&template=feature_request.md).
|
|
47
|
+
|
|
48
|
+
## Contributing
|
|
49
|
+
|
|
50
|
+
Please read our [CONTRIBUTING.md](https://github.com/once-ui-system/core/blob/main/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to Once UI.
|
|
51
|
+
|
|
52
|
+
## Sponsors
|
|
53
|
+
|
|
54
|
+
Once UI is an indie project. [Sponsor us](https://github.com/sponsors/once-ui-system) and get featured on our site!
|
package/dist/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<br/>
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
<picture>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://docs.once-ui.com/trademarks/icon-dark.svg" width="64" height="64">
|
|
6
|
+
<source media="(prefers-color-scheme: light)" srcset="https://docs.once-ui.com/trademarks/icon-light.svg" width="64" height="64">
|
|
7
|
+
<img alt="Once UI Logo" src="https://docs.once-ui.com/trademarks/icon-dark.svg" width="64" height="64">
|
|
8
|
+
</picture><picture>
|
|
9
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://docs.once-ui.com/trademarks/type-dark.svg" width="200" height="64">
|
|
10
|
+
<source media="(prefers-color-scheme: light)" srcset="https://docs.once-ui.com/trademarks/type-light.svg" width="200" height="64">
|
|
11
|
+
<img alt="Once UI Wordmark" src="https://docs.once-ui.com/trademarks/type-dark.svg" width="200" height="64">
|
|
12
|
+
</picture>
|
|
13
|
+
|
|
14
|
+
<br/>
|
|
15
|
+
|
|
16
|
+
The indie design system for Next.js apps
|
|
17
|
+
|
|
18
|
+
[](https://www.npmjs.com/package/@once-ui-system/core)
|
|
19
|
+
[](./LICENSE.md)
|
|
20
|
+
[](https://www.npmjs.com/package/@once-ui-system/core)
|
|
21
|
+
[](https://discord.com/invite/5EyAQ4eNdS)
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
<br/>
|
|
27
|
+
|
|
28
|
+
## Documentation
|
|
29
|
+
|
|
30
|
+
Learn how to set up and build with Once UI at [docs.once-ui.com](https://docs.once-ui.com/once-ui/quick-start).
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install @once-ui-system/core
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Authors
|
|
39
|
+
|
|
40
|
+
Built and maintained by [**Lorant One**](https://lorant.one).
|
|
41
|
+
|
|
42
|
+
## Community
|
|
43
|
+
|
|
44
|
+
Join the [Design Engineers Club](https://discord.com/invite/5EyAQ4eNdS) for help, support and discussion.
|
|
45
|
+
|
|
46
|
+
Found a bug? Report it [here](https://github.com/once-ui-system/core/issues/new?labels=bug&template=bug_report.md). Got a feature request? Submit it [here](https://github.com/once-ui-system/core/issues/new?labels=feature%20request&template=feature_request.md).
|
|
47
|
+
|
|
48
|
+
## Contributing
|
|
49
|
+
|
|
50
|
+
Please read our [CONTRIBUTING.md](https://github.com/once-ui-system/core/blob/main/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to Once UI.
|
|
51
|
+
|
|
52
|
+
## Sponsors
|
|
53
|
+
|
|
54
|
+
Once UI is an indie project. [Sponsor us](https://github.com/sponsors/once-ui-system) and get featured on our site!
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Flex } from ".";
|
|
3
|
+
import { IconName } from "@/icons";
|
|
3
4
|
interface AvatarProps extends React.ComponentProps<typeof Flex> {
|
|
4
5
|
size?: "xs" | "s" | "m" | "l" | "xl" | number;
|
|
5
6
|
value?: string;
|
|
6
7
|
src?: string;
|
|
7
8
|
loading?: boolean;
|
|
8
9
|
empty?: boolean;
|
|
10
|
+
icon?: IconName;
|
|
9
11
|
statusIndicator?: {
|
|
10
12
|
color: "green" | "yellow" | "red" | "gray";
|
|
11
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAyC,IAAI,EAAS,MAAM,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAyC,IAAI,EAAS,MAAM,GAAG,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,UAAU,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,eAAe,CAAC,EAAE;QAChB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;KAC5C,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,QAAA,MAAM,MAAM,iGA2GX,CAAC;AAIF,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -17,7 +17,7 @@ const statusIndicatorSizeMapping = {
|
|
|
17
17
|
l: "m",
|
|
18
18
|
xl: "l",
|
|
19
19
|
};
|
|
20
|
-
const Avatar = forwardRef(({ size = "m", value, src, loading, empty, statusIndicator, className, style = {}, ...rest }, ref) => {
|
|
20
|
+
const Avatar = forwardRef(({ size = "m", value, src, loading, empty, icon, statusIndicator, className, style = {}, ...rest }, ref) => {
|
|
21
21
|
const sizeInRem = typeof size === "number" ? `${size}rem` : undefined;
|
|
22
22
|
const sizeStyle = sizeInRem
|
|
23
23
|
? {
|
|
@@ -37,7 +37,7 @@ const Avatar = forwardRef(({ size = "m", value, src, loading, empty, statusIndic
|
|
|
37
37
|
}
|
|
38
38
|
const renderContent = () => {
|
|
39
39
|
if (isEmpty) {
|
|
40
|
-
return (_jsx(Icon, { onBackground: "neutral-medium", name: "person", size: "m", style: typeof size === "number" ? { fontSize: `${size / 3}rem` } : undefined, className: styles.icon, "aria-label": "Empty avatar" }));
|
|
40
|
+
return (_jsx(Icon, { onBackground: "neutral-medium", name: icon || "person", size: "m", style: typeof size === "number" ? { fontSize: `${size / 3}rem` } : undefined, className: styles.icon, "aria-label": "Empty avatar" }));
|
|
41
41
|
}
|
|
42
42
|
if (src) {
|
|
43
43
|
return (_jsx(Media, { radius: "full", src: src, fill: true, alt: "Avatar", aspectRatio: "1", sizes: typeof size === "string" ? `${sizeMapping[size]}px` : `${size * 16}px`, className: styles.image }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;AACvE,OAAO,MAAM,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Flex } from ".";
|
|
3
|
+
type CelebrationType = "confetti" | "fireworks";
|
|
4
|
+
interface CelebrationFxProps extends React.ComponentProps<typeof Flex> {
|
|
5
|
+
type?: CelebrationType;
|
|
6
|
+
speed?: number;
|
|
7
|
+
colors?: string[];
|
|
8
|
+
intensity?: number;
|
|
9
|
+
duration?: number;
|
|
10
|
+
trigger?: "mount" | "hover" | "manual" | "click";
|
|
11
|
+
active?: boolean;
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
declare const CelebrationFx: React.ForwardRefExoticComponent<Omit<CelebrationFxProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
export { CelebrationFx };
|
|
16
|
+
//# sourceMappingURL=CelebrationFx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CelebrationFx.d.ts","sourceRoot":"","sources":["../../src/components/CelebrationFx.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;AAEzB,KAAK,eAAe,GAAG,UAAU,GAAG,WAAW,CAAC;AAEhD,UAAU,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC;IACpE,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAuCD,QAAA,MAAM,aAAa,wGA2WlB,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useEffect, useRef } from "react";
|
|
4
|
+
import { Flex } from ".";
|
|
5
|
+
const CelebrationFx = React.forwardRef(({ type = "confetti", speed = 1, colors = ["brand-solid-medium", "accent-solid-medium"], intensity = 50, duration, trigger = "mount", active = true, children, ...rest }, forwardedRef) => {
|
|
6
|
+
const containerRef = useRef(null);
|
|
7
|
+
const canvasRef = useRef(null);
|
|
8
|
+
const animationRef = useRef(undefined);
|
|
9
|
+
const particlesRef = useRef([]);
|
|
10
|
+
const isEmittingRef = useRef(trigger === "mount");
|
|
11
|
+
const emitStartTimeRef = useRef(Date.now());
|
|
12
|
+
const isHoveredRef = useRef(false);
|
|
13
|
+
const fireworkTimerRef = useRef(0);
|
|
14
|
+
const clickPositionRef = useRef(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (forwardedRef) {
|
|
17
|
+
if ("current" in forwardedRef) {
|
|
18
|
+
forwardedRef.current = containerRef.current;
|
|
19
|
+
}
|
|
20
|
+
else if (typeof forwardedRef === "function") {
|
|
21
|
+
forwardedRef(containerRef.current);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}, [forwardedRef]);
|
|
25
|
+
// Handle manual trigger
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (trigger === "manual") {
|
|
28
|
+
if (active) {
|
|
29
|
+
isEmittingRef.current = true;
|
|
30
|
+
emitStartTimeRef.current = Date.now();
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
isEmittingRef.current = false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, [trigger, active]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const canvas = canvasRef.current;
|
|
39
|
+
const container = containerRef.current;
|
|
40
|
+
if (!canvas || !container)
|
|
41
|
+
return;
|
|
42
|
+
const ctx = canvas.getContext("2d");
|
|
43
|
+
if (!ctx)
|
|
44
|
+
return;
|
|
45
|
+
// Set canvas size
|
|
46
|
+
let canvasWidth = 0;
|
|
47
|
+
let canvasHeight = 0;
|
|
48
|
+
const updateSize = () => {
|
|
49
|
+
const rect = container.getBoundingClientRect();
|
|
50
|
+
canvasWidth = rect.width;
|
|
51
|
+
canvasHeight = rect.height;
|
|
52
|
+
canvas.width = rect.width * 2; // 2x for retina
|
|
53
|
+
canvas.height = rect.height * 2;
|
|
54
|
+
canvas.style.width = `${rect.width}px`;
|
|
55
|
+
canvas.style.height = `${rect.height}px`;
|
|
56
|
+
ctx.scale(2, 2); // Scale for retina
|
|
57
|
+
};
|
|
58
|
+
updateSize();
|
|
59
|
+
window.addEventListener("resize", updateSize);
|
|
60
|
+
// Parse colors - convert token names to CSS variables
|
|
61
|
+
const parsedColors = colors.map((color) => {
|
|
62
|
+
const computedColor = getComputedStyle(container).getPropertyValue(`--${color}`);
|
|
63
|
+
return computedColor || color;
|
|
64
|
+
});
|
|
65
|
+
// Initialize confetti
|
|
66
|
+
const initializeConfetti = () => {
|
|
67
|
+
const particles = [];
|
|
68
|
+
const shapes = ["rectangle", "circle", "triangle"];
|
|
69
|
+
for (let i = 0; i < intensity; i++) {
|
|
70
|
+
// Stagger particles more dramatically over a larger vertical range
|
|
71
|
+
const stagger = (i / intensity) * canvasHeight * 2;
|
|
72
|
+
particles.push({
|
|
73
|
+
x: Math.random() * canvasWidth,
|
|
74
|
+
y: -canvasHeight - Math.random() * canvasHeight - stagger,
|
|
75
|
+
width: 8 + Math.random() * 8,
|
|
76
|
+
height: 6 + Math.random() * 6,
|
|
77
|
+
color: parsedColors[Math.floor(Math.random() * parsedColors.length)],
|
|
78
|
+
rotation: Math.random() * Math.PI * 2,
|
|
79
|
+
rotationSpeed: (Math.random() - 0.5) * 0.2,
|
|
80
|
+
velocityX: (Math.random() - 0.5) * 3,
|
|
81
|
+
velocityY: (0.5 + Math.random() * 2.5) * speed,
|
|
82
|
+
gravity: (0.12 + Math.random() * 0.06) * speed,
|
|
83
|
+
opacity: 0.8 + Math.random() * 0.2,
|
|
84
|
+
shape: shapes[Math.floor(Math.random() * shapes.length)],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return particles;
|
|
88
|
+
};
|
|
89
|
+
// Create a new firework (explodes immediately at random or click position)
|
|
90
|
+
const createFirework = (clickPos) => {
|
|
91
|
+
const firework = {
|
|
92
|
+
x: clickPos ? clickPos.x : Math.random() * canvasWidth,
|
|
93
|
+
y: clickPos ? clickPos.y : canvasHeight * (0.2 + Math.random() * 0.4),
|
|
94
|
+
targetY: 0, // Not used anymore
|
|
95
|
+
velocityY: 0,
|
|
96
|
+
color: parsedColors[Math.floor(Math.random() * parsedColors.length)],
|
|
97
|
+
exploded: true, // Start already exploded
|
|
98
|
+
particles: [],
|
|
99
|
+
};
|
|
100
|
+
// Explode immediately
|
|
101
|
+
explodeFirework(firework);
|
|
102
|
+
return firework;
|
|
103
|
+
};
|
|
104
|
+
// Explode firework into particles
|
|
105
|
+
const explodeFirework = (firework) => {
|
|
106
|
+
const particleCount = 30 + Math.floor(Math.random() * 20);
|
|
107
|
+
for (let i = 0; i < particleCount; i++) {
|
|
108
|
+
const angle = (Math.PI * 2 * i) / particleCount;
|
|
109
|
+
const velocity = 1 + Math.random() * 3;
|
|
110
|
+
firework.particles.push({
|
|
111
|
+
x: firework.x,
|
|
112
|
+
y: firework.y,
|
|
113
|
+
velocityX: Math.cos(angle) * velocity * speed,
|
|
114
|
+
velocityY: Math.sin(angle) * velocity * speed,
|
|
115
|
+
color: firework.color,
|
|
116
|
+
opacity: 1,
|
|
117
|
+
size: 1 + Math.random(),
|
|
118
|
+
life: 0,
|
|
119
|
+
maxLife: 60 + Math.random() * 40,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
firework.exploded = true;
|
|
123
|
+
};
|
|
124
|
+
// Initialize particles only if not already initialized
|
|
125
|
+
if (particlesRef.current.length === 0 && type === "confetti") {
|
|
126
|
+
particlesRef.current = initializeConfetti();
|
|
127
|
+
}
|
|
128
|
+
// Animation loop
|
|
129
|
+
const animate = () => {
|
|
130
|
+
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
|
|
131
|
+
// Check if we should still be emitting new particles
|
|
132
|
+
const shouldEmit = trigger === "hover" ? isHoveredRef.current :
|
|
133
|
+
trigger === "manual" ? active :
|
|
134
|
+
trigger === "click" ? clickPositionRef.current !== null :
|
|
135
|
+
isEmittingRef.current;
|
|
136
|
+
// Check duration limit
|
|
137
|
+
if (duration && isEmittingRef.current && trigger !== "manual") {
|
|
138
|
+
const elapsed = (Date.now() - emitStartTimeRef.current) / 1000;
|
|
139
|
+
if (elapsed > duration) {
|
|
140
|
+
isEmittingRef.current = false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (type === "confetti") {
|
|
144
|
+
// Update and draw confetti
|
|
145
|
+
particlesRef.current.forEach((piece) => {
|
|
146
|
+
// Update physics
|
|
147
|
+
piece.velocityY += piece.gravity;
|
|
148
|
+
piece.x += piece.velocityX;
|
|
149
|
+
piece.y += piece.velocityY;
|
|
150
|
+
piece.rotation += piece.rotationSpeed;
|
|
151
|
+
// Add some air resistance
|
|
152
|
+
piece.velocityX *= 0.99;
|
|
153
|
+
// Only respawn if we're still emitting
|
|
154
|
+
if (piece.y > canvasHeight + 50 && shouldEmit) {
|
|
155
|
+
piece.y = -20 - Math.random() * canvasHeight * 0.5;
|
|
156
|
+
piece.x = Math.random() * canvasWidth;
|
|
157
|
+
piece.velocityX = (Math.random() - 0.5) * 3;
|
|
158
|
+
piece.velocityY = (0.5 + Math.random() * 2.5) * speed;
|
|
159
|
+
piece.gravity = (0.12 + Math.random() * 0.06) * speed;
|
|
160
|
+
}
|
|
161
|
+
// Only draw if still on screen
|
|
162
|
+
if (piece.y < canvasHeight + 100) {
|
|
163
|
+
// Draw confetti piece
|
|
164
|
+
ctx.save();
|
|
165
|
+
ctx.translate(piece.x, piece.y);
|
|
166
|
+
ctx.rotate(piece.rotation);
|
|
167
|
+
ctx.globalAlpha = piece.opacity;
|
|
168
|
+
ctx.fillStyle = piece.color;
|
|
169
|
+
if (piece.shape === "rectangle") {
|
|
170
|
+
ctx.fillRect(-piece.width / 2, -piece.height / 2, piece.width, piece.height);
|
|
171
|
+
}
|
|
172
|
+
else if (piece.shape === "circle") {
|
|
173
|
+
ctx.beginPath();
|
|
174
|
+
ctx.arc(0, 0, piece.width / 2, 0, Math.PI * 2);
|
|
175
|
+
ctx.fill();
|
|
176
|
+
}
|
|
177
|
+
else if (piece.shape === "triangle") {
|
|
178
|
+
ctx.beginPath();
|
|
179
|
+
ctx.moveTo(0, -piece.height / 2);
|
|
180
|
+
ctx.lineTo(piece.width / 2, piece.height / 2);
|
|
181
|
+
ctx.lineTo(-piece.width / 2, piece.height / 2);
|
|
182
|
+
ctx.closePath();
|
|
183
|
+
ctx.fill();
|
|
184
|
+
}
|
|
185
|
+
ctx.restore();
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else if (type === "fireworks") {
|
|
190
|
+
// Launch new fireworks
|
|
191
|
+
if (trigger === "click" && clickPositionRef.current) {
|
|
192
|
+
// Fire from click position
|
|
193
|
+
particlesRef.current.push(createFirework(clickPositionRef.current));
|
|
194
|
+
clickPositionRef.current = null;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
fireworkTimerRef.current++;
|
|
198
|
+
if (shouldEmit && fireworkTimerRef.current > 20 / speed) {
|
|
199
|
+
// Launch new firework every ~20 frames
|
|
200
|
+
fireworkTimerRef.current = 0;
|
|
201
|
+
particlesRef.current.push(createFirework());
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Update and draw fireworks (explosion particles only)
|
|
205
|
+
particlesRef.current.forEach((firework) => {
|
|
206
|
+
// Update and draw explosion particles
|
|
207
|
+
firework.particles.forEach((particle) => {
|
|
208
|
+
particle.life++;
|
|
209
|
+
if (particle.life < particle.maxLife) {
|
|
210
|
+
// Update position
|
|
211
|
+
particle.x += particle.velocityX;
|
|
212
|
+
particle.y += particle.velocityY;
|
|
213
|
+
particle.velocityY += 0.1; // Gravity
|
|
214
|
+
// Fade out
|
|
215
|
+
particle.opacity = 1 - particle.life / particle.maxLife;
|
|
216
|
+
// Draw particle
|
|
217
|
+
ctx.globalAlpha = particle.opacity;
|
|
218
|
+
ctx.fillStyle = particle.color;
|
|
219
|
+
ctx.beginPath();
|
|
220
|
+
ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
|
|
221
|
+
ctx.fill();
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
// Clean up dead fireworks (only when not emitting)
|
|
226
|
+
if (!shouldEmit) {
|
|
227
|
+
particlesRef.current = particlesRef.current.filter((firework) => {
|
|
228
|
+
// Keep if any particles are still alive
|
|
229
|
+
return firework.particles.some(p => p.life < p.maxLife);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
ctx.globalAlpha = 1;
|
|
234
|
+
animationRef.current = requestAnimationFrame(animate);
|
|
235
|
+
};
|
|
236
|
+
animate();
|
|
237
|
+
return () => {
|
|
238
|
+
window.removeEventListener("resize", updateSize);
|
|
239
|
+
if (animationRef.current) {
|
|
240
|
+
cancelAnimationFrame(animationRef.current);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
}, [type, colors, speed, intensity, duration, trigger]);
|
|
244
|
+
const handleMouseEnter = () => {
|
|
245
|
+
if (trigger === "hover" && !isHoveredRef.current) {
|
|
246
|
+
isHoveredRef.current = true;
|
|
247
|
+
isEmittingRef.current = true;
|
|
248
|
+
emitStartTimeRef.current = Date.now();
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
const handleMouseLeave = () => {
|
|
252
|
+
if (trigger === "hover" && isHoveredRef.current) {
|
|
253
|
+
isHoveredRef.current = false;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
const handleClick = (e) => {
|
|
257
|
+
if (trigger === "click" && containerRef.current) {
|
|
258
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
259
|
+
const x = e.clientX - rect.left;
|
|
260
|
+
const y = e.clientY - rect.top;
|
|
261
|
+
if (type === "confetti") {
|
|
262
|
+
// For confetti, add burst of particles from click position
|
|
263
|
+
const shapes = ["rectangle", "circle", "triangle"];
|
|
264
|
+
const canvas = canvasRef.current;
|
|
265
|
+
if (!canvas)
|
|
266
|
+
return;
|
|
267
|
+
const parsedColors = colors.map((color) => {
|
|
268
|
+
const computedColor = getComputedStyle(containerRef.current).getPropertyValue(`--${color}`);
|
|
269
|
+
return computedColor || color;
|
|
270
|
+
});
|
|
271
|
+
for (let i = 0; i < intensity; i++) {
|
|
272
|
+
const angle = (Math.PI * 2 * i) / intensity;
|
|
273
|
+
const velocity = 2 + Math.random() * 3;
|
|
274
|
+
particlesRef.current.push({
|
|
275
|
+
x,
|
|
276
|
+
y,
|
|
277
|
+
width: 8 + Math.random() * 8,
|
|
278
|
+
height: 6 + Math.random() * 6,
|
|
279
|
+
color: parsedColors[Math.floor(Math.random() * parsedColors.length)],
|
|
280
|
+
rotation: Math.random() * Math.PI * 2,
|
|
281
|
+
rotationSpeed: (Math.random() - 0.5) * 0.2,
|
|
282
|
+
velocityX: Math.cos(angle) * velocity,
|
|
283
|
+
velocityY: Math.sin(angle) * velocity - 2, // Slight upward bias
|
|
284
|
+
gravity: (0.12 + Math.random() * 0.06) * speed,
|
|
285
|
+
opacity: 0.8 + Math.random() * 0.2,
|
|
286
|
+
shape: shapes[Math.floor(Math.random() * shapes.length)],
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
// For fireworks, store click position
|
|
292
|
+
clickPositionRef.current = { x, y };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
return (_jsxs(Flex, { ref: containerRef, fill: true, overflow: "hidden", onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onClick: handleClick, style: {
|
|
297
|
+
cursor: trigger === "click" ? "pointer" : undefined,
|
|
298
|
+
...rest.style,
|
|
299
|
+
}, ...rest, children: [_jsx("canvas", { ref: canvasRef, style: {
|
|
300
|
+
position: "absolute",
|
|
301
|
+
top: 0,
|
|
302
|
+
left: 0,
|
|
303
|
+
width: "100%",
|
|
304
|
+
height: "100%",
|
|
305
|
+
pointerEvents: "none",
|
|
306
|
+
} }), children] }));
|
|
307
|
+
});
|
|
308
|
+
CelebrationFx.displayName = "CelebrationFx";
|
|
309
|
+
export { CelebrationFx };
|
|
310
|
+
//# sourceMappingURL=CelebrationFx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CelebrationFx.js","sourceRoot":"","sources":["../../src/components/CelebrationFx.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CountFxProps } from ".";
|
|
3
|
+
export interface CountdownFxProps extends Omit<CountFxProps, 'value' | 'format' | 'separator' | 'effect'> {
|
|
4
|
+
targetDate: Date | string;
|
|
5
|
+
format?: "HH:MM:SS" | "DD:HH:MM:SS" | "MM:SS";
|
|
6
|
+
effect?: CountFxProps['effect'];
|
|
7
|
+
onComplete?: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const CountdownFx: React.FC<CountdownFxProps>;
|
|
10
|
+
export { CountdownFx };
|
|
11
|
+
//# sourceMappingURL=CountdownFx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountdownFx.d.ts","sourceRoot":"","sources":["../../src/components/CountdownFx.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAAsB,YAAY,EAAE,MAAM,GAAG,CAAC;AAErD,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvG,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC;IAC9C,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAkH3C,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { Row, Text, CountFx } from ".";
|
|
5
|
+
const CountdownFx = ({ targetDate, format = "HH:MM:SS", effect = "wheel", onComplete, ...countFxProps }) => {
|
|
6
|
+
const [timeRemaining, setTimeRemaining] = useState({
|
|
7
|
+
days: 0,
|
|
8
|
+
hours: 0,
|
|
9
|
+
minutes: 0,
|
|
10
|
+
seconds: 0,
|
|
11
|
+
total: 0,
|
|
12
|
+
});
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const calculateTimeRemaining = () => {
|
|
15
|
+
const now = new Date().getTime();
|
|
16
|
+
const target = typeof targetDate === 'string' ? new Date(targetDate).getTime() : targetDate.getTime();
|
|
17
|
+
const difference = target - now;
|
|
18
|
+
if (difference <= 0) {
|
|
19
|
+
setTimeRemaining({ days: 0, hours: 0, minutes: 0, seconds: 0, total: 0 });
|
|
20
|
+
if (onComplete) {
|
|
21
|
+
onComplete();
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const days = Math.floor(difference / (1000 * 60 * 60 * 24));
|
|
26
|
+
const hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
27
|
+
const minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
|
|
28
|
+
const seconds = Math.floor((difference % (1000 * 60)) / 1000);
|
|
29
|
+
setTimeRemaining({ days, hours, minutes, seconds, total: difference });
|
|
30
|
+
};
|
|
31
|
+
calculateTimeRemaining();
|
|
32
|
+
const interval = setInterval(calculateTimeRemaining, 1000);
|
|
33
|
+
return () => clearInterval(interval);
|
|
34
|
+
}, [targetDate, onComplete]);
|
|
35
|
+
const padZero = (num) => num.toString().padStart(2, '0');
|
|
36
|
+
const renderTimeUnit = (value, key) => {
|
|
37
|
+
const paddedValue = padZero(value);
|
|
38
|
+
const digits = paddedValue.split('');
|
|
39
|
+
return (_jsx(Row, { gap: "0", inline: true, children: digits.map((digit, index) => (_jsx(CountFx, { value: parseInt(digit), effect: effect, speed: 400, ...countFxProps }, `${key}-${index}`))) }, key));
|
|
40
|
+
};
|
|
41
|
+
const renderSeparator = () => (_jsx(Text, { ...countFxProps, style: { width: '0.5em', textAlign: 'center' }, children: ":" }, `sep-${Math.random()}`));
|
|
42
|
+
if (timeRemaining.total === 0) {
|
|
43
|
+
return (_jsxs(Row, { gap: "0", align: "center", textVariant: countFxProps.variant, style: { fontVariantNumeric: 'tabular-nums' }, children: [format === "DD:HH:MM:SS" && (_jsxs(_Fragment, { children: [renderTimeUnit(0, 'days'), renderSeparator()] })), renderTimeUnit(0, 'hours'), renderSeparator(), renderTimeUnit(0, 'minutes'), format !== "MM:SS" && (_jsxs(_Fragment, { children: [renderSeparator(), renderTimeUnit(0, 'seconds')] }))] }));
|
|
44
|
+
}
|
|
45
|
+
return (_jsxs(Row, { gap: "0", align: "center", style: { fontVariantNumeric: 'tabular-nums' }, children: [format === "DD:HH:MM:SS" && timeRemaining.days > 0 && (_jsxs(_Fragment, { children: [renderTimeUnit(timeRemaining.days, 'days'), renderSeparator()] })), format !== "MM:SS" && (_jsxs(_Fragment, { children: [renderTimeUnit(format === "DD:HH:MM:SS" ? timeRemaining.hours : timeRemaining.days * 24 + timeRemaining.hours, 'hours'), renderSeparator()] })), renderTimeUnit(timeRemaining.minutes, 'minutes'), renderSeparator(), renderTimeUnit(timeRemaining.seconds, 'seconds')] }));
|
|
46
|
+
};
|
|
47
|
+
CountdownFx.displayName = "CountdownFx";
|
|
48
|
+
export { CountdownFx };
|
|
49
|
+
//# sourceMappingURL=CountdownFx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountdownFx.js","sourceRoot":"","sources":["../../src/components/CountdownFx.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Heading.d.ts","sourceRoot":"","sources":["../../src/components/Heading.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"Heading.d.ts","sourceRoot":"","sources":["../../src/components/Heading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGrE,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,GACrD,WAAW,GACX,YAAY,GACZ,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAE9B,QAAA,MAAM,OAAO;KAAI,CAAC,SAAS,WAAW,2RA4BnC,YAAY,CAAC,CAAC,CAAC;;CAsEjB,CAAC;AAIF,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Flex } from ".";
|
|
3
|
+
interface BulgeConfig {
|
|
4
|
+
type?: "ripple" | "wave";
|
|
5
|
+
duration?: number;
|
|
6
|
+
intensity?: number;
|
|
7
|
+
repeat?: boolean;
|
|
8
|
+
delay?: number;
|
|
9
|
+
}
|
|
3
10
|
interface MatrixFxProps extends React.ComponentProps<typeof Flex> {
|
|
4
11
|
speed?: number;
|
|
5
12
|
colors?: string[];
|
|
6
13
|
size?: number;
|
|
7
14
|
spacing?: number;
|
|
8
15
|
revealFrom?: "center" | "top" | "bottom" | "left" | "right";
|
|
9
|
-
trigger?: "hover" | "instant" | "mount";
|
|
16
|
+
trigger?: "hover" | "instant" | "mount" | "click" | "manual";
|
|
17
|
+
active?: boolean;
|
|
10
18
|
flicker?: boolean;
|
|
19
|
+
bulge?: BulgeConfig;
|
|
11
20
|
children?: React.ReactNode;
|
|
12
21
|
}
|
|
13
22
|
declare const MatrixFx: React.ForwardRefExoticComponent<Omit<MatrixFxProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
14
23
|
export { MatrixFx };
|
|
24
|
+
export type { BulgeConfig };
|
|
15
25
|
//# sourceMappingURL=MatrixFx.d.ts.map
|