svelte-confetti-explosion 0.1.1 → 0.2.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.
@@ -57,7 +57,7 @@ const isUndefined = (value) => typeof value === 'undefined';
57
57
  const error = (message) => {
58
58
  console.error(message);
59
59
  };
60
- function validate(particleCount, duration, colors, particleSize, force, floorHeight, floorWidth) {
60
+ function validate(particleCount, duration, colors, particleSize, force, stageHeight, stageWidth, particlesShape) {
61
61
  const isSafeInteger = Number.isSafeInteger;
62
62
  if (!isUndefined(particleCount) && isSafeInteger(particleCount) && particleCount < 0) {
63
63
  error('particleCount must be a positive integer');
@@ -67,6 +67,11 @@ function validate(particleCount, duration, colors, particleSize, force, floorHei
67
67
  error('duration must be a positive integer');
68
68
  return false;
69
69
  }
70
+ if (!isUndefined(particlesShape) &&
71
+ !['mix', 'circles', 'rectangles'].includes(particlesShape)) {
72
+ error('particlesShape should be either "mix" or "circles" or "rectangle"');
73
+ return false;
74
+ }
70
75
  if (!isUndefined(colors) && !Array.isArray(colors)) {
71
76
  error('colors must be an array of strings');
72
77
  return false;
@@ -79,17 +84,17 @@ function validate(particleCount, duration, colors, particleSize, force, floorHei
79
84
  error('force must be a positive integer and should be within 0 and 1');
80
85
  return false;
81
86
  }
82
- if (!isUndefined(floorHeight) &&
83
- typeof floorHeight === 'number' &&
84
- isSafeInteger(floorHeight) &&
85
- floorHeight < 0) {
87
+ if (!isUndefined(stageHeight) &&
88
+ typeof stageHeight === 'number' &&
89
+ isSafeInteger(stageHeight) &&
90
+ stageHeight < 0) {
86
91
  error('floorHeight must be a positive integer');
87
92
  return false;
88
93
  }
89
- if (!isUndefined(floorWidth) &&
90
- typeof floorWidth === 'number' &&
91
- isSafeInteger(floorWidth) &&
92
- floorWidth < 0) {
94
+ if (!isUndefined(stageWidth) &&
95
+ typeof stageWidth === 'number' &&
96
+ isSafeInteger(stageWidth) &&
97
+ stageWidth < 0) {
93
98
  error('floorWidth must be a positive integer');
94
99
  return false;
95
100
  }
@@ -134,6 +139,28 @@ export let particleSize = SIZE;
134
139
  * ```
135
140
  */
136
141
  export let duration = DURATION;
142
+ /**
143
+ * Shape of particles to use. Can be `mix`, `circles` or `rectangles`
144
+ *
145
+ * `mix` will use both circles and rectangles
146
+ * `circles` will use only circles
147
+ * `rectangles` will use only rectangles
148
+ *
149
+ * @default 'mix'
150
+ *
151
+ * @example
152
+ *
153
+ * ```svelte
154
+ * <ConfettiExplosion particlesShape='circles' />
155
+ * ```
156
+ *
157
+ * @example
158
+ *
159
+ * ```svelte
160
+ * <ConfettiExplosion particlesShape='rectangles' />
161
+ * ```
162
+ */
163
+ export let particlesShape = 'mix';
137
164
  /**
138
165
  * Colors to use for the confetti particles. Pass string array of colors. Can use hex colors, named colors,
139
166
  * CSS Variables, literally anything valid in plain CSS.
@@ -201,7 +228,7 @@ $: particles = createParticles(particleCount, colors);
201
228
  $: particleCount > 300 &&
202
229
  console.log("[SVELTE-CONFETTI-EXPLOSION] That's a lot of confetti, you sure about that? A lesser number" +
203
230
  ' like 200 will still give off the party vibes while still not bricking the device 😉');
204
- $: isValid = validate(particleCount, duration, colors, particleSize, force, stageHeight, stageWidth);
231
+ $: isValid = validate(particleCount, duration, colors, particleSize, force, stageHeight, stageWidth, particlesShape);
205
232
  onMount(async () => {
206
233
  await waitFor(duration);
207
234
  if (shouldDestroyAfterDone) {
@@ -216,7 +243,8 @@ function confettiStyles(node, { degree }) {
216
243
  const rotationIndex = Math.round(Math.random() * (rotationTransforms.length - 1));
217
244
  const durationChaos = duration - Math.round(Math.random() * 1000);
218
245
  const shouldBeCrazy = Math.random() < CRAZY_PARTICLES_FREQUENCY;
219
- const isCircle = shouldBeCircle(rotationIndex);
246
+ const isCircle = particlesShape !== 'rectangles' &&
247
+ (particlesShape === 'circles' || shouldBeCircle(rotationIndex));
220
248
  // x-axis disturbance, roughly the distance the particle will initially deviate from its target
221
249
  const x1 = shouldBeCrazy ? round(Math.random() * CRAZY_PARTICLE_CRAZINESS, 2) : 0;
222
250
  const x2 = x1 * -1;
@@ -1,4 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ declare type ParticleShape = 'mix' | 'circles' | 'rectangles';
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  /**
@@ -34,6 +35,27 @@ declare const __propDef: {
34
35
  * <ConfettiExplosion duration={5000} />
35
36
  * ```
36
37
  */ duration?: number;
38
+ /**
39
+ * Shape of particles to use. Can be `mix`, `circles` or `rectangles`
40
+ *
41
+ * `mix` will use both circles and rectangles
42
+ * `circles` will use only circles
43
+ * `rectangles` will use only rectangles
44
+ *
45
+ * @default 'mix'
46
+ *
47
+ * @example
48
+ *
49
+ * ```svelte
50
+ * <ConfettiExplosion particlesShape='circles' />
51
+ * ```
52
+ *
53
+ * @example
54
+ *
55
+ * ```svelte
56
+ * <ConfettiExplosion particlesShape='rectangles' />
57
+ * ```
58
+ */ particlesShape?: ParticleShape;
37
59
  /**
38
60
  * Colors to use for the confetti particles. Pass string array of colors. Can use hex colors, named colors,
39
61
  * CSS Variables, literally anything valid in plain CSS.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Puru Vijay
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 CHANGED
@@ -105,6 +105,24 @@ Colors to use for the confetti particles. Pass string array of colors. Can use h
105
105
  <ConfettiExplosion colors={['var(--yellow)', 'var(--red)', '#2E3191', '#41BBC7']} />
106
106
  ```
107
107
 
108
+ ### particlesShape
109
+
110
+ Shape of particles to use. Can be `mix`, `circles` or `rectangles`
111
+
112
+ `mix` will use both circles and rectangles
113
+ `circles` will use only circles
114
+ `rectangles` will use only rectangles
115
+
116
+ **type:** `'mix' | 'circles' | 'rectangles'`
117
+
118
+ **Default value:** `'mix'`
119
+
120
+ **Example:**
121
+
122
+ ```svelte
123
+ <ConfettiExplosion particlesShape="circles" />
124
+ ```
125
+
108
126
  ### force
109
127
 
110
128
  Force of the confetti particles. Between 0 and 1. 0 is no force, 1 is maximum force. Will error out if you pass a value outside of this range.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-confetti-explosion",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Confetti explosion in Svelte 🎉🎊",
5
5
  "author": "Puru Vijay",
6
6
  "license": "MIT",