@stonedeck/core 0.7.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 (110) hide show
  1. package/dist/emitter.d.ts +6 -0
  2. package/dist/emitter.d.ts.map +1 -0
  3. package/dist/emitter.js +107 -0
  4. package/dist/emitter.js.map +1 -0
  5. package/dist/emitter.test.d.ts +2 -0
  6. package/dist/emitter.test.d.ts.map +1 -0
  7. package/dist/emitter.test.js +70 -0
  8. package/dist/emitter.test.js.map +1 -0
  9. package/dist/index.d.ts +8 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +8 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/interface/export-plugin.d.ts +5 -0
  14. package/dist/interface/export-plugin.d.ts.map +1 -0
  15. package/dist/interface/export-plugin.js +2 -0
  16. package/dist/interface/export-plugin.js.map +1 -0
  17. package/dist/layouts/layout-generator.d.ts +14 -0
  18. package/dist/layouts/layout-generator.d.ts.map +1 -0
  19. package/dist/layouts/layout-generator.js +110 -0
  20. package/dist/layouts/layout-generator.js.map +1 -0
  21. package/dist/layouts/registry.json +290 -0
  22. package/dist/layouts/validator.d.ts +7 -0
  23. package/dist/layouts/validator.d.ts.map +1 -0
  24. package/dist/layouts/validator.js +27 -0
  25. package/dist/layouts/validator.js.map +1 -0
  26. package/dist/layouts/validator.test.d.ts +2 -0
  27. package/dist/layouts/validator.test.d.ts.map +1 -0
  28. package/dist/layouts/validator.test.js +19 -0
  29. package/dist/layouts/validator.test.js.map +1 -0
  30. package/dist/models/ir.d.ts +91 -0
  31. package/dist/models/ir.d.ts.map +1 -0
  32. package/dist/models/ir.js +2 -0
  33. package/dist/models/ir.js.map +1 -0
  34. package/dist/parser/image-mapper.d.ts +8 -0
  35. package/dist/parser/image-mapper.d.ts.map +1 -0
  36. package/dist/parser/image-mapper.js +15 -0
  37. package/dist/parser/image-mapper.js.map +1 -0
  38. package/dist/parser/list-mapper.d.ts +3 -0
  39. package/dist/parser/list-mapper.d.ts.map +1 -0
  40. package/dist/parser/list-mapper.js +24 -0
  41. package/dist/parser/list-mapper.js.map +1 -0
  42. package/dist/parser/list-mapper.test.d.ts +2 -0
  43. package/dist/parser/list-mapper.test.d.ts.map +1 -0
  44. package/dist/parser/list-mapper.test.js +26 -0
  45. package/dist/parser/list-mapper.test.js.map +1 -0
  46. package/dist/parser/manifesto.d.ts +9 -0
  47. package/dist/parser/manifesto.d.ts.map +1 -0
  48. package/dist/parser/manifesto.js +40 -0
  49. package/dist/parser/manifesto.js.map +1 -0
  50. package/dist/parser/manifesto.test.d.ts +2 -0
  51. package/dist/parser/manifesto.test.d.ts.map +1 -0
  52. package/dist/parser/manifesto.test.js +32 -0
  53. package/dist/parser/manifesto.test.js.map +1 -0
  54. package/dist/parser/table-mapper.d.ts +7 -0
  55. package/dist/parser/table-mapper.d.ts.map +1 -0
  56. package/dist/parser/table-mapper.js +33 -0
  57. package/dist/parser/table-mapper.js.map +1 -0
  58. package/dist/parser/tokenizer.d.ts +4 -0
  59. package/dist/parser/tokenizer.d.ts.map +1 -0
  60. package/dist/parser/tokenizer.js +103 -0
  61. package/dist/parser/tokenizer.js.map +1 -0
  62. package/dist/parser/tokenizer.test.d.ts +2 -0
  63. package/dist/parser/tokenizer.test.d.ts.map +1 -0
  64. package/dist/parser/tokenizer.test.js +31 -0
  65. package/dist/parser/tokenizer.test.js.map +1 -0
  66. package/dist/processor.d.ts +3 -0
  67. package/dist/processor.d.ts.map +1 -0
  68. package/dist/processor.js +5 -0
  69. package/dist/processor.js.map +1 -0
  70. package/dist/resolver/metrics.d.ts +27 -0
  71. package/dist/resolver/metrics.d.ts.map +1 -0
  72. package/dist/resolver/metrics.js +43 -0
  73. package/dist/resolver/metrics.js.map +1 -0
  74. package/dist/resolver/metrics.test.d.ts +2 -0
  75. package/dist/resolver/metrics.test.d.ts.map +1 -0
  76. package/dist/resolver/metrics.test.js +23 -0
  77. package/dist/resolver/metrics.test.js.map +1 -0
  78. package/dist/resolver/theme-loader.d.ts +17 -0
  79. package/dist/resolver/theme-loader.d.ts.map +1 -0
  80. package/dist/resolver/theme-loader.js +110 -0
  81. package/dist/resolver/theme-loader.js.map +1 -0
  82. package/dist/resolver/theme-loader.test.d.ts +2 -0
  83. package/dist/resolver/theme-loader.test.d.ts.map +1 -0
  84. package/dist/resolver/theme-loader.test.js +60 -0
  85. package/dist/resolver/theme-loader.test.js.map +1 -0
  86. package/package.json +19 -0
  87. package/src/emitter.ts +118 -0
  88. package/src/index.ts +7 -0
  89. package/src/interface/export-plugin.ts +5 -0
  90. package/src/layouts/layout-generator.ts +116 -0
  91. package/src/layouts/registry.json +290 -0
  92. package/src/layouts/validator.ts +31 -0
  93. package/src/models/ir.ts +98 -0
  94. package/src/parser/image-mapper.ts +14 -0
  95. package/src/parser/list-mapper.ts +28 -0
  96. package/src/parser/manifesto.ts +49 -0
  97. package/src/parser/table-mapper.ts +38 -0
  98. package/src/parser/tokenizer.ts +126 -0
  99. package/src/processor.ts +6 -0
  100. package/src/resolver/metrics.ts +64 -0
  101. package/src/resolver/theme-loader.ts +122 -0
  102. package/src/themes/academico.yaml +25 -0
  103. package/src/themes/corporativo.yaml +25 -0
  104. package/src/themes/dark_mode.yaml +26 -0
  105. package/src/themes/minimalista.yaml +25 -0
  106. package/src/themes/moderno.yaml +26 -0
  107. package/test/cycle2_markdown.test.ts +36 -0
  108. package/test/cycle2_slides.test.ts +52 -0
  109. package/tsconfig.json +17 -0
  110. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const manifesto_1 = require("./manifesto");
4
+ describe('Manifesto Parser', () => {
5
+ it('should parse a valid manifesto', () => {
6
+ const content = '---\nStoneDeck: true\ntitle: "Test"\ntheme: "dark"\n---\nRemaining content';
7
+ const result = (0, manifesto_1.parseManifesto)(content);
8
+ expect(result.manifesto).toEqual({
9
+ StoneDeck: true,
10
+ title: "Test",
11
+ theme: "dark"
12
+ });
13
+ expect(result.remainingContent).toBe('Remaining content');
14
+ });
15
+ it('should throw error if manifesto block is missing', () => {
16
+ const content = 'Not a manifesto';
17
+ expect(() => (0, manifesto_1.parseManifesto)(content)).toThrow(manifesto_1.ManifestoValidationError);
18
+ });
19
+ it('should throw error if StoneDeck: true is missing', () => {
20
+ const content = '---\ntitle: "Test"\ntheme: "dark"\n---';
21
+ expect(() => (0, manifesto_1.parseManifesto)(content)).toThrow('Manifesto must contain "StoneDeck: true"');
22
+ });
23
+ it('should throw error if title is missing', () => {
24
+ const content = '---\nStoneDeck: true\ntheme: "dark"\n---';
25
+ expect(() => (0, manifesto_1.parseManifesto)(content)).toThrow('Manifesto must contain a "title"');
26
+ });
27
+ it('should throw error if theme is missing', () => {
28
+ const content = '---\nStoneDeck: true\ntitle: "Test"\n---';
29
+ expect(() => (0, manifesto_1.parseManifesto)(content)).toThrow('Manifesto must contain a "theme"');
30
+ });
31
+ });
32
+ //# sourceMappingURL=manifesto.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifesto.test.js","sourceRoot":"","sources":["../../src/parser/manifesto.test.ts"],"names":[],"mappings":";;AAAA,2CAAuE;AAEvE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,4EAA4E,CAAC;QAC7F,MAAM,MAAM,GAAG,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YAC7B,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,oCAAwB,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,wCAAwC,CAAC;QACzD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAAG,0CAA0C,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAAG,0CAA0C,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { TableCell } from '../models/ir.js';
2
+ /**
3
+ * Simple Markdown table parser.
4
+ * It identifies tables and converts them into a 2D array of TableCells.
5
+ */
6
+ export declare function mapMarkdownTable(markdown: string): TableCell[][] | null;
7
+ //# sourceMappingURL=table-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-mapper.d.ts","sourceRoot":"","sources":["../../src/parser/table-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,GAAG,IAAI,CA+BvE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Simple Markdown table parser.
3
+ * It identifies tables and converts them into a 2D array of TableCells.
4
+ */
5
+ export function mapMarkdownTable(markdown) {
6
+ const lines = markdown.split(/\r?\n/).map(l => l.trim()).filter(l => l.length > 0);
7
+ // Minimum table has 2 lines: header and delimiter
8
+ if (lines.length < 2)
9
+ return null;
10
+ // Check if the first line is a table header
11
+ const firstLine = lines[0];
12
+ if (!firstLine || !firstLine.startsWith('|') || !firstLine.endsWith('|'))
13
+ return null;
14
+ // Check for delimiter line (|---|---|)
15
+ const delimiterLine = lines[1];
16
+ if (!delimiterLine || !delimiterLine.includes('|') || !delimiterLine.includes('-'))
17
+ return null;
18
+ const rows = [];
19
+ // Helper to split row correctly
20
+ const splitRow = (row) => row.replace(/^\||\|$/g, '').split('|').map(c => c.trim());
21
+ const headers = splitRow(firstLine);
22
+ rows.push(headers.map(h => ({ text: h, isHeader: true })));
23
+ // Parse Body
24
+ for (let i = 2; i < lines.length; i++) {
25
+ const line = lines[i];
26
+ if (!line || !line.startsWith('|'))
27
+ break;
28
+ const cells = splitRow(line);
29
+ rows.push(cells.map(c => ({ text: c, isHeader: false })));
30
+ }
31
+ return rows.length > 1 ? rows : null;
32
+ }
33
+ //# sourceMappingURL=table-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-mapper.js","sourceRoot":"","sources":["../../src/parser/table-mapper.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnF,kDAAkD;IAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,4CAA4C;IAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtF,uCAAuC;IACvC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhG,MAAM,IAAI,GAAkB,EAAE,CAAC;IAE/B,gCAAgC;IAChC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3D,aAAa;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Slide } from '../models/ir.js';
2
+ export declare function tokenizeSlides(remainingContent: string): Slide[];
3
+ export declare function parseSlides(content: string): Slide[];
4
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAe,MAAM,iBAAiB,CAAC;AAGrD,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,EAAE,CA0ChE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAGpD"}
@@ -0,0 +1,103 @@
1
+ import * as YAML from 'yaml';
2
+ import { mapMarkdownImage } from './image-mapper.js';
3
+ export function tokenizeSlides(remainingContent) {
4
+ // Slides are separated by ---
5
+ // Note: Since the content starts after the manifesto ---, the first slide delimiter might already be consumed or not exist.
6
+ // The RFC says: "O motor divide o restante do documento por ---."
7
+ const slideBlocks = remainingContent.split(/\r?\n---\r?\n/);
8
+ const slides = [];
9
+ for (const block of slideBlocks) {
10
+ if (!block.trim())
11
+ continue;
12
+ // Each slide block: Toggle between A (Yaml) and B (Markdown)
13
+ // Actually the RFC says:
14
+ // Estado A (Config): YAML define layout e style
15
+ // Estado B (Conteúdo): Markdown injetado nos slots
16
+ // Pattern:
17
+ // layout: ...
18
+ // style: ...
19
+ // ---
20
+ // # Title
21
+ // ***
22
+ // Body
23
+ // In our case, the slide block itself contains BOTH parts separated by --- internally?
24
+ // RFC 8.3: "O motor divide o restante do documento por ---."
25
+ // "Estado A (Config): YAML"
26
+ // "Estado B (Conteúdo): Markdown"
27
+ // Wait, the RFC says "O motor divide o restante do documento por ---"
28
+ // And then says "Alternância de Contexto (Toggle): A (Config) -> B (Conteúdo)"
29
+ // This means Slide 1 Config --- Slide 1 Content --- Slide 2 Config --- Slide 2 Content
30
+ // Let's re-read carefully:
31
+ // 2. Iteração de Slides: O motor divide o restante do documento por ---.
32
+ // 3. Alternância de Contexto (Toggle): A (Config) -> B (Conteùdo)
33
+ // This implies that slide 1 is block 1 (config) and block 2 (content).
34
+ // Slide 2 is block 3 (config) and block 4 (content).
35
+ }
36
+ return slides;
37
+ }
38
+ export function parseSlides(content) {
39
+ // Strict V2 syntax: Content must be inside :::slide blocks
40
+ return parseSlidesV2(content);
41
+ }
42
+ function parseSlidesV2(content) {
43
+ const slides = [];
44
+ const slideRegex = /:::slide([\s\S]*?):::/g;
45
+ let match;
46
+ while ((match = slideRegex.exec(content)) !== null) {
47
+ const slideBlock = match[1]?.trim() || '';
48
+ // Extract Front Matter
49
+ // Pattern: ^--- (yaml) --- (content)$
50
+ const fmRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/;
51
+ const fmMatch = slideBlock.match(fmRegex);
52
+ let config = {};
53
+ let rawContent = slideBlock;
54
+ if (fmMatch) {
55
+ const yamlStr = fmMatch[1] || '';
56
+ rawContent = fmMatch[2] || '';
57
+ try {
58
+ config = YAML.parse(yamlStr);
59
+ }
60
+ catch (e) {
61
+ console.warn('Invalid YAML in slide:', e);
62
+ }
63
+ }
64
+ const layout_id = config.layout || 'blank';
65
+ const title = config.title;
66
+ const style = config.style || {};
67
+ const slots = parseSlots(rawContent);
68
+ slides.push({
69
+ layout_id,
70
+ title,
71
+ style,
72
+ slots
73
+ });
74
+ }
75
+ return slides;
76
+ }
77
+ function parseSlots(content) {
78
+ let processedContent = content.trim();
79
+ // Handle comments inside content (Cycle 2 requirement)
80
+ // Removed here or handled by plugins? Actually comments should be removed BEFORE splitting slots?
81
+ // Let's assume content is pure markdown for now.
82
+ // Remove *-* at start/end
83
+ processedContent = processedContent.replace(/^\*-\*\s*[\r\n]+/, '');
84
+ processedContent = processedContent.replace(/[\r\n]+\s*\*-\*\s*$/, '');
85
+ const slots_content = processedContent
86
+ ? processedContent.split(/\r?\n\*-\*\r?\n/).map(s => s.trim()).filter(s => s.length > 0)
87
+ : [];
88
+ // If no delimiters found but content exists, treat as single slot
89
+ if (slots_content.length === 0 && processedContent.length > 0) {
90
+ const img = mapMarkdownImage(processedContent);
91
+ if (img)
92
+ return [{ type: 'image', src: img.src, alt: img.alt }];
93
+ return [{ type: 'markdown', raw: processedContent }];
94
+ }
95
+ return slots_content.map(raw => {
96
+ const img = mapMarkdownImage(raw);
97
+ if (img) {
98
+ return { type: 'image', src: img.src, alt: img.alt };
99
+ }
100
+ return { type: 'markdown', raw };
101
+ });
102
+ }
103
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/parser/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tokenizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.test.d.ts","sourceRoot":"","sources":["../../src/parser/tokenizer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tokenizer_1 = require("./tokenizer");
4
+ describe('Tokenizer', () => {
5
+ it('should parse slides from blocks', () => {
6
+ const blocks = [
7
+ 'layout: title-slide',
8
+ '# Title\n## Subtitle',
9
+ 'layout: two-columns',
10
+ 'Left\n***\nRight'
11
+ ];
12
+ const slides = (0, tokenizer_1.parseSlides)(blocks);
13
+ expect(slides.length).toBe(2);
14
+ expect(slides[0]?.layout_id).toBe('title-slide');
15
+ expect(slides[0]?.slots).toEqual([{ type: 'markdown', raw: '# Title\n## Subtitle' }]);
16
+ expect(slides[1]?.layout_id).toBe('two-columns');
17
+ expect(slides[1]?.slots).toEqual([
18
+ { type: 'markdown', raw: 'Left' },
19
+ { type: 'markdown', raw: 'Right' }
20
+ ]);
21
+ });
22
+ it('should use default layout if not specified', () => {
23
+ const blocks = [
24
+ 'style: { color: "primary" }',
25
+ 'Content'
26
+ ];
27
+ const slides = (0, tokenizer_1.parseSlides)(blocks);
28
+ expect(slides[0]?.layout_id).toBe('blank');
29
+ });
30
+ });
31
+ //# sourceMappingURL=tokenizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.test.js","sourceRoot":"","sources":["../../src/parser/tokenizer.test.ts"],"names":[],"mappings":";;AAAA,2CAA0C;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG;YACX,qBAAqB;YACrB,sBAAsB;YACtB,qBAAqB;YACrB,kBAAkB;SACrB,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,uBAAW,EAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC;YAC7B,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;YACjC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE;SACrC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG;YACX,6BAA6B;YAC7B,SAAS;SACZ,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,uBAAW,EAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { StoneDeckIR } from './models/ir.js';
2
+ export declare function processStoneDeck(content: string, filePath: string, themeOverride?: string): StoneDeckIR;
3
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAEvG"}
@@ -0,0 +1,5 @@
1
+ import { emitIR } from './emitter.js';
2
+ export function processStoneDeck(content, filePath, themeOverride) {
3
+ return emitIR(content, filePath, themeOverride);
4
+ }
5
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB,EAAE,aAAsB;IACtF,OAAO,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { SlideStyle } from '../models/ir.js';
2
+ export interface LayoutSlot {
3
+ id: string;
4
+ x: number;
5
+ y: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ export interface LayoutDefinition {
10
+ id: string;
11
+ slots: LayoutSlot[];
12
+ }
13
+ export declare class MetricsCalculator {
14
+ private doc;
15
+ constructor();
16
+ /**
17
+ * Calculates the height of a string given a font and width.
18
+ */
19
+ calculateTextHeight(text: string, style: SlideStyle, maxWidth: number): number;
20
+ /**
21
+ * Estimates height for Markdown content.
22
+ * For now, this is a simplified version that handles basic text and lists.
23
+ */
24
+ estimateMarkdownHeight(markdown: string, style: SlideStyle, maxWidth: number): number;
25
+ }
26
+ export declare const metricsCalculator: MetricsCalculator;
27
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/resolver/metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,GAAG,CAAqB;;IAOhC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAc9E;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAgBxF;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -0,0 +1,43 @@
1
+ import PDFDocument from 'pdfkit';
2
+ export class MetricsCalculator {
3
+ constructor() {
4
+ // Create a headless PDF document for measurements
5
+ this.doc = new PDFDocument({ size: [720, 405] });
6
+ }
7
+ /**
8
+ * Calculates the height of a string given a font and width.
9
+ */
10
+ calculateTextHeight(text, style, maxWidth) {
11
+ const fontSize = style.font_size || 18; // Default font size
12
+ const font = style.font_family || 'Helvetica'; // Default font
13
+ try {
14
+ this.doc.font(font).fontSize(fontSize);
15
+ return this.doc.heightOfString(text, { width: maxWidth });
16
+ }
17
+ catch (e) {
18
+ // Fallback font if the requested one fails
19
+ this.doc.font('Helvetica').fontSize(fontSize);
20
+ return this.doc.heightOfString(text, { width: maxWidth });
21
+ }
22
+ }
23
+ /**
24
+ * Estimates height for Markdown content.
25
+ * For now, this is a simplified version that handles basic text and lists.
26
+ */
27
+ estimateMarkdownHeight(markdown, style, maxWidth) {
28
+ // Simple heuristic: split by lines and sum heights
29
+ // In a real implementation, this would handle actual markdown parsing.
30
+ const lines = markdown.split('\n');
31
+ let totalHeight = 0;
32
+ for (const line of lines) {
33
+ if (!line.trim()) {
34
+ totalHeight += (style.font_size || 18) * 0.5; // Half line height for empty lines
35
+ continue;
36
+ }
37
+ totalHeight += this.calculateTextHeight(line, style, maxWidth);
38
+ }
39
+ return totalHeight;
40
+ }
41
+ }
42
+ export const metricsCalculator = new MetricsCalculator();
43
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/resolver/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,QAAQ,CAAC;AAgBjC,MAAM,OAAO,iBAAiB;IAG1B;QACI,kDAAkD;QAClD,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAY,EAAE,KAAiB,EAAE,QAAgB;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,oBAAoB;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC,eAAe;QAE9D,IAAI,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,2CAA2C;YAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAAC,QAAgB,EAAE,KAAiB,EAAE,QAAgB;QACxE,mDAAmD;QACnD,uEAAuE;QACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACf,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,mCAAmC;gBACjF,SAAS;YACb,CAAC;YACD,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metrics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.test.d.ts","sourceRoot":"","sources":["../../src/resolver/metrics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const metrics_1 = require("./metrics");
4
+ describe('Metrics Calculator', () => {
5
+ it('should calculate basic text height', () => {
6
+ const height = metrics_1.metricsCalculator.calculateTextHeight('Hello World', { font_size: 18 }, 200);
7
+ expect(height).toBeGreaterThan(0);
8
+ expect(typeof height).toBe('number');
9
+ });
10
+ it('should estimate markdown height', () => {
11
+ const markdown = 'Line 1\nLine 2\nLine 3';
12
+ const height = metrics_1.metricsCalculator.estimateMarkdownHeight(markdown, { font_size: 18 }, 200);
13
+ const singleLineHeight = metrics_1.metricsCalculator.calculateTextHeight('Line 1', { font_size: 18 }, 200);
14
+ expect(height).toBeCloseTo(singleLineHeight * 3, -1);
15
+ });
16
+ it('should handle overflow estimation', () => {
17
+ const longText = 'This is a very long line that should definitely wrap and increase the total height of the text block significantly compared to a short line.';
18
+ const heightShort = metrics_1.metricsCalculator.calculateTextHeight('Short', { font_size: 18 }, 50);
19
+ const heightLong = metrics_1.metricsCalculator.calculateTextHeight(longText, { font_size: 18 }, 50);
20
+ expect(heightLong).toBeGreaterThan(heightShort);
21
+ });
22
+ });
23
+ //# sourceMappingURL=metrics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.test.js","sourceRoot":"","sources":["../../src/resolver/metrics.test.ts"],"names":[],"mappings":";;AAAA,uCAA8C;AAE9C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,2BAAiB,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5F,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;QAC1C,MAAM,MAAM,GAAG,2BAAiB,CAAC,sBAAsB,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1F,MAAM,gBAAgB,GAAG,2BAAiB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,QAAQ,GAAG,8IAA8I,CAAC;QAChK,MAAM,WAAW,GAAG,2BAAiB,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,UAAU,GAAG,2BAAiB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { SlideStyle } from '../models/ir.js';
2
+ export declare class ThemeLoader {
3
+ private static __dirname;
4
+ private static presets;
5
+ static load(themeRef: string, basePath: string): any;
6
+ static resolveStyle(slideStyle: SlideStyle, theme: any): SlideStyle;
7
+ private static deepResolve;
8
+ private static resolveTokenValue;
9
+ /**
10
+ * Converts various units into Points (pt).
11
+ * 1px ≈ 0.75pt
12
+ * 1em ≈ 12pt (assuming 16px base)
13
+ * RFC 4.1: "Todas as unidades finais devem ser em pt (Pontos)."
14
+ */
15
+ private static convertToPt;
16
+ }
17
+ //# sourceMappingURL=theme-loader.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,110 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as YAML from 'yaml';
4
+ import { fileURLToPath } from 'url';
5
+ export class ThemeLoader {
6
+ static load(themeRef, basePath) {
7
+ if (this.presets[themeRef]) {
8
+ return this.presets[themeRef];
9
+ }
10
+ const potentialPaths = [
11
+ path.isAbsolute(themeRef) ? themeRef : path.join(basePath, themeRef),
12
+ path.isAbsolute(themeRef) ? themeRef : path.join(basePath, 'themes', themeRef + '.yaml'),
13
+ path.join(this.__dirname, '../../themes', themeRef + '.yaml'), // When running from built/source
14
+ path.join(this.__dirname, '../../src/themes', themeRef + '.yaml'), // Fallback to src if not copied to dist
15
+ path.join(process.cwd(), 'src/themes', themeRef + '.yaml') // Development fall back
16
+ ];
17
+ for (const p of potentialPaths) {
18
+ if (fs.existsSync(p)) {
19
+ try {
20
+ const fileContent = fs.readFileSync(p, 'utf8');
21
+ return YAML.parse(fileContent);
22
+ }
23
+ catch (e) {
24
+ console.warn(`Failed to parse theme at ${p}:`, e);
25
+ }
26
+ }
27
+ }
28
+ console.warn(`Theme "${themeRef}" not found. Falling back to standard.`);
29
+ return this.presets.standard;
30
+ }
31
+ static resolveStyle(slideStyle, theme) {
32
+ const tokens = theme.tokens || {};
33
+ return this.deepResolve(slideStyle, tokens);
34
+ }
35
+ static deepResolve(obj, tokens) {
36
+ if (typeof obj !== 'object' || obj === null) {
37
+ // Token resolution for strings
38
+ if (typeof obj === 'string') {
39
+ return this.resolveTokenValue(obj, tokens);
40
+ }
41
+ return obj;
42
+ }
43
+ if (Array.isArray(obj)) {
44
+ return obj.map(item => this.deepResolve(item, tokens));
45
+ }
46
+ const resolved = {};
47
+ for (const key in obj) {
48
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
49
+ resolved[key] = this.deepResolve(obj[key], tokens);
50
+ }
51
+ }
52
+ return resolved;
53
+ }
54
+ static resolveTokenValue(value, tokens) {
55
+ // 1. Try resolving as a color token (e.g., "primary")
56
+ if (tokens.colors?.[value])
57
+ return tokens.colors[value];
58
+ // 2. Try resolving as a font token (e.g., "heading")
59
+ if (tokens.fonts?.[value])
60
+ return tokens.fonts[value];
61
+ // 3. Try resolving as a spacing token
62
+ if (tokens.spacing?.[value])
63
+ return this.convertToPt(tokens.spacing[value]);
64
+ // 4. Try converting the string itself if it's a unit (e.g., "20px")
65
+ return this.convertToPt(value);
66
+ }
67
+ /**
68
+ * Converts various units into Points (pt).
69
+ * 1px ≈ 0.75pt
70
+ * 1em ≈ 12pt (assuming 16px base)
71
+ * RFC 4.1: "Todas as unidades finais devem ser em pt (Pontos)."
72
+ */
73
+ static convertToPt(value) {
74
+ if (typeof value === 'number')
75
+ return value;
76
+ const match = value.match(/^([\d.]+)(px|em|rem|pt|%)?$/);
77
+ if (!match)
78
+ return value;
79
+ const numStr = match[1];
80
+ if (!numStr)
81
+ return value;
82
+ const num = parseFloat(numStr);
83
+ const unit = match[2];
84
+ switch (unit) {
85
+ case 'px': return num * 0.75;
86
+ case 'em':
87
+ case 'rem': return num * 12; // Simple approximation for 1em = 16px
88
+ case 'pt': return num;
89
+ default: return num;
90
+ }
91
+ }
92
+ }
93
+ ThemeLoader.__dirname = path.dirname(fileURLToPath(import.meta.url));
94
+ ThemeLoader.presets = {
95
+ dark: {
96
+ name: "Dark Preset",
97
+ tokens: {
98
+ colors: { primary: "#1A1A2E", secondary: "#16213E", accent: "#E94560", surface: "#0F3460", text: "#FFFFFF" },
99
+ fonts: { heading: "Montserrat", body: "Open Sans", mono: "Fira Code" }
100
+ }
101
+ },
102
+ standard: {
103
+ name: "Standard Preset",
104
+ tokens: {
105
+ colors: { primary: "#FFFFFF", secondary: "#F0F0F0", accent: "#007BFF", surface: "#FFFFFF", text: "#000000" },
106
+ fonts: { heading: "Inter", body: "Roboto", mono: "Courier New" }
107
+ }
108
+ }
109
+ };
110
+ //# sourceMappingURL=theme-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-loader.js","sourceRoot":"","sources":["../../src/resolver/theme-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=theme-loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-loader.test.d.ts","sourceRoot":"","sources":["../../src/resolver/theme-loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const theme_loader_1 = require("./theme-loader");
4
+ describe('Theme Loader', () => {
5
+ const theme = {
6
+ tokens: {
7
+ colors: { primary: "#FF0000", accent: "#00FF00" },
8
+ fonts: { heading: "Arial" }
9
+ }
10
+ };
11
+ it('should resolve color tokens in style', () => {
12
+ const style = {
13
+ background: { type: 'color', value: 'primary' }
14
+ };
15
+ const resolved = theme_loader_1.ThemeLoader.resolveStyle(style, theme);
16
+ expect(resolved.background?.value).toBe('#FF0000');
17
+ });
18
+ it('should leave unknown colors as is', () => {
19
+ const style = {
20
+ background: { type: 'color', value: '#123456' }
21
+ };
22
+ const resolved = theme_loader_1.ThemeLoader.resolveStyle(style, theme);
23
+ expect(resolved.background?.value).toBe('#123456');
24
+ });
25
+ it('should resolve nested tokens', () => {
26
+ const style = {
27
+ card: { bg: 'primary', radius: '10px' }
28
+ };
29
+ const resolved = theme_loader_1.ThemeLoader.resolveStyle(style, theme);
30
+ expect(resolved.card?.bg).toBe('#FF0000');
31
+ expect(resolved.card?.radius).toBe(7.5); // 10px * 0.75
32
+ });
33
+ it('should resolve font tokens', () => {
34
+ const style = {
35
+ ['font-family']: 'heading'
36
+ };
37
+ const resolved = theme_loader_1.ThemeLoader.resolveStyle(style, theme);
38
+ expect(resolved['font-family']).toBe('Arial');
39
+ });
40
+ it('should convert various units to pt', () => {
41
+ const style = {
42
+ padding: '20px',
43
+ margin: '1em',
44
+ size: '12pt'
45
+ };
46
+ const resolved = theme_loader_1.ThemeLoader.resolveStyle(style, theme);
47
+ expect(resolved.padding).toBe(15); // 20 * 0.75
48
+ expect(resolved.margin).toBe(12); // 1 * 12
49
+ expect(resolved.size).toBe(12);
50
+ });
51
+ it('should load preset themes', () => {
52
+ const loaded = theme_loader_1.ThemeLoader.load('dark', '');
53
+ expect(loaded.tokens.colors.primary).toBe('#1A1A2E');
54
+ });
55
+ it('should fall back to standard for unknown themes', () => {
56
+ const loaded = theme_loader_1.ThemeLoader.load('unknown', '');
57
+ expect(loaded.tokens.colors.primary).toBe('#FFFFFF');
58
+ });
59
+ });
60
+ //# sourceMappingURL=theme-loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-loader.test.js","sourceRoot":"","sources":["../../src/resolver/theme-loader.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@stonedeck/core",
3
+ "version": "0.7.0",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc -b"
9
+ },
10
+ "dependencies": {
11
+ "@types/pdfkit": "^0.17.4",
12
+ "pdfkit": "^0.17.2",
13
+ "yaml": "^2.3.4"
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^20.0.0",
17
+ "typescript": "^5.0.0"
18
+ }
19
+ }