a46764fb1b
ci / Validate workspace (push) Has been cancelled
landing-page-ci / Validate landing page (push) Has been cancelled
landing-page-deploy / Deploy landing page (push) Has been cancelled
github-metrics / Generate repository metrics SVG (push) Has been cancelled
refresh-contributors-wall / Refresh contributors wall cache bust (push) Waiting to run
72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { extractColors } from '../src/design-system-showcase.js';
|
|
|
|
type Color = { name: string; value: string; role: string };
|
|
|
|
function findColor(colors: Color[], name: string): Color | undefined {
|
|
return colors.find((c) => c.name.toLowerCase() === name.toLowerCase());
|
|
}
|
|
|
|
describe('extractColors / Pattern B', () => {
|
|
it('parses `- **Name:** `#hex`` (colon inside bold) — agentic / warm-editorial shape', () => {
|
|
const md = [
|
|
'## 2. Color',
|
|
'',
|
|
'- **Primary:** `#FF5701` — Token from style foundations.',
|
|
'- **Secondary:** `#F6F6F1` — Token from style foundations.',
|
|
'- **Surface:** `#FFFFFF` — Token from style foundations.',
|
|
'- **Text:** `#111827` — Token from style foundations.',
|
|
].join('\n');
|
|
|
|
const colors = extractColors(md);
|
|
|
|
expect(findColor(colors, 'Primary')?.value).toBe('#ff5701');
|
|
expect(findColor(colors, 'Secondary')?.value).toBe('#f6f6f1');
|
|
expect(findColor(colors, 'Surface')?.value).toBe('#ffffff');
|
|
expect(findColor(colors, 'Text')?.value).toBe('#111827');
|
|
});
|
|
|
|
it('parses `- Name: `#hex`` bare list shape', () => {
|
|
const md = [
|
|
'### Buttons',
|
|
'',
|
|
'- Background: `#7d2ae8`',
|
|
'- Text: `#ffffff`',
|
|
].join('\n');
|
|
|
|
const colors = extractColors(md);
|
|
|
|
expect(findColor(colors, 'Background')?.value).toBe('#7d2ae8');
|
|
expect(findColor(colors, 'Text')?.value).toBe('#ffffff');
|
|
});
|
|
|
|
it('parses `**Name** `#hex`: role` (Duolingo / Canva shape with role suffix)', () => {
|
|
const md = [
|
|
'## Color',
|
|
'',
|
|
'- **Owl Green** `#58CC02`: Primary brand and CTA.',
|
|
'- **Feather Blue** `#1CB0F6`: Secondary accent.',
|
|
].join('\n');
|
|
|
|
const colors = extractColors(md);
|
|
|
|
const owl = findColor(colors, 'Owl Green');
|
|
expect(owl?.value).toBe('#58cc02');
|
|
expect(owl?.role).toContain('Primary brand');
|
|
|
|
const feather = findColor(colors, 'Feather Blue');
|
|
expect(feather?.value).toBe('#1cb0f6');
|
|
expect(feather?.role).toContain('Secondary accent');
|
|
});
|
|
|
|
it('extracts the first hex from multi-hex `**Name** (`#a` / `#b`): role` (Linear shape)', () => {
|
|
const md = '- **Marketing Black** (`#010102` / `#08090a`): Marketing surface and dark canvas.';
|
|
|
|
const colors = extractColors(md);
|
|
|
|
const black = findColor(colors, 'Marketing Black');
|
|
expect(black?.value).toBe('#010102');
|
|
expect(black?.role).toContain('Marketing surface');
|
|
});
|
|
});
|