@forgespace/branding-mcp 0.4.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 (244) hide show
  1. package/.env.example +3 -0
  2. package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  3. package/.github/workflows/ci.yml +73 -0
  4. package/.github/workflows/release-automation.yml +56 -0
  5. package/.github/workflows/security-scan.yml +37 -0
  6. package/.gitleaks.toml +14 -0
  7. package/.prettierrc.json +10 -0
  8. package/CHANGELOG.md +66 -0
  9. package/CONTRIBUTING.md +203 -0
  10. package/LICENSE +21 -0
  11. package/README.md +105 -0
  12. package/data/README.md +13 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +49 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/branding-core/ai/brand-interpreter.d.ts +5 -0
  18. package/dist/lib/branding-core/ai/brand-interpreter.d.ts.map +1 -0
  19. package/dist/lib/branding-core/ai/brand-interpreter.js +16 -0
  20. package/dist/lib/branding-core/ai/brand-interpreter.js.map +1 -0
  21. package/dist/lib/branding-core/ai/claude-interpreter.d.ts +5 -0
  22. package/dist/lib/branding-core/ai/claude-interpreter.d.ts.map +1 -0
  23. package/dist/lib/branding-core/ai/claude-interpreter.js +55 -0
  24. package/dist/lib/branding-core/ai/claude-interpreter.js.map +1 -0
  25. package/dist/lib/branding-core/ai/intent-applier.d.ts +4 -0
  26. package/dist/lib/branding-core/ai/intent-applier.d.ts.map +1 -0
  27. package/dist/lib/branding-core/ai/intent-applier.js +29 -0
  28. package/dist/lib/branding-core/ai/intent-applier.js.map +1 -0
  29. package/dist/lib/branding-core/ai/keyword-interpreter.d.ts +4 -0
  30. package/dist/lib/branding-core/ai/keyword-interpreter.d.ts.map +1 -0
  31. package/dist/lib/branding-core/ai/keyword-interpreter.js +85 -0
  32. package/dist/lib/branding-core/ai/keyword-interpreter.js.map +1 -0
  33. package/dist/lib/branding-core/ai/prompts.d.ts +4 -0
  34. package/dist/lib/branding-core/ai/prompts.d.ts.map +1 -0
  35. package/dist/lib/branding-core/ai/prompts.js +79 -0
  36. package/dist/lib/branding-core/ai/prompts.js.map +1 -0
  37. package/dist/lib/branding-core/ai/types.d.ts +27 -0
  38. package/dist/lib/branding-core/ai/types.d.ts.map +1 -0
  39. package/dist/lib/branding-core/ai/types.js +2 -0
  40. package/dist/lib/branding-core/ai/types.js.map +1 -0
  41. package/dist/lib/branding-core/documents/html-generator.d.ts +3 -0
  42. package/dist/lib/branding-core/documents/html-generator.d.ts.map +1 -0
  43. package/dist/lib/branding-core/documents/html-generator.js +31 -0
  44. package/dist/lib/branding-core/documents/html-generator.js.map +1 -0
  45. package/dist/lib/branding-core/documents/pdf-generator.d.ts +3 -0
  46. package/dist/lib/branding-core/documents/pdf-generator.d.ts.map +1 -0
  47. package/dist/lib/branding-core/documents/pdf-generator.js +20 -0
  48. package/dist/lib/branding-core/documents/pdf-generator.js.map +1 -0
  49. package/dist/lib/branding-core/exporters/css-variables.d.ts +3 -0
  50. package/dist/lib/branding-core/exporters/css-variables.d.ts.map +1 -0
  51. package/dist/lib/branding-core/exporters/css-variables.js +62 -0
  52. package/dist/lib/branding-core/exporters/css-variables.js.map +1 -0
  53. package/dist/lib/branding-core/exporters/design-tokens.d.ts +3 -0
  54. package/dist/lib/branding-core/exporters/design-tokens.d.ts.map +1 -0
  55. package/dist/lib/branding-core/exporters/design-tokens.js +75 -0
  56. package/dist/lib/branding-core/exporters/design-tokens.js.map +1 -0
  57. package/dist/lib/branding-core/exporters/figma-tokens.d.ts +9 -0
  58. package/dist/lib/branding-core/exporters/figma-tokens.d.ts.map +1 -0
  59. package/dist/lib/branding-core/exporters/figma-tokens.js +69 -0
  60. package/dist/lib/branding-core/exporters/figma-tokens.js.map +1 -0
  61. package/dist/lib/branding-core/exporters/react-theme.d.ts +3 -0
  62. package/dist/lib/branding-core/exporters/react-theme.d.ts.map +1 -0
  63. package/dist/lib/branding-core/exporters/react-theme.js +61 -0
  64. package/dist/lib/branding-core/exporters/react-theme.js.map +1 -0
  65. package/dist/lib/branding-core/exporters/sass-variables.d.ts +3 -0
  66. package/dist/lib/branding-core/exporters/sass-variables.d.ts.map +1 -0
  67. package/dist/lib/branding-core/exporters/sass-variables.js +65 -0
  68. package/dist/lib/branding-core/exporters/sass-variables.js.map +1 -0
  69. package/dist/lib/branding-core/exporters/tailwind-preset.d.ts +3 -0
  70. package/dist/lib/branding-core/exporters/tailwind-preset.d.ts.map +1 -0
  71. package/dist/lib/branding-core/exporters/tailwind-preset.js +55 -0
  72. package/dist/lib/branding-core/exporters/tailwind-preset.js.map +1 -0
  73. package/dist/lib/branding-core/generators/border-system.d.ts +3 -0
  74. package/dist/lib/branding-core/generators/border-system.d.ts.map +1 -0
  75. package/dist/lib/branding-core/generators/border-system.js +37 -0
  76. package/dist/lib/branding-core/generators/border-system.js.map +1 -0
  77. package/dist/lib/branding-core/generators/color-palette.d.ts +7 -0
  78. package/dist/lib/branding-core/generators/color-palette.d.ts.map +1 -0
  79. package/dist/lib/branding-core/generators/color-palette.js +117 -0
  80. package/dist/lib/branding-core/generators/color-palette.js.map +1 -0
  81. package/dist/lib/branding-core/generators/favicon-generator.d.ts +3 -0
  82. package/dist/lib/branding-core/generators/favicon-generator.d.ts.map +1 -0
  83. package/dist/lib/branding-core/generators/favicon-generator.js +23 -0
  84. package/dist/lib/branding-core/generators/favicon-generator.js.map +1 -0
  85. package/dist/lib/branding-core/generators/gradient-system.d.ts +3 -0
  86. package/dist/lib/branding-core/generators/gradient-system.d.ts.map +1 -0
  87. package/dist/lib/branding-core/generators/gradient-system.js +74 -0
  88. package/dist/lib/branding-core/generators/gradient-system.js.map +1 -0
  89. package/dist/lib/branding-core/generators/logo-generator.d.ts +4 -0
  90. package/dist/lib/branding-core/generators/logo-generator.d.ts.map +1 -0
  91. package/dist/lib/branding-core/generators/logo-generator.js +130 -0
  92. package/dist/lib/branding-core/generators/logo-generator.js.map +1 -0
  93. package/dist/lib/branding-core/generators/motion-system.d.ts +3 -0
  94. package/dist/lib/branding-core/generators/motion-system.d.ts.map +1 -0
  95. package/dist/lib/branding-core/generators/motion-system.js +91 -0
  96. package/dist/lib/branding-core/generators/motion-system.js.map +1 -0
  97. package/dist/lib/branding-core/generators/og-image-generator.d.ts +3 -0
  98. package/dist/lib/branding-core/generators/og-image-generator.d.ts.map +1 -0
  99. package/dist/lib/branding-core/generators/og-image-generator.js +72 -0
  100. package/dist/lib/branding-core/generators/og-image-generator.js.map +1 -0
  101. package/dist/lib/branding-core/generators/shadow-system.d.ts +3 -0
  102. package/dist/lib/branding-core/generators/shadow-system.d.ts.map +1 -0
  103. package/dist/lib/branding-core/generators/shadow-system.js +44 -0
  104. package/dist/lib/branding-core/generators/shadow-system.js.map +1 -0
  105. package/dist/lib/branding-core/generators/spacing-scale.d.ts +3 -0
  106. package/dist/lib/branding-core/generators/spacing-scale.d.ts.map +1 -0
  107. package/dist/lib/branding-core/generators/spacing-scale.js +27 -0
  108. package/dist/lib/branding-core/generators/spacing-scale.js.map +1 -0
  109. package/dist/lib/branding-core/generators/typography-system.d.ts +3 -0
  110. package/dist/lib/branding-core/generators/typography-system.d.ts.map +1 -0
  111. package/dist/lib/branding-core/generators/typography-system.js +121 -0
  112. package/dist/lib/branding-core/generators/typography-system.js.map +1 -0
  113. package/dist/lib/branding-core/index.d.ts +24 -0
  114. package/dist/lib/branding-core/index.d.ts.map +1 -0
  115. package/dist/lib/branding-core/index.js +22 -0
  116. package/dist/lib/branding-core/index.js.map +1 -0
  117. package/dist/lib/branding-core/validators/brand-consistency.d.ts +3 -0
  118. package/dist/lib/branding-core/validators/brand-consistency.d.ts.map +1 -0
  119. package/dist/lib/branding-core/validators/brand-consistency.js +70 -0
  120. package/dist/lib/branding-core/validators/brand-consistency.js.map +1 -0
  121. package/dist/lib/branding-core/validators/contrast-checker.d.ts +3 -0
  122. package/dist/lib/branding-core/validators/contrast-checker.d.ts.map +1 -0
  123. package/dist/lib/branding-core/validators/contrast-checker.js +33 -0
  124. package/dist/lib/branding-core/validators/contrast-checker.js.map +1 -0
  125. package/dist/lib/branding-core/validators/token-schema.d.ts +10 -0
  126. package/dist/lib/branding-core/validators/token-schema.d.ts.map +1 -0
  127. package/dist/lib/branding-core/validators/token-schema.js +43 -0
  128. package/dist/lib/branding-core/validators/token-schema.js.map +1 -0
  129. package/dist/lib/config.d.ts +7 -0
  130. package/dist/lib/config.d.ts.map +1 -0
  131. package/dist/lib/config.js +8 -0
  132. package/dist/lib/config.js.map +1 -0
  133. package/dist/lib/logger.d.ts +3 -0
  134. package/dist/lib/logger.d.ts.map +1 -0
  135. package/dist/lib/logger.js +10 -0
  136. package/dist/lib/logger.js.map +1 -0
  137. package/dist/lib/types.d.ts +208 -0
  138. package/dist/lib/types.d.ts.map +1 -0
  139. package/dist/lib/types.js +2 -0
  140. package/dist/lib/types.js.map +1 -0
  141. package/dist/resources/brand-knowledge.d.ts +3 -0
  142. package/dist/resources/brand-knowledge.d.ts.map +1 -0
  143. package/dist/resources/brand-knowledge.js +53 -0
  144. package/dist/resources/brand-knowledge.js.map +1 -0
  145. package/dist/resources/brand-templates.d.ts +3 -0
  146. package/dist/resources/brand-templates.d.ts.map +1 -0
  147. package/dist/resources/brand-templates.js +68 -0
  148. package/dist/resources/brand-templates.js.map +1 -0
  149. package/dist/tools/create-brand-guidelines.d.ts +3 -0
  150. package/dist/tools/create-brand-guidelines.d.ts.map +1 -0
  151. package/dist/tools/create-brand-guidelines.js +85 -0
  152. package/dist/tools/create-brand-guidelines.js.map +1 -0
  153. package/dist/tools/export-design-tokens.d.ts +3 -0
  154. package/dist/tools/export-design-tokens.d.ts.map +1 -0
  155. package/dist/tools/export-design-tokens.js +37 -0
  156. package/dist/tools/export-design-tokens.js.map +1 -0
  157. package/dist/tools/generate-brand-assets.d.ts +3 -0
  158. package/dist/tools/generate-brand-assets.d.ts.map +1 -0
  159. package/dist/tools/generate-brand-assets.js +37 -0
  160. package/dist/tools/generate-brand-assets.js.map +1 -0
  161. package/dist/tools/generate-brand-identity.d.ts +3 -0
  162. package/dist/tools/generate-brand-identity.d.ts.map +1 -0
  163. package/dist/tools/generate-brand-identity.js +73 -0
  164. package/dist/tools/generate-brand-identity.js.map +1 -0
  165. package/dist/tools/generate-color-palette.d.ts +3 -0
  166. package/dist/tools/generate-color-palette.d.ts.map +1 -0
  167. package/dist/tools/generate-color-palette.js +33 -0
  168. package/dist/tools/generate-color-palette.js.map +1 -0
  169. package/dist/tools/generate-typography-system.d.ts +3 -0
  170. package/dist/tools/generate-typography-system.d.ts.map +1 -0
  171. package/dist/tools/generate-typography-system.js +28 -0
  172. package/dist/tools/generate-typography-system.js.map +1 -0
  173. package/dist/tools/refine-brand-element.d.ts +3 -0
  174. package/dist/tools/refine-brand-element.d.ts.map +1 -0
  175. package/dist/tools/refine-brand-element.js +41 -0
  176. package/dist/tools/refine-brand-element.js.map +1 -0
  177. package/dist/tools/validate-brand-consistency.d.ts +3 -0
  178. package/dist/tools/validate-brand-consistency.d.ts.map +1 -0
  179. package/dist/tools/validate-brand-consistency.js +25 -0
  180. package/dist/tools/validate-brand-consistency.js.map +1 -0
  181. package/docs/API.md +110 -0
  182. package/docs/DATA_SOURCES.md +69 -0
  183. package/docs/INTEGRATION.md +58 -0
  184. package/eslint.config.js +52 -0
  185. package/jest.config.js +40 -0
  186. package/package.json +78 -0
  187. package/src/__tests__/integration/brand-generation.test.ts +84 -0
  188. package/src/__tests__/integration/mcp-server.test.ts +18 -0
  189. package/src/__tests__/unit/ai-interpreter.test.ts +172 -0
  190. package/src/__tests__/unit/border-system.test.ts +77 -0
  191. package/src/__tests__/unit/color-palette.test.ts +161 -0
  192. package/src/__tests__/unit/contrast-checker.test.ts +124 -0
  193. package/src/__tests__/unit/design-tokens.test.ts +184 -0
  194. package/src/__tests__/unit/favicon-generator.test.ts +80 -0
  195. package/src/__tests__/unit/gradient-system.test.ts +122 -0
  196. package/src/__tests__/unit/logo-generator.test.ts +146 -0
  197. package/src/__tests__/unit/motion-system.test.ts +91 -0
  198. package/src/__tests__/unit/og-image-generator.test.ts +115 -0
  199. package/src/__tests__/unit/shadow-system.test.ts +63 -0
  200. package/src/__tests__/unit/spacing-scale.test.ts +60 -0
  201. package/src/__tests__/unit/typography-system.test.ts +71 -0
  202. package/src/index.ts +59 -0
  203. package/src/lib/branding-core/ai/brand-interpreter.ts +30 -0
  204. package/src/lib/branding-core/ai/claude-interpreter.ts +76 -0
  205. package/src/lib/branding-core/ai/intent-applier.ts +59 -0
  206. package/src/lib/branding-core/ai/keyword-interpreter.ts +95 -0
  207. package/src/lib/branding-core/ai/prompts.ts +93 -0
  208. package/src/lib/branding-core/ai/types.ts +36 -0
  209. package/src/lib/branding-core/documents/html-generator.ts +32 -0
  210. package/src/lib/branding-core/documents/pdf-generator.ts +21 -0
  211. package/src/lib/branding-core/exporters/css-variables.ts +71 -0
  212. package/src/lib/branding-core/exporters/design-tokens.ts +86 -0
  213. package/src/lib/branding-core/exporters/figma-tokens.ts +87 -0
  214. package/src/lib/branding-core/exporters/react-theme.ts +69 -0
  215. package/src/lib/branding-core/exporters/sass-variables.ts +74 -0
  216. package/src/lib/branding-core/exporters/tailwind-preset.ts +67 -0
  217. package/src/lib/branding-core/generators/border-system.ts +41 -0
  218. package/src/lib/branding-core/generators/color-palette.ts +147 -0
  219. package/src/lib/branding-core/generators/favicon-generator.ts +33 -0
  220. package/src/lib/branding-core/generators/gradient-system.ts +120 -0
  221. package/src/lib/branding-core/generators/logo-generator.ts +152 -0
  222. package/src/lib/branding-core/generators/motion-system.ts +98 -0
  223. package/src/lib/branding-core/generators/og-image-generator.ts +97 -0
  224. package/src/lib/branding-core/generators/shadow-system.ts +66 -0
  225. package/src/lib/branding-core/generators/spacing-scale.ts +29 -0
  226. package/src/lib/branding-core/generators/typography-system.ts +128 -0
  227. package/src/lib/branding-core/index.ts +28 -0
  228. package/src/lib/branding-core/validators/brand-consistency.ts +79 -0
  229. package/src/lib/branding-core/validators/contrast-checker.ts +37 -0
  230. package/src/lib/branding-core/validators/token-schema.ts +50 -0
  231. package/src/lib/config.ts +13 -0
  232. package/src/lib/logger.ts +12 -0
  233. package/src/lib/types.ts +236 -0
  234. package/src/resources/brand-knowledge.ts +60 -0
  235. package/src/resources/brand-templates.ts +70 -0
  236. package/src/tools/create-brand-guidelines.ts +94 -0
  237. package/src/tools/export-design-tokens.ts +52 -0
  238. package/src/tools/generate-brand-assets.ts +48 -0
  239. package/src/tools/generate-brand-identity.ts +115 -0
  240. package/src/tools/generate-color-palette.ts +43 -0
  241. package/src/tools/generate-typography-system.ts +42 -0
  242. package/src/tools/refine-brand-element.ts +65 -0
  243. package/src/tools/validate-brand-consistency.ts +32 -0
  244. package/tsconfig.json +21 -0
@@ -0,0 +1,23 @@
1
+ function rescaleSvg(iconSvg, size, brandColor) {
2
+ const strokeScale = size <= 32 ? 2 : 1;
3
+ let svg = iconSvg
4
+ .replace(/width="[^"]*"/, `width="${size}"`)
5
+ .replace(/height="[^"]*"/, `height="${size}"`)
6
+ .replace(/viewBox="[^"]*"/, `viewBox="0 0 64 64"`);
7
+ if (strokeScale > 1) {
8
+ svg = svg.replace(/stroke-width="(\d+)"/g, (_, w) => `stroke-width="${Number(w) * strokeScale}"`);
9
+ }
10
+ if (!svg.includes('fill=') && !svg.includes('<circle')) {
11
+ svg = svg.replace('<svg ', `<svg style="color:${brandColor}" `);
12
+ }
13
+ return svg;
14
+ }
15
+ export function generateFavicons(iconSvg, brandColor) {
16
+ const sizes = [16, 32, 180, 512];
17
+ const result = {};
18
+ for (const size of sizes) {
19
+ result[size] = rescaleSvg(iconSvg, size, brandColor);
20
+ }
21
+ return { sizes: result };
22
+ }
23
+ //# sourceMappingURL=favicon-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon-generator.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/favicon-generator.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,OAAe,EAAE,IAAiB,EAAE,UAAkB;IACxE,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,GAAG,GAAG,OAAO;SACd,OAAO,CAAC,eAAe,EAAE,UAAU,IAAI,GAAG,CAAC;SAC3C,OAAO,CAAC,gBAAgB,EAAE,WAAW,IAAI,GAAG,CAAC;SAC7C,OAAO,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAErD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,uBAAuB,EACvB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CACtD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,UAAU,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,UAAkB;IAClE,MAAM,KAAK,GAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,EAAiC,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BrandStyle, ColorPalette, GradientSystem } from '../../types.js';
2
+ export declare function generateGradientSystem(colors: ColorPalette, style?: BrandStyle): GradientSystem;
3
+ //# sourceMappingURL=gradient-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient-system.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/gradient-system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EAIZ,cAAc,EAGf,MAAM,gBAAgB,CAAC;AAiGxB,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,UAAsB,GAC5B,cAAc,CAUhB"}
@@ -0,0 +1,74 @@
1
+ import { hexToHsl, hslToHex } from './color-palette.js';
2
+ const STYLE_GRADIENT_CONFIG = {
3
+ minimal: { type: 'linear', angle: 180, stops: 2, lightnessVariance: 5 },
4
+ bold: { type: 'linear', angle: 45, stops: 3, lightnessVariance: 25 },
5
+ elegant: { type: 'linear', angle: 135, stops: 2, lightnessVariance: 10 },
6
+ playful: { type: 'conic', angle: 0, stops: 3, lightnessVariance: 20 },
7
+ corporate: { type: 'linear', angle: 180, stops: 2, lightnessVariance: 8 },
8
+ tech: { type: 'linear', angle: 315, stops: 2, lightnessVariance: 15 },
9
+ organic: { type: 'radial', angle: 0, stops: 3, lightnessVariance: 12 },
10
+ retro: { type: 'linear', angle: 90, stops: 3, lightnessVariance: 18 },
11
+ };
12
+ function shiftLightness(hsl, amount) {
13
+ const l = Math.max(0, Math.min(100, hsl.l + amount));
14
+ return hslToHex(hsl.h, hsl.s, l);
15
+ }
16
+ function buildStops(baseHex, endHex, count, variance) {
17
+ const baseHsl = hexToHsl(baseHex);
18
+ const endHsl = hexToHsl(endHex);
19
+ if (count === 2) {
20
+ return [
21
+ { color: baseHex, position: 0 },
22
+ { color: endHex, position: 100 },
23
+ ];
24
+ }
25
+ const midHex = shiftLightness({ h: (baseHsl.h + endHsl.h) / 2, s: baseHsl.s, l: baseHsl.l }, variance / 2);
26
+ return [
27
+ { color: baseHex, position: 0 },
28
+ { color: midHex, position: 50 },
29
+ { color: endHex, position: 100 },
30
+ ];
31
+ }
32
+ function toCssValue(type, angle, stops) {
33
+ const stopStr = stops.map((s) => `${s.color} ${s.position}%`).join(', ');
34
+ if (type === 'radial')
35
+ return `radial-gradient(circle, ${stopStr})`;
36
+ if (type === 'conic')
37
+ return `conic-gradient(from ${angle}deg, ${stopStr})`;
38
+ return `linear-gradient(${angle}deg, ${stopStr})`;
39
+ }
40
+ function createGradient(type, angle, stops) {
41
+ return {
42
+ type,
43
+ angle: type !== 'radial' ? angle : undefined,
44
+ stops,
45
+ cssValue: toCssValue(type, angle, stops),
46
+ };
47
+ }
48
+ function buildPreset(name, colors, config) {
49
+ const { type, angle, stops: count, lightnessVariance } = config;
50
+ const primary = colors.primary.hex;
51
+ const secondary = colors.secondary.hex;
52
+ const accent = colors.accent.hex;
53
+ const neutralLight = colors.neutral[0]?.hex ?? '#f5f5f5';
54
+ const neutralDark = colors.neutral[colors.neutral.length - 1]?.hex ?? '#1a1a1a';
55
+ const presetMap = {
56
+ hero: () => buildStops(primary, secondary, count, lightnessVariance),
57
+ button: () => buildStops(accent, primary, count, lightnessVariance),
58
+ card: () => buildStops(neutralLight, shiftLightness(hexToHsl(neutralLight), -lightnessVariance), 2, lightnessVariance),
59
+ text: () => buildStops(primary, accent, count, lightnessVariance),
60
+ background: () => buildStops(neutralLight, neutralDark, 2, lightnessVariance),
61
+ };
62
+ const stops = presetMap[name]();
63
+ return createGradient(type, angle, stops);
64
+ }
65
+ export function generateGradientSystem(colors, style = 'minimal') {
66
+ const config = STYLE_GRADIENT_CONFIG[style];
67
+ const presetNames = ['hero', 'button', 'card', 'text', 'background'];
68
+ const presets = {};
69
+ for (const name of presetNames) {
70
+ presets[name] = buildPreset(name, colors, config);
71
+ }
72
+ return { presets };
73
+ }
74
+ //# sourceMappingURL=gradient-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient-system.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/gradient-system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { LogoConfig, LogoOutput } from '../../types.js';
2
+ export declare function defaultLogoConfig(brandName: string, primaryColor: string): LogoConfig;
3
+ export declare function generateSvgLogo(config: LogoConfig): LogoOutput;
4
+ //# sourceMappingURL=logo-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo-generator.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/logo-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAUrF;AAiID,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAU9D"}
@@ -0,0 +1,130 @@
1
+ export function defaultLogoConfig(brandName, primaryColor) {
2
+ return {
3
+ text: brandName,
4
+ font: 'Inter',
5
+ fontSize: 48,
6
+ color: primaryColor,
7
+ backgroundColor: 'transparent',
8
+ width: 400,
9
+ height: 120,
10
+ };
11
+ }
12
+ function generateWordmark(config) {
13
+ const { text, font, fontSize, color, backgroundColor, width, height } = config;
14
+ const initial = text.charAt(0).toUpperCase();
15
+ const circleR = height * 0.35;
16
+ const circleX = circleR + 20;
17
+ const circleY = height / 2;
18
+ const textX = circleX + circleR + 16;
19
+ const textY = height / 2;
20
+ const fontFamily = `'${font}', sans-serif`;
21
+ return [
22
+ `<svg xmlns="http://www.w3.org/2000/svg" width="400" height="120" viewBox="0 0 400 120">`,
23
+ backgroundColor !== 'transparent'
24
+ ? ` <rect width="${width}" height="${height}" fill="${backgroundColor}" rx="8"/>`
25
+ : '',
26
+ ` <circle cx="${circleX}" cy="${circleY}" r="${circleR}" fill="${color}"/>`,
27
+ ` <text x="${circleX}" y="${circleY}" fill="white" font-size="${fontSize * 0.7}" font-family="${fontFamily}" font-weight="700" text-anchor="middle" dominant-baseline="central">${initial}</text>`,
28
+ ` <text x="${textX}" y="${textY}" fill="${color}" font-size="${fontSize}" font-family="${fontFamily}" font-weight="600" dominant-baseline="central">${text}</text>`,
29
+ '</svg>',
30
+ ]
31
+ .filter(Boolean)
32
+ .join('\n');
33
+ }
34
+ const MONOGRAM_SHAPES = {
35
+ minimal: 'roundedSquare',
36
+ bold: 'hexagon',
37
+ elegant: 'thinCircle',
38
+ playful: 'blob',
39
+ corporate: 'rectangle',
40
+ tech: 'diamond',
41
+ organic: 'ellipse',
42
+ retro: 'octagon',
43
+ };
44
+ function monogramContainer(style, color) {
45
+ const shape = MONOGRAM_SHAPES[style] ?? 'thinCircle';
46
+ const containers = {
47
+ roundedSquare: `<rect x="10" y="10" width="100" height="100" rx="16" fill="${color}"/>`,
48
+ hexagon: `<polygon points="60,5 110,30 110,90 60,115 10,90 10,30" fill="${color}"/>`,
49
+ thinCircle: `<circle cx="60" cy="60" r="50" fill="none" stroke="${color}" stroke-width="3"/>`,
50
+ blob: `<ellipse cx="60" cy="60" rx="52" ry="48" fill="${color}"/>`,
51
+ rectangle: `<rect x="10" y="15" width="100" height="90" rx="4" fill="${color}"/>`,
52
+ diamond: `<polygon points="60,5 115,60 60,115 5,60" fill="${color}"/>`,
53
+ ellipse: `<ellipse cx="60" cy="60" rx="55" ry="45" fill="${color}"/>`,
54
+ octagon: `<polygon points="35,5 85,5 115,35 115,85 85,115 35,115 5,85 5,35" fill="${color}"/>`,
55
+ };
56
+ return containers[shape] ?? containers.thinCircle;
57
+ }
58
+ function generateMonogram(config) {
59
+ const { text, font, color } = config;
60
+ const initial = text.charAt(0).toUpperCase();
61
+ const style = config.style ?? 'minimal';
62
+ const fontFamily = `'${font}', sans-serif`;
63
+ const isThinCircle = MONOGRAM_SHAPES[style] === 'thinCircle';
64
+ const textColor = isThinCircle ? color : 'white';
65
+ return [
66
+ `<svg xmlns="http://www.w3.org/2000/svg" width="120" height="120" viewBox="0 0 120 120">`,
67
+ ` ${monogramContainer(style, color)}`,
68
+ ` <text x="60" y="60" fill="${textColor}" font-size="56" font-family="${fontFamily}" font-weight="700" text-anchor="middle" dominant-baseline="central">${initial}</text>`,
69
+ '</svg>',
70
+ ].join('\n');
71
+ }
72
+ const ABSTRACT_BUILDERS = {
73
+ minimal: (c) => ` <circle cx="40" cy="60" r="30" fill="${c}" opacity="0.8"/>` +
74
+ `\n <circle cx="60" cy="40" r="30" fill="${c}" opacity="0.5"/>` +
75
+ `\n <circle cx="80" cy="60" r="30" fill="${c}" opacity="0.3"/>`,
76
+ bold: (c) => ` <rect x="10" y="10" width="50" height="50" fill="${c}" opacity="0.9"/>` +
77
+ `\n <rect x="40" y="40" width="50" height="50" fill="${c}" opacity="0.6"/>` +
78
+ `\n <rect x="60" y="20" width="40" height="40" fill="${c}" opacity="0.3"/>`,
79
+ elegant: (c) => ` <path d="M60,10 A50,50 0 0,1 110,60" fill="none" stroke="${c}" stroke-width="2"/>` +
80
+ `\n <path d="M60,25 A35,35 0 0,1 95,60" fill="none" stroke="${c}" stroke-width="2"/>` +
81
+ `\n <path d="M60,40 A20,20 0 0,1 80,60" fill="none" stroke="${c}" stroke-width="2"/>`,
82
+ playful: (c) => ` <circle cx="30" cy="40" r="8" fill="${c}"/>` +
83
+ `\n <circle cx="60" cy="25" r="12" fill="${c}" opacity="0.7"/>` +
84
+ `\n <circle cx="90" cy="50" r="10" fill="${c}" opacity="0.5"/>` +
85
+ `\n <circle cx="50" cy="80" r="14" fill="${c}" opacity="0.6"/>`,
86
+ corporate: (c) => ` <rect x="10" y="10" width="30" height="100" fill="${c}" opacity="0.3"/>` +
87
+ `\n <rect x="45" y="10" width="30" height="100" fill="${c}" opacity="0.5"/>` +
88
+ `\n <rect x="80" y="10" width="30" height="100" fill="${c}" opacity="0.7"/>`,
89
+ tech: (c) => ` <line x1="10" y1="60" x2="50" y2="30" stroke="${c}" stroke-width="2"/>` +
90
+ `\n <line x1="50" y1="30" x2="90" y2="50" stroke="${c}" stroke-width="2"/>` +
91
+ `\n <line x1="90" y1="50" x2="110" y2="20" stroke="${c}" stroke-width="2"/>` +
92
+ `\n <circle cx="50" cy="30" r="4" fill="${c}"/>` +
93
+ `\n <circle cx="90" cy="50" r="4" fill="${c}"/>`,
94
+ organic: (c) => ` <path d="M10,60 Q30,20 60,60 Q90,100 110,60" fill="none" stroke="${c}" stroke-width="3"/>` +
95
+ `\n <path d="M10,80 Q30,40 60,80 Q90,120 110,80" fill="none" stroke="${c}" stroke-width="2" opacity="0.5"/>`,
96
+ retro: (c) => ` <polygon points="60,10 75,35 110,35 82,55 93,85 60,67 27,85 38,55 10,35 45,35" fill="${c}"/>` +
97
+ `\n <polygon points="60,25 70,42 90,42 74,53 80,70 60,60 40,70 46,53 30,42 50,42" fill="white" opacity="0.3"/>`,
98
+ };
99
+ function generateAbstract(config) {
100
+ const { color } = config;
101
+ const style = config.style ?? 'minimal';
102
+ const builder = ABSTRACT_BUILDERS[style] ?? ABSTRACT_BUILDERS.minimal;
103
+ return [
104
+ `<svg xmlns="http://www.w3.org/2000/svg" width="120" height="120" viewBox="0 0 120 120">`,
105
+ builder(color),
106
+ '</svg>',
107
+ ].join('\n');
108
+ }
109
+ function generateIcon(config) {
110
+ const { text, font, color } = config;
111
+ const initial = text.charAt(0).toUpperCase();
112
+ const fontFamily = `'${font}', sans-serif`;
113
+ return [
114
+ `<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">`,
115
+ ` <circle cx="32" cy="32" r="28" fill="${color}"/>`,
116
+ ` <text x="32" y="32" fill="white" font-size="32" font-family="${fontFamily}" font-weight="700" text-anchor="middle" dominant-baseline="central">${initial}</text>`,
117
+ '</svg>',
118
+ ].join('\n');
119
+ }
120
+ export function generateSvgLogo(config) {
121
+ const wordmark = generateWordmark(config);
122
+ const monogram = generateMonogram(config);
123
+ const abstract = generateAbstract(config);
124
+ const icon = generateIcon(config);
125
+ return {
126
+ svg: wordmark,
127
+ variants: { wordmark, monogram, abstract, icon },
128
+ };
129
+ }
130
+ //# sourceMappingURL=logo-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logo-generator.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/logo-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrandStyle, MotionSystem } from '../../types.js';
2
+ export declare function generateMotionSystem(style?: BrandStyle): MotionSystem;
3
+ //# sourceMappingURL=motion-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-system.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/motion-system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA4B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqFzF,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,UAAsB,GAAG,YAAY,CAYhF"}
@@ -0,0 +1,91 @@
1
+ const STYLE_DURATIONS = {
2
+ minimal: { instant: 0, fast: 100, normal: 200, slow: 300, slower: 400 },
3
+ bold: { instant: 0, fast: 100, normal: 200, slow: 300, slower: 450 },
4
+ elegant: { instant: 0, fast: 200, normal: 350, slow: 500, slower: 700 },
5
+ playful: { instant: 0, fast: 150, normal: 250, slow: 400, slower: 600 },
6
+ corporate: { instant: 0, fast: 120, normal: 200, slow: 300, slower: 400 },
7
+ tech: { instant: 0, fast: 80, normal: 150, slow: 250, slower: 350 },
8
+ organic: { instant: 0, fast: 180, normal: 300, slow: 450, slower: 650 },
9
+ retro: { instant: 0, fast: 150, normal: 250, slow: 350, slower: 500 },
10
+ };
11
+ const STYLE_EASINGS = {
12
+ minimal: {
13
+ 'ease-in': 'cubic-bezier(0.4, 0, 1, 1)',
14
+ 'ease-out': 'cubic-bezier(0, 0, 0.2, 1)',
15
+ 'ease-in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
16
+ spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
17
+ bounce: 'cubic-bezier(0.34, 1.2, 0.64, 1)',
18
+ },
19
+ bold: {
20
+ 'ease-in': 'cubic-bezier(0.5, 0, 1, 1)',
21
+ 'ease-out': 'cubic-bezier(0, 0, 0.15, 1)',
22
+ 'ease-in-out': 'cubic-bezier(0.5, 0, 0.15, 1)',
23
+ spring: 'cubic-bezier(0.22, 1.8, 0.36, 1)',
24
+ bounce: 'cubic-bezier(0.22, 1.5, 0.36, 1)',
25
+ },
26
+ elegant: {
27
+ 'ease-in': 'cubic-bezier(0.42, 0, 1, 1)',
28
+ 'ease-out': 'cubic-bezier(0, 0, 0.58, 1)',
29
+ 'ease-in-out': 'cubic-bezier(0.42, 0, 0.58, 1)',
30
+ spring: 'cubic-bezier(0.25, 1.2, 0.5, 1)',
31
+ bounce: 'cubic-bezier(0.25, 1.1, 0.5, 1)',
32
+ },
33
+ playful: {
34
+ 'ease-in': 'cubic-bezier(0.4, 0, 1, 1)',
35
+ 'ease-out': 'cubic-bezier(0, 0, 0.2, 1)',
36
+ 'ease-in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
37
+ spring: 'cubic-bezier(0.18, 2.0, 0.4, 1)',
38
+ bounce: 'cubic-bezier(0.18, 1.8, 0.4, 1)',
39
+ },
40
+ corporate: {
41
+ 'ease-in': 'cubic-bezier(0.4, 0, 1, 1)',
42
+ 'ease-out': 'cubic-bezier(0, 0, 0.2, 1)',
43
+ 'ease-in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
44
+ spring: 'cubic-bezier(0.3, 1.3, 0.6, 1)',
45
+ bounce: 'cubic-bezier(0.3, 1.15, 0.6, 1)',
46
+ },
47
+ tech: {
48
+ 'ease-in': 'cubic-bezier(0.55, 0, 1, 1)',
49
+ 'ease-out': 'cubic-bezier(0, 0, 0.1, 1)',
50
+ 'ease-in-out': 'cubic-bezier(0.55, 0, 0.1, 1)',
51
+ spring: 'cubic-bezier(0.2, 1.6, 0.4, 1)',
52
+ bounce: 'cubic-bezier(0.2, 1.4, 0.4, 1)',
53
+ },
54
+ organic: {
55
+ 'ease-in': 'cubic-bezier(0.35, 0, 0.9, 1)',
56
+ 'ease-out': 'cubic-bezier(0.1, 0, 0.3, 1)',
57
+ 'ease-in-out': 'cubic-bezier(0.35, 0, 0.3, 1)',
58
+ spring: 'cubic-bezier(0.28, 1.4, 0.5, 1)',
59
+ bounce: 'cubic-bezier(0.28, 1.25, 0.5, 1)',
60
+ },
61
+ retro: {
62
+ 'ease-in': 'cubic-bezier(0.5, 0, 1, 1)',
63
+ 'ease-out': 'cubic-bezier(0, 0, 0.3, 1)',
64
+ 'ease-in-out': 'cubic-bezier(0.5, 0, 0.3, 1)',
65
+ spring: 'cubic-bezier(0.3, 1.5, 0.5, 1)',
66
+ bounce: 'cubic-bezier(0.3, 1.3, 0.5, 1)',
67
+ },
68
+ };
69
+ function buildTransitions(durations, defaultEasing) {
70
+ return {
71
+ fade: `opacity ${durations.normal}ms ${defaultEasing}`,
72
+ slide: `transform ${durations.normal}ms ${defaultEasing}`,
73
+ scale: `transform ${durations.fast}ms ${defaultEasing}`,
74
+ color: `color ${durations.slow}ms ${defaultEasing}, background-color ${durations.slow}ms ${defaultEasing}`,
75
+ all: `all ${durations.normal}ms ${defaultEasing}`,
76
+ };
77
+ }
78
+ export function generateMotionSystem(style = 'minimal') {
79
+ const durationValues = STYLE_DURATIONS[style];
80
+ const easingValues = STYLE_EASINGS[style];
81
+ const durations = {};
82
+ for (const [name, ms] of Object.entries(durationValues)) {
83
+ durations[name] = `${ms}ms`;
84
+ }
85
+ return {
86
+ durations,
87
+ easings: easingValues,
88
+ transitions: buildTransitions(durationValues, easingValues['ease-out']),
89
+ };
90
+ }
91
+ //# sourceMappingURL=motion-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-system.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/motion-system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrandIdentity, OgImageOutput, OgTemplate } from '../../types.js';
2
+ export declare function generateOgImage(brand: BrandIdentity, template?: OgTemplate, title?: string, subtitle?: string): OgImageOutput;
3
+ //# sourceMappingURL=og-image-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"og-image-generator.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/og-image-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA4E/E,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,QAAQ,GAAE,UAAsB,EAChC,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAef"}
@@ -0,0 +1,72 @@
1
+ function getGradientColors(brand) {
2
+ return [brand.colors.primary.hex, brand.colors.secondary.hex];
3
+ }
4
+ function stripSvgWrapper(svg) {
5
+ return svg.replace(/<svg[^>]*>/, '').replace(/<\/svg>/, '');
6
+ }
7
+ function buildSvg(w, h, colors, font, title, subtitle, logoSection) {
8
+ return [
9
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${w}" height="${h}" viewBox="0 0 ${w} ${h}">`,
10
+ ` <defs>`,
11
+ ` <style>@import url('https://fonts.googleapis.com/css2?family=${encodeURIComponent(font)}');</style>`,
12
+ ` <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">`,
13
+ ` <stop offset="0%" style="stop-color:${colors[0]}"/>`,
14
+ ` <stop offset="100%" style="stop-color:${colors[1]}"/>`,
15
+ ` </linearGradient>`,
16
+ ` </defs>`,
17
+ ` <rect width="${w}" height="${h}" fill="url(#bg)"/>`,
18
+ logoSection,
19
+ ` <text x="${w / 2}" y="${h / 2 - 20}" fill="white" font-size="56" font-family="'${font}', sans-serif" font-weight="700" text-anchor="middle" dominant-baseline="central">${title}</text>`,
20
+ subtitle
21
+ ? ` <text x="${w / 2}" y="${h / 2 + 40}" fill="white" font-size="28" font-family="'${font}', sans-serif" font-weight="400" text-anchor="middle" dominant-baseline="central" opacity="0.8">${subtitle}</text>`
22
+ : '',
23
+ '</svg>',
24
+ ]
25
+ .filter(Boolean)
26
+ .join('\n');
27
+ }
28
+ function buildDefaultTemplate(brand, title, subtitle) {
29
+ const displayTitle = title ?? brand.name;
30
+ const displaySub = subtitle ?? brand.tagline ?? '';
31
+ const font = brand.typography.headingFont;
32
+ const logoSvg = brand.logo?.variants?.icon ?? '';
33
+ const logoSection = logoSvg
34
+ ? `<g transform="translate(540, 80) scale(1.5)">${stripSvgWrapper(logoSvg)}</g>`
35
+ : '';
36
+ return buildSvg(1200, 630, getGradientColors(brand), font, displayTitle, displaySub, logoSection);
37
+ }
38
+ function buildArticleTemplate(brand, title, subtitle) {
39
+ const displayTitle = title ?? 'Untitled Article';
40
+ const displaySub = subtitle ?? '';
41
+ const font = brand.typography.headingFont;
42
+ const logoSvg = brand.logo?.variants?.icon ?? '';
43
+ const logoSection = logoSvg
44
+ ? `<g transform="translate(1080, 30) scale(0.8)">${stripSvgWrapper(logoSvg)}</g>`
45
+ : '';
46
+ return buildSvg(1200, 630, getGradientColors(brand), font, displayTitle, displaySub, logoSection);
47
+ }
48
+ function buildSocialTemplate(brand, title) {
49
+ const displayTitle = title ?? brand.name;
50
+ const font = brand.typography.headingFont;
51
+ const colors = getGradientColors(brand);
52
+ const logoSvg = brand.logo?.variants?.icon ?? '';
53
+ const logoSection = logoSvg
54
+ ? `<g transform="translate(536, 300) scale(2)">${stripSvgWrapper(logoSvg)}</g>`
55
+ : '';
56
+ return buildSvg(1200, 1200, colors, font, displayTitle, '', logoSection);
57
+ }
58
+ export function generateOgImage(brand, template = 'default', title, subtitle) {
59
+ const builders = {
60
+ default: () => buildDefaultTemplate(brand, title, subtitle),
61
+ article: () => buildArticleTemplate(brand, title, subtitle),
62
+ social: () => buildSocialTemplate(brand, title),
63
+ };
64
+ const svg = builders[template]();
65
+ const dimensions = {
66
+ default: { width: 1200, height: 630 },
67
+ article: { width: 1200, height: 630 },
68
+ social: { width: 1200, height: 1200 },
69
+ };
70
+ return { template, svg, ...dimensions[template] };
71
+ }
72
+ //# sourceMappingURL=og-image-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"og-image-generator.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/og-image-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BrandStyle, ColorTheme, ShadowSystem } from '../../types.js';
2
+ export declare function generateShadowSystem(primaryHex?: string, theme?: ColorTheme, _style?: BrandStyle): ShadowSystem;
3
+ //# sourceMappingURL=shadow-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-system.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/shadow-system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAGV,YAAY,EACb,MAAM,gBAAgB,CAAC;AAgDxB,wBAAgB,oBAAoB,CAClC,UAAU,SAAY,EACtB,KAAK,GAAE,UAAoB,EAC3B,MAAM,CAAC,EAAE,UAAU,GAClB,YAAY,CAOd"}
@@ -0,0 +1,44 @@
1
+ import { hexToHsl, hslToHex } from './color-palette.js';
2
+ const LEVEL_CONFIGS = {
3
+ none: { y: 0, blur: 0, spread: 0, opacity: 0 },
4
+ sm: { y: 1, blur: 2, spread: 0, opacity: 0.05 },
5
+ md: { y: 2, blur: 4, spread: -1, opacity: 0.08 },
6
+ lg: { y: 4, blur: 8, spread: -2, opacity: 0.1 },
7
+ xl: { y: 8, blur: 16, spread: -4, opacity: 0.12 },
8
+ '2xl': { y: 16, blur: 32, spread: -8, opacity: 0.15 },
9
+ };
10
+ function makeShadowColor(primaryHex, opacity) {
11
+ const hsl = hexToHsl(primaryHex);
12
+ const tinted = hslToHex(hsl.h, Math.min(hsl.s, 30), 20);
13
+ const r = parseInt(tinted.slice(1, 3), 16);
14
+ const g = parseInt(tinted.slice(3, 5), 16);
15
+ const b = parseInt(tinted.slice(5, 7), 16);
16
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
17
+ }
18
+ function buildLevel(cfg, primaryHex, dark) {
19
+ const sign = dark ? -1 : 1;
20
+ const adjustedOpacity = dark ? cfg.opacity * 1.5 : cfg.opacity;
21
+ const color = makeShadowColor(primaryHex, adjustedOpacity);
22
+ const oY = cfg.y * sign;
23
+ const cssValue = cfg.blur === 0
24
+ ? 'none'
25
+ : `${cfg.y === 0 ? 0 : `${oY}px`} ${oY === 0 ? '' : `${Math.abs(oY)}px `}${cfg.blur}px ${cfg.spread}px ${color}`.trim();
26
+ return {
27
+ offsetX: 0,
28
+ offsetY: oY,
29
+ blur: cfg.blur,
30
+ spread: cfg.spread,
31
+ color,
32
+ opacity: adjustedOpacity,
33
+ cssValue,
34
+ };
35
+ }
36
+ export function generateShadowSystem(primaryHex = '#6B4CE6', theme = 'light', _style) {
37
+ const dark = theme === 'dark';
38
+ const levels = {};
39
+ for (const [name, cfg] of Object.entries(LEVEL_CONFIGS)) {
40
+ levels[name] = buildLevel(cfg, primaryHex, dark);
41
+ }
42
+ return { levels };
43
+ }
44
+ //# sourceMappingURL=shadow-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-system.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/shadow-system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SpacingScale } from '../../types.js';
2
+ export declare function generateSpacingScale(baseUnit?: number): SpacingScale;
3
+ //# sourceMappingURL=spacing-scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing-scale.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/spacing-scale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqBnD,wBAAgB,oBAAoB,CAAC,QAAQ,SAAI,GAAG,YAAY,CAO/D"}
@@ -0,0 +1,27 @@
1
+ const SPACING_NAMES = [
2
+ '0',
3
+ '0.5',
4
+ '1',
5
+ '1.5',
6
+ '2',
7
+ '2.5',
8
+ '3',
9
+ '4',
10
+ '5',
11
+ '6',
12
+ '8',
13
+ '10',
14
+ '12',
15
+ '16',
16
+ '20',
17
+ '24',
18
+ ];
19
+ export function generateSpacingScale(baseUnit = 4) {
20
+ const values = {};
21
+ for (const name of SPACING_NAMES) {
22
+ const multiplier = parseFloat(name);
23
+ values[name] = `${multiplier * baseUnit}px`;
24
+ }
25
+ return { unit: baseUnit, values };
26
+ }
27
+ //# sourceMappingURL=spacing-scale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing-scale.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/spacing-scale.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG;IACpB,GAAG;IACH,KAAK;IACL,GAAG;IACH,KAAK;IACL,GAAG;IACH,KAAK;IACL,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,QAAQ,GAAG,CAAC;IAC/C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,GAAG,QAAQ,IAAI,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FontCategory, TypeScaleRatio, TypographySystem } from '../../types.js';
2
+ export declare function generateTypographySystem(headingCategory?: FontCategory, bodyCategory?: FontCategory, scaleRatio?: TypeScaleRatio, baseSize?: number): TypographySystem;
3
+ //# sourceMappingURL=typography-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typography-system.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/typography-system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAiG/F,wBAAgB,wBAAwB,CACtC,eAAe,GAAE,YAA2B,EAC5C,YAAY,GAAE,YAAsB,EACpC,UAAU,GAAE,cAA8B,EAC1C,QAAQ,SAAK,GACZ,gBAAgB,CAyBlB"}