@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.
- package/.env.example +3 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
- package/.github/workflows/ci.yml +73 -0
- package/.github/workflows/release-automation.yml +56 -0
- package/.github/workflows/security-scan.yml +37 -0
- package/.gitleaks.toml +14 -0
- package/.prettierrc.json +10 -0
- package/CHANGELOG.md +66 -0
- package/CONTRIBUTING.md +203 -0
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/data/README.md +13 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/branding-core/ai/brand-interpreter.d.ts +5 -0
- package/dist/lib/branding-core/ai/brand-interpreter.d.ts.map +1 -0
- package/dist/lib/branding-core/ai/brand-interpreter.js +16 -0
- package/dist/lib/branding-core/ai/brand-interpreter.js.map +1 -0
- package/dist/lib/branding-core/ai/claude-interpreter.d.ts +5 -0
- package/dist/lib/branding-core/ai/claude-interpreter.d.ts.map +1 -0
- package/dist/lib/branding-core/ai/claude-interpreter.js +55 -0
- package/dist/lib/branding-core/ai/claude-interpreter.js.map +1 -0
- package/dist/lib/branding-core/ai/intent-applier.d.ts +4 -0
- package/dist/lib/branding-core/ai/intent-applier.d.ts.map +1 -0
- package/dist/lib/branding-core/ai/intent-applier.js +29 -0
- package/dist/lib/branding-core/ai/intent-applier.js.map +1 -0
- package/dist/lib/branding-core/ai/keyword-interpreter.d.ts +4 -0
- package/dist/lib/branding-core/ai/keyword-interpreter.d.ts.map +1 -0
- package/dist/lib/branding-core/ai/keyword-interpreter.js +85 -0
- package/dist/lib/branding-core/ai/keyword-interpreter.js.map +1 -0
- package/dist/lib/branding-core/ai/prompts.d.ts +4 -0
- package/dist/lib/branding-core/ai/prompts.d.ts.map +1 -0
- package/dist/lib/branding-core/ai/prompts.js +79 -0
- package/dist/lib/branding-core/ai/prompts.js.map +1 -0
- package/dist/lib/branding-core/ai/types.d.ts +27 -0
- package/dist/lib/branding-core/ai/types.d.ts.map +1 -0
- package/dist/lib/branding-core/ai/types.js +2 -0
- package/dist/lib/branding-core/ai/types.js.map +1 -0
- package/dist/lib/branding-core/documents/html-generator.d.ts +3 -0
- package/dist/lib/branding-core/documents/html-generator.d.ts.map +1 -0
- package/dist/lib/branding-core/documents/html-generator.js +31 -0
- package/dist/lib/branding-core/documents/html-generator.js.map +1 -0
- package/dist/lib/branding-core/documents/pdf-generator.d.ts +3 -0
- package/dist/lib/branding-core/documents/pdf-generator.d.ts.map +1 -0
- package/dist/lib/branding-core/documents/pdf-generator.js +20 -0
- package/dist/lib/branding-core/documents/pdf-generator.js.map +1 -0
- package/dist/lib/branding-core/exporters/css-variables.d.ts +3 -0
- package/dist/lib/branding-core/exporters/css-variables.d.ts.map +1 -0
- package/dist/lib/branding-core/exporters/css-variables.js +62 -0
- package/dist/lib/branding-core/exporters/css-variables.js.map +1 -0
- package/dist/lib/branding-core/exporters/design-tokens.d.ts +3 -0
- package/dist/lib/branding-core/exporters/design-tokens.d.ts.map +1 -0
- package/dist/lib/branding-core/exporters/design-tokens.js +75 -0
- package/dist/lib/branding-core/exporters/design-tokens.js.map +1 -0
- package/dist/lib/branding-core/exporters/figma-tokens.d.ts +9 -0
- package/dist/lib/branding-core/exporters/figma-tokens.d.ts.map +1 -0
- package/dist/lib/branding-core/exporters/figma-tokens.js +69 -0
- package/dist/lib/branding-core/exporters/figma-tokens.js.map +1 -0
- package/dist/lib/branding-core/exporters/react-theme.d.ts +3 -0
- package/dist/lib/branding-core/exporters/react-theme.d.ts.map +1 -0
- package/dist/lib/branding-core/exporters/react-theme.js +61 -0
- package/dist/lib/branding-core/exporters/react-theme.js.map +1 -0
- package/dist/lib/branding-core/exporters/sass-variables.d.ts +3 -0
- package/dist/lib/branding-core/exporters/sass-variables.d.ts.map +1 -0
- package/dist/lib/branding-core/exporters/sass-variables.js +65 -0
- package/dist/lib/branding-core/exporters/sass-variables.js.map +1 -0
- package/dist/lib/branding-core/exporters/tailwind-preset.d.ts +3 -0
- package/dist/lib/branding-core/exporters/tailwind-preset.d.ts.map +1 -0
- package/dist/lib/branding-core/exporters/tailwind-preset.js +55 -0
- package/dist/lib/branding-core/exporters/tailwind-preset.js.map +1 -0
- package/dist/lib/branding-core/generators/border-system.d.ts +3 -0
- package/dist/lib/branding-core/generators/border-system.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/border-system.js +37 -0
- package/dist/lib/branding-core/generators/border-system.js.map +1 -0
- package/dist/lib/branding-core/generators/color-palette.d.ts +7 -0
- package/dist/lib/branding-core/generators/color-palette.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/color-palette.js +117 -0
- package/dist/lib/branding-core/generators/color-palette.js.map +1 -0
- package/dist/lib/branding-core/generators/favicon-generator.d.ts +3 -0
- package/dist/lib/branding-core/generators/favicon-generator.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/favicon-generator.js +23 -0
- package/dist/lib/branding-core/generators/favicon-generator.js.map +1 -0
- package/dist/lib/branding-core/generators/gradient-system.d.ts +3 -0
- package/dist/lib/branding-core/generators/gradient-system.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/gradient-system.js +74 -0
- package/dist/lib/branding-core/generators/gradient-system.js.map +1 -0
- package/dist/lib/branding-core/generators/logo-generator.d.ts +4 -0
- package/dist/lib/branding-core/generators/logo-generator.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/logo-generator.js +130 -0
- package/dist/lib/branding-core/generators/logo-generator.js.map +1 -0
- package/dist/lib/branding-core/generators/motion-system.d.ts +3 -0
- package/dist/lib/branding-core/generators/motion-system.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/motion-system.js +91 -0
- package/dist/lib/branding-core/generators/motion-system.js.map +1 -0
- package/dist/lib/branding-core/generators/og-image-generator.d.ts +3 -0
- package/dist/lib/branding-core/generators/og-image-generator.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/og-image-generator.js +72 -0
- package/dist/lib/branding-core/generators/og-image-generator.js.map +1 -0
- package/dist/lib/branding-core/generators/shadow-system.d.ts +3 -0
- package/dist/lib/branding-core/generators/shadow-system.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/shadow-system.js +44 -0
- package/dist/lib/branding-core/generators/shadow-system.js.map +1 -0
- package/dist/lib/branding-core/generators/spacing-scale.d.ts +3 -0
- package/dist/lib/branding-core/generators/spacing-scale.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/spacing-scale.js +27 -0
- package/dist/lib/branding-core/generators/spacing-scale.js.map +1 -0
- package/dist/lib/branding-core/generators/typography-system.d.ts +3 -0
- package/dist/lib/branding-core/generators/typography-system.d.ts.map +1 -0
- package/dist/lib/branding-core/generators/typography-system.js +121 -0
- package/dist/lib/branding-core/generators/typography-system.js.map +1 -0
- package/dist/lib/branding-core/index.d.ts +24 -0
- package/dist/lib/branding-core/index.d.ts.map +1 -0
- package/dist/lib/branding-core/index.js +22 -0
- package/dist/lib/branding-core/index.js.map +1 -0
- package/dist/lib/branding-core/validators/brand-consistency.d.ts +3 -0
- package/dist/lib/branding-core/validators/brand-consistency.d.ts.map +1 -0
- package/dist/lib/branding-core/validators/brand-consistency.js +70 -0
- package/dist/lib/branding-core/validators/brand-consistency.js.map +1 -0
- package/dist/lib/branding-core/validators/contrast-checker.d.ts +3 -0
- package/dist/lib/branding-core/validators/contrast-checker.d.ts.map +1 -0
- package/dist/lib/branding-core/validators/contrast-checker.js +33 -0
- package/dist/lib/branding-core/validators/contrast-checker.js.map +1 -0
- package/dist/lib/branding-core/validators/token-schema.d.ts +10 -0
- package/dist/lib/branding-core/validators/token-schema.d.ts.map +1 -0
- package/dist/lib/branding-core/validators/token-schema.js +43 -0
- package/dist/lib/branding-core/validators/token-schema.js.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +8 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/logger.d.ts +3 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +10 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/types.d.ts +208 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/resources/brand-knowledge.d.ts +3 -0
- package/dist/resources/brand-knowledge.d.ts.map +1 -0
- package/dist/resources/brand-knowledge.js +53 -0
- package/dist/resources/brand-knowledge.js.map +1 -0
- package/dist/resources/brand-templates.d.ts +3 -0
- package/dist/resources/brand-templates.d.ts.map +1 -0
- package/dist/resources/brand-templates.js +68 -0
- package/dist/resources/brand-templates.js.map +1 -0
- package/dist/tools/create-brand-guidelines.d.ts +3 -0
- package/dist/tools/create-brand-guidelines.d.ts.map +1 -0
- package/dist/tools/create-brand-guidelines.js +85 -0
- package/dist/tools/create-brand-guidelines.js.map +1 -0
- package/dist/tools/export-design-tokens.d.ts +3 -0
- package/dist/tools/export-design-tokens.d.ts.map +1 -0
- package/dist/tools/export-design-tokens.js +37 -0
- package/dist/tools/export-design-tokens.js.map +1 -0
- package/dist/tools/generate-brand-assets.d.ts +3 -0
- package/dist/tools/generate-brand-assets.d.ts.map +1 -0
- package/dist/tools/generate-brand-assets.js +37 -0
- package/dist/tools/generate-brand-assets.js.map +1 -0
- package/dist/tools/generate-brand-identity.d.ts +3 -0
- package/dist/tools/generate-brand-identity.d.ts.map +1 -0
- package/dist/tools/generate-brand-identity.js +73 -0
- package/dist/tools/generate-brand-identity.js.map +1 -0
- package/dist/tools/generate-color-palette.d.ts +3 -0
- package/dist/tools/generate-color-palette.d.ts.map +1 -0
- package/dist/tools/generate-color-palette.js +33 -0
- package/dist/tools/generate-color-palette.js.map +1 -0
- package/dist/tools/generate-typography-system.d.ts +3 -0
- package/dist/tools/generate-typography-system.d.ts.map +1 -0
- package/dist/tools/generate-typography-system.js +28 -0
- package/dist/tools/generate-typography-system.js.map +1 -0
- package/dist/tools/refine-brand-element.d.ts +3 -0
- package/dist/tools/refine-brand-element.d.ts.map +1 -0
- package/dist/tools/refine-brand-element.js +41 -0
- package/dist/tools/refine-brand-element.js.map +1 -0
- package/dist/tools/validate-brand-consistency.d.ts +3 -0
- package/dist/tools/validate-brand-consistency.d.ts.map +1 -0
- package/dist/tools/validate-brand-consistency.js +25 -0
- package/dist/tools/validate-brand-consistency.js.map +1 -0
- package/docs/API.md +110 -0
- package/docs/DATA_SOURCES.md +69 -0
- package/docs/INTEGRATION.md +58 -0
- package/eslint.config.js +52 -0
- package/jest.config.js +40 -0
- package/package.json +78 -0
- package/src/__tests__/integration/brand-generation.test.ts +84 -0
- package/src/__tests__/integration/mcp-server.test.ts +18 -0
- package/src/__tests__/unit/ai-interpreter.test.ts +172 -0
- package/src/__tests__/unit/border-system.test.ts +77 -0
- package/src/__tests__/unit/color-palette.test.ts +161 -0
- package/src/__tests__/unit/contrast-checker.test.ts +124 -0
- package/src/__tests__/unit/design-tokens.test.ts +184 -0
- package/src/__tests__/unit/favicon-generator.test.ts +80 -0
- package/src/__tests__/unit/gradient-system.test.ts +122 -0
- package/src/__tests__/unit/logo-generator.test.ts +146 -0
- package/src/__tests__/unit/motion-system.test.ts +91 -0
- package/src/__tests__/unit/og-image-generator.test.ts +115 -0
- package/src/__tests__/unit/shadow-system.test.ts +63 -0
- package/src/__tests__/unit/spacing-scale.test.ts +60 -0
- package/src/__tests__/unit/typography-system.test.ts +71 -0
- package/src/index.ts +59 -0
- package/src/lib/branding-core/ai/brand-interpreter.ts +30 -0
- package/src/lib/branding-core/ai/claude-interpreter.ts +76 -0
- package/src/lib/branding-core/ai/intent-applier.ts +59 -0
- package/src/lib/branding-core/ai/keyword-interpreter.ts +95 -0
- package/src/lib/branding-core/ai/prompts.ts +93 -0
- package/src/lib/branding-core/ai/types.ts +36 -0
- package/src/lib/branding-core/documents/html-generator.ts +32 -0
- package/src/lib/branding-core/documents/pdf-generator.ts +21 -0
- package/src/lib/branding-core/exporters/css-variables.ts +71 -0
- package/src/lib/branding-core/exporters/design-tokens.ts +86 -0
- package/src/lib/branding-core/exporters/figma-tokens.ts +87 -0
- package/src/lib/branding-core/exporters/react-theme.ts +69 -0
- package/src/lib/branding-core/exporters/sass-variables.ts +74 -0
- package/src/lib/branding-core/exporters/tailwind-preset.ts +67 -0
- package/src/lib/branding-core/generators/border-system.ts +41 -0
- package/src/lib/branding-core/generators/color-palette.ts +147 -0
- package/src/lib/branding-core/generators/favicon-generator.ts +33 -0
- package/src/lib/branding-core/generators/gradient-system.ts +120 -0
- package/src/lib/branding-core/generators/logo-generator.ts +152 -0
- package/src/lib/branding-core/generators/motion-system.ts +98 -0
- package/src/lib/branding-core/generators/og-image-generator.ts +97 -0
- package/src/lib/branding-core/generators/shadow-system.ts +66 -0
- package/src/lib/branding-core/generators/spacing-scale.ts +29 -0
- package/src/lib/branding-core/generators/typography-system.ts +128 -0
- package/src/lib/branding-core/index.ts +28 -0
- package/src/lib/branding-core/validators/brand-consistency.ts +79 -0
- package/src/lib/branding-core/validators/contrast-checker.ts +37 -0
- package/src/lib/branding-core/validators/token-schema.ts +50 -0
- package/src/lib/config.ts +13 -0
- package/src/lib/logger.ts +12 -0
- package/src/lib/types.ts +236 -0
- package/src/resources/brand-knowledge.ts +60 -0
- package/src/resources/brand-templates.ts +70 -0
- package/src/tools/create-brand-guidelines.ts +94 -0
- package/src/tools/export-design-tokens.ts +52 -0
- package/src/tools/generate-brand-assets.ts +48 -0
- package/src/tools/generate-brand-identity.ts +115 -0
- package/src/tools/generate-color-palette.ts +43 -0
- package/src/tools/generate-typography-system.ts +42 -0
- package/src/tools/refine-brand-element.ts +65 -0
- package/src/tools/validate-brand-consistency.ts +32 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACzC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACzC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAEpC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BrandIdentity } from '../../types.js';
|
|
2
|
+
import type { BrandIntent, InterpreterOptions } from './types.js';
|
|
3
|
+
export type InterpreterStrategy = 'keyword' | 'ai' | 'auto';
|
|
4
|
+
export declare function interpretFeedback(feedback: string, element: 'colors' | 'typography' | 'spacing', currentBrand: BrandIdentity, strategy?: InterpreterStrategy, options?: InterpreterOptions): Promise<BrandIntent>;
|
|
5
|
+
//# sourceMappingURL=brand-interpreter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-interpreter.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/brand-interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKlE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;AAE5D,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,EAC5C,YAAY,EAAE,aAAa,EAC3B,QAAQ,GAAE,mBAA4B,EACtC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAetB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { interpretWithKeywords } from './keyword-interpreter.js';
|
|
2
|
+
import { interpretWithClaude } from './claude-interpreter.js';
|
|
3
|
+
import { logger } from '../../logger.js';
|
|
4
|
+
export async function interpretFeedback(feedback, element, currentBrand, strategy = 'auto', options) {
|
|
5
|
+
const useAi = strategy === 'ai' || (strategy === 'auto' && !!options?.anthropicApiKey);
|
|
6
|
+
if (useAi && options?.anthropicApiKey) {
|
|
7
|
+
try {
|
|
8
|
+
return await interpretWithClaude(feedback, element, currentBrand, options);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
logger.warn({ error: error instanceof Error ? error.message : String(error) }, 'AI interpretation failed, falling back to keywords');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return interpretWithKeywords(feedback, element, currentBrand);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=brand-interpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-interpreter.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/brand-interpreter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,OAA4C,EAC5C,YAA2B,EAC3B,WAAgC,MAAM,EACtC,OAA4B;IAE5B,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEvF,IAAI,KAAK,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACjE,oDAAoD,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BrandIdentity } from '../../types.js';
|
|
2
|
+
import type { BrandIntent, InterpreterOptions } from './types.js';
|
|
3
|
+
export declare function interpretWithClaude(feedback: string, element: 'colors' | 'typography' | 'spacing', currentBrand: BrandIdentity, options: InterpreterOptions): Promise<BrandIntent>;
|
|
4
|
+
export declare function suggestBrandWithClaude(brandName: string, industry: string, description: string, options: InterpreterOptions): Promise<BrandIntent>;
|
|
5
|
+
//# sourceMappingURL=claude-interpreter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-interpreter.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/claude-interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAsClE,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,EAC5C,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAYtB;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAYtB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { buildRefinementPrompt, buildGenerationPrompt } from './prompts.js';
|
|
2
|
+
import { logger } from '../../logger.js';
|
|
3
|
+
async function callClaude(prompt, options) {
|
|
4
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
5
|
+
method: 'POST',
|
|
6
|
+
headers: {
|
|
7
|
+
'Content-Type': 'application/json',
|
|
8
|
+
'x-api-key': options.anthropicApiKey,
|
|
9
|
+
'anthropic-version': '2023-06-01',
|
|
10
|
+
},
|
|
11
|
+
body: JSON.stringify({
|
|
12
|
+
model: options.model,
|
|
13
|
+
max_tokens: options.maxTokens,
|
|
14
|
+
messages: [{ role: 'user', content: prompt }],
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const body = await response.text();
|
|
19
|
+
throw new Error(`Anthropic API error ${response.status}: ${body}`);
|
|
20
|
+
}
|
|
21
|
+
const data = (await response.json());
|
|
22
|
+
const textBlock = data.content.find((b) => b.type === 'text');
|
|
23
|
+
if (!textBlock)
|
|
24
|
+
throw new Error('No text content in Anthropic response');
|
|
25
|
+
return textBlock.text;
|
|
26
|
+
}
|
|
27
|
+
function parseIntentJson(raw) {
|
|
28
|
+
const jsonMatch = raw.match(/\{[\s\S]*\}/);
|
|
29
|
+
if (!jsonMatch)
|
|
30
|
+
throw new Error('No JSON object found in AI response');
|
|
31
|
+
return JSON.parse(jsonMatch[0]);
|
|
32
|
+
}
|
|
33
|
+
export async function interpretWithClaude(feedback, element, currentBrand, options) {
|
|
34
|
+
const opts = {
|
|
35
|
+
anthropicApiKey: options.anthropicApiKey ?? '',
|
|
36
|
+
model: options.model ?? 'claude-sonnet-4-20250514',
|
|
37
|
+
maxTokens: options.maxTokens ?? 512,
|
|
38
|
+
};
|
|
39
|
+
const prompt = buildRefinementPrompt(feedback, element, currentBrand);
|
|
40
|
+
logger.info({ element, model: opts.model }, 'Interpreting feedback with Claude');
|
|
41
|
+
const raw = await callClaude(prompt, opts);
|
|
42
|
+
return parseIntentJson(raw);
|
|
43
|
+
}
|
|
44
|
+
export async function suggestBrandWithClaude(brandName, industry, description, options) {
|
|
45
|
+
const opts = {
|
|
46
|
+
anthropicApiKey: options.anthropicApiKey ?? '',
|
|
47
|
+
model: options.model ?? 'claude-sonnet-4-20250514',
|
|
48
|
+
maxTokens: options.maxTokens ?? 512,
|
|
49
|
+
};
|
|
50
|
+
const prompt = buildGenerationPrompt(brandName, industry, description);
|
|
51
|
+
logger.info({ brandName, model: opts.model }, 'Generating brand suggestions with Claude');
|
|
52
|
+
const raw = await callClaude(prompt, opts);
|
|
53
|
+
return parseIntentJson(raw);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=claude-interpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-interpreter.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/claude-interpreter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,OAAqC;IAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,OAAO,CAAC,eAAe;YACpC,mBAAmB,EAAE,YAAY;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACzE,OAAO,SAAS,CAAC,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAgB,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,OAA4C,EAC5C,YAA2B,EAC3B,OAA2B;IAE3B,MAAM,IAAI,GAAiC;QACzC,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,0BAA0B;QAClD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG;KACpC,CAAC;IAEF,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACtE,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,mCAAmC,CAAC,CAAC;IAEjF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiB,EACjB,QAAgB,EAChB,WAAmB,EACnB,OAA2B;IAE3B,MAAM,IAAI,GAAiC;QACzC,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,0BAA0B;QAClD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG;KACpC,CAAC;IAEF,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,0CAA0C,CAAC,CAAC;IAE1F,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-applier.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/intent-applier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsB9C,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAmCpF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { generateColorPalette, hexToHsl, hslToHex } from '../generators/color-palette.js';
|
|
2
|
+
import { generateTypographySystem } from '../generators/typography-system.js';
|
|
3
|
+
function clamp(value, min, max) {
|
|
4
|
+
return Math.max(min, Math.min(max, value));
|
|
5
|
+
}
|
|
6
|
+
function applyColorShifts(baseHex, hueShift, saturationShift, lightnessShift) {
|
|
7
|
+
const hsl = hexToHsl(baseHex);
|
|
8
|
+
return hslToHex((hsl.h + hueShift + 360) % 360, clamp(hsl.s + saturationShift, 0, 100), clamp(hsl.l + lightnessShift, 5, 95));
|
|
9
|
+
}
|
|
10
|
+
export function applyIntent(brand, intent) {
|
|
11
|
+
const updated = { ...brand };
|
|
12
|
+
if (intent.color) {
|
|
13
|
+
const { baseColor, harmony, theme, hueShift, saturationShift, lightnessShift } = intent.color;
|
|
14
|
+
let effectiveBase = baseColor ?? brand.colors.primary.hex;
|
|
15
|
+
if (hueShift || saturationShift || lightnessShift) {
|
|
16
|
+
effectiveBase = applyColorShifts(effectiveBase, hueShift ?? 0, saturationShift ?? 0, lightnessShift ?? 0);
|
|
17
|
+
}
|
|
18
|
+
updated.colors = generateColorPalette(effectiveBase, harmony ?? 'complementary', theme);
|
|
19
|
+
}
|
|
20
|
+
if (intent.typography) {
|
|
21
|
+
const { headingCategory, bodyCategory, scaleRatio, baseSize } = intent.typography;
|
|
22
|
+
updated.typography = generateTypographySystem((headingCategory ?? brand.typography.headingFont.includes('serif')) ? 'serif' : 'sans-serif', bodyCategory ?? 'sans-serif', scaleRatio, baseSize ?? brand.typography.baseSize);
|
|
23
|
+
}
|
|
24
|
+
if (intent.style) {
|
|
25
|
+
updated.style = intent.style;
|
|
26
|
+
}
|
|
27
|
+
return updated;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=intent-applier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-applier.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/intent-applier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAe,EACf,QAAgB,EAChB,eAAuB,EACvB,cAAsB;IAEtB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,QAAQ,CACb,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,EAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,EACtC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,MAAmB;IACnE,MAAM,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QAE9F,IAAI,aAAa,GAAG,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAE1D,IAAI,QAAQ,IAAI,eAAe,IAAI,cAAc,EAAE,CAAC;YAClD,aAAa,GAAG,gBAAgB,CAC9B,aAAa,EACb,QAAQ,IAAI,CAAC,EACb,eAAe,IAAI,CAAC,EACpB,cAAc,IAAI,CAAC,CACpB,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,aAAa,EAAE,OAAO,IAAI,eAAe,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;QAClF,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAC3C,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAC5F,YAAY,IAAI,YAAY,EAC5B,UAAU,EACV,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CACtC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BrandIdentity } from '../../types.js';
|
|
2
|
+
import type { BrandIntent } from './types.js';
|
|
3
|
+
export declare function interpretWithKeywords(feedback: string, element: 'colors' | 'typography' | 'spacing', _currentBrand?: BrandIdentity): BrandIntent;
|
|
4
|
+
//# sourceMappingURL=keyword-interpreter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyword-interpreter.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/keyword-interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,YAAY,CAAC;AAsD7E,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,EAC5C,aAAa,CAAC,EAAE,aAAa,GAC5B,WAAW,CAmCb"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const COLOR_KEYWORDS = {
|
|
2
|
+
warm: { harmony: 'analogous', hueShift: 15 },
|
|
3
|
+
cool: { harmony: 'analogous', hueShift: -15 },
|
|
4
|
+
subtle: { harmony: 'analogous', saturationShift: -15 },
|
|
5
|
+
vibrant: { harmony: 'triadic', saturationShift: 15 },
|
|
6
|
+
bold: { harmony: 'complementary', saturationShift: 10 },
|
|
7
|
+
muted: { harmony: 'monochromatic', saturationShift: -20 },
|
|
8
|
+
dark: { theme: 'dark', lightnessShift: -15 },
|
|
9
|
+
light: { theme: 'light', lightnessShift: 15 },
|
|
10
|
+
monochromatic: { harmony: 'monochromatic' },
|
|
11
|
+
complementary: { harmony: 'complementary' },
|
|
12
|
+
analogous: { harmony: 'analogous' },
|
|
13
|
+
triadic: { harmony: 'triadic' },
|
|
14
|
+
premium: { harmony: 'analogous', saturationShift: -10, lightnessShift: -10 },
|
|
15
|
+
playful: { harmony: 'triadic', saturationShift: 15, lightnessShift: 5 },
|
|
16
|
+
corporate: { harmony: 'complementary', saturationShift: -10 },
|
|
17
|
+
organic: { harmony: 'analogous', hueShift: 30 },
|
|
18
|
+
elegant: { harmony: 'monochromatic', saturationShift: -15, lightnessShift: -5 },
|
|
19
|
+
};
|
|
20
|
+
const TYPOGRAPHY_KEYWORDS = {
|
|
21
|
+
serif: { headingCategory: 'serif' },
|
|
22
|
+
'sans-serif': { headingCategory: 'sans-serif' },
|
|
23
|
+
mono: { bodyCategory: 'monospace' },
|
|
24
|
+
monospace: { bodyCategory: 'monospace' },
|
|
25
|
+
display: { headingCategory: 'display' },
|
|
26
|
+
handwritten: { headingCategory: 'handwriting' },
|
|
27
|
+
compact: { scaleRatio: 'minor-second' },
|
|
28
|
+
tight: { scaleRatio: 'major-second' },
|
|
29
|
+
spacious: { scaleRatio: 'perfect-fourth' },
|
|
30
|
+
dramatic: { scaleRatio: 'golden-ratio' },
|
|
31
|
+
larger: { baseSize: 18 },
|
|
32
|
+
smaller: { baseSize: 14 },
|
|
33
|
+
editorial: { headingCategory: 'serif', scaleRatio: 'perfect-fourth' },
|
|
34
|
+
technical: { bodyCategory: 'monospace', headingCategory: 'sans-serif' },
|
|
35
|
+
modern: { headingCategory: 'sans-serif', bodyCategory: 'sans-serif' },
|
|
36
|
+
classic: { headingCategory: 'serif', bodyCategory: 'serif' },
|
|
37
|
+
};
|
|
38
|
+
function mergeColorIntents(intents) {
|
|
39
|
+
const merged = {};
|
|
40
|
+
for (const intent of intents) {
|
|
41
|
+
if (intent.harmony)
|
|
42
|
+
merged.harmony = intent.harmony;
|
|
43
|
+
if (intent.theme)
|
|
44
|
+
merged.theme = intent.theme;
|
|
45
|
+
if (intent.baseColor)
|
|
46
|
+
merged.baseColor = intent.baseColor;
|
|
47
|
+
merged.saturationShift = (merged.saturationShift ?? 0) + (intent.saturationShift ?? 0);
|
|
48
|
+
merged.lightnessShift = (merged.lightnessShift ?? 0) + (intent.lightnessShift ?? 0);
|
|
49
|
+
merged.hueShift = (merged.hueShift ?? 0) + (intent.hueShift ?? 0);
|
|
50
|
+
}
|
|
51
|
+
return merged;
|
|
52
|
+
}
|
|
53
|
+
export function interpretWithKeywords(feedback, element, _currentBrand) {
|
|
54
|
+
const lower = feedback.toLowerCase();
|
|
55
|
+
if (element === 'colors') {
|
|
56
|
+
const matched = [];
|
|
57
|
+
for (const [keyword, intent] of Object.entries(COLOR_KEYWORDS)) {
|
|
58
|
+
if (lower.includes(keyword)) {
|
|
59
|
+
matched.push(intent);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
color: matched.length > 0 ? mergeColorIntents(matched) : { harmony: 'complementary' },
|
|
64
|
+
reasoning: `Keyword match: ${matched.length > 0 ? 'matched color keywords' : 'default fallback'}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (element === 'typography') {
|
|
68
|
+
const matched = [];
|
|
69
|
+
for (const [keyword, intent] of Object.entries(TYPOGRAPHY_KEYWORDS)) {
|
|
70
|
+
if (lower.includes(keyword)) {
|
|
71
|
+
matched.push(intent);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const merged = {};
|
|
75
|
+
for (const intent of matched) {
|
|
76
|
+
Object.assign(merged, intent);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
typography: Object.keys(merged).length > 0 ? merged : { headingCategory: 'sans-serif' },
|
|
80
|
+
reasoning: `Keyword match: ${matched.length > 0 ? 'matched typography keywords' : 'default fallback'}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return { reasoning: 'No actionable keywords found for spacing refinement' };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=keyword-interpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyword-interpreter.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/keyword-interpreter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BrandIdentity } from '../../types.js';
|
|
2
|
+
export declare function buildRefinementPrompt(feedback: string, element: 'colors' | 'typography' | 'spacing', currentBrand: BrandIdentity): string;
|
|
3
|
+
export declare function buildGenerationPrompt(brandName: string, industry: string, description: string): string;
|
|
4
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,EAC5C,YAAY,EAAE,aAAa,GAC1B,MAAM,CAwDR;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CAwBR"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export function buildRefinementPrompt(feedback, element, currentBrand) {
|
|
2
|
+
const brandContext = [
|
|
3
|
+
`Brand: ${currentBrand.name}`,
|
|
4
|
+
`Industry: ${currentBrand.industry}`,
|
|
5
|
+
`Style: ${currentBrand.style}`,
|
|
6
|
+
`Current primary color: ${currentBrand.colors.primary.hex}`,
|
|
7
|
+
`Current heading font: ${currentBrand.typography.headingFont}`,
|
|
8
|
+
`Current body font: ${currentBrand.typography.bodyFont}`,
|
|
9
|
+
].join('\n');
|
|
10
|
+
const colorSchema = `{
|
|
11
|
+
"color": {
|
|
12
|
+
"baseColor": "#hex (optional, keep current if not changing)",
|
|
13
|
+
"harmony": "complementary|analogous|triadic|split-complementary|tetradic|monochromatic",
|
|
14
|
+
"theme": "light|dark|both",
|
|
15
|
+
"saturationShift": number (-30 to 30),
|
|
16
|
+
"lightnessShift": number (-30 to 30),
|
|
17
|
+
"hueShift": number (-180 to 180)
|
|
18
|
+
},
|
|
19
|
+
"reasoning": "1-2 sentences explaining the design decision"
|
|
20
|
+
}`;
|
|
21
|
+
const typographySchema = `{
|
|
22
|
+
"typography": {
|
|
23
|
+
"headingCategory": "serif|sans-serif|monospace|display|handwriting",
|
|
24
|
+
"bodyCategory": "serif|sans-serif|monospace|display|handwriting",
|
|
25
|
+
"scaleRatio": "minor-second|major-second|minor-third|major-third|perfect-fourth|augmented-fourth|perfect-fifth|golden-ratio",
|
|
26
|
+
"baseSize": number (12-24)
|
|
27
|
+
},
|
|
28
|
+
"reasoning": "1-2 sentences explaining the design decision"
|
|
29
|
+
}`;
|
|
30
|
+
const schema = element === 'colors' ? colorSchema : typographySchema;
|
|
31
|
+
return [
|
|
32
|
+
'You are a brand identity expert. Interpret the user feedback and output a JSON object with specific design parameters.',
|
|
33
|
+
'',
|
|
34
|
+
'Current brand context:',
|
|
35
|
+
brandContext,
|
|
36
|
+
'',
|
|
37
|
+
`User wants to refine: ${element}`,
|
|
38
|
+
`User feedback: "${feedback}"`,
|
|
39
|
+
'',
|
|
40
|
+
'Respond with ONLY valid JSON matching this schema:',
|
|
41
|
+
schema,
|
|
42
|
+
'',
|
|
43
|
+
'Design principles:',
|
|
44
|
+
'- Warm colors: shift hue toward red/orange (positive hueShift), use analogous harmony',
|
|
45
|
+
'- Cool colors: shift hue toward blue/green (negative hueShift)',
|
|
46
|
+
'- Premium feel: lower saturation, slightly darker, analogous or monochromatic',
|
|
47
|
+
'- Playful: higher saturation, lighter, triadic harmony',
|
|
48
|
+
'- Corporate: moderate saturation, complementary, clean sans-serif',
|
|
49
|
+
'- Editorial: serif headings, perfect-fourth or larger scale ratio',
|
|
50
|
+
'- Technical: monospace body, sans-serif headings, compact scale',
|
|
51
|
+
'- WCAG: ensure contrast ratios remain accessible (>= 4.5:1 on white)',
|
|
52
|
+
].join('\n');
|
|
53
|
+
}
|
|
54
|
+
export function buildGenerationPrompt(brandName, industry, description) {
|
|
55
|
+
return [
|
|
56
|
+
'You are a brand identity expert. Based on the brand description, suggest specific design parameters.',
|
|
57
|
+
'',
|
|
58
|
+
`Brand name: ${brandName}`,
|
|
59
|
+
`Industry: ${industry}`,
|
|
60
|
+
`Description: "${description}"`,
|
|
61
|
+
'',
|
|
62
|
+
'Respond with ONLY valid JSON:',
|
|
63
|
+
'{',
|
|
64
|
+
' "style": "minimal|bold|elegant|playful|corporate|tech|organic|retro",',
|
|
65
|
+
' "color": {',
|
|
66
|
+
' "baseColor": "#hex",',
|
|
67
|
+
' "harmony": "complementary|analogous|triadic|split-complementary|tetradic|monochromatic",',
|
|
68
|
+
' "theme": "light|dark|both"',
|
|
69
|
+
' },',
|
|
70
|
+
' "typography": {',
|
|
71
|
+
' "headingCategory": "serif|sans-serif|monospace|display|handwriting",',
|
|
72
|
+
' "bodyCategory": "serif|sans-serif|monospace|display|handwriting",',
|
|
73
|
+
' "scaleRatio": "minor-second|major-second|minor-third|major-third|perfect-fourth|augmented-fourth|perfect-fifth|golden-ratio"',
|
|
74
|
+
' },',
|
|
75
|
+
' "reasoning": "2-3 sentences explaining why these choices fit the brand"',
|
|
76
|
+
'}',
|
|
77
|
+
].join('\n');
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,OAA4C,EAC5C,YAA2B;IAE3B,MAAM,YAAY,GAAG;QACnB,UAAU,YAAY,CAAC,IAAI,EAAE;QAC7B,aAAa,YAAY,CAAC,QAAQ,EAAE;QACpC,UAAU,YAAY,CAAC,KAAK,EAAE;QAC9B,0BAA0B,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3D,yBAAyB,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE;QAC9D,sBAAsB,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE;KACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,WAAW,GAAG;;;;;;;;;;EAUpB,CAAC;IAED,MAAM,gBAAgB,GAAG;;;;;;;;EAQzB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAErE,OAAO;QACL,wHAAwH;QACxH,EAAE;QACF,wBAAwB;QACxB,YAAY;QACZ,EAAE;QACF,yBAAyB,OAAO,EAAE;QAClC,mBAAmB,QAAQ,GAAG;QAC9B,EAAE;QACF,oDAAoD;QACpD,MAAM;QACN,EAAE;QACF,oBAAoB;QACpB,uFAAuF;QACvF,gEAAgE;QAChE,+EAA+E;QAC/E,wDAAwD;QACxD,mEAAmE;QACnE,mEAAmE;QACnE,iEAAiE;QACjE,sEAAsE;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,QAAgB,EAChB,WAAmB;IAEnB,OAAO;QACL,sGAAsG;QACtG,EAAE;QACF,eAAe,SAAS,EAAE;QAC1B,aAAa,QAAQ,EAAE;QACvB,iBAAiB,WAAW,GAAG;QAC/B,EAAE;QACF,+BAA+B;QAC/B,GAAG;QACH,yEAAyE;QACzE,cAAc;QACd,0BAA0B;QAC1B,8FAA8F;QAC9F,gCAAgC;QAChC,MAAM;QACN,mBAAmB;QACnB,0EAA0E;QAC1E,uEAAuE;QACvE,kIAAkI;QAClI,MAAM;QACN,2EAA2E;QAC3E,GAAG;KACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BrandStyle, ColorHarmony, ColorTheme, FontCategory, TypeScaleRatio } from '../../types.js';
|
|
2
|
+
export interface ColorIntent {
|
|
3
|
+
baseColor?: string;
|
|
4
|
+
harmony?: ColorHarmony;
|
|
5
|
+
theme?: ColorTheme;
|
|
6
|
+
saturationShift?: number;
|
|
7
|
+
lightnessShift?: number;
|
|
8
|
+
hueShift?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TypographyIntent {
|
|
11
|
+
headingCategory?: FontCategory;
|
|
12
|
+
bodyCategory?: FontCategory;
|
|
13
|
+
scaleRatio?: TypeScaleRatio;
|
|
14
|
+
baseSize?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface BrandIntent {
|
|
17
|
+
color?: ColorIntent;
|
|
18
|
+
typography?: TypographyIntent;
|
|
19
|
+
style?: BrandStyle;
|
|
20
|
+
reasoning?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface InterpreterOptions {
|
|
23
|
+
anthropicApiKey?: string;
|
|
24
|
+
model?: string;
|
|
25
|
+
maxTokens?: number;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/ai/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-generator.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/documents/html-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA6B9D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function generateBrandHtml(brand) {
|
|
2
|
+
const { colors, typography, spacing } = brand;
|
|
3
|
+
return `<!DOCTYPE html>
|
|
4
|
+
<html lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="UTF-8">
|
|
7
|
+
<title>${brand.name} Brand Book</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<h1>${brand.name}</h1>
|
|
11
|
+
${brand.tagline ? `<p>${brand.tagline}</p>` : ''}
|
|
12
|
+
<section>
|
|
13
|
+
<h2>Colors</h2>
|
|
14
|
+
<p>Primary: ${colors.primary.hex}</p>
|
|
15
|
+
<p>Secondary: ${colors.secondary.hex}</p>
|
|
16
|
+
<p>Accent: ${colors.accent.hex}</p>
|
|
17
|
+
</section>
|
|
18
|
+
<section>
|
|
19
|
+
<h2>Typography</h2>
|
|
20
|
+
<p>Heading: ${typography.headingFont}</p>
|
|
21
|
+
<p>Body: ${typography.bodyFont}</p>
|
|
22
|
+
<p>Scale: ${typography.scaleRatio}</p>
|
|
23
|
+
</section>
|
|
24
|
+
<section>
|
|
25
|
+
<h2>Spacing</h2>
|
|
26
|
+
<p>Base unit: ${spacing.unit}px</p>
|
|
27
|
+
</section>
|
|
28
|
+
</body>
|
|
29
|
+
</html>`;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=html-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-generator.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/documents/html-generator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC9C,OAAO;;;;WAIE,KAAK,CAAC,IAAI;;;QAGb,KAAK,CAAC,IAAI;IACd,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE;;;kBAGhC,MAAM,CAAC,OAAO,CAAC,GAAG;oBAChB,MAAM,CAAC,SAAS,CAAC,GAAG;iBACvB,MAAM,CAAC,MAAM,CAAC,GAAG;;;;kBAIhB,UAAU,CAAC,WAAW;eACzB,UAAU,CAAC,QAAQ;gBAClB,UAAU,CAAC,UAAU;;;;oBAIjB,OAAO,CAAC,IAAI;;;QAGxB,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-generator.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/documents/pdf-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAkBpE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function generateBrandPdfContent(brand) {
|
|
2
|
+
return [
|
|
3
|
+
`${brand.name} Brand Guidelines`,
|
|
4
|
+
brand.tagline ?? '',
|
|
5
|
+
'',
|
|
6
|
+
'Colors',
|
|
7
|
+
` Primary: ${brand.colors.primary.hex}`,
|
|
8
|
+
` Secondary: ${brand.colors.secondary.hex}`,
|
|
9
|
+
` Accent: ${brand.colors.accent.hex}`,
|
|
10
|
+
'',
|
|
11
|
+
'Typography',
|
|
12
|
+
` Heading: ${brand.typography.headingFont}`,
|
|
13
|
+
` Body: ${brand.typography.bodyFont}`,
|
|
14
|
+
` Base size: ${brand.typography.baseSize}px`,
|
|
15
|
+
'',
|
|
16
|
+
'Spacing',
|
|
17
|
+
` Base unit: ${brand.spacing.unit}px`,
|
|
18
|
+
].join('\n');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=pdf-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-generator.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/documents/pdf-generator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,KAAoB;IAC1D,OAAO;QACL,GAAG,KAAK,CAAC,IAAI,mBAAmB;QAChC,KAAK,CAAC,OAAO,IAAI,EAAE;QACnB,EAAE;QACF,QAAQ;QACR,cAAc,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACxC,gBAAgB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAC5C,aAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;QACtC,EAAE;QACF,YAAY;QACZ,cAAc,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE;QAC5C,WAAW,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;QACtC,gBAAgB,KAAK,CAAC,UAAU,CAAC,QAAQ,IAAI;QAC7C,EAAE;QACF,SAAS;QACT,gBAAgB,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-variables.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/exporters/css-variables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoE/D"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export function exportCssVariables(brand) {
|
|
2
|
+
const { colors, typography, spacing } = brand;
|
|
3
|
+
const lines = [':root {'];
|
|
4
|
+
lines.push(` --color-primary: ${colors.primary.hex};`);
|
|
5
|
+
lines.push(` --color-secondary: ${colors.secondary.hex};`);
|
|
6
|
+
lines.push(` --color-accent: ${colors.accent.hex};`);
|
|
7
|
+
for (const n of colors.neutral) {
|
|
8
|
+
lines.push(` --color-${n.name}: ${n.hex};`);
|
|
9
|
+
}
|
|
10
|
+
lines.push(` --color-success: ${colors.semantic.success.hex};`);
|
|
11
|
+
lines.push(` --color-warning: ${colors.semantic.warning.hex};`);
|
|
12
|
+
lines.push(` --color-error: ${colors.semantic.error.hex};`);
|
|
13
|
+
lines.push(` --color-info: ${colors.semantic.info.hex};`);
|
|
14
|
+
lines.push('');
|
|
15
|
+
lines.push(` --font-heading: '${typography.headingFont}', sans-serif;`);
|
|
16
|
+
lines.push(` --font-body: '${typography.bodyFont}', sans-serif;`);
|
|
17
|
+
lines.push(` --font-mono: '${typography.monoFont}', monospace;`);
|
|
18
|
+
for (const step of typography.steps) {
|
|
19
|
+
lines.push(` --text-${step.name}: ${step.size};`);
|
|
20
|
+
lines.push(` --leading-${step.name}: ${step.lineHeight};`);
|
|
21
|
+
}
|
|
22
|
+
lines.push('');
|
|
23
|
+
for (const [key, value] of Object.entries(spacing.values)) {
|
|
24
|
+
lines.push(` --spacing-${key}: ${value};`);
|
|
25
|
+
}
|
|
26
|
+
if (brand.shadows) {
|
|
27
|
+
lines.push('');
|
|
28
|
+
for (const [name, level] of Object.entries(brand.shadows.levels)) {
|
|
29
|
+
lines.push(` --shadow-${name}: ${level.cssValue};`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (brand.borders) {
|
|
33
|
+
lines.push('');
|
|
34
|
+
for (const [name, value] of Object.entries(brand.borders.radii)) {
|
|
35
|
+
lines.push(` --radius-${name}: ${value};`);
|
|
36
|
+
}
|
|
37
|
+
for (const [name, value] of Object.entries(brand.borders.widths)) {
|
|
38
|
+
lines.push(` --border-${name}: ${value};`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (brand.motion) {
|
|
42
|
+
lines.push('');
|
|
43
|
+
for (const [name, value] of Object.entries(brand.motion.durations)) {
|
|
44
|
+
lines.push(` --duration-${name}: ${value};`);
|
|
45
|
+
}
|
|
46
|
+
for (const [name, value] of Object.entries(brand.motion.easings)) {
|
|
47
|
+
lines.push(` --ease-${name}: ${value};`);
|
|
48
|
+
}
|
|
49
|
+
for (const [name, value] of Object.entries(brand.motion.transitions)) {
|
|
50
|
+
lines.push(` --transition-${name}: ${value};`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (brand.gradients) {
|
|
54
|
+
lines.push('');
|
|
55
|
+
for (const [name, gradient] of Object.entries(brand.gradients.presets)) {
|
|
56
|
+
lines.push(` --gradient-${name}: ${gradient.cssValue};`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
lines.push('}');
|
|
60
|
+
return lines.join('\n');
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=css-variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-variables.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/exporters/css-variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-tokens.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/exporters/design-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,CAmFrE"}
|