@hdcodedev/snowfall 1.0.1 → 1.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.
Files changed (49) hide show
  1. package/dist/index.d.mts +38 -4
  2. package/dist/index.d.ts +38 -4
  3. package/dist/index.js +661 -16
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +656 -3
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +1 -1
  8. package/dist/Snowfall.d.mts +0 -5
  9. package/dist/Snowfall.d.ts +0 -5
  10. package/dist/Snowfall.js +0 -162
  11. package/dist/Snowfall.js.map +0 -1
  12. package/dist/Snowfall.mjs +0 -142
  13. package/dist/Snowfall.mjs.map +0 -1
  14. package/dist/SnowfallProvider.d.mts +0 -36
  15. package/dist/SnowfallProvider.d.ts +0 -36
  16. package/dist/SnowfallProvider.js +0 -97
  17. package/dist/SnowfallProvider.js.map +0 -1
  18. package/dist/SnowfallProvider.mjs +0 -71
  19. package/dist/SnowfallProvider.mjs.map +0 -1
  20. package/dist/utils/snowfall/constants.d.mts +0 -10
  21. package/dist/utils/snowfall/constants.d.ts +0 -10
  22. package/dist/utils/snowfall/constants.js +0 -50
  23. package/dist/utils/snowfall/constants.js.map +0 -1
  24. package/dist/utils/snowfall/constants.mjs +0 -19
  25. package/dist/utils/snowfall/constants.mjs.map +0 -1
  26. package/dist/utils/snowfall/dom.d.mts +0 -11
  27. package/dist/utils/snowfall/dom.d.ts +0 -11
  28. package/dist/utils/snowfall/dom.js +0 -139
  29. package/dist/utils/snowfall/dom.js.map +0 -1
  30. package/dist/utils/snowfall/dom.mjs +0 -122
  31. package/dist/utils/snowfall/dom.mjs.map +0 -1
  32. package/dist/utils/snowfall/draw.d.mts +0 -7
  33. package/dist/utils/snowfall/draw.d.ts +0 -7
  34. package/dist/utils/snowfall/draw.js +0 -160
  35. package/dist/utils/snowfall/draw.js.map +0 -1
  36. package/dist/utils/snowfall/draw.mjs +0 -134
  37. package/dist/utils/snowfall/draw.mjs.map +0 -1
  38. package/dist/utils/snowfall/physics.d.mts +0 -11
  39. package/dist/utils/snowfall/physics.d.ts +0 -11
  40. package/dist/utils/snowfall/physics.js +0 -239
  41. package/dist/utils/snowfall/physics.js.map +0 -1
  42. package/dist/utils/snowfall/physics.mjs +0 -212
  43. package/dist/utils/snowfall/physics.mjs.map +0 -1
  44. package/dist/utils/snowfall/types.d.mts +0 -30
  45. package/dist/utils/snowfall/types.d.ts +0 -30
  46. package/dist/utils/snowfall/types.js +0 -17
  47. package/dist/utils/snowfall/types.js.map +0 -1
  48. package/dist/utils/snowfall/types.mjs +0 -1
  49. package/dist/utils/snowfall/types.mjs.map +0 -1
@@ -1,212 +0,0 @@
1
- import { getAccumulationSurfaces } from "./dom";
2
- import { VAL_BOTTOM } from "./constants";
3
- const createSnowflake = (canvasWidth, config, isBackground = false) => {
4
- if (isBackground) {
5
- const sizeRatio = Math.random();
6
- const radius = config.FLAKE_SIZE.MIN * 0.6 + sizeRatio * (config.FLAKE_SIZE.MAX - config.FLAKE_SIZE.MIN) * 0.4;
7
- return {
8
- x: Math.random() * canvasWidth,
9
- y: window.scrollY - 5,
10
- radius,
11
- speed: radius * 0.3 + Math.random() * 0.2 + 0.2,
12
- wind: (Math.random() - 0.5) * (config.WIND_STRENGTH * 0.625),
13
- opacity: Math.random() * 0.2 + 0.2,
14
- wobble: Math.random() * Math.PI * 2,
15
- wobbleSpeed: Math.random() * 0.015 + 5e-3,
16
- sizeRatio,
17
- isBackground: true
18
- };
19
- } else {
20
- const sizeRatio = Math.random();
21
- const radius = config.FLAKE_SIZE.MIN + sizeRatio * (config.FLAKE_SIZE.MAX - config.FLAKE_SIZE.MIN);
22
- return {
23
- x: Math.random() * canvasWidth,
24
- y: window.scrollY - 5,
25
- radius,
26
- speed: radius * 0.5 + Math.random() * 0.3 + 0.5,
27
- wind: (Math.random() - 0.5) * config.WIND_STRENGTH,
28
- opacity: Math.random() * 0.3 + 0.5,
29
- wobble: Math.random() * Math.PI * 2,
30
- wobbleSpeed: Math.random() * 0.02 + 0.01,
31
- sizeRatio,
32
- isBackground: false
33
- };
34
- }
35
- };
36
- const initializeAccumulation = (accumulationMap, config) => {
37
- const elements = getAccumulationSurfaces();
38
- for (const [el] of accumulationMap.entries()) {
39
- if (!el.isConnected) {
40
- accumulationMap.delete(el);
41
- }
42
- }
43
- elements.forEach(({ el, type, isFixed }) => {
44
- const existing = accumulationMap.get(el);
45
- const rect = el.getBoundingClientRect();
46
- const width = Math.ceil(rect.width);
47
- const isBottom = type === VAL_BOTTOM;
48
- if (existing && existing.heights.length === width) {
49
- existing.type = type;
50
- existing.isFixed = isFixed;
51
- if (existing.borderRadius !== void 0) {
52
- const styleBuffer = window.getComputedStyle(el);
53
- existing.borderRadius = parseFloat(styleBuffer.borderTopLeftRadius) || 0;
54
- }
55
- return;
56
- }
57
- const height = Math.ceil(rect.height);
58
- const baseMax = isBottom ? config.MAX_DEPTH.BOTTOM : config.MAX_DEPTH.TOP;
59
- const styles = window.getComputedStyle(el);
60
- const borderRadius = parseFloat(styles.borderTopLeftRadius) || 0;
61
- let maxHeights = new Array(width);
62
- for (let i = 0; i < width; i++) {
63
- let edgeFactor = 1;
64
- if (!isBottom && borderRadius > 0) {
65
- if (i < borderRadius) {
66
- edgeFactor = Math.pow(i / borderRadius, 1.2);
67
- } else if (i > width - borderRadius) {
68
- edgeFactor = Math.pow((width - i) / borderRadius, 1.2);
69
- }
70
- }
71
- maxHeights[i] = baseMax * edgeFactor * (0.85 + Math.random() * 0.15);
72
- }
73
- const smoothPasses = 4;
74
- for (let p = 0; p < smoothPasses; p++) {
75
- const smoothed = [...maxHeights];
76
- for (let i = 1; i < width - 1; i++) {
77
- smoothed[i] = (maxHeights[i - 1] + maxHeights[i] + maxHeights[i + 1]) / 3;
78
- }
79
- maxHeights = smoothed;
80
- }
81
- accumulationMap.set(el, {
82
- heights: existing?.heights.length === width ? existing.heights : new Array(width).fill(0),
83
- maxHeights,
84
- leftSide: existing?.leftSide.length === height ? existing.leftSide : new Array(height).fill(0),
85
- rightSide: existing?.rightSide.length === height ? existing.rightSide : new Array(height).fill(0),
86
- maxSideHeight: isBottom ? 0 : config.MAX_DEPTH.SIDE,
87
- borderRadius,
88
- type,
89
- isFixed
90
- });
91
- });
92
- };
93
- const accumulateSide = (sideArray, rectHeight, localY, maxSideHeight, borderRadius, config) => {
94
- const spread = 4;
95
- const addHeight = config.ACCUMULATION.SIDE_RATE * (0.8 + Math.random() * 0.4);
96
- for (let dy = -spread; dy <= spread; dy++) {
97
- const y = localY + dy;
98
- if (y >= 0 && y < sideArray.length) {
99
- const inTop = y < borderRadius;
100
- const inBottom = y > rectHeight - borderRadius;
101
- if (borderRadius > 0 && (inTop || inBottom)) continue;
102
- const normalizedDist = Math.abs(dy) / spread;
103
- const falloff = (Math.cos(normalizedDist * Math.PI) + 1) / 2;
104
- sideArray[y] = Math.min(maxSideHeight, sideArray[y] + addHeight * falloff);
105
- }
106
- }
107
- };
108
- const updateSnowflakes = (snowflakes, elementRects, config, dt, canvasWidth, canvasHeight) => {
109
- for (let i = snowflakes.length - 1; i >= 0; i--) {
110
- const flake = snowflakes[i];
111
- flake.wobble += flake.wobbleSpeed * dt;
112
- flake.x += (flake.wind + Math.sin(flake.wobble) * 0.5) * dt;
113
- flake.y += (flake.speed + Math.cos(flake.wobble * 0.5) * 0.1) * dt;
114
- let landed = false;
115
- for (const { rect, acc } of elementRects) {
116
- const isBottom = acc.type === VAL_BOTTOM;
117
- if (!landed && acc.maxSideHeight > 0 && !isBottom) {
118
- const isInVerticalBounds = flake.y >= rect.top && flake.y <= rect.bottom;
119
- if (isInVerticalBounds) {
120
- const localY = Math.floor(flake.y - rect.top);
121
- const borderRadius = acc.borderRadius;
122
- const isInTopCorner = localY < borderRadius;
123
- const isInBottomCorner = localY > rect.height - borderRadius;
124
- const isCorner = borderRadius > 0 && (isInTopCorner || isInBottomCorner);
125
- if (flake.x >= rect.left - 5 && flake.x < rect.left + 3) {
126
- if (!isCorner) {
127
- accumulateSide(acc.leftSide, rect.height, localY, acc.maxSideHeight, borderRadius, config);
128
- landed = true;
129
- }
130
- }
131
- if (!landed && flake.x > rect.right - 3 && flake.x <= rect.right + 5) {
132
- if (!isCorner) {
133
- accumulateSide(acc.rightSide, rect.height, localY, acc.maxSideHeight, borderRadius, config);
134
- landed = true;
135
- }
136
- }
137
- if (landed) break;
138
- }
139
- }
140
- if (flake.x >= rect.left && flake.x <= rect.right) {
141
- const localX = Math.floor(flake.x - rect.left);
142
- const currentHeight = acc.heights[localX] || 0;
143
- const maxHeight = acc.maxHeights[localX] || 5;
144
- const surfaceY = isBottom ? rect.bottom - currentHeight : rect.top - currentHeight;
145
- if (flake.y >= surfaceY && flake.y < surfaceY + 10 && currentHeight < maxHeight) {
146
- const shouldAccumulate = isBottom ? Math.random() < 0.15 : true;
147
- if (shouldAccumulate) {
148
- const baseSpread = Math.ceil(flake.radius);
149
- const spread = baseSpread + Math.floor(Math.random() * 2);
150
- const accumRate = isBottom ? config.ACCUMULATION.BOTTOM_RATE : config.ACCUMULATION.TOP_RATE;
151
- const centerOffset = Math.floor(Math.random() * 3) - 1;
152
- for (let dx = -spread; dx <= spread; dx++) {
153
- if (Math.random() < 0.15) continue;
154
- const idx = localX + dx + centerOffset;
155
- if (idx >= 0 && idx < acc.heights.length) {
156
- const dist = Math.abs(dx);
157
- const pixelMax = acc.maxHeights[idx] || 5;
158
- const normDist = dist / spread;
159
- const falloff = (Math.cos(normDist * Math.PI) + 1) / 2;
160
- const baseAdd = 0.3 * falloff;
161
- const randomFactor = 0.8 + Math.random() * 0.4;
162
- const addHeight = baseAdd * randomFactor * accumRate;
163
- if (acc.heights[idx] < pixelMax && addHeight > 0) {
164
- acc.heights[idx] = Math.min(pixelMax, acc.heights[idx] + addHeight);
165
- }
166
- }
167
- }
168
- if (isBottom) {
169
- landed = true;
170
- break;
171
- }
172
- }
173
- if (!isBottom) {
174
- landed = true;
175
- break;
176
- }
177
- }
178
- }
179
- }
180
- if (landed || flake.y > canvasHeight + 10 || flake.x < -20 || flake.x > canvasWidth + 20) {
181
- snowflakes.splice(i, 1);
182
- }
183
- }
184
- };
185
- const meltAndSmoothAccumulation = (elementRects, config, dt) => {
186
- for (const { acc } of elementRects) {
187
- const meltRate = config.MELT_SPEED * dt;
188
- const len = acc.heights.length;
189
- if (len > 2) {
190
- for (let i = 1; i < len - 1; i++) {
191
- if (acc.heights[i] > 0.05) {
192
- const avg = (acc.heights[i - 1] + acc.heights[i + 1]) / 2;
193
- acc.heights[i] = acc.heights[i] * 0.99 + avg * 0.01;
194
- }
195
- }
196
- }
197
- for (let i = 0; i < acc.heights.length; i++) {
198
- if (acc.heights[i] > 0) acc.heights[i] = Math.max(0, acc.heights[i] - meltRate);
199
- }
200
- for (let i = 0; i < acc.leftSide.length; i++) {
201
- if (acc.leftSide[i] > 0) acc.leftSide[i] = Math.max(0, acc.leftSide[i] - meltRate);
202
- if (acc.rightSide[i] > 0) acc.rightSide[i] = Math.max(0, acc.rightSide[i] - meltRate);
203
- }
204
- }
205
- };
206
- export {
207
- createSnowflake,
208
- initializeAccumulation,
209
- meltAndSmoothAccumulation,
210
- updateSnowflakes
211
- };
212
- //# sourceMappingURL=physics.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/snowfall/physics.ts"],"sourcesContent":["import { PhysicsConfig } from '../../SnowfallProvider';\nimport { Snowflake, SnowAccumulation, ElementSurface } from './types';\nimport { getAccumulationSurfaces } from './dom';\nimport { VAL_BOTTOM } from './constants';\n\nexport const createSnowflake = (\n canvasWidth: number,\n config: PhysicsConfig,\n isBackground: boolean = false\n): Snowflake => {\n if (isBackground) {\n const sizeRatio = Math.random();\n const radius = config.FLAKE_SIZE.MIN * 0.6 + sizeRatio * (config.FLAKE_SIZE.MAX - config.FLAKE_SIZE.MIN) * 0.4;\n return {\n x: Math.random() * canvasWidth,\n y: window.scrollY - 5,\n radius,\n speed: radius * 0.3 + Math.random() * 0.2 + 0.2,\n wind: (Math.random() - 0.5) * (config.WIND_STRENGTH * 0.625),\n opacity: Math.random() * 0.2 + 0.2,\n wobble: Math.random() * Math.PI * 2,\n wobbleSpeed: Math.random() * 0.015 + 0.005,\n sizeRatio,\n isBackground: true\n };\n } else {\n const sizeRatio = Math.random();\n const radius = config.FLAKE_SIZE.MIN + sizeRatio * (config.FLAKE_SIZE.MAX - config.FLAKE_SIZE.MIN);\n return {\n x: Math.random() * canvasWidth,\n y: window.scrollY - 5,\n radius,\n speed: radius * 0.5 + Math.random() * 0.3 + 0.5,\n wind: (Math.random() - 0.5) * config.WIND_STRENGTH,\n opacity: Math.random() * 0.3 + 0.5,\n wobble: Math.random() * Math.PI * 2,\n wobbleSpeed: Math.random() * 0.02 + 0.01,\n sizeRatio,\n isBackground: false\n };\n }\n};\n\nexport const initializeAccumulation = (\n accumulationMap: Map<Element, SnowAccumulation>,\n config: PhysicsConfig\n) => {\n const elements = getAccumulationSurfaces();\n // Prune disconnected elements\n for (const [el] of accumulationMap.entries()) {\n if (!el.isConnected) {\n accumulationMap.delete(el);\n }\n }\n\n elements.forEach(({ el, type, isFixed }) => {\n const existing = accumulationMap.get(el);\n const rect = el.getBoundingClientRect();\n const width = Math.ceil(rect.width);\n const isBottom = type === VAL_BOTTOM;\n\n if (existing && existing.heights.length === width) {\n existing.type = type;\n existing.isFixed = isFixed;\n if (existing.borderRadius !== undefined) {\n const styleBuffer = window.getComputedStyle(el); // Potentially slow in loop, strictly necessary?\n existing.borderRadius = parseFloat(styleBuffer.borderTopLeftRadius) || 0;\n }\n return;\n }\n\n const height = Math.ceil(rect.height);\n const baseMax = isBottom ? config.MAX_DEPTH.BOTTOM : config.MAX_DEPTH.TOP;\n\n const styles = window.getComputedStyle(el);\n const borderRadius = parseFloat(styles.borderTopLeftRadius) || 0;\n\n let maxHeights = new Array(width);\n for (let i = 0; i < width; i++) {\n let edgeFactor = 1.0;\n if (!isBottom && borderRadius > 0) {\n if (i < borderRadius) {\n edgeFactor = Math.pow(i / borderRadius, 1.2);\n } else if (i > width - borderRadius) {\n edgeFactor = Math.pow((width - i) / borderRadius, 1.2);\n }\n }\n maxHeights[i] = baseMax * edgeFactor * (0.85 + Math.random() * 0.15);\n }\n\n // Smooth maxHeights\n const smoothPasses = 4;\n for (let p = 0; p < smoothPasses; p++) {\n const smoothed = [...maxHeights];\n for (let i = 1; i < width - 1; i++) {\n smoothed[i] = (maxHeights[i - 1] + maxHeights[i] + maxHeights[i + 1]) / 3;\n }\n maxHeights = smoothed;\n }\n\n accumulationMap.set(el, {\n heights: existing?.heights.length === width ? existing.heights : new Array(width).fill(0),\n maxHeights,\n leftSide: existing?.leftSide.length === height ? existing.leftSide : new Array(height).fill(0),\n rightSide: existing?.rightSide.length === height ? existing.rightSide : new Array(height).fill(0),\n maxSideHeight: isBottom ? 0 : config.MAX_DEPTH.SIDE,\n borderRadius,\n type,\n isFixed,\n });\n });\n};\n\nconst accumulateSide = (\n sideArray: number[],\n rectHeight: number,\n localY: number,\n maxSideHeight: number,\n borderRadius: number,\n config: PhysicsConfig\n) => {\n const spread = 4;\n const addHeight = config.ACCUMULATION.SIDE_RATE * (0.8 + Math.random() * 0.4);\n\n for (let dy = -spread; dy <= spread; dy++) {\n const y = localY + dy;\n if (y >= 0 && y < sideArray.length) {\n const inTop = y < borderRadius;\n const inBottom = y > rectHeight - borderRadius;\n if (borderRadius > 0 && (inTop || inBottom)) continue;\n\n const normalizedDist = Math.abs(dy) / spread;\n const falloff = (Math.cos(normalizedDist * Math.PI) + 1) / 2;\n sideArray[y] = Math.min(maxSideHeight, sideArray[y] + addHeight * falloff);\n }\n }\n};\n\nexport const updateSnowflakes = (\n snowflakes: Snowflake[],\n elementRects: ElementSurface[],\n config: PhysicsConfig,\n dt: number,\n canvasWidth: number,\n canvasHeight: number\n) => {\n for (let i = snowflakes.length - 1; i >= 0; i--) {\n const flake = snowflakes[i];\n\n flake.wobble += flake.wobbleSpeed * dt;\n flake.x += (flake.wind + Math.sin(flake.wobble) * 0.5) * dt;\n flake.y += (flake.speed + Math.cos(flake.wobble * 0.5) * 0.1) * dt;\n\n let landed = false;\n\n for (const { rect, acc } of elementRects) {\n const isBottom = acc.type === VAL_BOTTOM;\n\n // Side collisions\n if (!landed && acc.maxSideHeight > 0 && !isBottom) {\n const isInVerticalBounds = flake.y >= rect.top && flake.y <= rect.bottom;\n\n if (isInVerticalBounds) {\n const localY = Math.floor(flake.y - rect.top);\n const borderRadius = acc.borderRadius;\n\n const isInTopCorner = localY < borderRadius;\n const isInBottomCorner = localY > rect.height - borderRadius;\n const isCorner = borderRadius > 0 && (isInTopCorner || isInBottomCorner);\n\n if (flake.x >= rect.left - 5 && flake.x < rect.left + 3) {\n if (!isCorner) {\n accumulateSide(acc.leftSide, rect.height, localY, acc.maxSideHeight, borderRadius, config);\n landed = true;\n }\n }\n\n if (!landed && flake.x > rect.right - 3 && flake.x <= rect.right + 5) {\n if (!isCorner) {\n accumulateSide(acc.rightSide, rect.height, localY, acc.maxSideHeight, borderRadius, config);\n landed = true;\n }\n }\n\n if (landed) break;\n }\n }\n\n // Top accumulation\n if (flake.x >= rect.left && flake.x <= rect.right) {\n const localX = Math.floor(flake.x - rect.left);\n const currentHeight = acc.heights[localX] || 0;\n const maxHeight = acc.maxHeights[localX] || 5;\n\n const surfaceY = isBottom ? rect.bottom - currentHeight : rect.top - currentHeight;\n\n if (flake.y >= surfaceY && flake.y < surfaceY + 10 && currentHeight < maxHeight) {\n const shouldAccumulate = isBottom ? Math.random() < 0.15 : true;\n\n if (shouldAccumulate) {\n const baseSpread = Math.ceil(flake.radius);\n const spread = baseSpread + Math.floor(Math.random() * 2);\n const accumRate = isBottom ? config.ACCUMULATION.BOTTOM_RATE : config.ACCUMULATION.TOP_RATE;\n const centerOffset = Math.floor(Math.random() * 3) - 1;\n\n for (let dx = -spread; dx <= spread; dx++) {\n if (Math.random() < 0.15) continue;\n const idx = localX + dx + centerOffset;\n if (idx >= 0 && idx < acc.heights.length) {\n const dist = Math.abs(dx);\n const pixelMax = acc.maxHeights[idx] || 5;\n\n const normDist = dist / spread;\n const falloff = (Math.cos(normDist * Math.PI) + 1) / 2;\n const baseAdd = 0.3 * falloff;\n\n const randomFactor = 0.8 + Math.random() * 0.4;\n const addHeight = baseAdd * randomFactor * accumRate;\n\n if (acc.heights[idx] < pixelMax && addHeight > 0) {\n acc.heights[idx] = Math.min(pixelMax, acc.heights[idx] + addHeight);\n }\n }\n }\n\n if (isBottom) {\n landed = true;\n break;\n }\n }\n\n if (!isBottom) {\n landed = true;\n break;\n }\n }\n }\n }\n\n if (landed || flake.y > canvasHeight + 10 || flake.x < -20 || flake.x > canvasWidth + 20) {\n snowflakes.splice(i, 1);\n }\n }\n};\n\nexport const meltAndSmoothAccumulation = (\n elementRects: ElementSurface[],\n config: PhysicsConfig,\n dt: number\n) => {\n for (const { acc } of elementRects) {\n const meltRate = config.MELT_SPEED * dt;\n const len = acc.heights.length;\n\n // Smooth\n if (len > 2) {\n for (let i = 1; i < len - 1; i++) {\n if (acc.heights[i] > 0.05) {\n const avg = (acc.heights[i - 1] + acc.heights[i + 1]) / 2;\n acc.heights[i] = acc.heights[i] * 0.99 + avg * 0.01;\n }\n }\n }\n\n // Melt\n for (let i = 0; i < acc.heights.length; i++) {\n if (acc.heights[i] > 0) acc.heights[i] = Math.max(0, acc.heights[i] - meltRate);\n }\n for (let i = 0; i < acc.leftSide.length; i++) {\n if (acc.leftSide[i] > 0) acc.leftSide[i] = Math.max(0, acc.leftSide[i] - meltRate);\n if (acc.rightSide[i] > 0) acc.rightSide[i] = Math.max(0, acc.rightSide[i] - meltRate);\n }\n }\n};\n"],"mappings":"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","names":[]}
@@ -1,30 +0,0 @@
1
- interface Snowflake {
2
- x: number;
3
- y: number;
4
- radius: number;
5
- speed: number;
6
- wind: number;
7
- opacity: number;
8
- wobble: number;
9
- wobbleSpeed: number;
10
- sizeRatio: number;
11
- isBackground: boolean;
12
- }
13
- type SnowfallSurface = 'top' | 'bottom';
14
- interface SnowAccumulation {
15
- heights: number[];
16
- maxHeights: number[];
17
- leftSide: number[];
18
- rightSide: number[];
19
- maxSideHeight: number;
20
- borderRadius: number;
21
- type: SnowfallSurface;
22
- isFixed: boolean;
23
- }
24
- interface ElementSurface {
25
- el: Element;
26
- rect: DOMRect;
27
- acc: SnowAccumulation;
28
- }
29
-
30
- export type { ElementSurface, SnowAccumulation, SnowfallSurface, Snowflake };
@@ -1,30 +0,0 @@
1
- interface Snowflake {
2
- x: number;
3
- y: number;
4
- radius: number;
5
- speed: number;
6
- wind: number;
7
- opacity: number;
8
- wobble: number;
9
- wobbleSpeed: number;
10
- sizeRatio: number;
11
- isBackground: boolean;
12
- }
13
- type SnowfallSurface = 'top' | 'bottom';
14
- interface SnowAccumulation {
15
- heights: number[];
16
- maxHeights: number[];
17
- leftSide: number[];
18
- rightSide: number[];
19
- maxSideHeight: number;
20
- borderRadius: number;
21
- type: SnowfallSurface;
22
- isFixed: boolean;
23
- }
24
- interface ElementSurface {
25
- el: Element;
26
- rect: DOMRect;
27
- acc: SnowAccumulation;
28
- }
29
-
30
- export type { ElementSurface, SnowAccumulation, SnowfallSurface, Snowflake };
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
- var types_exports = {};
16
- module.exports = __toCommonJS(types_exports);
17
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/snowfall/types.ts"],"sourcesContent":["export interface Snowflake {\n x: number;\n y: number;\n radius: number;\n speed: number;\n wind: number;\n opacity: number;\n wobble: number;\n wobbleSpeed: number;\n sizeRatio: number;\n isBackground: boolean;\n}\n\nexport type SnowfallSurface = 'top' | 'bottom';\n\nexport interface SnowAccumulation {\n heights: number[];\n maxHeights: number[]; // Max height per pixel column\n leftSide: number[];\n rightSide: number[];\n maxSideHeight: number;\n borderRadius: number;\n type: SnowfallSurface;\n isFixed: boolean;\n}\n\nexport interface ElementSurface {\n el: Element;\n rect: DOMRect;\n acc: SnowAccumulation;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}