react-confetti-burst 1.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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +303 -0
  3. package/dist/cjs/components.d.ts +219 -0
  4. package/dist/cjs/components.d.ts.map +1 -0
  5. package/dist/cjs/components.js +341 -0
  6. package/dist/cjs/components.js.map +1 -0
  7. package/dist/cjs/confetti-engine.d.ts +122 -0
  8. package/dist/cjs/confetti-engine.d.ts.map +1 -0
  9. package/dist/cjs/confetti-engine.js +589 -0
  10. package/dist/cjs/confetti-engine.js.map +1 -0
  11. package/dist/cjs/confetti.d.ts +50 -0
  12. package/dist/cjs/confetti.d.ts.map +1 -0
  13. package/dist/cjs/confetti.js +446 -0
  14. package/dist/cjs/confetti.js.map +1 -0
  15. package/dist/cjs/constants.d.ts +147 -0
  16. package/dist/cjs/constants.d.ts.map +1 -0
  17. package/dist/cjs/constants.js +609 -0
  18. package/dist/cjs/constants.js.map +1 -0
  19. package/dist/cjs/hooks.d.ts +94 -0
  20. package/dist/cjs/hooks.d.ts.map +1 -0
  21. package/dist/cjs/hooks.js +225 -0
  22. package/dist/cjs/hooks.js.map +1 -0
  23. package/dist/cjs/index.d.ts +34 -0
  24. package/dist/cjs/index.d.ts.map +1 -0
  25. package/dist/cjs/index.js +180 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/particle.d.ts +50 -0
  28. package/dist/cjs/particle.d.ts.map +1 -0
  29. package/dist/cjs/particle.js +475 -0
  30. package/dist/cjs/particle.js.map +1 -0
  31. package/dist/cjs/shapes.d.ts +190 -0
  32. package/dist/cjs/shapes.d.ts.map +1 -0
  33. package/dist/cjs/shapes.js +272 -0
  34. package/dist/cjs/shapes.js.map +1 -0
  35. package/dist/cjs/types.d.ts +720 -0
  36. package/dist/cjs/types.d.ts.map +1 -0
  37. package/dist/cjs/types.js +25 -0
  38. package/dist/cjs/types.js.map +1 -0
  39. package/dist/cjs/utils.d.ts +90 -0
  40. package/dist/cjs/utils.d.ts.map +1 -0
  41. package/dist/cjs/utils.js +330 -0
  42. package/dist/cjs/utils.js.map +1 -0
  43. package/dist/esm/components.js +334 -0
  44. package/dist/esm/components.js.map +1 -0
  45. package/dist/esm/confetti-engine.js +581 -0
  46. package/dist/esm/confetti-engine.js.map +1 -0
  47. package/dist/esm/confetti.js +443 -0
  48. package/dist/esm/confetti.js.map +1 -0
  49. package/dist/esm/constants.js +605 -0
  50. package/dist/esm/constants.js.map +1 -0
  51. package/dist/esm/hooks.js +218 -0
  52. package/dist/esm/hooks.js.map +1 -0
  53. package/dist/esm/index.js +146 -0
  54. package/dist/esm/index.js.map +1 -0
  55. package/dist/esm/particle.js +465 -0
  56. package/dist/esm/particle.js.map +1 -0
  57. package/dist/esm/shapes.js +265 -0
  58. package/dist/esm/shapes.js.map +1 -0
  59. package/dist/esm/types.js +24 -0
  60. package/dist/esm/types.js.map +1 -0
  61. package/dist/esm/utils.js +309 -0
  62. package/dist/esm/utils.js.map +1 -0
  63. package/dist/types/components.d.ts +219 -0
  64. package/dist/types/components.d.ts.map +1 -0
  65. package/dist/types/confetti-engine.d.ts +122 -0
  66. package/dist/types/confetti-engine.d.ts.map +1 -0
  67. package/dist/types/confetti.d.ts +50 -0
  68. package/dist/types/confetti.d.ts.map +1 -0
  69. package/dist/types/constants.d.ts +147 -0
  70. package/dist/types/constants.d.ts.map +1 -0
  71. package/dist/types/hooks.d.ts +94 -0
  72. package/dist/types/hooks.d.ts.map +1 -0
  73. package/dist/types/index.d.ts +34 -0
  74. package/dist/types/index.d.ts.map +1 -0
  75. package/dist/types/particle.d.ts +50 -0
  76. package/dist/types/particle.d.ts.map +1 -0
  77. package/dist/types/shapes.d.ts +190 -0
  78. package/dist/types/shapes.d.ts.map +1 -0
  79. package/dist/types/types.d.ts +720 -0
  80. package/dist/types/types.d.ts.map +1 -0
  81. package/dist/types/utils.d.ts +90 -0
  82. package/dist/types/utils.d.ts.map +1 -0
  83. package/package.json +73 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * react-confetti-burst
3
+ *
4
+ * A high-performance, zero-dependency React confetti component
5
+ * with directional bursts using the native Canvas API.
6
+ * Exceeds the feature set of both react-confetti and canvas-confetti.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ /**
11
+ * ============================================================================
12
+ * FEATURE RELEASE FLAGS
13
+ * ============================================================================
14
+ *
15
+ * Uncomment features as they are released:
16
+ *
17
+ * v1.0.0 - Basic Usage (ConfettiButton, useConfetti, basic confetti())
18
+ * v1.1.0 - React Hooks (useConfettiTrigger, useConfettiSequence, useConfettiCenter)
19
+ * v1.2.0 - Built-in Presets (16 presets)
20
+ * v1.3.0 - canvas-confetti API (confetti.create, confetti.reset)
21
+ * v1.4.0 - Custom Shapes (shapeFromPath, shapeFromText, shapesFromEmoji)
22
+ * v1.5.0 - Advanced Effects (trails, glow, fireworks, continuous mode)
23
+ * v1.6.0 - Full Feature Set
24
+ *
25
+ * ============================================================================
26
+ */
27
+ export type { Point, Vector2D, RGBAColor, GradientColor, ColorInput, ParticleShape, BurstDirection, EasingFunction, EasingPreset, PhysicsConfig, DirectionConfig, ParticleConfig, ConfettiBurstConfig, ConfettiBurstOptions, BurstOrigin, ParticleState, AnimationState, CanvasContext, ExplosionHandle, UseConfettiReturn, ConfettiBurstProps, ConfettiButtonProps, } from './types';
28
+ export { DEFAULT_COLORS, DEFAULT_PHYSICS, DEFAULT_DIRECTION, DEFAULT_PARTICLE, DEFAULT_CONFIG, DIRECTION_ANGLES, EASING_FUNCTIONS, COLOR_PALETTES, } from './constants';
29
+ export { ConfettiEngine, createConfettiExplosion, fireFromElement, getActiveAnimationCount, forceCleanup, } from './confetti-engine';
30
+ export { useConfetti, } from './hooks';
31
+ export { ConfettiBurst, ConfettiButton, } from './components';
32
+ export { parseColor, rgbaToString, randomInRange, randomInt, randomFromArray, clamp, lerp, degToRad, radToDeg, getDirectionAngle, getElementCenter, mergeConfig, isBrowser, } from './utils';
33
+ export { confetti, confetti as default } from './confetti';
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAOH,YAAY,EAEV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EAGZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EAGX,aAAa,EACb,cAAc,EACd,aAAa,EAGb,eAAe,EACf,iBAAiB,EAGjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Particle class for confetti animation
3
+ *
4
+ * Represents a single confetti particle with all physics properties
5
+ * and methods for updating and rendering.
6
+ */
7
+ import type { ParticleState, ParticleShape, PhysicsConfig, ImageParticle, TrailConfig, GlowConfig, ColorInput, CustomDrawFunction } from './types';
8
+ /**
9
+ * Loads an image and caches it
10
+ */
11
+ export declare function loadImage(src: string): Promise<HTMLImageElement>;
12
+ /**
13
+ * Clears the image cache
14
+ */
15
+ export declare function clearImageCache(): void;
16
+ /**
17
+ * Creates a new particle state object
18
+ */
19
+ export declare function createParticle(x: number, y: number, angle: number, velocity: number, colors: readonly ColorInput[], shapes: readonly ParticleShape[], sizeRange: readonly [number, number], opacityRange: readonly [number, number], lifespan: number, rotationSpeed: number, options?: {
20
+ images?: readonly ImageParticle[];
21
+ tiltRange?: readonly [number, number];
22
+ spinSpeedRange?: readonly [number, number];
23
+ depth3D?: number;
24
+ }): ParticleState;
25
+ /**
26
+ * Updates a particle's physics state
27
+ */
28
+ export declare function updateParticle(particle: ParticleState, deltaTime: number, physics: PhysicsConfig, fadeOut: boolean, scaleDown: boolean, trailConfig?: Partial<TrailConfig>, canvasHeight?: number): void;
29
+ /**
30
+ * Renders a particle to a canvas context
31
+ */
32
+ export declare function renderParticle(ctx: CanvasRenderingContext2D, particle: ParticleState, options?: {
33
+ trailConfig?: Partial<TrailConfig>;
34
+ glowConfig?: Partial<GlowConfig>;
35
+ customDraw?: CustomDrawFunction;
36
+ elapsed?: number;
37
+ }): void;
38
+ /**
39
+ * Checks if all particles in an array are inactive
40
+ */
41
+ export declare function areAllParticlesInactive(particles: readonly ParticleState[]): boolean;
42
+ /**
43
+ * Counts active particles
44
+ */
45
+ export declare function countActiveParticles(particles: readonly ParticleState[]): number;
46
+ /**
47
+ * Resets the particle ID counter (useful for testing)
48
+ */
49
+ export declare function resetParticleIdCounter(): void;
50
+ //# sourceMappingURL=particle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particle.d.ts","sourceRoot":"","sources":["../../src/particle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EAEV,kBAAkB,EACnB,MAAM,SAAS,CAAC;AA+BjB;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAchE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,aAAa,CAgDf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,OAAO,EAClB,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAClC,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CA2FN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,IAAI,CAuFN;AA4ND;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAEpF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAEhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Shape helper functions
3
+ *
4
+ * Provides canvas-confetti compatible shape creation utilities
5
+ * for custom SVG paths, text, and emoji shapes.
6
+ *
7
+ * @module shapes
8
+ */
9
+ import type { PathShape, TextShape, CustomShape } from './types';
10
+ /**
11
+ * Options for creating a shape from an SVG path
12
+ */
13
+ export interface ShapeFromPathOptions {
14
+ /** SVG path string (d attribute) */
15
+ readonly path: string;
16
+ /** Optional 2D transformation matrix [a, b, c, d, e, f] */
17
+ readonly matrix?: readonly number[];
18
+ /** Fill color (optional, will use particle color if not set) */
19
+ readonly fillColor?: string;
20
+ /** Stroke color (optional) */
21
+ readonly strokeColor?: string;
22
+ /** Stroke width (optional) */
23
+ readonly strokeWidth?: number;
24
+ }
25
+ /**
26
+ * Options for creating a shape from text/emoji
27
+ */
28
+ export interface ShapeFromTextOptions {
29
+ /** Text or emoji to render */
30
+ readonly text: string;
31
+ /** Scale factor for the text size. Default: 1 */
32
+ readonly scalar?: number;
33
+ /** Text color (optional, will use particle color if not set) */
34
+ readonly color?: string;
35
+ /** Font family. Default: 'serif' */
36
+ readonly fontFamily?: string;
37
+ /** Font weight. Default: 'normal' */
38
+ readonly fontWeight?: string | number;
39
+ /** Font style. Default: 'normal' */
40
+ readonly fontStyle?: 'normal' | 'italic' | 'oblique';
41
+ }
42
+ /**
43
+ * Create a custom shape from an SVG path string.
44
+ *
45
+ * This is compatible with canvas-confetti's shapeFromPath function.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * // Simple star shape
50
+ * const star = shapeFromPath({
51
+ * path: 'M0,-1 L0.588,0.809 L-0.951,-0.309 L0.951,-0.309 L-0.588,0.809 Z'
52
+ * });
53
+ *
54
+ * // With transformation matrix
55
+ * const scaledStar = shapeFromPath({
56
+ * path: 'M0,-1 L0.588,0.809 L-0.951,-0.309 L0.951,-0.309 L-0.588,0.809 Z',
57
+ * matrix: [2, 0, 0, 2, 0, 0] // Scale 2x
58
+ * });
59
+ *
60
+ * // Usage with confetti
61
+ * fire({ x: 0.5, y: 0.5 }, {
62
+ * particle: { shapes: [star, 'circle'] }
63
+ * });
64
+ * ```
65
+ *
66
+ * @param options - Shape configuration options
67
+ * @returns PathShape object for use in confetti configuration
68
+ */
69
+ export declare function shapeFromPath(options: ShapeFromPathOptions): PathShape;
70
+ /**
71
+ * Create a custom shape from text or an emoji.
72
+ *
73
+ * This is compatible with canvas-confetti's shapeFromText function.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * // Emoji confetti
78
+ * const heart = shapeFromText({ text: '❤️' });
79
+ * const party = shapeFromText({ text: '🎉', scalar: 2 });
80
+ *
81
+ * // Custom text
82
+ * const yay = shapeFromText({
83
+ * text: 'YAY',
84
+ * fontFamily: 'Impact',
85
+ * color: '#ff0000'
86
+ * });
87
+ *
88
+ * // Usage with confetti
89
+ * fire({ x: 0.5, y: 0.5 }, {
90
+ * particle: { shapes: [heart, party, yay] }
91
+ * });
92
+ * ```
93
+ *
94
+ * @param options - Text shape configuration options
95
+ * @returns TextShape object for use in confetti configuration
96
+ */
97
+ export declare function shapeFromText(options: ShapeFromTextOptions): TextShape;
98
+ /**
99
+ * Create a bitmap shape from an image URL or HTMLImageElement.
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const logo = await shapeFromImage({
104
+ * src: '/logo.png',
105
+ * width: 32,
106
+ * height: 32
107
+ * });
108
+ *
109
+ * fire({ x: 0.5, y: 0.5 }, {
110
+ * particle: { shapes: [logo] }
111
+ * });
112
+ * ```
113
+ *
114
+ * @param options - Image shape configuration options
115
+ * @returns Promise resolving to a custom shape
116
+ */
117
+ export declare function shapeFromImage(options: {
118
+ readonly src: string | HTMLImageElement;
119
+ readonly width?: number;
120
+ readonly height?: number;
121
+ readonly scalar?: number;
122
+ }): Promise<CustomShape>;
123
+ /**
124
+ * Create multiple shapes from an array of emoji.
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const partyEmoji = shapesFromEmoji(['🎉', '🎊', '✨', '🥳']);
129
+ *
130
+ * fire({ x: 0.5, y: 0.5 }, {
131
+ * particle: { shapes: partyEmoji }
132
+ * });
133
+ * ```
134
+ *
135
+ * @param emojis - Array of emoji strings
136
+ * @param options - Optional common options for all emoji
137
+ * @returns Array of TextShape objects
138
+ */
139
+ export declare function shapesFromEmoji(emojis: readonly string[], options?: Omit<ShapeFromTextOptions, 'text'>): TextShape[];
140
+ /**
141
+ * Common predefined path shapes
142
+ */
143
+ export declare const pathShapes: {
144
+ /** Five-pointed star */
145
+ star: PathShape;
146
+ /** Heart shape */
147
+ heart: PathShape;
148
+ /** Diamond shape */
149
+ diamond: PathShape;
150
+ /** Hexagon shape */
151
+ hexagon: PathShape;
152
+ /** Triangle shape */
153
+ triangle: PathShape;
154
+ /** Plus/cross shape */
155
+ plus: PathShape;
156
+ /** Moon/crescent shape */
157
+ moon: PathShape;
158
+ /** Lightning bolt */
159
+ lightning: PathShape;
160
+ /** Spiral shape */
161
+ spiral: PathShape;
162
+ /** Ribbon/wave shape */
163
+ ribbon: PathShape;
164
+ };
165
+ /**
166
+ * Common emoji sets for quick use
167
+ */
168
+ export declare const emojiShapes: {
169
+ /** Party/celebration emoji */
170
+ party: TextShape[];
171
+ /** Heart emoji */
172
+ hearts: TextShape[];
173
+ /** Star emoji */
174
+ stars: TextShape[];
175
+ /** Nature emoji */
176
+ nature: TextShape[];
177
+ /** Food emoji */
178
+ food: TextShape[];
179
+ /** Sports emoji */
180
+ sports: TextShape[];
181
+ /** Weather emoji */
182
+ weather: TextShape[];
183
+ /** Money emoji */
184
+ money: TextShape[];
185
+ /** Animals emoji */
186
+ animals: TextShape[];
187
+ /** Holiday emoji */
188
+ holiday: TextShape[];
189
+ };
190
+ //# sourceMappingURL=shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAetE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAmBtE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAM,GAC/C,SAAS,EAAE,CAEb;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,wBAAwB;;IAKxB,kBAAkB;;IAKlB,oBAAoB;;IAKpB,oBAAoB;;IAKpB,qBAAqB;;IAKrB,uBAAuB;;IAKvB,0BAA0B;;IAK1B,qBAAqB;;IAKrB,mBAAmB;;IAKnB,wBAAwB;;CAIzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,8BAA8B;;IAG9B,kBAAkB;;IAGlB,iBAAiB;;IAGjB,mBAAmB;;IAGnB,iBAAiB;;IAGjB,mBAAmB;;IAGnB,oBAAoB;;IAGpB,kBAAkB;;IAGlB,oBAAoB;;IAGpB,oBAAoB;;CAErB,CAAC"}