ngx-dom-confetti 0.0.2
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/LICENSE +21 -0
- package/README.md +60 -0
- package/esm2020/lib/confetti.mjs +109 -0
- package/esm2020/lib/ngx-dom-confetti.component.mjs +43 -0
- package/esm2020/lib/ngx-dom-confetti.module.mjs +21 -0
- package/esm2020/lib/ngx-dom-confetti.service.mjs +14 -0
- package/esm2020/ngx-dom-confetti.mjs +5 -0
- package/esm2020/public-api.mjs +8 -0
- package/fesm2015/ngx-dom-confetti.mjs +192 -0
- package/fesm2015/ngx-dom-confetti.mjs.map +1 -0
- package/fesm2020/ngx-dom-confetti.mjs +192 -0
- package/fesm2020/ngx-dom-confetti.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/confetti.d.ts +19 -0
- package/lib/ngx-dom-confetti.component.d.ts +13 -0
- package/lib/ngx-dom-confetti.module.d.ts +7 -0
- package/lib/ngx-dom-confetti.service.d.ts +6 -0
- package/package.json +32 -0
- package/public-api.d.ts +4 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 arthur ming
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Ngx Dom Confetti
|
|
2
|
+
|
|
3
|
+
[Dom Confetti](https://www.npmjs.com/package/dom-confetti) for Angular
|
|
4
|
+
|
|
5
|
+
# Install
|
|
6
|
+
|
|
7
|
+
for npm user
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install ngx-dom-confetti
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
for yarn user
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
yarn add ngx-dom-confetti
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
for pnpm user
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm install ngx-dom-confetti
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# Use
|
|
26
|
+
|
|
27
|
+
import `NgxDomConfettiModule` to `AppModule`
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { NgxDomConfettiModule} from 'ngx-dom-confetti';
|
|
31
|
+
|
|
32
|
+
@NgModule({
|
|
33
|
+
declarations: [
|
|
34
|
+
AppComponent
|
|
35
|
+
],
|
|
36
|
+
imports: [
|
|
37
|
+
BrowserModule,
|
|
38
|
+
BrowserAnimationsModule,
|
|
39
|
+
|
|
40
|
+
NgxDomConfettiModule
|
|
41
|
+
],
|
|
42
|
+
providers: [],
|
|
43
|
+
bootstrap: [AppComponent]
|
|
44
|
+
})
|
|
45
|
+
export class AppModule { }
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
use `ngx-dom-confetti`
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<button mat-raised-button color="primary">
|
|
52
|
+
<ngx-dom-confetti>
|
|
53
|
+
Hit Me!
|
|
54
|
+
</ngx-dom-confetti>
|
|
55
|
+
</button>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
# license
|
|
59
|
+
|
|
60
|
+
[MIT](https://github.com/damingerdai/ngx-dom-confetti/blob/master/LICENSE)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License MIT, copyright Daniel Lundin 2019
|
|
3
|
+
*/
|
|
4
|
+
const defaultColors = ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"];
|
|
5
|
+
const defaultsConfettiConfig = {
|
|
6
|
+
angle: 90,
|
|
7
|
+
spread: 45,
|
|
8
|
+
startVelocity: 45,
|
|
9
|
+
elementCount: 50,
|
|
10
|
+
width: "10px",
|
|
11
|
+
height: "10px",
|
|
12
|
+
perspective: "",
|
|
13
|
+
colors: defaultColors,
|
|
14
|
+
duration: 3000,
|
|
15
|
+
stagger: 0,
|
|
16
|
+
dragFriction: 0.1,
|
|
17
|
+
random: Math.random
|
|
18
|
+
};
|
|
19
|
+
function createElements(root, elementCount, colors, width, height) {
|
|
20
|
+
return Array.from({ length: elementCount }).map((_, index) => {
|
|
21
|
+
const element = document.createElement("div");
|
|
22
|
+
const color = colors[index % colors.length];
|
|
23
|
+
element.style.backgroundColor = color;
|
|
24
|
+
element.style.width = width;
|
|
25
|
+
element.style.height = height;
|
|
26
|
+
element.style.position = "absolute";
|
|
27
|
+
element.style.willChange = "transform, opacity";
|
|
28
|
+
element.style.visibility = "hidden";
|
|
29
|
+
root.appendChild(element);
|
|
30
|
+
return element;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function randomPhysics(angle, spread, startVelocity, random) {
|
|
34
|
+
const radAngle = angle * (Math.PI / 180);
|
|
35
|
+
const radSpread = spread * (Math.PI / 180);
|
|
36
|
+
return {
|
|
37
|
+
x: 0,
|
|
38
|
+
y: 0,
|
|
39
|
+
z: 0,
|
|
40
|
+
wobble: random() * 10,
|
|
41
|
+
wobbleSpeed: 0.1 + random() * 0.1,
|
|
42
|
+
velocity: startVelocity * 0.5 + random() * startVelocity,
|
|
43
|
+
angle2D: -radAngle + (0.5 * radSpread - random() * radSpread),
|
|
44
|
+
angle3D: -(Math.PI / 4) + random() * (Math.PI / 2),
|
|
45
|
+
tiltAngle: random() * Math.PI,
|
|
46
|
+
tiltAngleSpeed: 0.1 + random() * 0.3
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function animate(root, fettis, dragFriction, decay, duration, stagger) {
|
|
50
|
+
let startTime;
|
|
51
|
+
return new Promise(resolve => {
|
|
52
|
+
function update(time) {
|
|
53
|
+
if (!startTime)
|
|
54
|
+
startTime = time;
|
|
55
|
+
const elapsed = time - startTime;
|
|
56
|
+
const progress = startTime === time ? 0 : (time - startTime) / duration;
|
|
57
|
+
fettis.slice(0, Math.ceil(elapsed / stagger)).forEach(fetti => {
|
|
58
|
+
updateFetti(fetti, progress, dragFriction, decay);
|
|
59
|
+
});
|
|
60
|
+
if (time - startTime < duration) {
|
|
61
|
+
requestAnimationFrame(update);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const fetti = fettis.find((fetti) => fetti.element.parentNode === root);
|
|
65
|
+
if (fetti) {
|
|
66
|
+
root.removeChild(fetti.element);
|
|
67
|
+
}
|
|
68
|
+
resolve();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
requestAnimationFrame(update);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function updateFetti(fetti, progress, dragFriction, decay) {
|
|
75
|
+
/* eslint-disable no-param-reassign */
|
|
76
|
+
fetti.physics.x += Math.cos(fetti.physics.angle2D) * fetti.physics.velocity;
|
|
77
|
+
fetti.physics.y += Math.sin(fetti.physics.angle2D) * fetti.physics.velocity;
|
|
78
|
+
fetti.physics.z += Math.sin(fetti.physics.angle3D) * fetti.physics.velocity;
|
|
79
|
+
fetti.physics.wobble += fetti.physics.wobbleSpeed;
|
|
80
|
+
// Backward compatibility
|
|
81
|
+
if (decay) {
|
|
82
|
+
fetti.physics.velocity *= decay;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
fetti.physics.velocity -= fetti.physics.velocity * dragFriction;
|
|
86
|
+
}
|
|
87
|
+
fetti.physics.y += 3;
|
|
88
|
+
fetti.physics.tiltAngle += fetti.physics.tiltAngleSpeed;
|
|
89
|
+
const { x, y, z, tiltAngle, wobble } = fetti.physics;
|
|
90
|
+
const wobbleX = x + 10 * Math.cos(wobble);
|
|
91
|
+
const wobbleY = y + 10 * Math.sin(wobble);
|
|
92
|
+
const transform = `translate3d(${wobbleX}px, ${wobbleY}px, ${z}px) rotate3d(1, 1, 1, ${tiltAngle}rad)`;
|
|
93
|
+
fetti.element.style.visibility = "visible";
|
|
94
|
+
fetti.element.style.transform = transform;
|
|
95
|
+
fetti.element.style.opacity = (1 - progress).toString();
|
|
96
|
+
;
|
|
97
|
+
/* eslint-enable */
|
|
98
|
+
}
|
|
99
|
+
export function confetti(root, config) {
|
|
100
|
+
const { elementCount, colors, width, height, perspective, angle, spread, startVelocity, decay, dragFriction, duration, stagger, random } = { ...defaultsConfettiConfig, ...config };
|
|
101
|
+
root.style.perspective = perspective;
|
|
102
|
+
const elements = createElements(root, elementCount ?? 50, colors, width, height);
|
|
103
|
+
const fettis = elements.map(element => ({
|
|
104
|
+
element,
|
|
105
|
+
physics: randomPhysics(angle, spread, startVelocity, random)
|
|
106
|
+
}));
|
|
107
|
+
return animate(root, fettis, dragFriction, decay, duration, stagger);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmV0dGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3gtZG9tLWNvbmZldHRpL3NyYy9saWIvY29uZmV0dGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFrQkgsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFFOUUsTUFBTSxzQkFBc0IsR0FBRztJQUMzQixLQUFLLEVBQUUsRUFBRTtJQUNULE1BQU0sRUFBRSxFQUFFO0lBQ1YsYUFBYSxFQUFFLEVBQUU7SUFDakIsWUFBWSxFQUFFLEVBQUU7SUFDaEIsS0FBSyxFQUFFLE1BQU07SUFDYixNQUFNLEVBQUUsTUFBTTtJQUNkLFdBQVcsRUFBRSxFQUFFO0lBQ2YsTUFBTSxFQUFFLGFBQWE7SUFDckIsUUFBUSxFQUFFLElBQUk7SUFDZCxPQUFPLEVBQUUsQ0FBQztJQUNWLFlBQVksRUFBRSxHQUFHO0lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtDQUN0QixDQUFBO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBaUIsRUFBRSxZQUFvQixFQUFFLE1BQWdCLEVBQUUsS0FBYSxFQUFFLE1BQWM7SUFDNUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxH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WUFBWSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87UUFDUCxPQUFPLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQztLQUMvRCxDQUFDLENBQUMsQ0FBQztJQUVKLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGljZW5zZSBNSVQsIGNvcHlyaWdodCBEYW5pZWwgTHVuZGluIDIwMTlcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZldHRpQ29uZmlnIHtcbiAgICBhbmdsZTogbnVtYmVyO1xuICAgIHNwcmVhZDogbnVtYmVyO1xuICAgIHdpZHRoOiBzdHJpbmc7XG4gICAgaGVpZ2h0OiBzdHJpbmc7XG4gICAgcGVyc3BlY3RpdmU6IHN0cmluZztcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xuICAgIGRyYWdGcmljdGlvbjogbnVtYmVyO1xuICAgIHN0YWdnZXI6IG51bWJlcjtcbiAgICBzdGFydFZlbG9jaXR5OiBudW1iZXI7XG4gICAgZWxlbWVudENvdW50OiBudW1iZXI7XG4gICAgZGVjYXk6IG51bWJlcjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIHJhbmRvbTogKCkgPT4gbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0Q29sb3JzID0gW1wiI2E4NjRmZFwiLCBcIiMyOWNkZmZcIiwgXCIjNzhmZjQ0XCIsIFwiI2ZmNzE4ZFwiLCBcIiNmZGZmNmFcIl07XG5cbmNvbnN0IGRlZmF1bHRzQ29uZmV0dGlDb25maWcgPSB7XG4gICAgYW5nbGU6IDkwLFxuICAgIHNwcmVhZDogNDUsXG4gICAgc3RhcnRWZWxvY2l0eTogNDUsXG4gICAgZWxlbWVudENvdW50OiA1MCxcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICBwZXJzcGVjdGl2ZTogXCJcIixcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvcnMsXG4gICAgZHVyYXRpb246IDMwMDAsXG4gICAgc3RhZ2dlcjogMCxcbiAgICBkcmFnRnJpY3Rpb246IDAuMSxcbiAgICByYW5kb206IE1hdGgucmFuZG9tXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRzKHJvb3Q6IEhUTUxFbGVtZW50LCBlbGVtZW50Q291bnQ6IG51bWJlciwgY29sb3JzOiBzdHJpbmdbXSwgd2lkdGg6IHN0cmluZywgaGVpZ2h0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZWxlbWVudENvdW50IH0pLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF07XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lsbENoYW5nZSA9IFwidHJhbnNmb3JtLCBvcGFjaXR5XCI7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgSVBoeXNpY3Mge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgejogbnVtYmVyO1xuICAgIHdvYmJsZTogbnVtYmVyO1xuICAgIHdvYmJsZVNwZWVkOiBudW1iZXI7XG4gICAgdmVsb2NpdHk6IG51bWJlcjtcbiAgICBhbmdsZTJEOiBudW1iZXI7XG4gICAgYW5nbGUzRDogbnVtYmVyO1xuICAgIHRpbHRBbmdsZTogbnVtYmVyO1xuICAgIHRpbHRBbmdsZVNwZWVkOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJRmV0dGkge1xuICAgIGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50LCBcbiAgICBwaHlzaWNzOiBJUGh5c2ljc1xufVxuXG5mdW5jdGlvbiByYW5kb21QaHlzaWNzKGFuZ2xlOiBudW1iZXIsIHNwcmVhZDogbnVtYmVyLCBzdGFydFZlbG9jaXR5OiBudW1iZXIsIHJhbmRvbTogKCkgPT4gbnVtYmVyKTogSVBoeXNpY3Mge1xuICAgIGNvbnN0IHJhZEFuZ2xlID0gYW5nbGUgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgY29uc3QgcmFkU3ByZWFkID0gc3ByZWFkICogKE1hdGguUEkgLyAxODApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHo6IDAsXG4gICAgICAgIHdvYmJsZTogcmFuZG9tKCkgKiAxMCxcbiAgICAgICAgd29iYmxlU3BlZWQ6IDAuMSArIHJhbmRvbSgpICogMC4xLFxuICAgICAgICB2ZWxvY2l0eTogc3RhcnRWZWxvY2l0eSAqIDAuNSArIHJhbmRvbSgpICogc3RhcnRWZWxvY2l0eSxcbiAgICAgICAgYW5nbGUyRDogLXJhZEFuZ2xlICsgKDAuNSAqIHJhZFNwcmVhZCAtIHJhbmRvbSgpICogcmFkU3ByZWFkKSxcbiAgICAgICAgYW5nbGUzRDogLShNYXRoLlBJIC8gNCkgKyByYW5kb20oKSAqIChNYXRoLlBJIC8gMiksXG4gICAgICAgIHRpbHRBbmdsZTogcmFuZG9tKCkgKiBNYXRoLlBJLFxuICAgICAgICB0aWx0QW5nbGVTcGVlZDogMC4xICsgcmFuZG9tKCkgKiAwLjNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhbmltYXRlKHJvb3Q6IEhUTUxFbGVtZW50LCBmZXR0aXM6IEFycmF5PElGZXR0aT4sIGRyYWdGcmljdGlvbjogbnVtYmVyLCBkZWNheTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBzdGFnZ2VyOiBudW1iZXIpIHtcbiAgICBsZXQgc3RhcnRUaW1lOiBudW1iZXI7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmICghc3RhcnRUaW1lKSBzdGFydFRpbWUgPSB0aW1lO1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IHRpbWUgLSBzdGFydFRpbWU7XG4gICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHN0YXJ0VGltZSA9PT0gdGltZSA/IDAgOiAodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbjtcbiAgICAgICAgICAgIGZldHRpcy5zbGljZSgwLCBNYXRoLmNlaWwoZWxhcHNlZCAvIHN0YWdnZXIpKS5mb3JFYWNoKGZldHRpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVGZXR0aShmZXR0aSwgcHJvZ3Jlc3MsIGRyYWdGcmljdGlvbiwgZGVjYXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aW1lIC0gc3RhcnRUaW1lIDwgZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0dGkgPSBmZXR0aXMuZmluZCgoZmV0dGkpID0+IGZldHRpLmVsZW1lbnQucGFyZW50Tm9kZSA9PT0gcm9vdCk7XG4gICAgICAgICAgICAgICAgaWYgKGZldHRpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQoZmV0dGkuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGZXR0aShmZXR0aTogSUZldHRpLCBwcm9ncmVzczogbnVtYmVyLCBkcmFnRnJpY3Rpb246IG51bWJlciwgZGVjYXk6IG51bWJlcikge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4gICAgZmV0dGkucGh5c2ljcy54ICs9IE1hdGguY29zKGZldHRpLnBoeXNpY3MuYW5nbGUyRCkgKiBmZXR0aS5waHlzaWNzLnZlbG9jaXR5O1xuICAgIGZldHRpLnBoeXNpY3MueSArPSBNYXRoLnNpbihmZXR0aS5waHlzaWNzLmFuZ2xlMkQpICogZmV0dGkucGh5c2ljcy52ZWxvY2l0eTtcbiAgICBmZXR0aS5waHlzaWNzLnogKz0gTWF0aC5zaW4oZmV0dGkucGh5c2ljcy5hbmdsZTNEKSAqIGZldHRpLnBoeXNpY3MudmVsb2NpdHk7XG4gICAgZmV0dGkucGh5c2ljcy53b2JibGUgKz0gZmV0dGkucGh5c2ljcy53b2JibGVTcGVlZDtcbiAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKGRlY2F5KSB7XG4gICAgICBmZXR0aS5waHlzaWNzLnZlbG9jaXR5ICo9IGRlY2F5O1xuICAgIH0gZWxzZSB7XG4gICAgICBmZXR0aS5waHlzaWNzLnZlbG9jaXR5IC09IGZldHRpLnBoeXNpY3MudmVsb2NpdHkgKiBkcmFnRnJpY3Rpb247XG4gICAgfVxuICAgIGZldHRpLnBoeXNpY3MueSArPSAzO1xuICAgIGZldHRpLnBoeXNpY3MudGlsdEFuZ2xlICs9IGZldHRpLnBoeXNpY3MudGlsdEFuZ2xlU3BlZWQ7XG4gIFxuICAgIGNvbnN0IHsgeCwgeSwgeiwgdGlsdEFuZ2xlLCB3b2JibGUgfSA9IGZldHRpLnBoeXNpY3M7XG4gICAgY29uc3Qgd29iYmxlWCA9IHggKyAxMCAqIE1hdGguY29zKHdvYmJsZSk7XG4gICAgY29uc3Qgd29iYmxlWSA9IHkgKyAxMCAqIE1hdGguc2luKHdvYmJsZSk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7d29iYmxlWH1weCwgJHt3b2JibGVZfXB4LCAke3p9cHgpIHJvdGF0ZTNkKDEsIDEsIDEsICR7dGlsdEFuZ2xlfXJhZClgO1xuICBcbiAgICBmZXR0aS5lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICBmZXR0aS5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICBmZXR0aS5lbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAoMSAtIHByb2dyZXNzKS50b1N0cmluZygpOztcbiAgXG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25mZXR0aShyb290OiBIVE1MRWxlbWVudCwgY29uZmlnPzogUGFydGlhbDxDb25mZXR0aUNvbmZpZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGVsZW1lbnRDb3VudCxcbiAgICAgICAgY29sb3JzLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBwZXJzcGVjdGl2ZSxcbiAgICAgICAgYW5nbGUsXG4gICAgICAgIHNwcmVhZCxcbiAgICAgICAgc3RhcnRWZWxvY2l0eSxcbiAgICAgICAgZGVjYXksXG4gICAgICAgIGRyYWdGcmljdGlvbixcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIHN0YWdnZXIsXG4gICAgICAgIHJhbmRvbVxuICAgIH0gPSB7IC4uLmRlZmF1bHRzQ29uZmV0dGlDb25maWcsIC4uLmNvbmZpZyB9IGFzIENvbmZldHRpQ29uZmlnO1xuICAgIHJvb3Quc3R5bGUucGVyc3BlY3RpdmUgPSBwZXJzcGVjdGl2ZTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnRzKHJvb3QsIGVsZW1lbnRDb3VudCA/PyA1MCwgY29sb3JzLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBmZXR0aXMgPSBlbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoe1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwaHlzaWNzOiByYW5kb21QaHlzaWNzKGFuZ2xlLCBzcHJlYWQsIHN0YXJ0VmVsb2NpdHksIHJhbmRvbSlcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gYW5pbWF0ZShyb290LCBmZXR0aXMsIGRyYWdGcmljdGlvbiwgZGVjYXksIGR1cmF0aW9uLCBzdGFnZ2VyKTtcbn0iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Component, HostListener, Input } from '@angular/core';
|
|
2
|
+
import { confetti } from './confetti';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgxDomConfettiComponent {
|
|
5
|
+
constructor(el) {
|
|
6
|
+
this.el = el;
|
|
7
|
+
this._config = {
|
|
8
|
+
angle: 90,
|
|
9
|
+
spread: 45,
|
|
10
|
+
startVelocity: 45,
|
|
11
|
+
elementCount: 50,
|
|
12
|
+
width: "10px",
|
|
13
|
+
height: "10px",
|
|
14
|
+
perspective: "",
|
|
15
|
+
colors: ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"],
|
|
16
|
+
duration: 3000,
|
|
17
|
+
stagger: 0,
|
|
18
|
+
dragFriction: 0.1,
|
|
19
|
+
random: Math.random
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
set config(_config) {
|
|
23
|
+
if (_config) {
|
|
24
|
+
this._config = Object.assign(this._config, _config);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
onClick() {
|
|
28
|
+
confetti(this.el.nativeElement, this._config);
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() { }
|
|
31
|
+
}
|
|
32
|
+
NgxDomConfettiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
NgxDomConfettiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: NgxDomConfettiComponent, selector: "ngx-dom-confetti", inputs: { config: "config" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'ngx-dom-confetti', template: ` <ng-content></ng-content> ` }]
|
|
37
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { config: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], onClick: [{
|
|
40
|
+
type: HostListener,
|
|
41
|
+
args: ['click']
|
|
42
|
+
}] } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRvbS1jb25mZXR0aS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3gtZG9tLWNvbmZldHRpL3NyYy9saWIvbmd4LWRvbS1jb25mZXR0aS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRW5GLE9BQU8sRUFBRSxRQUFRLEVBQWtCLE1BQU0sWUFBWSxDQUFDOztBQU90RCxNQUFNLE9BQU8sdUJBQXVCO0lBWWxDLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUk7WUFDZCxLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztZQUMvRCxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxDQUFDO1lBQ1YsWUFBWSxFQUFFLEdBQUc7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUE7SUFDRCxDQUFDO0lBdkJELElBQ1csTUFBTSxDQUFDLE9BQWdDO1FBQ2hELElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckQ7SUFFSCxDQUFDO0lBb0JELE9BQU87UUFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxRQUFRLEtBQVUsQ0FBQzs7b0hBbENSLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHFJQUh4Qiw2QkFBNkI7MkZBRzVCLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEIsNkJBQTZCO2lHQVE1QixNQUFNO3NCQURoQixLQUFLO2dCQTBCTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGNvbmZldHRpLCBDb25mZXR0aUNvbmZpZyB9IGZyb20gJy4vY29uZmV0dGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZG9tLWNvbmZldHRpJyxcbiAgdGVtcGxhdGU6IGAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiBgLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hEb21Db25mZXR0aUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiAgUGFydGlhbDxDb25mZXR0aUNvbmZpZz47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb25maWcoX2NvbmZpZzogUGFydGlhbDxDb25mZXR0aUNvbmZpZz4pIHtcbiAgICBpZiAoX2NvbmZpZykge1xuICAgICAgdGhpcy5fY29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIF9jb25maWcpO1xuICAgIH1cblxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuX2NvbmZpZyA9ICB7XG4gICAgICBhbmdsZTogOTAsXG4gICAgICBzcHJlYWQ6IDQ1LFxuICAgICAgc3RhcnRWZWxvY2l0eTogNDUsXG4gICAgICBlbGVtZW50Q291bnQ6IDUwLFxuICAgICAgd2lkdGg6IFwiMTBweFwiLFxuICAgICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICAgIHBlcnNwZWN0aXZlOiBcIlwiLFxuICAgICAgY29sb3JzOiBbXCIjYTg2NGZkXCIsIFwiIzI5Y2RmZlwiLCBcIiM3OGZmNDRcIiwgXCIjZmY3MThkXCIsIFwiI2ZkZmY2YVwiXSxcbiAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgc3RhZ2dlcjogMCxcbiAgICAgIGRyYWdGcmljdGlvbjogMC4xLFxuICAgICAgcmFuZG9tOiBNYXRoLnJhbmRvbVxuICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIG9uQ2xpY2soKSB7XG4gICAgY29uZmV0dGkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLl9jb25maWcpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxufVxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { NgxDomConfettiComponent } from './ngx-dom-confetti.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgxDomConfettiModule {
|
|
5
|
+
}
|
|
6
|
+
NgxDomConfettiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
NgxDomConfettiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, declarations: [NgxDomConfettiComponent], exports: [NgxDomConfettiComponent] });
|
|
8
|
+
NgxDomConfettiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule });
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, decorators: [{
|
|
10
|
+
type: NgModule,
|
|
11
|
+
args: [{
|
|
12
|
+
declarations: [
|
|
13
|
+
NgxDomConfettiComponent
|
|
14
|
+
],
|
|
15
|
+
imports: [],
|
|
16
|
+
exports: [
|
|
17
|
+
NgxDomConfettiComponent
|
|
18
|
+
]
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRvbS1jb25mZXR0aS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3gtZG9tLWNvbmZldHRpL3NyYy9saWIvbmd4LWRvbS1jb25mZXR0aS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFhdkUsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQVI3Qix1QkFBdUIsYUFLdkIsdUJBQXVCO2tIQUdkLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQVZoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWix1QkFBdUI7cUJBQ3hCO29CQUNELE9BQU8sRUFBRSxFQUNSO29CQUNELE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7cUJBQ3hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neERvbUNvbmZldHRpQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtZG9tLWNvbmZldHRpLmNvbXBvbmVudCc7XG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTmd4RG9tQ29uZmV0dGlDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTmd4RG9tQ29uZmV0dGlDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hEb21Db25mZXR0aU1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NgxDomConfettiService {
|
|
4
|
+
constructor() { }
|
|
5
|
+
}
|
|
6
|
+
NgxDomConfettiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7
|
+
NgxDomConfettiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, providedIn: 'root' });
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, decorators: [{
|
|
9
|
+
type: Injectable,
|
|
10
|
+
args: [{
|
|
11
|
+
providedIn: 'root'
|
|
12
|
+
}]
|
|
13
|
+
}], ctorParameters: function () { return []; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRvbS1jb25mZXR0aS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd4LWRvbS1jb25mZXR0aS9zcmMvbGliL25neC1kb20tY29uZmV0dGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLGdCQUFnQixDQUFDOztrSEFGTixxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5neERvbUNvbmZldHRpU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRvbS1jb25mZXR0aS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL25neC1kb20tY29uZmV0dGkvc3JjL25neC1kb20tY29uZmV0dGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ngx-dom-confetti
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/confetti';
|
|
5
|
+
export * from './lib/ngx-dom-confetti.service';
|
|
6
|
+
export * from './lib/ngx-dom-confetti.component';
|
|
7
|
+
export * from './lib/ngx-dom-confetti.module';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL25neC1kb20tY29uZmV0dGkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtZG9tLWNvbmZldHRpXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbmZldHRpJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC1kb20tY29uZmV0dGkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZG9tLWNvbmZldHRpLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtZG9tLWNvbmZldHRpLm1vZHVsZSc7XG4iXX0=
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, Component, Input, HostListener, NgModule } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* License MIT, copyright Daniel Lundin 2019
|
|
6
|
+
*/
|
|
7
|
+
const defaultColors = ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"];
|
|
8
|
+
const defaultsConfettiConfig = {
|
|
9
|
+
angle: 90,
|
|
10
|
+
spread: 45,
|
|
11
|
+
startVelocity: 45,
|
|
12
|
+
elementCount: 50,
|
|
13
|
+
width: "10px",
|
|
14
|
+
height: "10px",
|
|
15
|
+
perspective: "",
|
|
16
|
+
colors: defaultColors,
|
|
17
|
+
duration: 3000,
|
|
18
|
+
stagger: 0,
|
|
19
|
+
dragFriction: 0.1,
|
|
20
|
+
random: Math.random
|
|
21
|
+
};
|
|
22
|
+
function createElements(root, elementCount, colors, width, height) {
|
|
23
|
+
return Array.from({ length: elementCount }).map((_, index) => {
|
|
24
|
+
const element = document.createElement("div");
|
|
25
|
+
const color = colors[index % colors.length];
|
|
26
|
+
element.style.backgroundColor = color;
|
|
27
|
+
element.style.width = width;
|
|
28
|
+
element.style.height = height;
|
|
29
|
+
element.style.position = "absolute";
|
|
30
|
+
element.style.willChange = "transform, opacity";
|
|
31
|
+
element.style.visibility = "hidden";
|
|
32
|
+
root.appendChild(element);
|
|
33
|
+
return element;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function randomPhysics(angle, spread, startVelocity, random) {
|
|
37
|
+
const radAngle = angle * (Math.PI / 180);
|
|
38
|
+
const radSpread = spread * (Math.PI / 180);
|
|
39
|
+
return {
|
|
40
|
+
x: 0,
|
|
41
|
+
y: 0,
|
|
42
|
+
z: 0,
|
|
43
|
+
wobble: random() * 10,
|
|
44
|
+
wobbleSpeed: 0.1 + random() * 0.1,
|
|
45
|
+
velocity: startVelocity * 0.5 + random() * startVelocity,
|
|
46
|
+
angle2D: -radAngle + (0.5 * radSpread - random() * radSpread),
|
|
47
|
+
angle3D: -(Math.PI / 4) + random() * (Math.PI / 2),
|
|
48
|
+
tiltAngle: random() * Math.PI,
|
|
49
|
+
tiltAngleSpeed: 0.1 + random() * 0.3
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function animate(root, fettis, dragFriction, decay, duration, stagger) {
|
|
53
|
+
let startTime;
|
|
54
|
+
return new Promise(resolve => {
|
|
55
|
+
function update(time) {
|
|
56
|
+
if (!startTime)
|
|
57
|
+
startTime = time;
|
|
58
|
+
const elapsed = time - startTime;
|
|
59
|
+
const progress = startTime === time ? 0 : (time - startTime) / duration;
|
|
60
|
+
fettis.slice(0, Math.ceil(elapsed / stagger)).forEach(fetti => {
|
|
61
|
+
updateFetti(fetti, progress, dragFriction, decay);
|
|
62
|
+
});
|
|
63
|
+
if (time - startTime < duration) {
|
|
64
|
+
requestAnimationFrame(update);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const fetti = fettis.find((fetti) => fetti.element.parentNode === root);
|
|
68
|
+
if (fetti) {
|
|
69
|
+
root.removeChild(fetti.element);
|
|
70
|
+
}
|
|
71
|
+
resolve();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
requestAnimationFrame(update);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function updateFetti(fetti, progress, dragFriction, decay) {
|
|
78
|
+
/* eslint-disable no-param-reassign */
|
|
79
|
+
fetti.physics.x += Math.cos(fetti.physics.angle2D) * fetti.physics.velocity;
|
|
80
|
+
fetti.physics.y += Math.sin(fetti.physics.angle2D) * fetti.physics.velocity;
|
|
81
|
+
fetti.physics.z += Math.sin(fetti.physics.angle3D) * fetti.physics.velocity;
|
|
82
|
+
fetti.physics.wobble += fetti.physics.wobbleSpeed;
|
|
83
|
+
// Backward compatibility
|
|
84
|
+
if (decay) {
|
|
85
|
+
fetti.physics.velocity *= decay;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
fetti.physics.velocity -= fetti.physics.velocity * dragFriction;
|
|
89
|
+
}
|
|
90
|
+
fetti.physics.y += 3;
|
|
91
|
+
fetti.physics.tiltAngle += fetti.physics.tiltAngleSpeed;
|
|
92
|
+
const { x, y, z, tiltAngle, wobble } = fetti.physics;
|
|
93
|
+
const wobbleX = x + 10 * Math.cos(wobble);
|
|
94
|
+
const wobbleY = y + 10 * Math.sin(wobble);
|
|
95
|
+
const transform = `translate3d(${wobbleX}px, ${wobbleY}px, ${z}px) rotate3d(1, 1, 1, ${tiltAngle}rad)`;
|
|
96
|
+
fetti.element.style.visibility = "visible";
|
|
97
|
+
fetti.element.style.transform = transform;
|
|
98
|
+
fetti.element.style.opacity = (1 - progress).toString();
|
|
99
|
+
;
|
|
100
|
+
/* eslint-enable */
|
|
101
|
+
}
|
|
102
|
+
function confetti(root, config) {
|
|
103
|
+
const { elementCount, colors, width, height, perspective, angle, spread, startVelocity, decay, dragFriction, duration, stagger, random } = Object.assign(Object.assign({}, defaultsConfettiConfig), config);
|
|
104
|
+
root.style.perspective = perspective;
|
|
105
|
+
const elements = createElements(root, elementCount !== null && elementCount !== void 0 ? elementCount : 50, colors, width, height);
|
|
106
|
+
const fettis = elements.map(element => ({
|
|
107
|
+
element,
|
|
108
|
+
physics: randomPhysics(angle, spread, startVelocity, random)
|
|
109
|
+
}));
|
|
110
|
+
return animate(root, fettis, dragFriction, decay, duration, stagger);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
class NgxDomConfettiService {
|
|
114
|
+
constructor() { }
|
|
115
|
+
}
|
|
116
|
+
NgxDomConfettiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
117
|
+
NgxDomConfettiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, providedIn: 'root' });
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, decorators: [{
|
|
119
|
+
type: Injectable,
|
|
120
|
+
args: [{
|
|
121
|
+
providedIn: 'root'
|
|
122
|
+
}]
|
|
123
|
+
}], ctorParameters: function () { return []; } });
|
|
124
|
+
|
|
125
|
+
class NgxDomConfettiComponent {
|
|
126
|
+
constructor(el) {
|
|
127
|
+
this.el = el;
|
|
128
|
+
this._config = {
|
|
129
|
+
angle: 90,
|
|
130
|
+
spread: 45,
|
|
131
|
+
startVelocity: 45,
|
|
132
|
+
elementCount: 50,
|
|
133
|
+
width: "10px",
|
|
134
|
+
height: "10px",
|
|
135
|
+
perspective: "",
|
|
136
|
+
colors: ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"],
|
|
137
|
+
duration: 3000,
|
|
138
|
+
stagger: 0,
|
|
139
|
+
dragFriction: 0.1,
|
|
140
|
+
random: Math.random
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
set config(_config) {
|
|
144
|
+
if (_config) {
|
|
145
|
+
this._config = Object.assign(this._config, _config);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
onClick() {
|
|
149
|
+
confetti(this.el.nativeElement, this._config);
|
|
150
|
+
}
|
|
151
|
+
ngOnInit() { }
|
|
152
|
+
}
|
|
153
|
+
NgxDomConfettiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
154
|
+
NgxDomConfettiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: NgxDomConfettiComponent, selector: "ngx-dom-confetti", inputs: { config: "config" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiComponent, decorators: [{
|
|
156
|
+
type: Component,
|
|
157
|
+
args: [{ selector: 'ngx-dom-confetti', template: ` <ng-content></ng-content> ` }]
|
|
158
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { config: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], onClick: [{
|
|
161
|
+
type: HostListener,
|
|
162
|
+
args: ['click']
|
|
163
|
+
}] } });
|
|
164
|
+
|
|
165
|
+
class NgxDomConfettiModule {
|
|
166
|
+
}
|
|
167
|
+
NgxDomConfettiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
168
|
+
NgxDomConfettiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, declarations: [NgxDomConfettiComponent], exports: [NgxDomConfettiComponent] });
|
|
169
|
+
NgxDomConfettiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule });
|
|
170
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, decorators: [{
|
|
171
|
+
type: NgModule,
|
|
172
|
+
args: [{
|
|
173
|
+
declarations: [
|
|
174
|
+
NgxDomConfettiComponent
|
|
175
|
+
],
|
|
176
|
+
imports: [],
|
|
177
|
+
exports: [
|
|
178
|
+
NgxDomConfettiComponent
|
|
179
|
+
]
|
|
180
|
+
}]
|
|
181
|
+
}] });
|
|
182
|
+
|
|
183
|
+
/*
|
|
184
|
+
* Public API Surface of ngx-dom-confetti
|
|
185
|
+
*/
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Generated bundle index. Do not edit.
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
export { NgxDomConfettiComponent, NgxDomConfettiModule, NgxDomConfettiService, confetti };
|
|
192
|
+
//# sourceMappingURL=ngx-dom-confetti.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-dom-confetti.mjs","sources":["../../../packages/ngx-dom-confetti/src/lib/confetti.ts","../../../packages/ngx-dom-confetti/src/lib/ngx-dom-confetti.service.ts","../../../packages/ngx-dom-confetti/src/lib/ngx-dom-confetti.component.ts","../../../packages/ngx-dom-confetti/src/lib/ngx-dom-confetti.module.ts","../../../packages/ngx-dom-confetti/src/public-api.ts","../../../packages/ngx-dom-confetti/src/ngx-dom-confetti.ts"],"sourcesContent":["/**\n * License MIT, copyright Daniel Lundin 2019\n */\n\nexport interface ConfettiConfig {\n angle: number;\n spread: number;\n width: string;\n height: string;\n perspective: string;\n duration: number;\n dragFriction: number;\n stagger: number;\n startVelocity: number;\n elementCount: number;\n decay: number;\n colors: string[];\n random: () => number;\n}\n\nconst defaultColors = [\"#a864fd\", \"#29cdff\", \"#78ff44\", \"#ff718d\", \"#fdff6a\"];\n\nconst defaultsConfettiConfig = {\n angle: 90,\n spread: 45,\n startVelocity: 45,\n elementCount: 50,\n width: \"10px\",\n height: \"10px\",\n perspective: \"\",\n colors: defaultColors,\n duration: 3000,\n stagger: 0,\n dragFriction: 0.1,\n random: Math.random\n}\n\nfunction createElements(root: HTMLElement, elementCount: number, colors: string[], width: string, height: string) {\n return Array.from({ length: elementCount }).map((_, index) => {\n const element = document.createElement(\"div\");\n const color = colors[index % colors.length];\n element.style.backgroundColor = color;\n element.style.width = width;\n element.style.height = height;\n element.style.position = \"absolute\";\n element.style.willChange = \"transform, opacity\";\n element.style.visibility = \"hidden\";\n root.appendChild(element);\n return element;\n });\n}\n\ninterface IPhysics {\n x: number;\n y: number;\n z: number;\n wobble: number;\n wobbleSpeed: number;\n velocity: number;\n angle2D: number;\n angle3D: number;\n tiltAngle: number;\n tiltAngleSpeed: number;\n}\n\ninterface IFetti {\n element: HTMLDivElement, \n physics: IPhysics\n}\n\nfunction randomPhysics(angle: number, spread: number, startVelocity: number, random: () => number): IPhysics {\n const radAngle = angle * (Math.PI / 180);\n const radSpread = spread * (Math.PI / 180);\n return {\n x: 0,\n y: 0,\n z: 0,\n wobble: random() * 10,\n wobbleSpeed: 0.1 + random() * 0.1,\n velocity: startVelocity * 0.5 + random() * startVelocity,\n angle2D: -radAngle + (0.5 * radSpread - random() * radSpread),\n angle3D: -(Math.PI / 4) + random() * (Math.PI / 2),\n tiltAngle: random() * Math.PI,\n tiltAngleSpeed: 0.1 + random() * 0.3\n };\n}\n\nfunction animate(root: HTMLElement, fettis: Array<IFetti>, dragFriction: number, decay: number, duration: number, stagger: number) {\n let startTime: number;\n\n return new Promise<void>(resolve => {\n function update(time: number) {\n if (!startTime) startTime = time;\n const elapsed = time - startTime;\n const progress = startTime === time ? 0 : (time - startTime) / duration;\n fettis.slice(0, Math.ceil(elapsed / stagger)).forEach(fetti => {\n updateFetti(fetti, progress, dragFriction, decay);\n });\n\n if (time - startTime < duration) {\n requestAnimationFrame(update);\n } else {\n const fetti = fettis.find((fetti) => fetti.element.parentNode === root);\n if (fetti) {\n root.removeChild(fetti.element);\n }\n resolve();\n }\n }\n\n requestAnimationFrame(update);\n });\n}\n\nfunction updateFetti(fetti: IFetti, progress: number, dragFriction: number, decay: number) {\n /* eslint-disable no-param-reassign */\n fetti.physics.x += Math.cos(fetti.physics.angle2D) * fetti.physics.velocity;\n fetti.physics.y += Math.sin(fetti.physics.angle2D) * fetti.physics.velocity;\n fetti.physics.z += Math.sin(fetti.physics.angle3D) * fetti.physics.velocity;\n fetti.physics.wobble += fetti.physics.wobbleSpeed;\n // Backward compatibility\n if (decay) {\n fetti.physics.velocity *= decay;\n } else {\n fetti.physics.velocity -= fetti.physics.velocity * dragFriction;\n }\n fetti.physics.y += 3;\n fetti.physics.tiltAngle += fetti.physics.tiltAngleSpeed;\n \n const { x, y, z, tiltAngle, wobble } = fetti.physics;\n const wobbleX = x + 10 * Math.cos(wobble);\n const wobbleY = y + 10 * Math.sin(wobble);\n const transform = `translate3d(${wobbleX}px, ${wobbleY}px, ${z}px) rotate3d(1, 1, 1, ${tiltAngle}rad)`;\n \n fetti.element.style.visibility = \"visible\";\n fetti.element.style.transform = transform;\n fetti.element.style.opacity = (1 - progress).toString();;\n \n /* eslint-enable */\n }\n\nexport function confetti(root: HTMLElement, config?: Partial<ConfettiConfig>): Promise<void> {\n const {\n elementCount,\n colors,\n width,\n height,\n perspective,\n angle,\n spread,\n startVelocity,\n decay,\n dragFriction,\n duration,\n stagger,\n random\n } = { ...defaultsConfettiConfig, ...config } as ConfettiConfig;\n root.style.perspective = perspective;\n const elements = createElements(root, elementCount ?? 50, colors, width, height);\n const fettis = elements.map(element => ({\n element,\n physics: randomPhysics(angle, spread, startVelocity, random)\n }));\n\n return animate(root, fettis, dragFriction, decay, duration, stagger);\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxDomConfettiService {\n\n constructor() { }\n}\n","import { Component, ElementRef, HostListener, Input, OnInit } from '@angular/core';\n\nimport { confetti, ConfettiConfig } from './confetti';\n\n@Component({\n selector: 'ngx-dom-confetti',\n template: ` <ng-content></ng-content> `,\n styles: [],\n})\nexport class NgxDomConfettiComponent implements OnInit {\n\n private _config: Partial<ConfettiConfig>;\n\n @Input()\n public set config(_config: Partial<ConfettiConfig>) {\n if (_config) {\n this._config = Object.assign(this._config, _config);\n }\n\n }\n\n constructor(private el: ElementRef) {\n this._config = {\n angle: 90,\n spread: 45,\n startVelocity: 45,\n elementCount: 50,\n width: \"10px\",\n height: \"10px\",\n perspective: \"\",\n colors: [\"#a864fd\", \"#29cdff\", \"#78ff44\", \"#ff718d\", \"#fdff6a\"],\n duration: 3000,\n stagger: 0,\n dragFriction: 0.1,\n random: Math.random\n }\n }\n\n @HostListener('click')\n onClick() {\n confetti(this.el.nativeElement, this._config);\n }\n\n ngOnInit(): void {}\n}\n","import { NgModule } from '@angular/core';\nimport { NgxDomConfettiComponent } from './ngx-dom-confetti.component';\n\n\n@NgModule({\n declarations: [\n NgxDomConfettiComponent\n ],\n imports: [\n ],\n exports: [\n NgxDomConfettiComponent\n ]\n})\nexport class NgxDomConfettiModule { }\n","/*\n * Public API Surface of ngx-dom-confetti\n */\nexport * from './lib/confetti';\nexport * from './lib/ngx-dom-confetti.service';\nexport * from './lib/ngx-dom-confetti.component';\nexport * from './lib/ngx-dom-confetti.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAAA;;AAEG;AAkBH,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE9E,MAAM,sBAAsB,GAAG;AAC3B,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,YAAY,EAAE,GAAG;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM;CACtB,CAAA;AAED,SAAS,cAAc,CAAC,IAAiB,EAAE,YAAoB,EAAE,MAAgB,EAAE,KAAa,EAAE,MAAc,EAAA;AAC5G,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;AACtC,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AAC5B,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACpC,QAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC;AAChD,QAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC1B,QAAA,OAAO,OAAO,CAAC;AACnB,KAAC,CAAC,CAAC;AACP,CAAC;AAoBD,SAAS,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,aAAqB,EAAE,MAAoB,EAAA;IAC7F,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IAC3C,OAAO;AACH,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;AACrB,QAAA,WAAW,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG;QACjC,QAAQ,EAAE,aAAa,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,aAAa;AACxD,QAAA,OAAO,EAAE,CAAC,QAAQ,IAAI,GAAG,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAC7D,QAAA,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,QAAA,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAC7B,QAAA,cAAc,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG;KACvC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,IAAiB,EAAE,MAAqB,EAAE,YAAoB,EAAE,KAAa,EAAE,QAAgB,EAAE,OAAe,EAAA;AAC7H,IAAA,IAAI,SAAiB,CAAC;AAEtB,IAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAG;QAC/B,SAAS,MAAM,CAAC,IAAY,EAAA;AACxB,YAAA,IAAI,CAAC,SAAS;gBAAE,SAAS,GAAG,IAAI,CAAC;AACjC,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AACjC,YAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,IAAI,QAAQ,CAAC;AACxE,YAAA,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;gBAC1D,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AACtD,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,IAAI,GAAG,SAAS,GAAG,QAAQ,EAAE;gBAC7B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;AACxE,gBAAA,IAAI,KAAK,EAAE;AACP,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,iBAAA;AACD,gBAAA,OAAO,EAAE,CAAC;AACb,aAAA;SACJ;QAED,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAClC,KAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,QAAgB,EAAE,YAAoB,EAAE,KAAa,EAAA;;IAErF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5E,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5E,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5E,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;;AAElD,IAAA,IAAI,KAAK,EAAE;AACT,QAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;AACjC,KAAA;AAAM,SAAA;AACL,QAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;AACjE,KAAA;AACD,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACrB,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;AAExD,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;AACrD,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,CAAA,YAAA,EAAe,OAAO,CAAA,IAAA,EAAO,OAAO,CAAA,IAAA,EAAO,CAAC,CAAA,sBAAA,EAAyB,SAAS,CAAA,IAAA,CAAM,CAAC;IAEvG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;IAC3C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;AAC1C,IAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAAA,CAAC;;AAG3D,CAAC;AAEa,SAAA,QAAQ,CAAC,IAAiB,EAAE,MAAgC,EAAA;AACxE,IAAA,MAAM,EACF,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,aAAa,EACb,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,MAAM,EACT,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,sBAAsB,CAAK,EAAA,MAAM,CAAoB,CAAC;AAC/D,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,aAAZ,YAAY,KAAA,KAAA,CAAA,GAAZ,YAAY,GAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK;QACpC,OAAO;QACP,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;AAC/D,KAAA,CAAC,CAAC,CAAC;AAEJ,IAAA,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzE;;MChKa,qBAAqB,CAAA;AAEhC,IAAA,WAAA,GAAA,GAAiB;;kHAFN,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCKY,uBAAuB,CAAA;AAYlC,IAAA,WAAA,CAAoB,EAAc,EAAA;AAAd,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAChC,IAAI,CAAC,OAAO,GAAI;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAC/D,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAA;KACA;IAvBD,IACW,MAAM,CAAC,OAAgC,EAAA;AAChD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACrD,SAAA;KAEF;IAoBD,OAAO,GAAA;QACL,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;KAC/C;AAED,IAAA,QAAQ,MAAW;;oHAlCR,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,qIAHxB,CAAA,2BAAA,CAA6B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAG5B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,YAClB,CAA6B,2BAAA,CAAA,EAAA,CAAA;iGAQ5B,MAAM,EAAA,CAAA;sBADhB,KAAK;gBA0BN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,CAAA;;;MCxBV,oBAAoB,CAAA;;iHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,YAAA,EAAA,CAR7B,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAKvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;kHAGd,oBAAoB,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,uBAAuB;AACxB,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP,uBAAuB;AACxB,qBAAA;iBACF,CAAA;;;ACbD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, Component, Input, HostListener, NgModule } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* License MIT, copyright Daniel Lundin 2019
|
|
6
|
+
*/
|
|
7
|
+
const defaultColors = ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"];
|
|
8
|
+
const defaultsConfettiConfig = {
|
|
9
|
+
angle: 90,
|
|
10
|
+
spread: 45,
|
|
11
|
+
startVelocity: 45,
|
|
12
|
+
elementCount: 50,
|
|
13
|
+
width: "10px",
|
|
14
|
+
height: "10px",
|
|
15
|
+
perspective: "",
|
|
16
|
+
colors: defaultColors,
|
|
17
|
+
duration: 3000,
|
|
18
|
+
stagger: 0,
|
|
19
|
+
dragFriction: 0.1,
|
|
20
|
+
random: Math.random
|
|
21
|
+
};
|
|
22
|
+
function createElements(root, elementCount, colors, width, height) {
|
|
23
|
+
return Array.from({ length: elementCount }).map((_, index) => {
|
|
24
|
+
const element = document.createElement("div");
|
|
25
|
+
const color = colors[index % colors.length];
|
|
26
|
+
element.style.backgroundColor = color;
|
|
27
|
+
element.style.width = width;
|
|
28
|
+
element.style.height = height;
|
|
29
|
+
element.style.position = "absolute";
|
|
30
|
+
element.style.willChange = "transform, opacity";
|
|
31
|
+
element.style.visibility = "hidden";
|
|
32
|
+
root.appendChild(element);
|
|
33
|
+
return element;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function randomPhysics(angle, spread, startVelocity, random) {
|
|
37
|
+
const radAngle = angle * (Math.PI / 180);
|
|
38
|
+
const radSpread = spread * (Math.PI / 180);
|
|
39
|
+
return {
|
|
40
|
+
x: 0,
|
|
41
|
+
y: 0,
|
|
42
|
+
z: 0,
|
|
43
|
+
wobble: random() * 10,
|
|
44
|
+
wobbleSpeed: 0.1 + random() * 0.1,
|
|
45
|
+
velocity: startVelocity * 0.5 + random() * startVelocity,
|
|
46
|
+
angle2D: -radAngle + (0.5 * radSpread - random() * radSpread),
|
|
47
|
+
angle3D: -(Math.PI / 4) + random() * (Math.PI / 2),
|
|
48
|
+
tiltAngle: random() * Math.PI,
|
|
49
|
+
tiltAngleSpeed: 0.1 + random() * 0.3
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function animate(root, fettis, dragFriction, decay, duration, stagger) {
|
|
53
|
+
let startTime;
|
|
54
|
+
return new Promise(resolve => {
|
|
55
|
+
function update(time) {
|
|
56
|
+
if (!startTime)
|
|
57
|
+
startTime = time;
|
|
58
|
+
const elapsed = time - startTime;
|
|
59
|
+
const progress = startTime === time ? 0 : (time - startTime) / duration;
|
|
60
|
+
fettis.slice(0, Math.ceil(elapsed / stagger)).forEach(fetti => {
|
|
61
|
+
updateFetti(fetti, progress, dragFriction, decay);
|
|
62
|
+
});
|
|
63
|
+
if (time - startTime < duration) {
|
|
64
|
+
requestAnimationFrame(update);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const fetti = fettis.find((fetti) => fetti.element.parentNode === root);
|
|
68
|
+
if (fetti) {
|
|
69
|
+
root.removeChild(fetti.element);
|
|
70
|
+
}
|
|
71
|
+
resolve();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
requestAnimationFrame(update);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function updateFetti(fetti, progress, dragFriction, decay) {
|
|
78
|
+
/* eslint-disable no-param-reassign */
|
|
79
|
+
fetti.physics.x += Math.cos(fetti.physics.angle2D) * fetti.physics.velocity;
|
|
80
|
+
fetti.physics.y += Math.sin(fetti.physics.angle2D) * fetti.physics.velocity;
|
|
81
|
+
fetti.physics.z += Math.sin(fetti.physics.angle3D) * fetti.physics.velocity;
|
|
82
|
+
fetti.physics.wobble += fetti.physics.wobbleSpeed;
|
|
83
|
+
// Backward compatibility
|
|
84
|
+
if (decay) {
|
|
85
|
+
fetti.physics.velocity *= decay;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
fetti.physics.velocity -= fetti.physics.velocity * dragFriction;
|
|
89
|
+
}
|
|
90
|
+
fetti.physics.y += 3;
|
|
91
|
+
fetti.physics.tiltAngle += fetti.physics.tiltAngleSpeed;
|
|
92
|
+
const { x, y, z, tiltAngle, wobble } = fetti.physics;
|
|
93
|
+
const wobbleX = x + 10 * Math.cos(wobble);
|
|
94
|
+
const wobbleY = y + 10 * Math.sin(wobble);
|
|
95
|
+
const transform = `translate3d(${wobbleX}px, ${wobbleY}px, ${z}px) rotate3d(1, 1, 1, ${tiltAngle}rad)`;
|
|
96
|
+
fetti.element.style.visibility = "visible";
|
|
97
|
+
fetti.element.style.transform = transform;
|
|
98
|
+
fetti.element.style.opacity = (1 - progress).toString();
|
|
99
|
+
;
|
|
100
|
+
/* eslint-enable */
|
|
101
|
+
}
|
|
102
|
+
function confetti(root, config) {
|
|
103
|
+
const { elementCount, colors, width, height, perspective, angle, spread, startVelocity, decay, dragFriction, duration, stagger, random } = { ...defaultsConfettiConfig, ...config };
|
|
104
|
+
root.style.perspective = perspective;
|
|
105
|
+
const elements = createElements(root, elementCount ?? 50, colors, width, height);
|
|
106
|
+
const fettis = elements.map(element => ({
|
|
107
|
+
element,
|
|
108
|
+
physics: randomPhysics(angle, spread, startVelocity, random)
|
|
109
|
+
}));
|
|
110
|
+
return animate(root, fettis, dragFriction, decay, duration, stagger);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
class NgxDomConfettiService {
|
|
114
|
+
constructor() { }
|
|
115
|
+
}
|
|
116
|
+
NgxDomConfettiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
117
|
+
NgxDomConfettiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, providedIn: 'root' });
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiService, decorators: [{
|
|
119
|
+
type: Injectable,
|
|
120
|
+
args: [{
|
|
121
|
+
providedIn: 'root'
|
|
122
|
+
}]
|
|
123
|
+
}], ctorParameters: function () { return []; } });
|
|
124
|
+
|
|
125
|
+
class NgxDomConfettiComponent {
|
|
126
|
+
constructor(el) {
|
|
127
|
+
this.el = el;
|
|
128
|
+
this._config = {
|
|
129
|
+
angle: 90,
|
|
130
|
+
spread: 45,
|
|
131
|
+
startVelocity: 45,
|
|
132
|
+
elementCount: 50,
|
|
133
|
+
width: "10px",
|
|
134
|
+
height: "10px",
|
|
135
|
+
perspective: "",
|
|
136
|
+
colors: ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"],
|
|
137
|
+
duration: 3000,
|
|
138
|
+
stagger: 0,
|
|
139
|
+
dragFriction: 0.1,
|
|
140
|
+
random: Math.random
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
set config(_config) {
|
|
144
|
+
if (_config) {
|
|
145
|
+
this._config = Object.assign(this._config, _config);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
onClick() {
|
|
149
|
+
confetti(this.el.nativeElement, this._config);
|
|
150
|
+
}
|
|
151
|
+
ngOnInit() { }
|
|
152
|
+
}
|
|
153
|
+
NgxDomConfettiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
154
|
+
NgxDomConfettiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: NgxDomConfettiComponent, selector: "ngx-dom-confetti", inputs: { config: "config" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiComponent, decorators: [{
|
|
156
|
+
type: Component,
|
|
157
|
+
args: [{ selector: 'ngx-dom-confetti', template: ` <ng-content></ng-content> ` }]
|
|
158
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { config: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], onClick: [{
|
|
161
|
+
type: HostListener,
|
|
162
|
+
args: ['click']
|
|
163
|
+
}] } });
|
|
164
|
+
|
|
165
|
+
class NgxDomConfettiModule {
|
|
166
|
+
}
|
|
167
|
+
NgxDomConfettiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
168
|
+
NgxDomConfettiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, declarations: [NgxDomConfettiComponent], exports: [NgxDomConfettiComponent] });
|
|
169
|
+
NgxDomConfettiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule });
|
|
170
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: NgxDomConfettiModule, decorators: [{
|
|
171
|
+
type: NgModule,
|
|
172
|
+
args: [{
|
|
173
|
+
declarations: [
|
|
174
|
+
NgxDomConfettiComponent
|
|
175
|
+
],
|
|
176
|
+
imports: [],
|
|
177
|
+
exports: [
|
|
178
|
+
NgxDomConfettiComponent
|
|
179
|
+
]
|
|
180
|
+
}]
|
|
181
|
+
}] });
|
|
182
|
+
|
|
183
|
+
/*
|
|
184
|
+
* Public API Surface of ngx-dom-confetti
|
|
185
|
+
*/
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Generated bundle index. Do not edit.
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
export { NgxDomConfettiComponent, NgxDomConfettiModule, NgxDomConfettiService, confetti };
|
|
192
|
+
//# sourceMappingURL=ngx-dom-confetti.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-dom-confetti.mjs","sources":["../../../packages/ngx-dom-confetti/src/lib/confetti.ts","../../../packages/ngx-dom-confetti/src/lib/ngx-dom-confetti.service.ts","../../../packages/ngx-dom-confetti/src/lib/ngx-dom-confetti.component.ts","../../../packages/ngx-dom-confetti/src/lib/ngx-dom-confetti.module.ts","../../../packages/ngx-dom-confetti/src/public-api.ts","../../../packages/ngx-dom-confetti/src/ngx-dom-confetti.ts"],"sourcesContent":["/**\n * License MIT, copyright Daniel Lundin 2019\n */\n\nexport interface ConfettiConfig {\n angle: number;\n spread: number;\n width: string;\n height: string;\n perspective: string;\n duration: number;\n dragFriction: number;\n stagger: number;\n startVelocity: number;\n elementCount: number;\n decay: number;\n colors: string[];\n random: () => number;\n}\n\nconst defaultColors = [\"#a864fd\", \"#29cdff\", \"#78ff44\", \"#ff718d\", \"#fdff6a\"];\n\nconst defaultsConfettiConfig = {\n angle: 90,\n spread: 45,\n startVelocity: 45,\n elementCount: 50,\n width: \"10px\",\n height: \"10px\",\n perspective: \"\",\n colors: defaultColors,\n duration: 3000,\n stagger: 0,\n dragFriction: 0.1,\n random: Math.random\n}\n\nfunction createElements(root: HTMLElement, elementCount: number, colors: string[], width: string, height: string) {\n return Array.from({ length: elementCount }).map((_, index) => {\n const element = document.createElement(\"div\");\n const color = colors[index % colors.length];\n element.style.backgroundColor = color;\n element.style.width = width;\n element.style.height = height;\n element.style.position = \"absolute\";\n element.style.willChange = \"transform, opacity\";\n element.style.visibility = \"hidden\";\n root.appendChild(element);\n return element;\n });\n}\n\ninterface IPhysics {\n x: number;\n y: number;\n z: number;\n wobble: number;\n wobbleSpeed: number;\n velocity: number;\n angle2D: number;\n angle3D: number;\n tiltAngle: number;\n tiltAngleSpeed: number;\n}\n\ninterface IFetti {\n element: HTMLDivElement, \n physics: IPhysics\n}\n\nfunction randomPhysics(angle: number, spread: number, startVelocity: number, random: () => number): IPhysics {\n const radAngle = angle * (Math.PI / 180);\n const radSpread = spread * (Math.PI / 180);\n return {\n x: 0,\n y: 0,\n z: 0,\n wobble: random() * 10,\n wobbleSpeed: 0.1 + random() * 0.1,\n velocity: startVelocity * 0.5 + random() * startVelocity,\n angle2D: -radAngle + (0.5 * radSpread - random() * radSpread),\n angle3D: -(Math.PI / 4) + random() * (Math.PI / 2),\n tiltAngle: random() * Math.PI,\n tiltAngleSpeed: 0.1 + random() * 0.3\n };\n}\n\nfunction animate(root: HTMLElement, fettis: Array<IFetti>, dragFriction: number, decay: number, duration: number, stagger: number) {\n let startTime: number;\n\n return new Promise<void>(resolve => {\n function update(time: number) {\n if (!startTime) startTime = time;\n const elapsed = time - startTime;\n const progress = startTime === time ? 0 : (time - startTime) / duration;\n fettis.slice(0, Math.ceil(elapsed / stagger)).forEach(fetti => {\n updateFetti(fetti, progress, dragFriction, decay);\n });\n\n if (time - startTime < duration) {\n requestAnimationFrame(update);\n } else {\n const fetti = fettis.find((fetti) => fetti.element.parentNode === root);\n if (fetti) {\n root.removeChild(fetti.element);\n }\n resolve();\n }\n }\n\n requestAnimationFrame(update);\n });\n}\n\nfunction updateFetti(fetti: IFetti, progress: number, dragFriction: number, decay: number) {\n /* eslint-disable no-param-reassign */\n fetti.physics.x += Math.cos(fetti.physics.angle2D) * fetti.physics.velocity;\n fetti.physics.y += Math.sin(fetti.physics.angle2D) * fetti.physics.velocity;\n fetti.physics.z += Math.sin(fetti.physics.angle3D) * fetti.physics.velocity;\n fetti.physics.wobble += fetti.physics.wobbleSpeed;\n // Backward compatibility\n if (decay) {\n fetti.physics.velocity *= decay;\n } else {\n fetti.physics.velocity -= fetti.physics.velocity * dragFriction;\n }\n fetti.physics.y += 3;\n fetti.physics.tiltAngle += fetti.physics.tiltAngleSpeed;\n \n const { x, y, z, tiltAngle, wobble } = fetti.physics;\n const wobbleX = x + 10 * Math.cos(wobble);\n const wobbleY = y + 10 * Math.sin(wobble);\n const transform = `translate3d(${wobbleX}px, ${wobbleY}px, ${z}px) rotate3d(1, 1, 1, ${tiltAngle}rad)`;\n \n fetti.element.style.visibility = \"visible\";\n fetti.element.style.transform = transform;\n fetti.element.style.opacity = (1 - progress).toString();;\n \n /* eslint-enable */\n }\n\nexport function confetti(root: HTMLElement, config?: Partial<ConfettiConfig>): Promise<void> {\n const {\n elementCount,\n colors,\n width,\n height,\n perspective,\n angle,\n spread,\n startVelocity,\n decay,\n dragFriction,\n duration,\n stagger,\n random\n } = { ...defaultsConfettiConfig, ...config } as ConfettiConfig;\n root.style.perspective = perspective;\n const elements = createElements(root, elementCount ?? 50, colors, width, height);\n const fettis = elements.map(element => ({\n element,\n physics: randomPhysics(angle, spread, startVelocity, random)\n }));\n\n return animate(root, fettis, dragFriction, decay, duration, stagger);\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxDomConfettiService {\n\n constructor() { }\n}\n","import { Component, ElementRef, HostListener, Input, OnInit } from '@angular/core';\n\nimport { confetti, ConfettiConfig } from './confetti';\n\n@Component({\n selector: 'ngx-dom-confetti',\n template: ` <ng-content></ng-content> `,\n styles: [],\n})\nexport class NgxDomConfettiComponent implements OnInit {\n\n private _config: Partial<ConfettiConfig>;\n\n @Input()\n public set config(_config: Partial<ConfettiConfig>) {\n if (_config) {\n this._config = Object.assign(this._config, _config);\n }\n\n }\n\n constructor(private el: ElementRef) {\n this._config = {\n angle: 90,\n spread: 45,\n startVelocity: 45,\n elementCount: 50,\n width: \"10px\",\n height: \"10px\",\n perspective: \"\",\n colors: [\"#a864fd\", \"#29cdff\", \"#78ff44\", \"#ff718d\", \"#fdff6a\"],\n duration: 3000,\n stagger: 0,\n dragFriction: 0.1,\n random: Math.random\n }\n }\n\n @HostListener('click')\n onClick() {\n confetti(this.el.nativeElement, this._config);\n }\n\n ngOnInit(): void {}\n}\n","import { NgModule } from '@angular/core';\nimport { NgxDomConfettiComponent } from './ngx-dom-confetti.component';\n\n\n@NgModule({\n declarations: [\n NgxDomConfettiComponent\n ],\n imports: [\n ],\n exports: [\n NgxDomConfettiComponent\n ]\n})\nexport class NgxDomConfettiModule { }\n","/*\n * Public API Surface of ngx-dom-confetti\n */\nexport * from './lib/confetti';\nexport * from './lib/ngx-dom-confetti.service';\nexport * from './lib/ngx-dom-confetti.component';\nexport * from './lib/ngx-dom-confetti.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License MIT, copyright Daniel Lundin 2019
|
|
3
|
+
*/
|
|
4
|
+
export interface ConfettiConfig {
|
|
5
|
+
angle: number;
|
|
6
|
+
spread: number;
|
|
7
|
+
width: string;
|
|
8
|
+
height: string;
|
|
9
|
+
perspective: string;
|
|
10
|
+
duration: number;
|
|
11
|
+
dragFriction: number;
|
|
12
|
+
stagger: number;
|
|
13
|
+
startVelocity: number;
|
|
14
|
+
elementCount: number;
|
|
15
|
+
decay: number;
|
|
16
|
+
colors: string[];
|
|
17
|
+
random: () => number;
|
|
18
|
+
}
|
|
19
|
+
export declare function confetti(root: HTMLElement, config?: Partial<ConfettiConfig>): Promise<void>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ElementRef, OnInit } from '@angular/core';
|
|
2
|
+
import { ConfettiConfig } from './confetti';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgxDomConfettiComponent implements OnInit {
|
|
5
|
+
private el;
|
|
6
|
+
private _config;
|
|
7
|
+
set config(_config: Partial<ConfettiConfig>);
|
|
8
|
+
constructor(el: ElementRef);
|
|
9
|
+
onClick(): void;
|
|
10
|
+
ngOnInit(): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxDomConfettiComponent, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxDomConfettiComponent, "ngx-dom-confetti", never, { "config": "config"; }, {}, never, ["*"], false>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./ngx-dom-confetti.component";
|
|
3
|
+
export declare class NgxDomConfettiModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxDomConfettiModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxDomConfettiModule, [typeof i1.NgxDomConfettiComponent], never, [typeof i1.NgxDomConfettiComponent]>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<NgxDomConfettiModule>;
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ngx-dom-confetti",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/common": "^13.2.0",
|
|
7
|
+
"@angular/core": "^13.2.0"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"tslib": "^2.3.0"
|
|
11
|
+
},
|
|
12
|
+
"module": "fesm2015/ngx-dom-confetti.mjs",
|
|
13
|
+
"es2020": "fesm2020/ngx-dom-confetti.mjs",
|
|
14
|
+
"esm2020": "esm2020/ngx-dom-confetti.mjs",
|
|
15
|
+
"fesm2020": "fesm2020/ngx-dom-confetti.mjs",
|
|
16
|
+
"fesm2015": "fesm2015/ngx-dom-confetti.mjs",
|
|
17
|
+
"typings": "index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
"./package.json": {
|
|
20
|
+
"default": "./package.json"
|
|
21
|
+
},
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./index.d.ts",
|
|
24
|
+
"esm2020": "./esm2020/ngx-dom-confetti.mjs",
|
|
25
|
+
"es2020": "./fesm2020/ngx-dom-confetti.mjs",
|
|
26
|
+
"es2015": "./fesm2015/ngx-dom-confetti.mjs",
|
|
27
|
+
"node": "./fesm2015/ngx-dom-confetti.mjs",
|
|
28
|
+
"default": "./fesm2020/ngx-dom-confetti.mjs"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"sideEffects": false
|
|
32
|
+
}
|
package/public-api.d.ts
ADDED