open-brandkit 0.4.7

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 (61) hide show
  1. package/LICENSE +72 -0
  2. package/README.md +284 -0
  3. package/dist/adapters/next/brandkit-page.d.ts +15 -0
  4. package/dist/adapters/next/brandkit-page.d.ts.map +1 -0
  5. package/dist/adapters/next/brandkit-page.js +1085 -0
  6. package/dist/adapters/next/brandkit-page.js.map +1 -0
  7. package/dist/adapters/next/index.d.ts +3 -0
  8. package/dist/adapters/next/index.d.ts.map +1 -0
  9. package/dist/adapters/next/index.js +3 -0
  10. package/dist/adapters/next/index.js.map +1 -0
  11. package/dist/adapters/next/manifest.d.ts +33 -0
  12. package/dist/adapters/next/manifest.d.ts.map +1 -0
  13. package/dist/adapters/next/manifest.js +57 -0
  14. package/dist/adapters/next/manifest.js.map +1 -0
  15. package/dist/adapters/next/route-handlers.d.ts +102 -0
  16. package/dist/adapters/next/route-handlers.d.ts.map +1 -0
  17. package/dist/adapters/next/route-handlers.js +451 -0
  18. package/dist/adapters/next/route-handlers.js.map +1 -0
  19. package/dist/adapters/next/server.d.ts +2 -0
  20. package/dist/adapters/next/server.d.ts.map +1 -0
  21. package/dist/adapters/next/server.js +2 -0
  22. package/dist/adapters/next/server.js.map +1 -0
  23. package/dist/cli/index.d.ts +3 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +1079 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/core/assets.d.ts +34 -0
  28. package/dist/core/assets.d.ts.map +1 -0
  29. package/dist/core/assets.js +200 -0
  30. package/dist/core/assets.js.map +1 -0
  31. package/dist/core/banner-renderer.d.ts +21 -0
  32. package/dist/core/banner-renderer.d.ts.map +1 -0
  33. package/dist/core/banner-renderer.js +119 -0
  34. package/dist/core/banner-renderer.js.map +1 -0
  35. package/dist/core/build.d.ts +13 -0
  36. package/dist/core/build.d.ts.map +1 -0
  37. package/dist/core/build.js +345 -0
  38. package/dist/core/build.js.map +1 -0
  39. package/dist/core/colors.d.ts +12 -0
  40. package/dist/core/colors.d.ts.map +1 -0
  41. package/dist/core/colors.js +335 -0
  42. package/dist/core/colors.js.map +1 -0
  43. package/dist/core/config.d.ts +103 -0
  44. package/dist/core/config.d.ts.map +1 -0
  45. package/dist/core/config.js +119 -0
  46. package/dist/core/config.js.map +1 -0
  47. package/dist/core/index.d.ts +8 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +8 -0
  50. package/dist/core/index.js.map +1 -0
  51. package/dist/core/static-page.d.ts +3 -0
  52. package/dist/core/static-page.d.ts.map +1 -0
  53. package/dist/core/static-page.js +1830 -0
  54. package/dist/core/static-page.js.map +1 -0
  55. package/dist/core/types.d.ts +163 -0
  56. package/dist/core/types.d.ts.map +1 -0
  57. package/dist/core/types.js +2 -0
  58. package/dist/core/types.js.map +1 -0
  59. package/docs/STYLE_CONTRACT.md +48 -0
  60. package/examples/acme-studio-color-system.md +99 -0
  61. package/package.json +89 -0
@@ -0,0 +1,345 @@
1
+ import { copyFile, mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import JSZip from 'jszip';
4
+ import { applyBrandCasing, compareDownloads, createEmptyLogoGroups, ensureDirectory, getDownloadFormat, getFileStem, getPreferredPreviewUrl, getPublicAssetPath, groupAssetByConfig, humanizeAssetTitle, inferPreviewTone, isSameFile, joinPublicUrl, readBrandAssetFiles, toPosixPath, } from './assets.js';
5
+ import { renderBanner } from './banner-renderer.js';
6
+ import { brandKitConfigSchema } from './config.js';
7
+ import { loadBrandKitColorSections, loadBrandKitColors, loadBrandKitPrintColorGroups, normalizeHexColor, } from './colors.js';
8
+ import { generateStaticBrandKitPage } from './static-page.js';
9
+ function stripSlashes(value) {
10
+ return value.replace(/^\/+|\/+$/g, '');
11
+ }
12
+ function slugify(value) {
13
+ return value
14
+ .toLowerCase()
15
+ .replace(/[^a-z0-9]+/g, '-')
16
+ .replace(/(^-|-$)/g, '');
17
+ }
18
+ function outputFileNameForPreset(brandName, key) {
19
+ const brandSlug = slugify(brandName) || 'brand';
20
+ return `${brandSlug}-${slugify(key)}.png`;
21
+ }
22
+ function resolveColor(value, colors, fallback) {
23
+ if (!value)
24
+ return fallback;
25
+ const hex = normalizeHexColor(value);
26
+ if (hex)
27
+ return hex;
28
+ return colors.find((color) => color.key === value)?.hex ?? fallback;
29
+ }
30
+ function createDownload(publicUrl) {
31
+ return {
32
+ fileName: path.posix.basename(publicUrl),
33
+ format: getDownloadFormat(publicUrl),
34
+ url: publicUrl,
35
+ };
36
+ }
37
+ function applyConfiguredBrandCasing(config, value) {
38
+ return applyBrandCasing(value, {
39
+ brandName: config.brand.name,
40
+ shortName: config.brand.shortName,
41
+ });
42
+ }
43
+ function applyConfiguredBrandCasingToColors(config, colors) {
44
+ return colors.map((color) => ({
45
+ ...color,
46
+ name: applyConfiguredBrandCasing(config, color.name),
47
+ }));
48
+ }
49
+ function applyConfiguredBrandCasingToColorSections(config, sections) {
50
+ return sections.map((section) => ({
51
+ ...section,
52
+ label: applyConfiguredBrandCasing(config, section.label),
53
+ rows: section.rows.map((row) => row.map((name) => applyConfiguredBrandCasing(config, name))),
54
+ }));
55
+ }
56
+ function applyConfiguredBrandCasingToPrintColorGroups(config, groups) {
57
+ return groups.map((group) => ({
58
+ ...group,
59
+ label: applyConfiguredBrandCasing(config, group.label),
60
+ items: group.items.map((item) => ({
61
+ ...item,
62
+ pantone: applyConfiguredBrandCasing(config, item.pantone),
63
+ })),
64
+ }));
65
+ }
66
+ async function discoverLogoGroups({ assetBasePath, config, outputRoot, projectRoot, customBannerIds = new Set(), }) {
67
+ const sourceDir = path.resolve(projectRoot, config.logos.sourceDir);
68
+ const logoOutputDir = path.join(outputRoot, 'logos');
69
+ const files = await readBrandAssetFiles(sourceDir);
70
+ const groups = createEmptyLogoGroups(config.logos);
71
+ const groupsByKey = new Map(groups.map((group) => [group.key, group]));
72
+ const assetsByGroup = new Map();
73
+ const writtenFiles = [];
74
+ for (const group of groups) {
75
+ assetsByGroup.set(group.key, new Map());
76
+ }
77
+ for (const sourcePath of files) {
78
+ const relativePath = path.relative(sourceDir, sourcePath);
79
+ const normalizedRelativePath = toPosixPath(relativePath);
80
+ const groupConfig = groupAssetByConfig(normalizedRelativePath, config.logos.groups);
81
+ const groupKey = groupConfig?.key ?? (config.logos.includeUngrouped === false ? null : 'other');
82
+ if (!groupKey)
83
+ continue;
84
+ const group = groupsByKey.get(groupKey);
85
+ const assets = assetsByGroup.get(groupKey);
86
+ if (!group || !assets)
87
+ continue;
88
+ const destinationPath = path.join(logoOutputDir, relativePath);
89
+ await ensureDirectory(path.dirname(destinationPath));
90
+ if (!(await isSameFile(sourcePath, destinationPath))) {
91
+ await copyFile(sourcePath, destinationPath);
92
+ writtenFiles.push(destinationPath);
93
+ }
94
+ const publicUrl = getPublicAssetPath({
95
+ assetBasePath,
96
+ outputSubdir: 'logos',
97
+ relativePath,
98
+ });
99
+ const stem = getFileStem(relativePath);
100
+ const existing = assets.get(stem);
101
+ const download = createDownload(publicUrl);
102
+ if (existing) {
103
+ existing.downloads.push(download);
104
+ continue;
105
+ }
106
+ assets.set(stem, {
107
+ id: `${group.key}:${stem}`,
108
+ title: humanizeAssetTitle(stem, {
109
+ brandName: config.brand.name,
110
+ shortName: config.brand.shortName,
111
+ }) || stem,
112
+ previewTone: inferPreviewTone(relativePath),
113
+ previewUrl: publicUrl,
114
+ downloads: [download],
115
+ });
116
+ }
117
+ for (const group of groups) {
118
+ const assets = assetsByGroup.get(group.key);
119
+ group.items = Array.from(assets?.values() ?? [])
120
+ .map((asset) => {
121
+ const downloads = asset.downloads.sort(compareDownloads);
122
+ return {
123
+ ...asset,
124
+ downloads,
125
+ previewUrl: getPreferredPreviewUrl(downloads),
126
+ };
127
+ })
128
+ .sort((left, right) => left.title.localeCompare(right.title));
129
+ }
130
+ return {
131
+ groups: groups.filter((group) => group.items.length > 0),
132
+ writtenFiles,
133
+ };
134
+ }
135
+ async function renderBannerGroups({ assetBasePath, config, customBannerIds = new Set(), outputRoot, projectRoot, }) {
136
+ if (!config.socialBanners) {
137
+ return { groups: [], writtenFiles: [] };
138
+ }
139
+ const bannerConfig = config.socialBanners;
140
+ const outputDir = bannerConfig.outputDir ?? 'banners';
141
+ const publicPath = bannerConfig.publicPath ?? joinPublicUrl(assetBasePath, outputDir);
142
+ const bannerOutputDir = path.join(outputRoot, stripSlashes(outputDir));
143
+ const groups = new Map();
144
+ const writtenFiles = [];
145
+ const firstColor = bannerConfig.colors[0]?.hex ?? '#0d2249';
146
+ const secondColor = bannerConfig.colors[1]?.hex ?? '#4784de';
147
+ const thirdColor = bannerConfig.colors[2]?.hex ?? '#ffffff';
148
+ await mkdir(bannerOutputDir, { recursive: true });
149
+ for (const preset of bannerConfig.presets) {
150
+ const markVariant = bannerConfig.markVariants.find((variant) => variant.key === preset.markVariant) ?? bannerConfig.markVariants[0];
151
+ if (!markVariant)
152
+ continue;
153
+ const fileName = preset.outputFileName ??
154
+ outputFileNameForPreset(config.brand.shortName ?? config.brand.name, preset.key);
155
+ const outputPath = path.join(bannerOutputDir, fileName);
156
+ const publicUrl = joinPublicUrl(publicPath, fileName);
157
+ const isCustom = customBannerIds.has(preset.key);
158
+ const backgroundColor = resolveColor(preset.backgroundColor, bannerConfig.colors, firstColor);
159
+ const accentColor = resolveColor(preset.accentColor, bannerConfig.colors, secondColor);
160
+ const secondaryColor = resolveColor(preset.secondaryColor, bannerConfig.colors, thirdColor);
161
+ const markAssetPath = (preset.markColor ? markVariant.colorAssets?.[preset.markColor] : undefined) ??
162
+ markVariant.assetPath;
163
+ if (!isCustom) {
164
+ const output = await renderBanner({
165
+ alignment: preset.alignment,
166
+ backgroundColor,
167
+ accentColor,
168
+ secondaryColor,
169
+ height: preset.height,
170
+ markAssetPath: path.resolve(projectRoot, markAssetPath),
171
+ markScale: markVariant.scale,
172
+ pattern: preset.pattern,
173
+ width: preset.width,
174
+ });
175
+ await writeFile(outputPath, output);
176
+ writtenFiles.push(outputPath);
177
+ }
178
+ const groupKey = preset.groupKey ?? preset.key;
179
+ const groupLabel = preset.groupLabel ?? preset.label;
180
+ const group = groups.get(groupKey) ??
181
+ {
182
+ key: groupKey,
183
+ label: groupLabel,
184
+ items: [],
185
+ };
186
+ const asset = {
187
+ id: preset.key,
188
+ title: preset.label,
189
+ description: preset.description ?? `${preset.width} x ${preset.height} px`,
190
+ width: preset.width,
191
+ height: preset.height,
192
+ previewUrl: publicUrl,
193
+ ...(isCustom ? { isCustom } : {}),
194
+ downloads: [createDownload(publicUrl)],
195
+ };
196
+ group.items.push(asset);
197
+ groups.set(groupKey, group);
198
+ }
199
+ return {
200
+ groups: Array.from(groups.values()),
201
+ writtenFiles,
202
+ };
203
+ }
204
+ function filePathFromPublicUrl(projectRoot, publicDir, url) {
205
+ return path.join(projectRoot, publicDir, ...url.split('/').filter(Boolean));
206
+ }
207
+ async function createZip({ entries, filePath, projectRoot, publicDir, }) {
208
+ const zip = new JSZip();
209
+ for (const entry of entries) {
210
+ const sourcePath = filePathFromPublicUrl(projectRoot, publicDir, entry.download.url);
211
+ const file = await readFile(sourcePath);
212
+ zip.file(entry.zipPath, file, { createFolders: false });
213
+ }
214
+ const content = await zip.generateAsync({ type: 'nodebuffer' });
215
+ await mkdir(path.dirname(filePath), { recursive: true });
216
+ await writeFile(filePath, content);
217
+ }
218
+ async function createDownloadArchives({ assetBasePath, assetGroups, bannerGroups, archivePrefix, outputRoot, projectRoot, publicDir, }) {
219
+ const downloadsDir = path.join(outputRoot, 'downloads');
220
+ const writtenFiles = [];
221
+ const allEntries = [];
222
+ const assetGroupArchives = {};
223
+ const archiveFileName = (name) => archivePrefix ? `${archivePrefix}-${name}.zip` : `${name}.zip`;
224
+ const bannerEntries = bannerGroups.flatMap((group) => group.items.flatMap((asset) => asset.downloads.map((download) => ({
225
+ download,
226
+ zipPath: path.posix.join(group.key, download.fileName),
227
+ }))));
228
+ for (const group of assetGroups) {
229
+ const groupEntries = group.items.flatMap((asset) => asset.downloads.map((download) => ({
230
+ download,
231
+ zipPath: download.fileName,
232
+ })));
233
+ if (!groupEntries.length)
234
+ continue;
235
+ const fileName = archiveFileName(group.key);
236
+ const zipPath = path.join(downloadsDir, fileName);
237
+ await createZip({ entries: groupEntries, filePath: zipPath, projectRoot, publicDir });
238
+ writtenFiles.push(zipPath);
239
+ assetGroupArchives[group.key] = joinPublicUrl(assetBasePath, 'downloads', fileName);
240
+ allEntries.push(...groupEntries.map((entry) => ({
241
+ ...entry,
242
+ zipPath: path.posix.join(group.key, entry.download.fileName),
243
+ })));
244
+ }
245
+ for (const group of bannerGroups) {
246
+ allEntries.push(...group.items.flatMap((asset) => asset.downloads.map((download) => ({
247
+ download,
248
+ zipPath: path.posix.join('banners', group.key, download.fileName),
249
+ }))));
250
+ }
251
+ const bannerAssetsFileName = archiveFileName('banners');
252
+ const allAssetsFileName = archiveFileName('all-assets');
253
+ const bannerAssetsUrl = bannerEntries.length
254
+ ? joinPublicUrl(assetBasePath, 'downloads', bannerAssetsFileName)
255
+ : undefined;
256
+ const allAssetsUrl = allEntries.length
257
+ ? joinPublicUrl(assetBasePath, 'downloads', allAssetsFileName)
258
+ : undefined;
259
+ if (bannerEntries.length) {
260
+ const bannerAssetsPath = path.join(downloadsDir, bannerAssetsFileName);
261
+ await createZip({
262
+ entries: bannerEntries,
263
+ filePath: bannerAssetsPath,
264
+ projectRoot,
265
+ publicDir,
266
+ });
267
+ writtenFiles.push(bannerAssetsPath);
268
+ }
269
+ if (allEntries.length) {
270
+ const allAssetsPath = path.join(downloadsDir, allAssetsFileName);
271
+ await createZip({
272
+ entries: allEntries,
273
+ filePath: allAssetsPath,
274
+ projectRoot,
275
+ publicDir,
276
+ });
277
+ writtenFiles.push(allAssetsPath);
278
+ }
279
+ return { allAssetsUrl, assetGroupArchives, bannerAssetsUrl, writtenFiles };
280
+ }
281
+ export async function buildBrandKit(inputConfig, options = {}) {
282
+ const projectRoot = options.cwd ?? process.cwd();
283
+ const config = brandKitConfigSchema.parse(inputConfig);
284
+ const route = config.route ?? '/brandkit';
285
+ const output = config.output ?? {};
286
+ const publicDir = output.publicDir ?? 'public';
287
+ const assetBasePath = output.assetBasePath ?? route;
288
+ const outputRoot = path.resolve(projectRoot, publicDir, stripSlashes(assetBasePath));
289
+ const writtenFiles = [];
290
+ await mkdir(outputRoot, { recursive: true });
291
+ const logoResult = await discoverLogoGroups({
292
+ assetBasePath,
293
+ config,
294
+ outputRoot,
295
+ projectRoot,
296
+ });
297
+ const brandColors = applyConfiguredBrandCasingToColors(config, await loadBrandKitColors(config.colors, projectRoot));
298
+ const colorSections = applyConfiguredBrandCasingToColorSections(config, await loadBrandKitColorSections(config.colors, projectRoot, brandColors));
299
+ const printColorGroups = applyConfiguredBrandCasingToPrintColorGroups(config, await loadBrandKitPrintColorGroups(config.colors, projectRoot));
300
+ const bannerResult = await renderBannerGroups({
301
+ assetBasePath,
302
+ config,
303
+ customBannerIds: new Set(options.customBannerIds ?? []),
304
+ outputRoot,
305
+ projectRoot,
306
+ });
307
+ const downloadResult = await createDownloadArchives({
308
+ assetBasePath,
309
+ assetGroups: logoResult.groups,
310
+ archivePrefix: slugify(config.brand.shortName ?? config.brand.name),
311
+ bannerGroups: bannerResult.groups,
312
+ outputRoot,
313
+ projectRoot,
314
+ publicDir,
315
+ });
316
+ const manifest = {
317
+ schemaVersion: 1,
318
+ generatedAt: new Date().toISOString(),
319
+ route,
320
+ assetBasePath,
321
+ brand: config.brand,
322
+ assetGroups: logoResult.groups,
323
+ brandColors,
324
+ colorSections,
325
+ printColorGroups,
326
+ bannerGroups: bannerResult.groups,
327
+ downloads: {
328
+ allAssets: downloadResult.allAssetsUrl,
329
+ assetGroups: downloadResult.assetGroupArchives,
330
+ bannerAssets: downloadResult.bannerAssetsUrl,
331
+ },
332
+ };
333
+ const manifestPath = path.join(outputRoot, output.manifestFileName ?? 'brandkit.manifest.json');
334
+ const sitePath = path.join(outputRoot, output.siteFileName ?? 'index.html');
335
+ await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
336
+ await writeFile(sitePath, generateStaticBrandKitPage(manifest));
337
+ writtenFiles.push(...logoResult.writtenFiles, ...bannerResult.writtenFiles, ...downloadResult.writtenFiles, manifestPath, sitePath);
338
+ return {
339
+ manifest,
340
+ manifestPath,
341
+ sitePath,
342
+ writtenFiles,
343
+ };
344
+ }
345
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/core/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { BrandKitColor, BrandKitColorConfig, BrandKitColorSection, BrandKitPrintColorGroup } from './types.js';
2
+ export declare function normalizeHexColor(value: string): string | null;
3
+ export declare function parseMarkdownColorTable(markdown: string, sectionHeading?: string): BrandKitColor[];
4
+ export declare function parseMarkdownColorSections(markdown: string, sectionHeading?: string): BrandKitColorSection[];
5
+ export declare function parseMarkdownPrintColorGroups(markdown: string, sectionHeading?: string): BrandKitPrintColorGroup[];
6
+ export declare function parseCsvColorTable(csv: string): BrandKitColor[];
7
+ export declare function parseJsonColorSource(json: string): BrandKitColor[];
8
+ export declare function loadBrandKitColors(config: BrandKitColorConfig, projectRoot: string): Promise<BrandKitColor[]>;
9
+ export declare function loadBrandKitColorSections(config: BrandKitColorConfig, projectRoot: string, fallbackColors: BrandKitColor[]): Promise<BrandKitColorSection[]>;
10
+ export declare function loadBrandKitPrintColorGroups(config: BrandKitColorConfig, projectRoot: string): Promise<BrandKitPrintColorGroup[]>;
11
+ export declare function createDefaultColorSections(colors: BrandKitColor[]): BrandKitColorSection[];
12
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/core/colors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EAEpB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAKnB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,iBAY9C;AAiGD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,aAAa,EAAE,CAwBjB;AAsED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,cAAc,SAAqB,GAClC,oBAAoB,EAAE,CA+BxB;AA0CD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,cAAc,SAA0B,GACvC,uBAAuB,EAAE,CA6C3B;AAUD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAgB/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAiBlE;AAkCD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,4BAcpB;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,aAAa,EAAE,mCAahC;AAaD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,sCAOpB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EAAE,GACtB,oBAAoB,EAAE,CAUxB"}