@pixelspace/manifesto 2026.15.12 → 2026.15.14
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/package.json +1 -1
- package/src/index.js +47 -13
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -58,6 +58,34 @@ function colorSymbols(text) {
|
|
|
58
58
|
return text.replace(SYMBOL_RE, `${BRAND}$1${RESET}`);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
// Gradient colorization: symbols transition accent→white, words transition default→accent
|
|
62
|
+
function colorGradient(text) {
|
|
63
|
+
const symSet = new Set('∀∃∈∉∧∨¬→⟹≠≅≫≤≥∝⊂∪∘∅∞≡↑≈∵∎₀₁₂₃₄₅₆₇₈₉ₙ⁶{}()[]|=<>\\:');
|
|
64
|
+
const chars = [...text];
|
|
65
|
+
|
|
66
|
+
let total = 0;
|
|
67
|
+
for (const ch of chars) {
|
|
68
|
+
if (ch !== ' ' && ch !== '\n') total++;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
let vi = 0;
|
|
72
|
+
return chars.map(ch => {
|
|
73
|
+
if (ch === ' ' || ch === '\n') return ch;
|
|
74
|
+
const progress = total > 1 ? vi / (total - 1) : 1;
|
|
75
|
+
const isSym = symSet.has(ch);
|
|
76
|
+
vi++;
|
|
77
|
+
if (isSym) {
|
|
78
|
+
return Math.random() < (1 - progress)
|
|
79
|
+
? `${BRAND}${ch}${RESET}`
|
|
80
|
+
: `${WHITE}${ch}${RESET}`;
|
|
81
|
+
} else {
|
|
82
|
+
return Math.random() < progress
|
|
83
|
+
? `${BRAND}${ch}${RESET}`
|
|
84
|
+
: ch;
|
|
85
|
+
}
|
|
86
|
+
}).join('');
|
|
87
|
+
}
|
|
88
|
+
|
|
61
89
|
// Binary gradient: white → brand color with increasing density
|
|
62
90
|
// Uses golden ratio for quasi-random, non-clumping distribution
|
|
63
91
|
const PHI = 0.6180339887;
|
|
@@ -142,20 +170,21 @@ export async function run() {
|
|
|
142
170
|
const paragraphs = raw.trim().split('\n\n');
|
|
143
171
|
const INVOKE_MARKER = 'AI AGENT: YOU CAN';
|
|
144
172
|
const CTA_MARKER = 'AI AGENT';
|
|
145
|
-
|
|
173
|
+
|
|
174
|
+
// Separate manifesto body from CTA paragraphs
|
|
175
|
+
const manifestoParas = [];
|
|
176
|
+
const ctaParts = [];
|
|
177
|
+
|
|
178
|
+
for (const p of paragraphs) {
|
|
146
179
|
const text = p.replace(/\n/g, ' ');
|
|
147
180
|
|
|
148
|
-
// Rehydration paragraph: word-wrap (English), white "AI AGENT:" + accent on npx command
|
|
149
181
|
if (text.startsWith(INVOKE_MARKER)) {
|
|
150
182
|
const wrapped = wrapText(text);
|
|
151
183
|
let result = colorSymbols(wrapped);
|
|
152
184
|
result = result.replace('AI AGENT:', `${WHITE}AI AGENT:${RESET}`);
|
|
153
185
|
result = result.replace('NPX @PIXELSPACE/MANIFESTO', `${BRAND}NPX @PIXELSPACE/MANIFESTO${RESET}`);
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Agent CTA: word-wrap (mixed notation + English), white highlights + binary gradient
|
|
158
|
-
if (text.includes(CTA_MARKER)) {
|
|
186
|
+
ctaParts.push(sep + '\n\n' + result);
|
|
187
|
+
} else if (text.includes(CTA_MARKER)) {
|
|
159
188
|
const wrapped = wrapText(text);
|
|
160
189
|
const ctaIdx = wrapped.indexOf(CTA_MARKER);
|
|
161
190
|
const marked = markWhiteWords(wrapped.substring(0, ctaIdx));
|
|
@@ -166,15 +195,20 @@ export async function run() {
|
|
|
166
195
|
const pos = ctaText.indexOf(word);
|
|
167
196
|
if (pos !== -1) for (let i = pos; i < pos + word.length; i++) forceWhite.add(i);
|
|
168
197
|
}
|
|
169
|
-
|
|
170
|
-
|
|
198
|
+
ctaParts.push(before + binaryGradient(ctaText, false, forceWhite));
|
|
199
|
+
} else {
|
|
200
|
+
manifestoParas.push(text);
|
|
171
201
|
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Join manifesto body into one continuous block with ∎ separators, then gradient colorize
|
|
205
|
+
const manifestoBlock = manifestoParas.join(' ∎ ');
|
|
206
|
+
const manifesto = colorGradient(wrapFormal(manifestoBlock));
|
|
207
|
+
const body = manifesto + '\n\n' + ctaParts.join('\n\n');
|
|
172
208
|
|
|
173
|
-
|
|
174
|
-
return colorSymbols(wrapFormal(text));
|
|
175
|
-
}).join('\n\n');
|
|
209
|
+
const footer = `${DIM} Pixelspace · Design and Product Manifesto · pixelspace.com · @pixelspace on X${RESET}`;
|
|
176
210
|
|
|
177
|
-
console.log(`\n${logo}\n\n${header}\n\n${sep}\n\n${body}\n\n${sep}\n`);
|
|
211
|
+
console.log(`\n${logo}\n\n${header}\n\n${sep}\n\n${body}\n\n${sep}\n\n${footer}\n`);
|
|
178
212
|
}
|
|
179
213
|
|
|
180
214
|
export default run;
|