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 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":"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"}
@@ -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,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ngx-dom-confetti" />
5
+ export * from './public-api';
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class NgxDomConfettiService {
3
+ constructor();
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxDomConfettiService, never>;
5
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgxDomConfettiService>;
6
+ }
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
+ }
@@ -0,0 +1,4 @@
1
+ export * from './lib/confetti';
2
+ export * from './lib/ngx-dom-confetti.service';
3
+ export * from './lib/ngx-dom-confetti.component';
4
+ export * from './lib/ngx-dom-confetti.module';