@tsparticles/angular 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.npmignore ADDED
@@ -0,0 +1,2 @@
1
+ # Nested package.json's are only needed for development.
2
+ **/package.json
package/README.md ADDED
@@ -0,0 +1,171 @@
1
+ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org)
2
+
3
+ # @tsparticles/angular
4
+
5
+ [![npm](https://img.shields.io/npm/v/@tsparticles/angular)](https://www.npmjs.com/package/ng-particles) [![npm](https://img.shields.io/npm/dm/@tsparticles/angular)](https://www.npmjs.com/package/@tsparticles/angular) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni)
6
+
7
+ Official [tsParticles](https://github.com/matteobruni/tsparticles) Angular component
8
+
9
+ [![Slack](https://particles.js.org/images/slack.png)](https://join.slack.com/t/tsparticles/shared_invite/enQtOTcxNTQxNjQ4NzkxLWE2MTZhZWExMWRmOWI5MTMxNjczOGE1Yjk0MjViYjdkYTUzODM3OTc5MGQ5MjFlODc4MzE0N2Q1OWQxZDc1YzI) [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles)
10
+
11
+ [![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") <a href="https://www.buymeacoffee.com/matteobruni"><img src="https://img.buymeacoffee.com/button-api/?text=Buy me a beer&emoji=🍺&slug=matteobruni&button_colour=5F7FFF&font_colour=ffffff&font_family=Arial&outline_colour=000000&coffee_colour=FFDD00"></a>
12
+
13
+ ## How to use it
14
+
15
+ ### Install
16
+
17
+ ```shell
18
+ $ npm install @tsparticles/angular @tsparticles/engine
19
+ ```
20
+
21
+ or
22
+
23
+ ```shell
24
+ $ yarn add @tsparticles/angular @tsparticles/engine
25
+ ```
26
+
27
+ ### Usage
28
+
29
+ _template.html_
30
+
31
+ ```html
32
+ <ngx-particles [id]="id" [options]="particlesOptions" (particlesLoaded)="particlesLoaded($event)"></ngx-particles>
33
+
34
+ <!-- or -->
35
+
36
+ <ngx-particles [id]="id" [url]="particlesUrl" (particlesLoaded)="particlesLoaded($event)"></ngx-particles>
37
+ ```
38
+
39
+ _app.ts_
40
+
41
+ ```typescript
42
+ import { MoveDirection, ClickMode, HoverMode, OutMode } from "@tsparticles/engine";
43
+ //import { loadFull } from "tsparticles"; // if you are going to use `loadFull`, install the "tsparticles" package too.
44
+ import { loadSlim } from "@tsparticles/slim"; // if you are going to use `loadSlim`, install the "@tsparticles/slim" package too.
45
+ import { NgParticlesService } from "@tsparticles/angular";
46
+
47
+ export class AppComponent {
48
+ id = "tsparticles";
49
+
50
+ /* Starting from 1.19.0 you can use a remote url (AJAX request) to a JSON with the configuration */
51
+ particlesUrl = "http://foo.bar/particles.json";
52
+
53
+ /* or the classic JavaScript object */
54
+ particlesOptions = {
55
+ background: {
56
+ color: {
57
+ value: "#0d47a1",
58
+ },
59
+ },
60
+ fpsLimit: 120,
61
+ interactivity: {
62
+ events: {
63
+ onClick: {
64
+ enable: true,
65
+ mode: ClickMode.push,
66
+ },
67
+ onHover: {
68
+ enable: true,
69
+ mode: HoverMode.repulse,
70
+ },
71
+ resize: true,
72
+ },
73
+ modes: {
74
+ push: {
75
+ quantity: 4,
76
+ },
77
+ repulse: {
78
+ distance: 200,
79
+ duration: 0.4,
80
+ },
81
+ },
82
+ },
83
+ particles: {
84
+ color: {
85
+ value: "#ffffff",
86
+ },
87
+ links: {
88
+ color: "#ffffff",
89
+ distance: 150,
90
+ enable: true,
91
+ opacity: 0.5,
92
+ width: 1,
93
+ },
94
+ move: {
95
+ direction: MoveDirection.none,
96
+ enable: true,
97
+ outModes: {
98
+ default: OutMode.bounce,
99
+ },
100
+ random: false,
101
+ speed: 6,
102
+ straight: false,
103
+ },
104
+ number: {
105
+ density: {
106
+ enable: true,
107
+ area: 800,
108
+ },
109
+ value: 80,
110
+ },
111
+ opacity: {
112
+ value: 0.5,
113
+ },
114
+ shape: {
115
+ type: "circle",
116
+ },
117
+ size: {
118
+ value: { min: 1, max: 5 },
119
+ },
120
+ },
121
+ detectRetina: true,
122
+ };
123
+
124
+ constructor(private readonly ngParticlesService: NgParticlesService) {}
125
+
126
+ ngOnInit(): void {
127
+ this.ngParticlesService.init(async () => {
128
+ console.log(engine);
129
+
130
+ // Starting from 1.19.0 you can add custom presets or shape here, using the current tsParticles instance (main)
131
+ // this loads the tsparticles package bundle, it's the easiest method for getting everything ready
132
+ // starting from v2 you can add only the features you need reducing the bundle size
133
+ //await loadFull(engine);
134
+ await loadSlim(engine);
135
+ });
136
+ }
137
+
138
+ particlesLoaded(container: Container): void {
139
+ console.log(container);
140
+ }
141
+ }
142
+ ```
143
+
144
+ _app.module.ts_
145
+
146
+ ```typescript
147
+ import { NgxParticlesModule } from "@tsparticles/angular";
148
+ import { NgModule } from "@angular/core";
149
+
150
+ @NgModule({
151
+ declarations: [
152
+ /* AppComponent */
153
+ ],
154
+ imports: [/* other imports */ NgxParticlesModule /* NgxParticlesModule is required*/],
155
+ providers: [],
156
+ bootstrap: [
157
+ /* AppComponent */
158
+ ],
159
+ })
160
+ export class AppModule {}
161
+ ```
162
+
163
+ ## Demos
164
+
165
+ The demo website is [here](https://particles.js.org)
166
+
167
+ <https://particles.js.org>
168
+
169
+ There's also a CodePen collection actively maintained and updated [here](https://codepen.io/collection/DPOage)
170
+
171
+ <https://codepen.io/collection/DPOage>
@@ -0,0 +1,74 @@
1
+ import { Component, EventEmitter, Inject, Input, Output, PLATFORM_ID, } from '@angular/core';
2
+ import { isPlatformServer } from '@angular/common';
3
+ import { from, mergeMap, Subject, takeUntil } from 'rxjs';
4
+ import { tsParticles } from '@tsparticles/engine';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./ng-particles.service";
7
+ export class NgxParticlesComponent {
8
+ platformId;
9
+ particlesService;
10
+ options;
11
+ url;
12
+ id;
13
+ particlesInit;
14
+ particlesLoaded = new EventEmitter();
15
+ subscription;
16
+ destroy$ = new Subject();
17
+ container;
18
+ constructor(platformId, particlesService) {
19
+ this.platformId = platformId;
20
+ this.particlesService = particlesService;
21
+ this.id = 'tsparticles';
22
+ }
23
+ ngOnInit() {
24
+ this.subscription = this.particlesService.getInstallationStatus().subscribe(() => {
25
+ this.container?.destroy();
26
+ this.loadParticles();
27
+ });
28
+ }
29
+ ngAfterViewInit() {
30
+ if (isPlatformServer(this.platformId)) {
31
+ return;
32
+ }
33
+ this.loadParticles();
34
+ }
35
+ ngOnDestroy() {
36
+ this.container?.destroy();
37
+ this.subscription?.unsubscribe();
38
+ this.destroy$.next();
39
+ }
40
+ loadParticles() {
41
+ const cb = (container) => {
42
+ this.container = container;
43
+ this.particlesLoaded.emit(container);
44
+ };
45
+ from(this.particlesInit ? this.particlesInit(tsParticles) : Promise.resolve())
46
+ .pipe(mergeMap(() => {
47
+ return tsParticles.load({ id: this.id, url: this.url, options: this.options });
48
+ }), takeUntil(this.destroy$))
49
+ .subscribe(cb);
50
+ }
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesComponent, deps: [{ token: PLATFORM_ID }, { token: i1.NgParticlesService }], target: i0.ɵɵFactoryTarget.Component });
52
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: NgxParticlesComponent, selector: "ngx-particles", inputs: { options: "options", url: "url", id: "id", particlesInit: "particlesInit" }, outputs: { particlesLoaded: "particlesLoaded" }, ngImport: i0, template: '<div [id]="id"></div>', isInline: true });
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesComponent, decorators: [{
55
+ type: Component,
56
+ args: [{
57
+ selector: 'ngx-particles',
58
+ template: '<div [id]="id"></div>',
59
+ }]
60
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
61
+ type: Inject,
62
+ args: [PLATFORM_ID]
63
+ }] }, { type: i1.NgParticlesService }], propDecorators: { options: [{
64
+ type: Input
65
+ }], url: [{
66
+ type: Input
67
+ }], id: [{
68
+ type: Input
69
+ }], particlesInit: [{
70
+ type: Input
71
+ }], particlesLoaded: [{
72
+ type: Output
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGFydGljbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBhcnRpY2xlcy9zcmMvbGliL25nLXBhcnRpY2xlcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBU2xELE1BQU0sT0FBTyxxQkFBcUI7SUFZSztJQUNkO0lBWlosT0FBTyxDQUFtQjtJQUMxQixHQUFHLENBQVU7SUFDYixFQUFFLENBQVM7SUFDWCxhQUFhLENBQXFDO0lBQ2pELGVBQWUsR0FBNEIsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUUzRSxZQUFZLENBQWdCO0lBQzVCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9CLFNBQVMsQ0FBYTtJQUU5QixZQUNtQyxVQUFrQixFQUNoQyxnQkFBb0M7UUFEdEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBRXJELElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN6RSxJQUFJLENBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUMzQjthQUNBLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO3VHQXJEUSxxQkFBcUIsa0JBWWxCLFdBQVc7MkZBWmQscUJBQXFCLDRMQUZwQix1QkFBdUI7OzJGQUV4QixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSx1QkFBdUI7aUJBQ3BDOzswQkFhUSxNQUFNOzJCQUFDLFdBQVc7MEVBWGQsT0FBTztzQkFBZixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZnJvbSwgbWVyZ2VNYXAsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0c1BhcnRpY2xlcyB9IGZyb20gJ0B0c3BhcnRpY2xlcy9lbmdpbmUnO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXIsIEVuZ2luZSB9IGZyb20gJ0B0c3BhcnRpY2xlcy9lbmdpbmUnO1xuaW1wb3J0IHsgSVBhcnRpY2xlc1Byb3BzIH0gZnJvbSAnLi9uZy1wYXJ0aWNsZXMubW9kdWxlJztcbmltcG9ydCB7IE5nUGFydGljbGVzU2VydmljZSB9IGZyb20gJy4vbmctcGFydGljbGVzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1wYXJ0aWNsZXMnLFxuICAgIHRlbXBsYXRlOiAnPGRpdiBbaWRdPVwiaWRcIj48L2Rpdj4nLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hQYXJ0aWNsZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgb3B0aW9ucz86IElQYXJ0aWNsZXNQcm9wcztcbiAgICBASW5wdXQoKSB1cmw/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwYXJ0aWNsZXNJbml0PzogKGVuZ2luZTogRW5naW5lKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIEBPdXRwdXQoKSBwYXJ0aWNsZXNMb2FkZWQ6IEV2ZW50RW1pdHRlcjxDb250YWluZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb250YWluZXI+KCk7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGNvbnRhaW5lcj86IENvbnRhaW5lcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcm90ZWN0ZWQgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBhcnRpY2xlc1NlcnZpY2U6IE5nUGFydGljbGVzU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5pZCA9ICd0c3BhcnRpY2xlcyc7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucGFydGljbGVzU2VydmljZS5nZXRJbnN0YWxsYXRpb25TdGF0dXMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFBhcnRpY2xlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRQYXJ0aWNsZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyPy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRQYXJ0aWNsZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNiID0gKGNvbnRhaW5lcj86IENvbnRhaW5lcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLnBhcnRpY2xlc0xvYWRlZC5lbWl0KGNvbnRhaW5lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnJvbSh0aGlzLnBhcnRpY2xlc0luaXQgPyB0aGlzLnBhcnRpY2xlc0luaXQodHNQYXJ0aWNsZXMpIDogUHJvbWlzZS5yZXNvbHZlKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0c1BhcnRpY2xlcy5sb2FkKHsgaWQ6IHRoaXMuaWQsIHVybDogdGhpcy51cmwsIG9wdGlvbnM6IHRoaXMub3B0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGNiKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { NgxParticlesComponent } from './ng-particles.component';
3
+ import { NgParticlesService } from './ng-particles.service';
4
+ import * as i0 from "@angular/core";
5
+ export class NgxParticlesModule {
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, declarations: [NgxParticlesComponent], exports: [NgxParticlesComponent] });
8
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, providers: [NgParticlesService] });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ declarations: [NgxParticlesComponent],
14
+ exports: [NgxParticlesComponent],
15
+ providers: [NgParticlesService],
16
+ }]
17
+ }] });
18
+ export { NgParticlesService };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGFydGljbGVzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBhcnRpY2xlcy9zcmMvbGliL25nLXBhcnRpY2xlcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFPNUQsTUFBTSxPQUFPLGtCQUFrQjt1R0FBbEIsa0JBQWtCO3dHQUFsQixrQkFBa0IsaUJBSloscUJBQXFCLGFBQzFCLHFCQUFxQjt3R0FHdEIsa0JBQWtCLGFBRmhCLENBQUMsa0JBQWtCLENBQUM7OzJGQUV0QixrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDbEM7O0FBSUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4UGFydGljbGVzQ29tcG9uZW50IH0gZnJvbSAnLi9uZy1wYXJ0aWNsZXMuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgSVNvdXJjZU9wdGlvbnMgfSBmcm9tICdAdHNwYXJ0aWNsZXMvZW5naW5lJztcbmltcG9ydCB7IE5nUGFydGljbGVzU2VydmljZSB9IGZyb20gJy4vbmctcGFydGljbGVzLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW05neFBhcnRpY2xlc0NvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW05neFBhcnRpY2xlc0NvbXBvbmVudF0sXG4gICAgcHJvdmlkZXJzOiBbTmdQYXJ0aWNsZXNTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4UGFydGljbGVzTW9kdWxlIHt9XG5cbmV4cG9ydCB0eXBlIElQYXJ0aWNsZXNQcm9wcyA9IElTb3VyY2VPcHRpb25zO1xuZXhwb3J0IHsgTmdQYXJ0aWNsZXNTZXJ2aWNlIH07XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { tsParticles } from '@tsparticles/engine';
4
+ import * as i0 from "@angular/core";
5
+ export class NgParticlesService {
6
+ initialized = new BehaviorSubject(false);
7
+ getInstallationStatus() {
8
+ return this.initialized.asObservable();
9
+ }
10
+ async init(particlesInit) {
11
+ await particlesInit(tsParticles);
12
+ this.initialized.next(true);
13
+ }
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgParticlesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgParticlesService, providedIn: 'root' });
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgParticlesService, decorators: [{
18
+ type: Injectable,
19
+ args: [{
20
+ providedIn: 'root',
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGFydGljbGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wYXJ0aWNsZXMvc3JjL2xpYi9uZy1wYXJ0aWNsZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFVLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUsxRCxNQUFNLE9BQU8sa0JBQWtCO0lBQ25CLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUxRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWdEO1FBQ3ZELE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7dUdBWFEsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FGZixNQUFNOzsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbmdpbmUsIHRzUGFydGljbGVzIH0gZnJvbSAnQHRzcGFydGljbGVzL2VuZ2luZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5nUGFydGljbGVzU2VydmljZSB7XG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgZ2V0SW5zdGFsbGF0aW9uU3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KHBhcnRpY2xlc0luaXQ6IChlbmdpbmU6IEVuZ2luZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBhd2FpdCBwYXJ0aWNsZXNJbml0KHRzUGFydGljbGVzKTtcblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkLm5leHQodHJ1ZSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of ng-particles
3
+ */
4
+ export * from './lib/ng-particles.component';
5
+ export * from './lib/ng-particles.module';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXBhcnRpY2xlcy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbmctcGFydGljbGVzXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctcGFydGljbGVzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZy1wYXJ0aWNsZXMubW9kdWxlJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNwYXJ0aWNsZXMtYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXBhcnRpY2xlcy9zcmMvdHNwYXJ0aWNsZXMtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,117 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, PLATFORM_ID, Component, Inject, Input, Output, NgModule } from '@angular/core';
3
+ import { isPlatformServer } from '@angular/common';
4
+ import { BehaviorSubject, Subject, mergeMap, takeUntil, from } from 'rxjs';
5
+ import { tsParticles } from '@tsparticles/engine';
6
+
7
+ class NgParticlesService {
8
+ initialized = new BehaviorSubject(false);
9
+ getInstallationStatus() {
10
+ return this.initialized.asObservable();
11
+ }
12
+ async init(particlesInit) {
13
+ await particlesInit(tsParticles);
14
+ this.initialized.next(true);
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgParticlesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgParticlesService, providedIn: 'root' });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgParticlesService, decorators: [{
20
+ type: Injectable,
21
+ args: [{
22
+ providedIn: 'root',
23
+ }]
24
+ }] });
25
+
26
+ class NgxParticlesComponent {
27
+ platformId;
28
+ particlesService;
29
+ options;
30
+ url;
31
+ id;
32
+ particlesInit;
33
+ particlesLoaded = new EventEmitter();
34
+ subscription;
35
+ destroy$ = new Subject();
36
+ container;
37
+ constructor(platformId, particlesService) {
38
+ this.platformId = platformId;
39
+ this.particlesService = particlesService;
40
+ this.id = 'tsparticles';
41
+ }
42
+ ngOnInit() {
43
+ this.subscription = this.particlesService.getInstallationStatus().subscribe(() => {
44
+ this.container?.destroy();
45
+ this.loadParticles();
46
+ });
47
+ }
48
+ ngAfterViewInit() {
49
+ if (isPlatformServer(this.platformId)) {
50
+ return;
51
+ }
52
+ this.loadParticles();
53
+ }
54
+ ngOnDestroy() {
55
+ this.container?.destroy();
56
+ this.subscription?.unsubscribe();
57
+ this.destroy$.next();
58
+ }
59
+ loadParticles() {
60
+ const cb = (container) => {
61
+ this.container = container;
62
+ this.particlesLoaded.emit(container);
63
+ };
64
+ from(this.particlesInit ? this.particlesInit(tsParticles) : Promise.resolve())
65
+ .pipe(mergeMap(() => {
66
+ return tsParticles.load({ id: this.id, url: this.url, options: this.options });
67
+ }), takeUntil(this.destroy$))
68
+ .subscribe(cb);
69
+ }
70
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesComponent, deps: [{ token: PLATFORM_ID }, { token: NgParticlesService }], target: i0.ɵɵFactoryTarget.Component });
71
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: NgxParticlesComponent, selector: "ngx-particles", inputs: { options: "options", url: "url", id: "id", particlesInit: "particlesInit" }, outputs: { particlesLoaded: "particlesLoaded" }, ngImport: i0, template: '<div [id]="id"></div>', isInline: true });
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesComponent, decorators: [{
74
+ type: Component,
75
+ args: [{
76
+ selector: 'ngx-particles',
77
+ template: '<div [id]="id"></div>',
78
+ }]
79
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
80
+ type: Inject,
81
+ args: [PLATFORM_ID]
82
+ }] }, { type: NgParticlesService }], propDecorators: { options: [{
83
+ type: Input
84
+ }], url: [{
85
+ type: Input
86
+ }], id: [{
87
+ type: Input
88
+ }], particlesInit: [{
89
+ type: Input
90
+ }], particlesLoaded: [{
91
+ type: Output
92
+ }] } });
93
+
94
+ class NgxParticlesModule {
95
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
96
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, declarations: [NgxParticlesComponent], exports: [NgxParticlesComponent] });
97
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, providers: [NgParticlesService] });
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxParticlesModule, decorators: [{
100
+ type: NgModule,
101
+ args: [{
102
+ declarations: [NgxParticlesComponent],
103
+ exports: [NgxParticlesComponent],
104
+ providers: [NgParticlesService],
105
+ }]
106
+ }] });
107
+
108
+ /*
109
+ * Public API Surface of ng-particles
110
+ */
111
+
112
+ /**
113
+ * Generated bundle index. Do not edit.
114
+ */
115
+
116
+ export { NgParticlesService, NgxParticlesComponent, NgxParticlesModule };
117
+ //# sourceMappingURL=tsparticles-angular.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsparticles-angular.mjs","sources":["../../../projects/ng-particles/src/lib/ng-particles.service.ts","../../../projects/ng-particles/src/lib/ng-particles.component.ts","../../../projects/ng-particles/src/lib/ng-particles.module.ts","../../../projects/ng-particles/src/public-api.ts","../../../projects/ng-particles/src/tsparticles-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Engine, tsParticles } from '@tsparticles/engine';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgParticlesService {\n private initialized = new BehaviorSubject<boolean>(false);\n\n getInstallationStatus() {\n return this.initialized.asObservable();\n }\n\n async init(particlesInit: (engine: Engine) => Promise<void>) {\n await particlesInit(tsParticles);\n\n this.initialized.next(true);\n }\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { from, mergeMap, Subject, Subscription, takeUntil } from 'rxjs';\nimport { tsParticles } from '@tsparticles/engine';\nimport type { Container, Engine } from '@tsparticles/engine';\nimport { IParticlesProps } from './ng-particles.module';\nimport { NgParticlesService } from './ng-particles.service';\n\n@Component({\n selector: 'ngx-particles',\n template: '<div [id]=\"id\"></div>',\n})\nexport class NgxParticlesComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() options?: IParticlesProps;\n @Input() url?: string;\n @Input() id: string;\n @Input() particlesInit?: (engine: Engine) => Promise<void>;\n @Output() particlesLoaded: EventEmitter<Container> = new EventEmitter<Container>();\n\n private subscription?: Subscription;\n private destroy$ = new Subject<void>();\n private container?: Container;\n\n constructor(\n @Inject(PLATFORM_ID) protected platformId: string,\n private readonly particlesService: NgParticlesService,\n ) {\n this.id = 'tsparticles';\n }\n\n public ngOnInit() {\n this.subscription = this.particlesService.getInstallationStatus().subscribe(() => {\n this.container?.destroy();\n this.loadParticles();\n });\n }\n\n public ngAfterViewInit(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.loadParticles();\n }\n\n public ngOnDestroy(): void {\n this.container?.destroy();\n this.subscription?.unsubscribe();\n this.destroy$.next();\n }\n\n private loadParticles(): void {\n const cb = (container?: Container) => {\n this.container = container;\n this.particlesLoaded.emit(container);\n };\n\n from(this.particlesInit ? this.particlesInit(tsParticles) : Promise.resolve())\n .pipe(\n mergeMap(() => {\n return tsParticles.load({ id: this.id, url: this.url, options: this.options });\n }),\n takeUntil(this.destroy$),\n )\n .subscribe(cb);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxParticlesComponent } from './ng-particles.component';\nimport type { ISourceOptions } from '@tsparticles/engine';\nimport { NgParticlesService } from './ng-particles.service';\n\n@NgModule({\n declarations: [NgxParticlesComponent],\n exports: [NgxParticlesComponent],\n providers: [NgParticlesService],\n})\nexport class NgxParticlesModule {}\n\nexport type IParticlesProps = ISourceOptions;\nexport { NgParticlesService };\n","/*\n * Public API Surface of ng-particles\n */\n\nexport * from './lib/ng-particles.component';\nexport * from './lib/ng-particles.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgParticlesService"],"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="@tsparticles/angular" />
5
+ export * from './public-api';
@@ -0,0 +1,24 @@
1
+ import { AfterViewInit, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
+ import type { Container, Engine } from '@tsparticles/engine';
3
+ import { IParticlesProps } from './ng-particles.module';
4
+ import { NgParticlesService } from './ng-particles.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class NgxParticlesComponent implements OnInit, AfterViewInit, OnDestroy {
7
+ protected platformId: string;
8
+ private readonly particlesService;
9
+ options?: IParticlesProps;
10
+ url?: string;
11
+ id: string;
12
+ particlesInit?: (engine: Engine) => Promise<void>;
13
+ particlesLoaded: EventEmitter<Container>;
14
+ private subscription?;
15
+ private destroy$;
16
+ private container?;
17
+ constructor(platformId: string, particlesService: NgParticlesService);
18
+ ngOnInit(): void;
19
+ ngAfterViewInit(): void;
20
+ ngOnDestroy(): void;
21
+ private loadParticles;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxParticlesComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxParticlesComponent, "ngx-particles", never, { "options": { "alias": "options"; "required": false; }; "url": { "alias": "url"; "required": false; }; "id": { "alias": "id"; "required": false; }; "particlesInit": { "alias": "particlesInit"; "required": false; }; }, { "particlesLoaded": "particlesLoaded"; }, never, never, false, never>;
24
+ }
@@ -0,0 +1,11 @@
1
+ import type { ISourceOptions } from '@tsparticles/engine';
2
+ import { NgParticlesService } from './ng-particles.service';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./ng-particles.component";
5
+ export declare class NgxParticlesModule {
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxParticlesModule, never>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgxParticlesModule, [typeof i1.NgxParticlesComponent], never, [typeof i1.NgxParticlesComponent]>;
8
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgxParticlesModule>;
9
+ }
10
+ export type IParticlesProps = ISourceOptions;
11
+ export { NgParticlesService };
@@ -0,0 +1,9 @@
1
+ import { Engine } from '@tsparticles/engine';
2
+ import * as i0 from "@angular/core";
3
+ export declare class NgParticlesService {
4
+ private initialized;
5
+ getInstallationStatus(): import("rxjs").Observable<boolean>;
6
+ init(particlesInit: (engine: Engine) => Promise<void>): Promise<void>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgParticlesService, never>;
8
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgParticlesService>;
9
+ }
package/package.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "@tsparticles/angular",
3
+ "version": "3.0.0",
4
+ "description": "Official tsParticles Angular Component - Easily create highly customizable particle, confetti and fireworks animations and use them as animated backgrounds for your website. Ready to use components available also for Web Components, React, Vue.js (2.x and 3.x), Svelte, jQuery, Preact, Riot.js, Solid.js, Inferno.",
5
+ "homepage": "https://particles.js.org",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/tsparticles/angular.git",
9
+ "directory": "components/particles"
10
+ },
11
+ "keywords": [
12
+ "front-end",
13
+ "frontend",
14
+ "tsparticles",
15
+ "particles.js",
16
+ "particlesjs",
17
+ "particles",
18
+ "particle",
19
+ "canvas",
20
+ "jsparticles",
21
+ "xparticles",
22
+ "particles-js",
23
+ "particles-bg",
24
+ "particles-bg-vue",
25
+ "particles-ts",
26
+ "particles.ts",
27
+ "react-particles-js",
28
+ "react-particles.js",
29
+ "react-particles",
30
+ "react",
31
+ "reactjs",
32
+ "vue-particles",
33
+ "ngx-particles",
34
+ "angular-particles",
35
+ "particleground",
36
+ "vue",
37
+ "vuejs",
38
+ "preact",
39
+ "preactjs",
40
+ "jquery",
41
+ "angularjs",
42
+ "angular",
43
+ "typescript",
44
+ "javascript",
45
+ "animation",
46
+ "web",
47
+ "html5",
48
+ "web-design",
49
+ "webdesign",
50
+ "css",
51
+ "html",
52
+ "css3",
53
+ "animated",
54
+ "background",
55
+ "confetti",
56
+ "canvas",
57
+ "fireworks",
58
+ "fireworks-js",
59
+ "confetti-js",
60
+ "confettijs",
61
+ "fireworksjs",
62
+ "canvas-confetti"
63
+ ],
64
+ "author": "Matteo Bruni <matteo.bruni@me.com>",
65
+ "license": "MIT",
66
+ "files": [
67
+ "**/*"
68
+ ],
69
+ "types": "ng-particles.d.ts",
70
+ "funding": [
71
+ {
72
+ "type": "github",
73
+ "url": "https://github.com/sponsors/matteobruni"
74
+ },
75
+ {
76
+ "type": "github",
77
+ "url": "https://github.com/sponsors/tsparticles"
78
+ },
79
+ {
80
+ "type": "buymeacoffee",
81
+ "url": "https://www.buymeacoffee.com/matteobruni"
82
+ }
83
+ ],
84
+ "publishConfig": {
85
+ "access": "public"
86
+ },
87
+ "peerDependencies": {
88
+ "@angular/common": ">=2.0.0",
89
+ "@angular/core": ">=2.0.0",
90
+ "rxjs": ">=7.0.0",
91
+ "@tsparticles/engine": "^3.0.2"
92
+ },
93
+ "dependencies": {
94
+ "tslib": "^2.6.2"
95
+ },
96
+ "module": "fesm2022/tsparticles-angular.mjs",
97
+ "typings": "index.d.ts",
98
+ "exports": {
99
+ "./package.json": {
100
+ "default": "./package.json"
101
+ },
102
+ ".": {
103
+ "types": "./index.d.ts",
104
+ "esm2022": "./esm2022/tsparticles-angular.mjs",
105
+ "esm": "./esm2022/tsparticles-angular.mjs",
106
+ "default": "./fesm2022/tsparticles-angular.mjs"
107
+ }
108
+ },
109
+ "sideEffects": false
110
+ }
@@ -0,0 +1,2 @@
1
+ export * from './lib/ng-particles.component';
2
+ export * from './lib/ng-particles.module';