@stonedeck/core 0.7.2 → 0.7.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAO/E;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAuG7F"}
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAM/E;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAwE7F"}
package/dist/emitter.js CHANGED
@@ -2,7 +2,6 @@ import { parseManifesto } from './parser/manifesto.js';
2
2
  import { parseSlides } from './parser/tokenizer.js';
3
3
  import { ThemeLoader } from './resolver/theme-loader.js';
4
4
  import { validateLayout, getLayout } from './layouts/validator.js';
5
- import { metricsCalculator } from './resolver/metrics.js';
6
5
  import { mapMarkdownLists } from './parser/list-mapper.js';
7
6
  import { mapMarkdownTable } from './parser/table-mapper.js';
8
7
  import { mapMarkdownImage } from './parser/image-mapper.js';
@@ -28,11 +27,9 @@ export function emitIR(content, filePath, themeOverride) {
28
27
  warnings.push(validation.error);
29
28
  }
30
29
  const layout = getLayout(slide.layout_id, slide.slots.length);
31
- // Merge Theme Defaults
32
- const defaults = theme.defaults || {};
33
- const mergedStyle = { ...defaults, ...slide.style };
34
30
  // Resolve Style with Theme
35
- const resolvedStyle = ThemeLoader.resolveStyle(mergedStyle, theme);
31
+ // Note: We pass slide.style directly. ThemeLoader will handle defaults and variants.
32
+ const resolvedStyle = ThemeLoader.resolveStyle(slide.style, theme, slide.variant, slideIdx);
36
33
  // Process Slots (List, Table, Image detection)
37
34
  const processedSlots = slide.slots.map(slot => {
38
35
  if (slot.type === 'markdown') {
@@ -60,41 +57,11 @@ export function emitIR(content, filePath, themeOverride) {
60
57
  }
61
58
  return slot;
62
59
  });
63
- // Calculate Metrics and Overflow
64
- const heights = [];
65
- if (layout) {
66
- processedSlots.forEach((slot, slotIdx) => {
67
- const slotDef = layout.slots[slotIdx];
68
- if (slotDef) {
69
- let contentToMeasure = '';
70
- if (slot.type === 'list') {
71
- contentToMeasure = slot.items.map((i) => i.text).join('\n');
72
- }
73
- else if (slot.type === 'markdown') {
74
- contentToMeasure = slot.raw;
75
- }
76
- else if (slot.type === 'table') {
77
- contentToMeasure = slot.rows.map((r) => r.map((c) => c.text).join(' ')).join('\n');
78
- }
79
- else if (slot.type === 'image') {
80
- contentToMeasure = slot.alt || slot.src;
81
- }
82
- const estimatedHeight = metricsCalculator.estimateMarkdownHeight(contentToMeasure, resolvedStyle, slotDef.width);
83
- heights.push(estimatedHeight);
84
- if (estimatedHeight > slotDef.height) {
85
- warnings.push(`Overflow Warning: Content in slot "${slotDef.id}" (slide ${slideIdx + 1}) exceeds defined height (${estimatedHeight.toFixed(1)}pt > ${slotDef.height}pt)`);
86
- }
87
- }
88
- });
89
- }
90
60
  return {
91
61
  ...slide,
92
62
  style: resolvedStyle,
93
63
  slots: processedSlots,
94
- warnings: warnings.length > 0 ? warnings : undefined,
95
- metrics: {
96
- heights
97
- }
64
+ warnings: warnings.length > 0 ? warnings : undefined
98
65
  };
99
66
  });
100
67
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@
27
27
  "x": 50,
28
28
  "y": 230,
29
29
  "width": 620,
30
- "height": 80
30
+ "height": 125
31
31
  }
32
32
  ]
33
33
  },
@@ -36,6 +36,7 @@ export interface SlideStyle {
36
36
  };
37
37
  card?: {
38
38
  background?: string;
39
+ color?: string;
39
40
  radius?: string;
40
41
  border?: string;
41
42
  shadow?: boolean;
@@ -69,13 +70,11 @@ export type SlotContent = {
69
70
  };
70
71
  export interface Slide {
71
72
  layout_id: string;
73
+ variant?: string;
72
74
  title?: string;
73
75
  style: SlideStyle;
74
76
  slots: SlotContent[];
75
77
  warnings?: string[] | undefined;
76
- metrics?: {
77
- heights: number[];
78
- } | undefined;
79
78
  }
80
79
  export interface StoneDeckIR {
81
80
  manifesto: StoneDeckManifesto;
@@ -1 +1 @@
1
- {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../src/models/ir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../src/models/ir.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtE;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;QACrC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;QACzC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;KACxC,CAAC;IACF,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAChC,aAAa,CAAC,EAAE;YACd,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;YACzC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;SACxC,CAAC;KACH,CAAC;IACF,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG;IACF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB,GAAG;IACF,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACrB,GAAG;IACF,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB"}
@@ -62,11 +62,13 @@ function parseSlidesV2(content) {
62
62
  }
63
63
  }
64
64
  const layout_id = config.layout || 'blank';
65
+ const variant = config.layout_style || undefined;
65
66
  const title = config.title;
66
67
  const style = config.style || {};
67
68
  const slots = parseSlots(rawContent);
68
69
  slides.push({
69
70
  layout_id,
71
+ variant,
70
72
  title,
71
73
  style,
72
74
  slots
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ export declare class ThemeLoader {
3
3
  private static __dirname;
4
4
  private static presets;
5
5
  static load(themeRef: string, basePath: string): any;
6
- static resolveStyle(slideStyle: SlideStyle, theme: any): SlideStyle;
6
+ static resolveStyle(slideStyle: SlideStyle, theme: any, variantName?: string, seed?: number): SlideStyle;
7
+ private static deepMerge;
7
8
  private static deepResolve;
8
9
  private static resolveTokenValue;
9
10
  /**
@@ -13,5 +14,6 @@ export declare class ThemeLoader {
13
14
  * RFC 4.1: "Todas as unidades finais devem ser em pt (Pontos)."
14
15
  */
15
16
  private static convertToPt;
17
+ private static isObject;
16
18
  }
17
19
  //# sourceMappingURL=theme-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-loader.d.ts","sourceRoot":"","sources":["../../src/resolver/theme-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAgD;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAepB;IAEF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG;IA4BpD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU;IAKnE,OAAO,CAAC,MAAM,CAAC,WAAW;IAsB1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAchC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAoB7B"}
1
+ {"version":3,"file":"theme-loader.d.ts","sourceRoot":"","sources":["../../src/resolver/theme-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAgD;IAExE,OAAO,CAAC,MAAM,CAAC,OAAO,CAepB;IAEF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG;IA4BpD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,UAAU;IA8B3G,OAAO,CAAC,MAAM,CAAC,SAAS;IAoBxB,OAAO,CAAC,MAAM,CAAC,WAAW;IAsB1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAchC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAqB1B,OAAO,CAAC,MAAM,CAAC,QAAQ;CAG1B"}
@@ -28,9 +28,49 @@ export class ThemeLoader {
28
28
  console.warn(`Theme "${themeRef}" not found. Falling back to standard.`);
29
29
  return this.presets.standard;
30
30
  }
31
- static resolveStyle(slideStyle, theme) {
31
+ static resolveStyle(slideStyle, theme, variantName, seed = 0) {
32
32
  const tokens = theme.tokens || {};
33
- return this.deepResolve(slideStyle, tokens);
33
+ const defaults = theme.defaults || {};
34
+ let variantStyle = {};
35
+ // 1. Explicit Variant
36
+ if (variantName && theme.variants?.[variantName]) {
37
+ variantStyle = theme.variants[variantName];
38
+ }
39
+ // 2. Dynamic Variant (if available and no explicit variant request or explicit variant not found)
40
+ else if (theme.variants && Object.keys(theme.variants).length > 0) {
41
+ const variantKeys = Object.keys(theme.variants);
42
+ // Use seed to pick a variant deterministically
43
+ const pickedKey = variantKeys[seed % variantKeys.length];
44
+ variantStyle = theme.variants[pickedKey];
45
+ }
46
+ // Merge: Defaults -> Variant -> Slide Style
47
+ // We need to merge carefully.
48
+ // Actually, we should resolve each layer against tokens first?
49
+ // Or merge raw values and then resolve?
50
+ // Let's merge raw values first to allow overrides.
51
+ // Deep merge: Defaults < Variant < SlideStyle
52
+ const mergedRaw = this.deepMerge(defaults, this.deepMerge(variantStyle, slideStyle));
53
+ return this.deepResolve(mergedRaw, tokens);
54
+ }
55
+ static deepMerge(target, source) {
56
+ if (!this.isObject(target) || !this.isObject(source)) {
57
+ return source;
58
+ }
59
+ const output = { ...target };
60
+ Object.keys(source).forEach(key => {
61
+ if (this.isObject(source[key])) {
62
+ if (!(key in target)) {
63
+ Object.assign(output, { [key]: source[key] });
64
+ }
65
+ else {
66
+ output[key] = this.deepMerge(target[key], source[key]);
67
+ }
68
+ }
69
+ else {
70
+ Object.assign(output, { [key]: source[key] });
71
+ }
72
+ });
73
+ return output;
34
74
  }
35
75
  static deepResolve(obj, tokens) {
36
76
  if (typeof obj !== 'object' || obj === null) {
@@ -89,6 +129,9 @@ export class ThemeLoader {
89
129
  default: return num;
90
130
  }
91
131
  }
132
+ static isObject(item) {
133
+ return (item && typeof item === 'object' && !Array.isArray(item));
134
+ }
92
135
  }
93
136
  ThemeLoader.__dirname = path.dirname(fileURLToPath(import.meta.url));
94
137
  ThemeLoader.presets = {
@@ -1 +1 @@
1
- {"version":3,"file":"theme-loader.js","sourceRoot":"","sources":["../../src/resolver/theme-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-loader.js","sourceRoot":"","sources":["../../src/resolver/theme-loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stonedeck/core",
3
- "version": "0.7.2",
3
+ "version": "0.7.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,12 +15,10 @@
15
15
  "build": "tsc -b"
16
16
  },
17
17
  "dependencies": {
18
- "@types/pdfkit": "^0.17.4",
19
- "pdfkit": "^0.17.2",
20
18
  "yaml": "^2.3.4"
21
19
  },
22
20
  "devDependencies": {
23
21
  "@types/node": "^20.0.0",
24
22
  "typescript": "^5.0.0"
25
23
  }
26
- }
24
+ }
package/src/emitter.ts CHANGED
@@ -3,7 +3,6 @@ import { parseSlides } from './parser/tokenizer.js';
3
3
  import { ThemeLoader } from './resolver/theme-loader.js';
4
4
  import { validateLayout, getLayout } from './layouts/validator.js';
5
5
  import { StoneDeckIR, SlotContent, ListItem, TableCell } from './models/ir.js';
6
- import { metricsCalculator } from './resolver/metrics.js';
7
6
  import { mapMarkdownLists } from './parser/list-mapper.js';
8
7
  import { mapMarkdownTable } from './parser/table-mapper.js';
9
8
  import { mapMarkdownImage } from './parser/image-mapper.js';
@@ -35,12 +34,9 @@ export function emitIR(content: string, filePath: string, themeOverride?: string
35
34
  }
36
35
 
37
36
  const layout = getLayout(slide.layout_id, slide.slots.length);
38
- // Merge Theme Defaults
39
- const defaults = theme.defaults || {};
40
- const mergedStyle = { ...defaults, ...slide.style };
41
-
42
37
  // Resolve Style with Theme
43
- const resolvedStyle = ThemeLoader.resolveStyle(mergedStyle, theme);
38
+ // Note: We pass slide.style directly. ThemeLoader will handle defaults and variants.
39
+ const resolvedStyle = ThemeLoader.resolveStyle(slide.style, theme, slide.variant, slideIdx);
44
40
 
45
41
  // Process Slots (List, Table, Image detection)
46
42
  const processedSlots: SlotContent[] = slide.slots.map(slot => {
@@ -71,41 +67,13 @@ export function emitIR(content: string, filePath: string, themeOverride?: string
71
67
  return slot;
72
68
  });
73
69
 
74
- // Calculate Metrics and Overflow
75
- const heights: number[] = [];
76
- if (layout) {
77
- processedSlots.forEach((slot, slotIdx) => {
78
- const slotDef = layout.slots[slotIdx];
79
- if (slotDef) {
80
- let contentToMeasure = '';
81
- if (slot.type === 'list') {
82
- contentToMeasure = slot.items.map((i: ListItem) => i.text).join('\n');
83
- } else if (slot.type === 'markdown') {
84
- contentToMeasure = slot.raw;
85
- } else if (slot.type === 'table') {
86
- contentToMeasure = slot.rows.map((r: TableCell[]) => r.map((c: TableCell) => c.text).join(' ')).join('\n');
87
- } else if (slot.type === 'image') {
88
- contentToMeasure = slot.alt || slot.src;
89
- }
90
70
 
91
- const estimatedHeight = metricsCalculator.estimateMarkdownHeight(contentToMeasure, resolvedStyle, slotDef.width);
92
- heights.push(estimatedHeight);
93
-
94
- if (estimatedHeight > slotDef.height) {
95
- warnings.push(`Overflow Warning: Content in slot "${slotDef.id}" (slide ${slideIdx + 1}) exceeds defined height (${estimatedHeight.toFixed(1)}pt > ${slotDef.height}pt)`);
96
- }
97
- }
98
- });
99
- }
100
71
 
101
72
  return {
102
73
  ...slide,
103
74
  style: resolvedStyle,
104
75
  slots: processedSlots,
105
- warnings: warnings.length > 0 ? warnings : undefined,
106
- metrics: {
107
- heights
108
- }
76
+ warnings: warnings.length > 0 ? warnings : undefined
109
77
  };
110
78
  });
111
79
 
@@ -27,7 +27,7 @@
27
27
  "x": 50,
28
28
  "y": 230,
29
29
  "width": 620,
30
- "height": 80
30
+ "height": 125
31
31
  }
32
32
  ]
33
33
  },
package/src/models/ir.ts CHANGED
@@ -39,6 +39,7 @@ export interface SlideStyle {
39
39
  };
40
40
  card?: {
41
41
  background?: string;
42
+ color?: string;
42
43
  radius?: string;
43
44
  border?: string;
44
45
  shadow?: boolean;
@@ -74,13 +75,11 @@ export type SlotContent = {
74
75
 
75
76
  export interface Slide {
76
77
  layout_id: string;
78
+ variant?: string; // Optional variant (e.g. "kind_1") from frontmatter layout_style
77
79
  title?: string; // Optional slide title
78
80
  style: SlideStyle;
79
81
  slots: SlotContent[]; // Content of each slot (Structured)
80
82
  warnings?: string[] | undefined;
81
- metrics?: {
82
- heights: number[]; // Height of each slot in pt
83
- } | undefined;
84
83
  }
85
84
 
86
85
  export interface StoneDeckIR {
@@ -78,6 +78,7 @@ function parseSlidesV2(content: string): Slide[] {
78
78
  }
79
79
 
80
80
  const layout_id = (config.layout as string) || 'blank';
81
+ const variant = (config.layout_style as string) || undefined;
81
82
  const title = config.title as string | undefined;
82
83
  const style = (config.style as any) || {};
83
84
 
@@ -85,6 +86,7 @@ function parseSlidesV2(content: string): Slide[] {
85
86
 
86
87
  slides.push({
87
88
  layout_id,
89
+ variant,
88
90
  title,
89
91
  style,
90
92
  slots
@@ -52,9 +52,54 @@ export class ThemeLoader {
52
52
  return this.presets.standard;
53
53
  }
54
54
 
55
- static resolveStyle(slideStyle: SlideStyle, theme: any): SlideStyle {
55
+ static resolveStyle(slideStyle: SlideStyle, theme: any, variantName?: string, seed: number = 0): SlideStyle {
56
56
  const tokens = theme.tokens || {};
57
- return this.deepResolve(slideStyle, tokens);
57
+ const defaults = theme.defaults || {};
58
+
59
+ let variantStyle = {};
60
+
61
+ // 1. Explicit Variant
62
+ if (variantName && theme.variants?.[variantName]) {
63
+ variantStyle = theme.variants[variantName];
64
+ }
65
+ // 2. Dynamic Variant (if available and no explicit variant request or explicit variant not found)
66
+ else if (theme.variants && Object.keys(theme.variants).length > 0) {
67
+ const variantKeys = Object.keys(theme.variants);
68
+ // Use seed to pick a variant deterministically
69
+ const pickedKey = variantKeys[seed % variantKeys.length];
70
+ variantStyle = theme.variants[pickedKey];
71
+ }
72
+
73
+ // Merge: Defaults -> Variant -> Slide Style
74
+ // We need to merge carefully.
75
+ // Actually, we should resolve each layer against tokens first?
76
+ // Or merge raw values and then resolve?
77
+ // Let's merge raw values first to allow overrides.
78
+
79
+ // Deep merge: Defaults < Variant < SlideStyle
80
+ const mergedRaw = this.deepMerge(defaults, this.deepMerge(variantStyle, slideStyle));
81
+
82
+ return this.deepResolve(mergedRaw, tokens);
83
+ }
84
+
85
+ private static deepMerge(target: any, source: any): any {
86
+ if (!this.isObject(target) || !this.isObject(source)) {
87
+ return source;
88
+ }
89
+
90
+ const output = { ...target };
91
+ Object.keys(source).forEach(key => {
92
+ if (this.isObject(source[key])) {
93
+ if (!(key in target)) {
94
+ Object.assign(output, { [key]: source[key] });
95
+ } else {
96
+ output[key] = this.deepMerge(target[key], source[key]);
97
+ }
98
+ } else {
99
+ Object.assign(output, { [key]: source[key] });
100
+ }
101
+ });
102
+ return output;
58
103
  }
59
104
 
60
105
  private static deepResolve(obj: unknown, tokens: any): any {
@@ -119,4 +164,8 @@ export class ThemeLoader {
119
164
  default: return num;
120
165
  }
121
166
  }
167
+
168
+ private static isObject(item: any): boolean {
169
+ return (item && typeof item === 'object' && !Array.isArray(item));
170
+ }
122
171
  }
@@ -0,0 +1,55 @@
1
+ name: "Academico V2"
2
+ tokens:
3
+ colors:
4
+ primary: "#1a237e"
5
+ secondary: "#f3e5f5"
6
+ accent: "#b71c1c"
7
+ surface: "#fdfbf7"
8
+ text: "#212121"
9
+ heading: "#1a237e"
10
+ table_header: "#e8eaf6"
11
+
12
+ # Variant Specifics
13
+ kind1_bg: "#FFF8E1" # Warm paper-like
14
+ kind2_bg: "#ECEFF1" # Cool grey
15
+ kind2_color: "#263238"
16
+
17
+ fonts:
18
+ heading: "Times-Bold"
19
+ body: "Times-Roman"
20
+ mono: "Courier"
21
+ sans: "Helvetica"
22
+
23
+ defaults:
24
+ background:
25
+ type: "color"
26
+ value: "surface"
27
+ color: "text"
28
+ font_family: "body"
29
+ font_size: 20
30
+ content_align:
31
+ horizontal: "left"
32
+ vertical: "top"
33
+
34
+ variants:
35
+ kind_1:
36
+ background:
37
+ type: "color"
38
+ value: "kind1_bg"
39
+ color: "text"
40
+ font_family: "heading" # More formal headers for body too? logic check.
41
+
42
+ kind_2:
43
+ background:
44
+ type: "color"
45
+ value: "kind2_bg"
46
+ color: "kind2_color"
47
+ font_family: "sans" # Modern academic look
48
+
49
+ kind_3:
50
+ background:
51
+ type: "gradient"
52
+ colors: ["primary", "accent"]
53
+ direction: "45deg"
54
+ color: "surface" # Inverted for dark background
55
+ font_family: "heading"
@@ -0,0 +1,55 @@
1
+ name: "Corporativo V2"
2
+ tokens:
3
+ colors:
4
+ primary: "#2980b9"
5
+ secondary: "#dfe6e9"
6
+ accent: "#3498db"
7
+ surface: "#f0f2f5"
8
+ text: "#2c3e50"
9
+ heading: "#2980b9"
10
+ border: "#34495e"
11
+
12
+ # Variant Colors
13
+ kind1_bg: "#FFFFFF"
14
+ kind2_bg_start: "#2c3e50"
15
+ kind2_bg_end: "#4ca1af"
16
+
17
+ fonts:
18
+ heading: "Helvetica-Bold"
19
+ body: "Helvetica"
20
+ mono: "Courier New"
21
+ serif: "Times-Roman"
22
+
23
+ defaults:
24
+ background:
25
+ type: "color"
26
+ value: "surface"
27
+ color: "text"
28
+ font_family: "body"
29
+ font_size: 20
30
+ content_align:
31
+ horizontal: "left"
32
+ vertical: "top"
33
+
34
+ variants:
35
+ kind_1:
36
+ background:
37
+ type: "color"
38
+ value: "kind1_bg"
39
+ color: "primary" # High contrast brand color
40
+ font_family: "heading"
41
+
42
+ kind_2:
43
+ background:
44
+ type: "gradient"
45
+ colors: ["kind2_bg_start", "kind2_bg_end"]
46
+ direction: "to right"
47
+ color: "secondary" # Light text on dark
48
+ font_family: "body"
49
+
50
+ kind_3:
51
+ background:
52
+ type: "color"
53
+ value: "secondary"
54
+ color: "text"
55
+ font_family: "serif" # Classic corporate report style
@@ -0,0 +1,54 @@
1
+ name: "Dark Mode V2"
2
+ tokens:
3
+ colors:
4
+ primary: "#64ffda"
5
+ secondary: "#112240"
6
+ accent: "#64ffda"
7
+ surface: "#0a192f"
8
+ text: "#e6f1ff"
9
+ heading: "#64ffda"
10
+ muted: "#8892b0"
11
+ code: "#ff9f43"
12
+
13
+ # Variant
14
+ kind1_bg: "#020c1b" # Even darker
15
+ kind2_bg: "#172a45" # Lighter Navy
16
+
17
+ fonts:
18
+ heading: "Helvetica-Bold"
19
+ body: "Helvetica"
20
+ mono: "Courier New"
21
+
22
+ defaults:
23
+ background:
24
+ type: "color"
25
+ value: "surface"
26
+ color: "text"
27
+ font_family: "body"
28
+ font_size: 20
29
+ content_align:
30
+ horizontal: "left"
31
+ vertical: "top"
32
+
33
+ variants:
34
+ kind_1:
35
+ background:
36
+ type: "color"
37
+ value: "kind1_bg"
38
+ color: "muted"
39
+ font_family: "mono" # Hacker style
40
+
41
+ kind_2:
42
+ background:
43
+ type: "color"
44
+ value: "kind2_bg"
45
+ color: "heading"
46
+ font_family: "heading"
47
+
48
+ kind_3:
49
+ background:
50
+ type: "gradient"
51
+ colors: ["surface", "secondary"]
52
+ direction: "to bottom"
53
+ color: "text"
54
+ font_family: "body"