create-specfuse 0.4.0 → 0.5.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 (67) hide show
  1. package/dist/index.js +0 -0
  2. package/dist/templates/design-md-skill.js +9 -9
  3. package/package.json +2 -2
  4. package/dist/design-md/__tests__/archetype-schema.test.d.ts +0 -2
  5. package/dist/design-md/__tests__/archetype-schema.test.d.ts.map +0 -1
  6. package/dist/design-md/__tests__/archetype-schema.test.js +0 -60
  7. package/dist/design-md/__tests__/archetype-schema.test.js.map +0 -1
  8. package/dist/design-md/__tests__/archetypes.test.d.ts +0 -2
  9. package/dist/design-md/__tests__/archetypes.test.d.ts.map +0 -1
  10. package/dist/design-md/__tests__/archetypes.test.js +0 -45
  11. package/dist/design-md/__tests__/archetypes.test.js.map +0 -1
  12. package/dist/design-md/__tests__/fine-tuner.test.d.ts +0 -2
  13. package/dist/design-md/__tests__/fine-tuner.test.d.ts.map +0 -1
  14. package/dist/design-md/__tests__/fine-tuner.test.js +0 -38
  15. package/dist/design-md/__tests__/fine-tuner.test.js.map +0 -1
  16. package/dist/design-md/__tests__/index.test.d.ts +0 -2
  17. package/dist/design-md/__tests__/index.test.d.ts.map +0 -1
  18. package/dist/design-md/__tests__/index.test.js +0 -66
  19. package/dist/design-md/__tests__/index.test.js.map +0 -1
  20. package/dist/design-md/__tests__/matcher.test.d.ts +0 -2
  21. package/dist/design-md/__tests__/matcher.test.d.ts.map +0 -1
  22. package/dist/design-md/__tests__/matcher.test.js +0 -74
  23. package/dist/design-md/__tests__/matcher.test.js.map +0 -1
  24. package/dist/design-md/__tests__/questionnaire.test.d.ts +0 -2
  25. package/dist/design-md/__tests__/questionnaire.test.d.ts.map +0 -1
  26. package/dist/design-md/__tests__/questionnaire.test.js +0 -57
  27. package/dist/design-md/__tests__/questionnaire.test.js.map +0 -1
  28. package/dist/design-md/__tests__/renderer.test.d.ts +0 -2
  29. package/dist/design-md/__tests__/renderer.test.d.ts.map +0 -1
  30. package/dist/design-md/__tests__/renderer.test.js +0 -51
  31. package/dist/design-md/__tests__/renderer.test.js.map +0 -1
  32. package/dist/design-md/__tests__/types.test.d.ts +0 -2
  33. package/dist/design-md/__tests__/types.test.d.ts.map +0 -1
  34. package/dist/design-md/__tests__/types.test.js +0 -63
  35. package/dist/design-md/__tests__/types.test.js.map +0 -1
  36. package/dist/design-md/archetypes.d.ts +0 -3
  37. package/dist/design-md/archetypes.d.ts.map +0 -1
  38. package/dist/design-md/archetypes.js +0 -18
  39. package/dist/design-md/archetypes.js.map +0 -1
  40. package/dist/design-md/fine-tuner.d.ts +0 -4
  41. package/dist/design-md/fine-tuner.d.ts.map +0 -1
  42. package/dist/design-md/fine-tuner.js +0 -13
  43. package/dist/design-md/fine-tuner.js.map +0 -1
  44. package/dist/design-md/index.d.ts +0 -2
  45. package/dist/design-md/index.d.ts.map +0 -1
  46. package/dist/design-md/index.js +0 -49
  47. package/dist/design-md/index.js.map +0 -1
  48. package/dist/design-md/matcher.d.ts +0 -8
  49. package/dist/design-md/matcher.d.ts.map +0 -1
  50. package/dist/design-md/matcher.js +0 -116
  51. package/dist/design-md/matcher.js.map +0 -1
  52. package/dist/design-md/questionnaire.d.ts +0 -15
  53. package/dist/design-md/questionnaire.d.ts.map +0 -1
  54. package/dist/design-md/questionnaire.js +0 -96
  55. package/dist/design-md/questionnaire.js.map +0 -1
  56. package/dist/design-md/renderer.d.ts +0 -3
  57. package/dist/design-md/renderer.d.ts.map +0 -1
  58. package/dist/design-md/renderer.js +0 -43
  59. package/dist/design-md/renderer.js.map +0 -1
  60. package/dist/design-md/schema.d.ts +0 -69
  61. package/dist/design-md/schema.d.ts.map +0 -1
  62. package/dist/design-md/schema.js +0 -30
  63. package/dist/design-md/schema.js.map +0 -1
  64. package/dist/design-md/types.d.ts +0 -33
  65. package/dist/design-md/types.d.ts.map +0 -1
  66. package/dist/design-md/types.js +0 -2
  67. package/dist/design-md/types.js.map +0 -1
@@ -1,63 +0,0 @@
1
- import { describe, it, expectTypeOf } from 'vitest';
2
- describe('DimensionVector type constraints', () => {
3
- it('accepts valid dimension values (1-5)', () => {
4
- const v = {
5
- colorTemp: 1,
6
- lightness: 2,
7
- density: 3,
8
- borderRadius: 4,
9
- tone: 5,
10
- };
11
- expectTypeOf(v.colorTemp).toEqualTypeOf();
12
- expectTypeOf(v.lightness).toEqualTypeOf();
13
- expectTypeOf(v.density).toEqualTypeOf();
14
- expectTypeOf(v.borderRadius).toEqualTypeOf();
15
- expectTypeOf(v.tone).toEqualTypeOf();
16
- });
17
- it('has exactly 5 dimension keys', () => {
18
- expectTypeOf().toEqualTypeOf();
19
- });
20
- });
21
- describe('ArchetypeCategory type constraints', () => {
22
- it('is an exhaustive union of 9 categories', () => {
23
- expectTypeOf().toEqualTypeOf();
24
- });
25
- });
26
- describe('Archetype type structure', () => {
27
- it('has required fields with correct types', () => {
28
- expectTypeOf().toHaveProperty('id');
29
- expectTypeOf().toHaveProperty('name');
30
- expectTypeOf().toHaveProperty('category');
31
- expectTypeOf().toHaveProperty('dimensions');
32
- expectTypeOf().toHaveProperty('anchors');
33
- expectTypeOf().toHaveProperty('template');
34
- expectTypeOf().toBeString();
35
- expectTypeOf().toBeString();
36
- expectTypeOf().toEqualTypeOf();
37
- expectTypeOf().toEqualTypeOf();
38
- expectTypeOf().toBeString();
39
- });
40
- it('anchors has primary and auxiliary fields', () => {
41
- expectTypeOf().toEqualTypeOf();
42
- });
43
- });
44
- describe('QuestionnaireAnswers type structure', () => {
45
- it('has correct field types', () => {
46
- expectTypeOf().toEqualTypeOf();
47
- expectTypeOf().toBeString();
48
- expectTypeOf().toBeString();
49
- expectTypeOf().toBeString();
50
- expectTypeOf().toEqualTypeOf();
51
- });
52
- });
53
- describe('DesignMdConfig type structure', () => {
54
- it('has archetype and vector fields', () => {
55
- expectTypeOf().toHaveProperty('archetype');
56
- expectTypeOf().toHaveProperty('finalVector');
57
- expectTypeOf().toHaveProperty('answers');
58
- expectTypeOf().toEqualTypeOf();
59
- expectTypeOf().toEqualTypeOf();
60
- expectTypeOf().toEqualTypeOf();
61
- });
62
- });
63
- //# sourceMappingURL=types.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/types.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Archetype } from './types.js';
2
- export declare function loadArchetypes(): Archetype[];
3
- //# sourceMappingURL=archetypes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/design-md/archetypes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAgB5C"}
@@ -1,18 +0,0 @@
1
- import { readFileSync, readdirSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { parse as parseYaml } from 'yaml';
4
- import { ArchetypeSchema } from './schema.js';
5
- const TEMPLATES_DIR = join(import.meta.dirname, 'templates');
6
- export function loadArchetypes() {
7
- const files = readdirSync(TEMPLATES_DIR).filter((f) => f.endsWith('.yaml') && !f.startsWith('_'));
8
- return files.map((f) => {
9
- const raw = readFileSync(join(TEMPLATES_DIR, f), 'utf-8');
10
- const parsed = parseYaml(raw);
11
- const result = ArchetypeSchema.safeParse(parsed);
12
- if (!result.success) {
13
- throw new Error(`Invalid archetype ${f}: ${result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join(', ')}`);
14
- }
15
- return result.data;
16
- });
17
- }
18
- //# sourceMappingURL=archetypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/design-md/archetypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAE7D,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CACjD,CAAC;IAEF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,qBAAqB,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5G,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,IAAiB,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { DimensionVector } from './types.js';
2
- export type DimensionOverrides = Partial<Record<keyof DimensionVector, number>>;
3
- export declare function applyOverrides(base: DimensionVector, overrides: DimensionOverrides): DimensionVector;
4
- //# sourceMappingURL=fine-tuner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fine-tuner.d.ts","sourceRoot":"","sources":["../../src/design-md/fine-tuner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhF,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAYpG"}
@@ -1,13 +0,0 @@
1
- export function applyOverrides(base, overrides) {
2
- const result = { ...base };
3
- for (const [key, value] of Object.entries(overrides)) {
4
- if (value === undefined)
5
- continue;
6
- if (!Number.isInteger(value) || value < 1 || value > 5) {
7
- throw new Error(`Invalid dimension value for ${key}: ${value} (must be integer 1-5)`);
8
- }
9
- result[key] = value;
10
- }
11
- return result;
12
- }
13
- //# sourceMappingURL=fine-tuner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fine-tuner.js","sourceRoot":"","sources":["../../src/design-md/fine-tuner.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,cAAc,CAAC,IAAqB,EAAE,SAA6B;IACjF,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,KAAK,KAAK,wBAAwB,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,CAAC,GAA4B,CAAC,GAAG,KAAuB,CAAC;IACjE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function generateDesignMd(targetDir: string): Promise<string | null>;
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-md/index.ts"],"names":[],"mappings":"AASA,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+ChF"}
@@ -1,49 +0,0 @@
1
- import { existsSync, writeFileSync, copyFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { runQuestionnaire } from './questionnaire.js';
4
- import { matchArchetype } from './matcher.js';
5
- import { deriveVector } from './matcher.js';
6
- import { applyOverrides } from './fine-tuner.js';
7
- import { renderDesignMd } from './renderer.js';
8
- export async function generateDesignMd(targetDir) {
9
- const { confirm, select, number } = await import('@inquirer/prompts');
10
- const outputPath = join(targetDir, 'DESIGN.md');
11
- if (existsSync(outputPath)) {
12
- const overwrite = await confirm({ message: 'DESIGN.md already exists. Overwrite?' });
13
- if (!overwrite)
14
- return null;
15
- copyFileSync(outputPath, join(targetDir, 'DESIGN.md.bak'));
16
- }
17
- const answers = await runQuestionnaire();
18
- const results = matchArchetype(answers);
19
- const top = results[0];
20
- const accepted = await confirm({
21
- message: `Best match: ${top.archetype.name} (distance: ${top.distance.toFixed(2)}). Accept?`,
22
- });
23
- if (!accepted)
24
- return null;
25
- const baseVector = deriveVector(answers);
26
- const action = await select({
27
- message: 'Fine-tune dimensions?',
28
- choices: [
29
- { value: 'accept', name: 'Accept as-is' },
30
- { value: 'tune', name: 'Adjust dimensions manually' },
31
- ],
32
- });
33
- let finalVector = baseVector;
34
- if (action === 'tune') {
35
- const overrides = {};
36
- for (const key of Object.keys(baseVector)) {
37
- const val = await number({
38
- message: `${key} (current: ${baseVector[key]}, 1-5, Enter to keep):`,
39
- });
40
- if (val !== undefined)
41
- overrides[key] = val;
42
- }
43
- finalVector = applyOverrides(baseVector, overrides);
44
- }
45
- const content = renderDesignMd(top.archetype, finalVector);
46
- writeFileSync(outputPath, content, 'utf-8');
47
- return outputPath;
48
- }
49
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/design-md/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAA2B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEhD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,OAAO,EAAE,eAAe,GAAG,CAAC,SAAS,CAAC,IAAI,eAAe,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;KAC7F,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC1B,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE;YACzC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE;SACtD;KACF,CAAC,CAAC;IAEH,IAAI,WAAW,GAAoB,UAAU,CAAC;IAE9C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAA8B,EAAE,CAAC;YACvE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;gBACvB,OAAO,EAAE,GAAG,GAAG,cAAc,UAAU,CAAC,GAAG,CAAC,wBAAwB;aACrE,CAAC,CAAC;YACH,IAAI,GAAG,KAAK,SAAS;gBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC9C,CAAC;QACD,WAAW,GAAG,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC3D,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE5C,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { Archetype, DimensionVector, QuestionnaireAnswers } from './types.js';
2
- export interface MatchResult {
3
- archetype: Archetype;
4
- distance: number;
5
- }
6
- export declare function deriveVector(answers: QuestionnaireAnswers): DimensionVector;
7
- export declare function matchArchetype(answers: QuestionnaireAnswers): MatchResult[];
8
- //# sourceMappingURL=matcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/design-md/matcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAkB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEnG,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2CD,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,CA4D3E;AAYD,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,EAAE,CAe3E"}
@@ -1,116 +0,0 @@
1
- import { loadArchetypes } from './archetypes.js';
2
- const MOOD_MAP = {
3
- clean: { lightness: 4, tone: 2 },
4
- playful: { colorTemp: 4, tone: 5, borderRadius: 4 },
5
- serious: { colorTemp: 2, tone: 1, borderRadius: 2 },
6
- warm: { colorTemp: 4, lightness: 3, tone: 3 },
7
- bold: { colorTemp: 3, tone: 4, lightness: 2 },
8
- calm: { colorTemp: 3, lightness: 4, tone: 2 },
9
- dark: { colorTemp: 1, lightness: 1, tone: 1 },
10
- luxurious: { colorTemp: 3, lightness: 2, borderRadius: 3, tone: 3 },
11
- };
12
- const AUDIENCE_MAP = {
13
- developers: { density: 1, borderRadius: 2, tone: 1 },
14
- business: { density: 2, tone: 2, lightness: 3 },
15
- general: { density: 3, borderRadius: 4, tone: 4 },
16
- designers: { lightness: 4, borderRadius: 4, tone: 3 },
17
- enterprise: { density: 2, tone: 1, borderRadius: 2 },
18
- };
19
- const DENSITY_MAP = {
20
- compact: 1,
21
- balanced: 3,
22
- spacious: 5,
23
- };
24
- const CATEGORY_MAP = {
25
- 'internal-tool': { colorTemp: 2, lightness: 3, density: 1, borderRadius: 2, tone: 1 },
26
- dashboard: { colorTemp: 1, lightness: 1, density: 1, borderRadius: 2, tone: 1 },
27
- consumer: { colorTemp: 4, lightness: 4, density: 3, borderRadius: 4, tone: 4 },
28
- developer: { colorTemp: 2, lightness: 2, density: 2, borderRadius: 2, tone: 1 },
29
- mobile: { colorTemp: 3, lightness: 4, density: 3, borderRadius: 5, tone: 4 },
30
- 'e-commerce': { colorTemp: 3, lightness: 4, density: 2, borderRadius: 3, tone: 3 },
31
- marketing: { colorTemp: 4, lightness: 4, density: 4, borderRadius: 4, tone: 5 },
32
- 'form-heavy': { colorTemp: 2, lightness: 3, density: 2, borderRadius: 2, tone: 2 },
33
- content: { colorTemp: 3, lightness: 4, density: 3, borderRadius: 3, tone: 3 },
34
- };
35
- function clamp(val) {
36
- return Math.max(1, Math.min(5, Math.round(val)));
37
- }
38
- export function deriveVector(answers) {
39
- const accumulator = { colorTemp: 0, lightness: 0, density: 0, borderRadius: 0, tone: 0 };
40
- const weights = { colorTemp: 0, lightness: 0, density: 0, borderRadius: 0, tone: 0 };
41
- // Q1: product type (primary 0.7, secondary 0.3)
42
- const primary = answers.productType[0];
43
- const secondaries = answers.productType.slice(1);
44
- const primaryVec = CATEGORY_MAP[primary];
45
- if (primaryVec) {
46
- for (const [k, v] of Object.entries(primaryVec)) {
47
- const key = k;
48
- accumulator[key] += v * 0.7;
49
- weights[key] += 0.7;
50
- }
51
- }
52
- const secWeight = secondaries.length > 0 ? 0.3 / secondaries.length : 0;
53
- for (const sec of secondaries) {
54
- const secVec = CATEGORY_MAP[sec];
55
- if (secVec) {
56
- for (const [k, v] of Object.entries(secVec)) {
57
- const key = k;
58
- accumulator[key] += v * secWeight;
59
- weights[key] += secWeight;
60
- }
61
- }
62
- }
63
- // Q2: audience
64
- const audienceVec = AUDIENCE_MAP[answers.audience];
65
- if (audienceVec) {
66
- for (const [k, v] of Object.entries(audienceVec)) {
67
- const key = k;
68
- accumulator[key] += v * 0.5;
69
- weights[key] += 0.5;
70
- }
71
- }
72
- // Q3: mood
73
- const moodVec = MOOD_MAP[answers.mood];
74
- if (moodVec) {
75
- for (const [k, v] of Object.entries(moodVec)) {
76
- const key = k;
77
- accumulator[key] += v * 0.6;
78
- weights[key] += 0.6;
79
- }
80
- }
81
- // Q4: density (direct mapping)
82
- const densityVal = DENSITY_MAP[answers.density] ?? 3;
83
- accumulator.density += densityVal * 0.8;
84
- weights.density += 0.8;
85
- // Compute weighted average for each dimension
86
- return {
87
- colorTemp: clamp(weights.colorTemp > 0 ? accumulator.colorTemp / weights.colorTemp : 3),
88
- lightness: clamp(weights.lightness > 0 ? accumulator.lightness / weights.lightness : 3),
89
- density: clamp(weights.density > 0 ? accumulator.density / weights.density : 3),
90
- borderRadius: clamp(weights.borderRadius > 0 ? accumulator.borderRadius / weights.borderRadius : 3),
91
- tone: clamp(weights.tone > 0 ? accumulator.tone / weights.tone : 3),
92
- };
93
- }
94
- function euclideanDistance(a, b) {
95
- return Math.sqrt((a.colorTemp - b.colorTemp) ** 2 +
96
- (a.lightness - b.lightness) ** 2 +
97
- (a.density - b.density) ** 2 +
98
- (a.borderRadius - b.borderRadius) ** 2 +
99
- (a.tone - b.tone) ** 2);
100
- }
101
- export function matchArchetype(answers) {
102
- const targetVector = deriveVector(answers);
103
- const archetypes = loadArchetypes();
104
- const primaryCategory = answers.productType[0];
105
- const CATEGORY_BONUS = 0.2;
106
- return archetypes
107
- .map((archetype) => {
108
- let distance = euclideanDistance(targetVector, archetype.dimensions);
109
- if (archetype.category === primaryCategory) {
110
- distance *= 1 - CATEGORY_BONUS;
111
- }
112
- return { archetype, distance };
113
- })
114
- .sort((a, b) => a.distance - b.distance);
115
- }
116
- //# sourceMappingURL=matcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/design-md/matcher.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { QuestionnaireAnswers } from './types.js';
2
- export interface QuestionChoice {
3
- value: string;
4
- name: string;
5
- }
6
- export interface QuestionDefinition {
7
- id: keyof QuestionnaireAnswers | 'productType' | 'audience' | 'mood' | 'density' | 'reference';
8
- type: 'checkbox' | 'select' | 'input';
9
- message: string;
10
- choices: QuestionChoice[];
11
- required: boolean;
12
- }
13
- export declare const QUESTIONS: QuestionDefinition[];
14
- export declare function runQuestionnaire(): Promise<QuestionnaireAnswers>;
15
- //# sourceMappingURL=questionnaire.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"questionnaire.d.ts","sourceRoot":"","sources":["../../src/design-md/questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,oBAAoB,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IAC/F,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,SAAS,EAAE,kBAAkB,EAiEzC,CAAC;AAEF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAkCtE"}
@@ -1,96 +0,0 @@
1
- export const QUESTIONS = [
2
- {
3
- id: 'productType',
4
- type: 'checkbox',
5
- message: 'What type of product are you building? (first = primary, rest = secondary)',
6
- required: true,
7
- choices: [
8
- { value: 'internal-tool', name: 'Internal Tool' },
9
- { value: 'dashboard', name: 'Dashboard / Analytics' },
10
- { value: 'consumer', name: 'Consumer App' },
11
- { value: 'developer', name: 'Developer Tool / API' },
12
- { value: 'mobile', name: 'Mobile App' },
13
- { value: 'e-commerce', name: 'E-Commerce' },
14
- { value: 'marketing', name: 'Marketing / Landing' },
15
- { value: 'form-heavy', name: 'Form-Heavy / Workflow' },
16
- { value: 'content', name: 'Content / Documentation' },
17
- ],
18
- },
19
- {
20
- id: 'audience',
21
- type: 'select',
22
- message: 'Who is the primary audience?',
23
- required: true,
24
- choices: [
25
- { value: 'developers', name: 'Developers / Engineers' },
26
- { value: 'business', name: 'Business Users / Analysts' },
27
- { value: 'general', name: 'General Public' },
28
- { value: 'designers', name: 'Designers / Creatives' },
29
- { value: 'enterprise', name: 'Enterprise / Compliance-sensitive' },
30
- ],
31
- },
32
- {
33
- id: 'mood',
34
- type: 'checkbox',
35
- message: 'Select mood keywords that describe the feel you want:',
36
- required: true,
37
- choices: [
38
- { value: 'clean', name: 'Clean / Minimal' },
39
- { value: 'playful', name: 'Playful / Fun' },
40
- { value: 'serious', name: 'Serious / Professional' },
41
- { value: 'warm', name: 'Warm / Friendly' },
42
- { value: 'bold', name: 'Bold / Energetic' },
43
- { value: 'calm', name: 'Calm / Neutral' },
44
- { value: 'dark', name: 'Dark / Techy' },
45
- { value: 'luxurious', name: 'Luxurious / Premium' },
46
- ],
47
- },
48
- {
49
- id: 'density',
50
- type: 'select',
51
- message: 'How dense should the interface be?',
52
- required: true,
53
- choices: [
54
- { value: 'compact', name: 'Compact — dense tables, small spacing' },
55
- { value: 'balanced', name: 'Balanced — moderate spacing' },
56
- { value: 'spacious', name: 'Spacious — generous whitespace' },
57
- ],
58
- },
59
- {
60
- id: 'reference',
61
- type: 'input',
62
- message: 'Any reference product or site for style inspiration? (optional, press Enter to skip)',
63
- required: false,
64
- choices: [],
65
- },
66
- ];
67
- export async function runQuestionnaire() {
68
- const { checkbox, select, input } = await import('@inquirer/prompts');
69
- const productType = await checkbox({
70
- message: QUESTIONS[0].message,
71
- choices: QUESTIONS[0].choices,
72
- });
73
- const audience = await select({
74
- message: QUESTIONS[1].message,
75
- choices: QUESTIONS[1].choices,
76
- });
77
- const mood = await select({
78
- message: QUESTIONS[2].message,
79
- choices: QUESTIONS[2].choices,
80
- });
81
- const density = await select({
82
- message: QUESTIONS[3].message,
83
- choices: QUESTIONS[3].choices,
84
- });
85
- const reference = await input({
86
- message: QUESTIONS[4].message,
87
- });
88
- return {
89
- productType,
90
- audience,
91
- mood,
92
- density,
93
- reference: reference || null,
94
- };
95
- }
96
- //# sourceMappingURL=questionnaire.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"questionnaire.js","sourceRoot":"","sources":["../../src/design-md/questionnaire.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Archetype, DimensionVector } from './types.js';
2
- export declare function renderDesignMd(archetype: Archetype, vector: DimensionVector): string;
3
- //# sourceMappingURL=renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/design-md/renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CA4CpF"}
@@ -1,43 +0,0 @@
1
- import { stringify as yamlStringify, parse as parseYaml } from 'yaml';
2
- export function renderDesignMd(archetype, vector) {
3
- const templateTokens = parseYaml(archetype.template);
4
- const frontMatter = {
5
- archetype: archetype.id,
6
- dimensions: vector,
7
- tokens: templateTokens.tokens,
8
- };
9
- const yamlContent = yamlStringify(frontMatter).trim();
10
- const markdown = `
11
- # Style Direction
12
-
13
- Based on **${archetype.name}** archetype (reference: ${archetype.anchors.primary}).
14
-
15
- Dimension profile: colorTemp=${vector.colorTemp}, lightness=${vector.lightness}, density=${vector.density}, borderRadius=${vector.borderRadius}, tone=${vector.tone}.
16
-
17
- ## Color Palette
18
-
19
- Primary: \`${templateTokens.tokens.colors.primary}\`
20
- Background: \`${templateTokens.tokens.colors.background}\`
21
- Surface: \`${templateTokens.tokens.colors.surface}\`
22
- Text: \`${templateTokens.tokens.colors.text}\`
23
- Accent: \`${templateTokens.tokens.colors.accent}\`
24
-
25
- ## Typography
26
-
27
- Font family: ${templateTokens.tokens.typography.fontFamily}
28
- Scale: ${templateTokens.tokens.typography.scale.join(', ')}
29
-
30
- ## Spacing
31
-
32
- Base unit: ${templateTokens.tokens.spacing.base}
33
- Scale: ${templateTokens.tokens.spacing.scale.join(', ')}
34
-
35
- ## Components
36
-
37
- Border radius: ${templateTokens.tokens.radius.default} (default), ${templateTokens.tokens.radius.large} (large)
38
- Density: ${templateTokens.tokens.density.compact ? 'compact' : 'comfortable'}
39
- Table row height: ${templateTokens.tokens.density.tableRowHeight}
40
- `;
41
- return `---\n${yamlContent}\n---\n${markdown}`;
42
- }
43
- //# sourceMappingURL=renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/design-md/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAGtE,MAAM,UAAU,cAAc,CAAC,SAAoB,EAAE,MAAuB;IAC1E,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG;QAClB,SAAS,EAAE,SAAS,CAAC,EAAE;QACvB,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,cAAc,CAAC,MAAM;KAC9B,CAAC;IAEF,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtD,MAAM,QAAQ,GAAG;;;aAGN,SAAS,CAAC,IAAI,4BAA4B,SAAS,CAAC,OAAO,CAAC,OAAO;;+BAEjD,MAAM,CAAC,SAAS,eAAe,MAAM,CAAC,SAAS,aAAa,MAAM,CAAC,OAAO,kBAAkB,MAAM,CAAC,YAAY,UAAU,MAAM,CAAC,IAAI;;;;aAItJ,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;gBACjC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;aAC1C,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;UACvC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;YAC/B,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;;;;eAIhC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;SACjD,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;aAI7C,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;SACtC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;iBAItC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,eAAe,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;WAC3F,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;oBACxD,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;CAC/D,CAAC;IAEA,OAAO,QAAQ,WAAW,UAAU,QAAQ,EAAE,CAAC;AACjD,CAAC"}
@@ -1,69 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const ArchetypeSchema: z.ZodObject<{
3
- id: z.ZodString;
4
- name: z.ZodString;
5
- category: z.ZodEnum<["internal-tool", "dashboard", "consumer", "developer", "mobile", "e-commerce", "marketing", "form-heavy", "content"]>;
6
- dimensions: z.ZodObject<{
7
- colorTemp: z.ZodNumber;
8
- lightness: z.ZodNumber;
9
- density: z.ZodNumber;
10
- borderRadius: z.ZodNumber;
11
- tone: z.ZodNumber;
12
- }, "strip", z.ZodTypeAny, {
13
- colorTemp: number;
14
- lightness: number;
15
- density: number;
16
- borderRadius: number;
17
- tone: number;
18
- }, {
19
- colorTemp: number;
20
- lightness: number;
21
- density: number;
22
- borderRadius: number;
23
- tone: number;
24
- }>;
25
- anchors: z.ZodObject<{
26
- primary: z.ZodString;
27
- auxiliary: z.ZodArray<z.ZodString, "many">;
28
- }, "strip", z.ZodTypeAny, {
29
- primary: string;
30
- auxiliary: string[];
31
- }, {
32
- primary: string;
33
- auxiliary: string[];
34
- }>;
35
- template: z.ZodString;
36
- }, "strip", z.ZodTypeAny, {
37
- id: string;
38
- name: string;
39
- category: "internal-tool" | "dashboard" | "consumer" | "developer" | "mobile" | "e-commerce" | "marketing" | "form-heavy" | "content";
40
- dimensions: {
41
- colorTemp: number;
42
- lightness: number;
43
- density: number;
44
- borderRadius: number;
45
- tone: number;
46
- };
47
- anchors: {
48
- primary: string;
49
- auxiliary: string[];
50
- };
51
- template: string;
52
- }, {
53
- id: string;
54
- name: string;
55
- category: "internal-tool" | "dashboard" | "consumer" | "developer" | "mobile" | "e-commerce" | "marketing" | "form-heavy" | "content";
56
- dimensions: {
57
- colorTemp: number;
58
- lightness: number;
59
- density: number;
60
- borderRadius: number;
61
- tone: number;
62
- };
63
- anchors: {
64
- primary: string;
65
- auxiliary: string[];
66
- };
67
- template: string;
68
- }>;
69
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/design-md/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B1B,CAAC"}
@@ -1,30 +0,0 @@
1
- import { z } from 'zod';
2
- const DimensionValueSchema = z.number().int().min(1).max(5);
3
- export const ArchetypeSchema = z.object({
4
- id: z.string().regex(/^[a-z][a-z0-9-]*$/),
5
- name: z.string().min(1),
6
- category: z.enum([
7
- 'internal-tool',
8
- 'dashboard',
9
- 'consumer',
10
- 'developer',
11
- 'mobile',
12
- 'e-commerce',
13
- 'marketing',
14
- 'form-heavy',
15
- 'content',
16
- ]),
17
- dimensions: z.object({
18
- colorTemp: DimensionValueSchema,
19
- lightness: DimensionValueSchema,
20
- density: DimensionValueSchema,
21
- borderRadius: DimensionValueSchema,
22
- tone: DimensionValueSchema,
23
- }),
24
- anchors: z.object({
25
- primary: z.string().min(1),
26
- auxiliary: z.array(z.string().min(1)).min(1).max(2),
27
- }),
28
- template: z.string().min(1),
29
- });
30
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/design-md/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;QACf,eAAe;QACf,WAAW;QACX,UAAU;QACV,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,SAAS;KACV,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,oBAAoB;QAC7B,YAAY,EAAE,oBAAoB;QAClC,IAAI,EAAE,oBAAoB;KAC3B,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACpD,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC"}