@autumnsgrove/gossamer 0.1.0 → 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.
- package/LICENSE +21 -0
- package/dist/animation.js +165 -0
- package/dist/animation.test.js +204 -0
- package/dist/characters.d.ts.map +1 -1
- package/dist/characters.js +176 -0
- package/dist/characters.test.js +115 -0
- package/dist/colors.d.ts +312 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +199 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -1308
- package/dist/index.test.js +92 -0
- package/dist/patterns.d.ts +119 -2
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +539 -0
- package/dist/patterns.test.js +223 -0
- package/dist/renderer.d.ts +27 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +362 -0
- package/dist/svelte/GossamerBorder.svelte.d.ts +56 -1
- package/dist/svelte/GossamerBorder.svelte.d.ts.map +1 -0
- package/{src → dist}/svelte/GossamerClouds.svelte +6 -6
- package/dist/svelte/GossamerClouds.svelte.d.ts +31 -1
- package/dist/svelte/GossamerClouds.svelte.d.ts.map +1 -0
- package/dist/svelte/GossamerImage.svelte.d.ts +28 -1
- package/dist/svelte/GossamerImage.svelte.d.ts.map +1 -0
- package/dist/svelte/GossamerOverlay.svelte.d.ts +32 -1
- package/dist/svelte/GossamerOverlay.svelte.d.ts.map +1 -0
- package/dist/svelte/GossamerText.svelte.d.ts +29 -1
- package/dist/svelte/GossamerText.svelte.d.ts.map +1 -0
- package/dist/svelte/index.js +31 -3649
- package/dist/svelte/presets.d.ts +4 -2
- package/dist/svelte/presets.js +161 -0
- package/dist/utils/canvas.js +139 -0
- package/dist/utils/image.js +195 -0
- package/dist/utils/performance.js +205 -0
- package/package.json +20 -15
- package/dist/index.js.map +0 -1
- package/dist/style.css +0 -124
- package/dist/svelte/index.js.map +0 -1
- package/src/animation.test.ts +0 -254
- package/src/animation.ts +0 -243
- package/src/characters.test.ts +0 -148
- package/src/characters.ts +0 -164
- package/src/index.test.ts +0 -115
- package/src/index.ts +0 -203
- package/src/patterns.test.ts +0 -273
- package/src/patterns.ts +0 -316
- package/src/renderer.ts +0 -309
- package/src/svelte/index.ts +0 -75
- package/src/svelte/presets.ts +0 -174
- package/src/utils/canvas.ts +0 -210
- package/src/utils/image.ts +0 -275
- package/src/utils/performance.ts +0 -282
- /package/{src → dist}/svelte/GossamerBorder.svelte +0 -0
- /package/{src → dist}/svelte/GossamerImage.svelte +0 -0
- /package/{src → dist}/svelte/GossamerOverlay.svelte +0 -0
- /package/{src → dist}/svelte/GossamerText.svelte +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for core index functions
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import { calculateBrightness, brightnessToChar, DEFAULT_CHARACTERS, DEFAULT_CONFIG, VERSION, } from './index';
|
|
6
|
+
describe('calculateBrightness', () => {
|
|
7
|
+
it('should return 0 for black', () => {
|
|
8
|
+
expect(calculateBrightness(0, 0, 0)).toBe(0);
|
|
9
|
+
});
|
|
10
|
+
it('should return 255 for white', () => {
|
|
11
|
+
expect(calculateBrightness(255, 255, 255)).toBeCloseTo(255, 5);
|
|
12
|
+
});
|
|
13
|
+
it('should weight green highest', () => {
|
|
14
|
+
// Green contributes 0.72, so pure green should be brighter than pure red
|
|
15
|
+
const greenBrightness = calculateBrightness(0, 255, 0);
|
|
16
|
+
const redBrightness = calculateBrightness(255, 0, 0);
|
|
17
|
+
const blueBrightness = calculateBrightness(0, 0, 255);
|
|
18
|
+
expect(greenBrightness).toBeGreaterThan(redBrightness);
|
|
19
|
+
expect(greenBrightness).toBeGreaterThan(blueBrightness);
|
|
20
|
+
expect(redBrightness).toBeGreaterThan(blueBrightness);
|
|
21
|
+
});
|
|
22
|
+
it('should calculate correct luminance values', () => {
|
|
23
|
+
// Pure red: 0.21 * 255 = 53.55
|
|
24
|
+
expect(calculateBrightness(255, 0, 0)).toBeCloseTo(53.55, 1);
|
|
25
|
+
// Pure green: 0.72 * 255 = 183.6
|
|
26
|
+
expect(calculateBrightness(0, 255, 0)).toBeCloseTo(183.6, 1);
|
|
27
|
+
// Pure blue: 0.07 * 255 = 17.85
|
|
28
|
+
expect(calculateBrightness(0, 0, 255)).toBeCloseTo(17.85, 1);
|
|
29
|
+
});
|
|
30
|
+
it('should handle mid-gray', () => {
|
|
31
|
+
const gray = calculateBrightness(128, 128, 128);
|
|
32
|
+
// 128 * (0.21 + 0.72 + 0.07) = 128
|
|
33
|
+
expect(gray).toBe(128);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('brightnessToChar', () => {
|
|
37
|
+
it('should return space for brightness 0', () => {
|
|
38
|
+
expect(brightnessToChar(0)).toBe(' ');
|
|
39
|
+
});
|
|
40
|
+
it('should return last character for brightness 255', () => {
|
|
41
|
+
expect(brightnessToChar(255)).toBe('@');
|
|
42
|
+
});
|
|
43
|
+
it('should map mid-brightness to middle character', () => {
|
|
44
|
+
// With ' .:-=+*#%@' (10 chars), brightness 127-128 should be around index 4-5
|
|
45
|
+
const char = brightnessToChar(127);
|
|
46
|
+
expect(['=', '+'].includes(char)).toBe(true);
|
|
47
|
+
});
|
|
48
|
+
it('should use custom character set', () => {
|
|
49
|
+
const customSet = ' abc';
|
|
50
|
+
expect(brightnessToChar(0, customSet)).toBe(' ');
|
|
51
|
+
expect(brightnessToChar(255, customSet)).toBe('c');
|
|
52
|
+
});
|
|
53
|
+
it('should handle two-character set', () => {
|
|
54
|
+
const binarySet = ' #';
|
|
55
|
+
expect(brightnessToChar(0, binarySet)).toBe(' ');
|
|
56
|
+
expect(brightnessToChar(127, binarySet)).toBe(' ');
|
|
57
|
+
expect(brightnessToChar(255, binarySet)).toBe('#');
|
|
58
|
+
});
|
|
59
|
+
it('should clamp to valid range', () => {
|
|
60
|
+
// Even with extreme values, should not crash
|
|
61
|
+
expect(() => brightnessToChar(-10)).not.toThrow();
|
|
62
|
+
expect(() => brightnessToChar(300)).not.toThrow();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('DEFAULT_CHARACTERS', () => {
|
|
66
|
+
it('should be standard ASCII art character set', () => {
|
|
67
|
+
expect(DEFAULT_CHARACTERS).toBe(' .:-=+*#%@');
|
|
68
|
+
});
|
|
69
|
+
it('should start with space', () => {
|
|
70
|
+
expect(DEFAULT_CHARACTERS[0]).toBe(' ');
|
|
71
|
+
});
|
|
72
|
+
it('should have 10 characters', () => {
|
|
73
|
+
expect(DEFAULT_CHARACTERS.length).toBe(10);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('DEFAULT_CONFIG', () => {
|
|
77
|
+
it('should have all required properties', () => {
|
|
78
|
+
expect(DEFAULT_CONFIG.characters).toBe(DEFAULT_CHARACTERS);
|
|
79
|
+
expect(DEFAULT_CONFIG.cellWidth).toBe(8);
|
|
80
|
+
expect(DEFAULT_CONFIG.cellHeight).toBe(12);
|
|
81
|
+
expect(DEFAULT_CONFIG.color).toBe('#ffffff');
|
|
82
|
+
expect(DEFAULT_CONFIG.backgroundColor).toBe('');
|
|
83
|
+
expect(DEFAULT_CONFIG.fontFamily).toBe('monospace');
|
|
84
|
+
expect(DEFAULT_CONFIG.animate).toBe(false);
|
|
85
|
+
expect(DEFAULT_CONFIG.fps).toBe(30);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('VERSION', () => {
|
|
89
|
+
it('should be a semver string', () => {
|
|
90
|
+
expect(VERSION).toMatch(/^\d+\.\d+\.\d+$/);
|
|
91
|
+
});
|
|
92
|
+
});
|
package/dist/patterns.d.ts
CHANGED
|
@@ -76,6 +76,84 @@ export declare function staticNoise(seed?: number): number;
|
|
|
76
76
|
* @returns Value between 0 and 1
|
|
77
77
|
*/
|
|
78
78
|
export declare function seededNoise2D(x: number, y: number, seed?: number): number;
|
|
79
|
+
/**
|
|
80
|
+
* Clouds pattern - soft, billowy fbm with gentle movement
|
|
81
|
+
* The signature Gossamer effect!
|
|
82
|
+
*
|
|
83
|
+
* @param x - X coordinate
|
|
84
|
+
* @param y - Y coordinate
|
|
85
|
+
* @param time - Time value for animation
|
|
86
|
+
* @param config - Pattern configuration
|
|
87
|
+
* @returns Value between -1 and 1
|
|
88
|
+
*/
|
|
89
|
+
export declare function cloudsPattern(x: number, y: number, time: number, config?: PatternConfig): number;
|
|
90
|
+
/**
|
|
91
|
+
* Plasma pattern - classic demoscene effect
|
|
92
|
+
* Combines sine waves at different frequencies and phases
|
|
93
|
+
*
|
|
94
|
+
* @param x - X coordinate
|
|
95
|
+
* @param y - Y coordinate
|
|
96
|
+
* @param time - Time value for animation
|
|
97
|
+
* @param config - Pattern configuration
|
|
98
|
+
* @returns Value between -1 and 1
|
|
99
|
+
*/
|
|
100
|
+
export declare function plasmaPattern(x: number, y: number, time: number, config?: PatternConfig): number;
|
|
101
|
+
/**
|
|
102
|
+
* Vortex pattern - swirling spiral around center
|
|
103
|
+
*
|
|
104
|
+
* @param x - X coordinate
|
|
105
|
+
* @param y - Y coordinate
|
|
106
|
+
* @param centerX - Vortex center X
|
|
107
|
+
* @param centerY - Vortex center Y
|
|
108
|
+
* @param time - Time value for animation
|
|
109
|
+
* @param config - Pattern configuration
|
|
110
|
+
* @returns Value between -1 and 1
|
|
111
|
+
*/
|
|
112
|
+
export declare function vortexPattern(x: number, y: number, centerX: number, centerY: number, time: number, config?: PatternConfig): number;
|
|
113
|
+
/**
|
|
114
|
+
* Matrix pattern - falling columns like digital rain
|
|
115
|
+
*
|
|
116
|
+
* @param x - X coordinate (column)
|
|
117
|
+
* @param y - Y coordinate (row)
|
|
118
|
+
* @param time - Time value for animation
|
|
119
|
+
* @param config - Pattern configuration
|
|
120
|
+
* @returns Value between -1 and 1
|
|
121
|
+
*/
|
|
122
|
+
export declare function matrixPattern(x: number, y: number, time: number, config?: PatternConfig): number;
|
|
123
|
+
/**
|
|
124
|
+
* Gradient pattern - smooth animated gradients
|
|
125
|
+
*
|
|
126
|
+
* @param x - X coordinate
|
|
127
|
+
* @param y - Y coordinate
|
|
128
|
+
* @param cols - Total columns (for normalization)
|
|
129
|
+
* @param rows - Total rows (for normalization)
|
|
130
|
+
* @param time - Time value for animation
|
|
131
|
+
* @param config - Pattern configuration
|
|
132
|
+
* @returns Value between -1 and 1
|
|
133
|
+
*/
|
|
134
|
+
export declare function gradientPattern(x: number, y: number, cols: number, rows: number, time: number, config?: PatternConfig): number;
|
|
135
|
+
/**
|
|
136
|
+
* Diamond pattern - interference creating diamond shapes
|
|
137
|
+
*
|
|
138
|
+
* @param x - X coordinate
|
|
139
|
+
* @param y - Y coordinate
|
|
140
|
+
* @param time - Time value for animation
|
|
141
|
+
* @param config - Pattern configuration
|
|
142
|
+
* @returns Value between -1 and 1
|
|
143
|
+
*/
|
|
144
|
+
export declare function diamondPattern(x: number, y: number, time: number, config?: PatternConfig): number;
|
|
145
|
+
/**
|
|
146
|
+
* Fractal pattern - animated Mandelbrot/Julia set
|
|
147
|
+
*
|
|
148
|
+
* @param x - X coordinate
|
|
149
|
+
* @param y - Y coordinate
|
|
150
|
+
* @param cols - Total columns (for centering)
|
|
151
|
+
* @param rows - Total rows (for centering)
|
|
152
|
+
* @param time - Time value for animation
|
|
153
|
+
* @param config - Pattern configuration
|
|
154
|
+
* @returns Value between -1 and 1
|
|
155
|
+
*/
|
|
156
|
+
export declare function fractalPattern(x: number, y: number, cols: number, rows: number, time: number, config?: PatternConfig): number;
|
|
79
157
|
/**
|
|
80
158
|
* Generate a brightness grid for pattern rendering
|
|
81
159
|
*
|
|
@@ -86,7 +164,7 @@ export declare function seededNoise2D(x: number, y: number, seed?: number): numb
|
|
|
86
164
|
* @param config - Pattern configuration
|
|
87
165
|
* @returns 2D array of brightness values (0-255)
|
|
88
166
|
*/
|
|
89
|
-
export declare function generateBrightnessGrid(cols: number, rows: number, pattern:
|
|
167
|
+
export declare function generateBrightnessGrid(cols: number, rows: number, pattern: PatternType, time?: number, config?: PatternConfig): number[][];
|
|
90
168
|
/**
|
|
91
169
|
* Generate ImageData from a brightness grid
|
|
92
170
|
*
|
|
@@ -96,5 +174,44 @@ export declare function generateBrightnessGrid(cols: number, rows: number, patte
|
|
|
96
174
|
* @returns ImageData object
|
|
97
175
|
*/
|
|
98
176
|
export declare function gridToImageData(grid: number[][], cellWidth: number, cellHeight: number): ImageData;
|
|
99
|
-
export type PatternType = 'perlin' | 'waves' | 'static' | 'ripple' | 'fbm';
|
|
177
|
+
export type PatternType = 'perlin' | 'waves' | 'static' | 'ripple' | 'fbm' | 'clouds' | 'plasma' | 'vortex' | 'matrix' | 'gradient' | 'diamond' | 'fractal';
|
|
178
|
+
/**
|
|
179
|
+
* Reusable brightness buffer using flat Uint8Array
|
|
180
|
+
* ~30% faster than number[][] due to contiguous memory and no GC pressure
|
|
181
|
+
*/
|
|
182
|
+
export interface BrightnessBuffer {
|
|
183
|
+
/** Flat array of brightness values (0-255), row-major order */
|
|
184
|
+
data: Uint8Array;
|
|
185
|
+
/** Number of columns */
|
|
186
|
+
cols: number;
|
|
187
|
+
/** Number of rows */
|
|
188
|
+
rows: number;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Create a reusable brightness buffer
|
|
192
|
+
* Call once at init, then reuse with fillBrightnessBuffer
|
|
193
|
+
*
|
|
194
|
+
* @param cols - Number of columns
|
|
195
|
+
* @param rows - Number of rows
|
|
196
|
+
* @returns Reusable buffer object
|
|
197
|
+
*/
|
|
198
|
+
export declare function createBrightnessBuffer(cols: number, rows: number): BrightnessBuffer;
|
|
199
|
+
/**
|
|
200
|
+
* Fill an existing brightness buffer with pattern data (zero allocation)
|
|
201
|
+
* Use this in animation loops for best performance
|
|
202
|
+
*
|
|
203
|
+
* @param buffer - Pre-allocated buffer from createBrightnessBuffer
|
|
204
|
+
* @param pattern - Pattern type to generate
|
|
205
|
+
* @param time - Current time in seconds
|
|
206
|
+
* @param config - Pattern configuration
|
|
207
|
+
*/
|
|
208
|
+
export declare function fillBrightnessBuffer(buffer: BrightnessBuffer, pattern: PatternType, time?: number, config?: PatternConfig): void;
|
|
209
|
+
/**
|
|
210
|
+
* Get brightness value from buffer at (col, row)
|
|
211
|
+
* @param buffer - Brightness buffer
|
|
212
|
+
* @param col - Column index
|
|
213
|
+
* @param row - Row index
|
|
214
|
+
* @returns Brightness value 0-255
|
|
215
|
+
*/
|
|
216
|
+
export declare function getBufferValue(buffer: BrightnessBuffer, col: number, row: number): number;
|
|
100
217
|
//# sourceMappingURL=patterns.d.ts.map
|
package/dist/patterns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AAkDF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAwB1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,EAAE,WAAW,GAAE,MAAY,GAAG,MAAM,CAcrG;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,aAAsC,GAC7C,MAAM,CAOR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,aAAsC,GAC7C,MAAM,CAOR;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,MAAM,CAG5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
|