marhup 0.1.8 → 0.1.9

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 (129) hide show
  1. package/README.md +419 -2
  2. package/dist/cli.js +659 -78
  3. package/dist/cli.js.map +1 -1
  4. package/dist/errors.d.ts +29 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/errors.js +62 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/generator/code.d.ts +4 -3
  9. package/dist/generator/code.d.ts.map +1 -1
  10. package/dist/generator/code.js +7 -7
  11. package/dist/generator/code.js.map +1 -1
  12. package/dist/generator/gen-animations.d.ts +13 -0
  13. package/dist/generator/gen-animations.d.ts.map +1 -0
  14. package/dist/generator/gen-animations.js +77 -0
  15. package/dist/generator/gen-animations.js.map +1 -0
  16. package/dist/generator/image.d.ts +4 -3
  17. package/dist/generator/image.d.ts.map +1 -1
  18. package/dist/generator/image.js +67 -80
  19. package/dist/generator/image.js.map +1 -1
  20. package/dist/generator/index.d.ts +2 -0
  21. package/dist/generator/index.d.ts.map +1 -1
  22. package/dist/generator/index.js +9 -18
  23. package/dist/generator/index.js.map +1 -1
  24. package/dist/generator/list.d.ts +4 -3
  25. package/dist/generator/list.d.ts.map +1 -1
  26. package/dist/generator/list.js +15 -17
  27. package/dist/generator/list.js.map +1 -1
  28. package/dist/generator/mermaid.d.ts +9 -4
  29. package/dist/generator/mermaid.d.ts.map +1 -1
  30. package/dist/generator/mermaid.js +120 -85
  31. package/dist/generator/mermaid.js.map +1 -1
  32. package/dist/generator/pptx.d.ts +1 -1
  33. package/dist/generator/pptx.d.ts.map +1 -1
  34. package/dist/generator/pptx.js +232 -60
  35. package/dist/generator/pptx.js.map +1 -1
  36. package/dist/generator/presentation.d.ts +149 -0
  37. package/dist/generator/presentation.d.ts.map +1 -0
  38. package/dist/generator/presentation.js +163 -0
  39. package/dist/generator/presentation.js.map +1 -0
  40. package/dist/generator/table.d.ts +4 -3
  41. package/dist/generator/table.d.ts.map +1 -1
  42. package/dist/generator/table.js +12 -33
  43. package/dist/generator/table.js.map +1 -1
  44. package/dist/generator/text.d.ts +5 -4
  45. package/dist/generator/text.d.ts.map +1 -1
  46. package/dist/generator/text.js +34 -20
  47. package/dist/generator/text.js.map +1 -1
  48. package/dist/generator/video.d.ts +18 -0
  49. package/dist/generator/video.d.ts.map +1 -0
  50. package/dist/generator/video.js +83 -0
  51. package/dist/generator/video.js.map +1 -0
  52. package/dist/index.d.ts +8 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +144 -55
  55. package/dist/index.js.map +1 -1
  56. package/dist/layout/auto.d.ts +14 -2
  57. package/dist/layout/auto.d.ts.map +1 -1
  58. package/dist/layout/auto.js +129 -37
  59. package/dist/layout/auto.js.map +1 -1
  60. package/dist/layout/engine.d.ts +1 -1
  61. package/dist/layout/engine.d.ts.map +1 -1
  62. package/dist/layout/engine.js +10 -12
  63. package/dist/layout/engine.js.map +1 -1
  64. package/dist/layout/index.d.ts +1 -1
  65. package/dist/layout/index.d.ts.map +1 -1
  66. package/dist/layout/index.js +2 -10
  67. package/dist/layout/index.js.map +1 -1
  68. package/dist/layout/types.d.ts +1 -0
  69. package/dist/layout/types.d.ts.map +1 -1
  70. package/dist/layout/types.js +1 -2
  71. package/dist/layout/types.js.map +1 -1
  72. package/dist/mcp-handlers.d.ts.map +1 -1
  73. package/dist/mcp-handlers.js +15 -51
  74. package/dist/mcp-handlers.js.map +1 -1
  75. package/dist/mcp.js +10 -12
  76. package/dist/mcp.js.map +1 -1
  77. package/dist/parser/frontmatter.d.ts.map +1 -1
  78. package/dist/parser/frontmatter.js +95 -16
  79. package/dist/parser/frontmatter.js.map +1 -1
  80. package/dist/parser/grid.d.ts +5 -7
  81. package/dist/parser/grid.d.ts.map +1 -1
  82. package/dist/parser/grid.js +190 -19
  83. package/dist/parser/grid.js.map +1 -1
  84. package/dist/parser/index.js +3 -13
  85. package/dist/parser/index.js.map +1 -1
  86. package/dist/parser/markdown.d.ts +1 -1
  87. package/dist/parser/markdown.d.ts.map +1 -1
  88. package/dist/parser/markdown.js +247 -137
  89. package/dist/parser/markdown.js.map +1 -1
  90. package/dist/theme/default.d.ts.map +1 -1
  91. package/dist/theme/default.js +13 -8
  92. package/dist/theme/default.js.map +1 -1
  93. package/dist/theme/index.d.ts +11 -0
  94. package/dist/theme/index.d.ts.map +1 -1
  95. package/dist/theme/index.js +70 -7
  96. package/dist/theme/index.js.map +1 -1
  97. package/dist/types/index.d.ts +54 -2
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js +4 -6
  100. package/dist/types/index.js.map +1 -1
  101. package/dist/types/plugin.d.ts +50 -0
  102. package/dist/types/plugin.d.ts.map +1 -0
  103. package/dist/types/plugin.js +5 -0
  104. package/dist/types/plugin.js.map +1 -0
  105. package/dist/utils/file-lock.d.ts +27 -0
  106. package/dist/utils/file-lock.d.ts.map +1 -0
  107. package/dist/utils/file-lock.js +118 -0
  108. package/dist/utils/file-lock.js.map +1 -0
  109. package/dist/utils/i18n.d.ts +5 -0
  110. package/dist/utils/i18n.d.ts.map +1 -0
  111. package/dist/utils/i18n.js +41 -0
  112. package/dist/utils/i18n.js.map +1 -0
  113. package/dist/utils/logger.d.ts +7 -0
  114. package/dist/utils/logger.d.ts.map +1 -0
  115. package/dist/utils/logger.js +43 -0
  116. package/dist/utils/logger.js.map +1 -0
  117. package/dist/utils/path-validation.d.ts +20 -0
  118. package/dist/utils/path-validation.d.ts.map +1 -0
  119. package/dist/utils/path-validation.js +39 -0
  120. package/dist/utils/path-validation.js.map +1 -0
  121. package/dist/utils/plugin-manager.d.ts +18 -0
  122. package/dist/utils/plugin-manager.d.ts.map +1 -0
  123. package/dist/utils/plugin-manager.js +108 -0
  124. package/dist/utils/plugin-manager.js.map +1 -0
  125. package/dist/utils/sanitizer.d.ts +14 -0
  126. package/dist/utils/sanitizer.d.ts.map +1 -0
  127. package/dist/utils/sanitizer.js +73 -0
  128. package/dist/utils/sanitizer.js.map +1 -0
  129. package/package.json +23 -8
package/dist/index.js CHANGED
@@ -1,73 +1,162 @@
1
- "use strict";
2
1
  /**
3
2
  * marhup - Markdown to PowerPoint converter
4
3
  * メインエクスポート
5
4
  */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.marhup = marhup;
41
- exports.marhupFile = marhupFile;
42
- exports.parse = parse;
43
- const fs = __importStar(require("fs"));
44
- const path = __importStar(require("path"));
45
- const index_1 = require("./parser/index");
46
- const index_2 = require("./generator/index");
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { parseMarkdown } from './parser/index.js';
8
+ import { generatePptx } from './generator/index.js';
9
+ import { layoutSlide } from './layout/engine.js';
10
+ import { parseGridString } from './parser/frontmatter.js';
11
+ import { pluginManager } from './utils/plugin-manager.js';
12
+ import logger from './utils/logger.js';
47
13
  /**
48
14
  * MarkdownからPPTXを生成
49
15
  */
50
- async function marhup(markdown, options) {
51
- // パース
52
- const document = (0, index_1.parseMarkdown)(markdown);
53
- // PPTX生成
54
- await (0, index_2.generatePptx)(document, options.output, options.basePath);
16
+ export async function marhup(markdown, options) {
17
+ logger.info('Starting PPTX generation', { output: options.output, basePath: options.basePath });
18
+ try {
19
+ // Load plugins
20
+ if (options.pluginDir) {
21
+ await pluginManager.loadPlugins(options.pluginDir);
22
+ await pluginManager.init({ logger, options });
23
+ }
24
+ // パース
25
+ logger.debug('Parsing markdown content');
26
+ const document = parseMarkdown(markdown);
27
+ logger.info(`Parsed document with ${document.slides.length} slides`);
28
+ // Execute onParse hooks
29
+ await pluginManager.executeHook('onParse', document);
30
+ // CLIオプションでデフォルトグリッドを設定
31
+ if (options.grid && !document.globalFrontmatter.grid) {
32
+ document.globalFrontmatter.grid = options.grid;
33
+ logger.debug(`Set default grid to ${options.grid}`);
34
+ }
35
+ // CLIオプションでデフォルトテーマを設定
36
+ if (options.theme && !document.globalFrontmatter.theme) {
37
+ document.globalFrontmatter.theme = options.theme;
38
+ logger.debug(`Set default theme to ${options.theme}`);
39
+ }
40
+ // PPTX生成
41
+ logger.debug('Generating PPTX file');
42
+ await generatePptx(document, options.output, options.basePath);
43
+ logger.info('PPTX generation completed successfully');
44
+ }
45
+ catch (error) {
46
+ logger.error('PPTX generation failed', { error: error instanceof Error ? error.message : String(error) });
47
+ throw error;
48
+ }
55
49
  }
56
50
  /**
57
51
  * MarkdownファイルからPPTXを生成
58
52
  */
59
- async function marhupFile(inputPath, options) {
60
- const markdown = fs.readFileSync(inputPath, 'utf-8');
61
- // 入力ファイルのディレクトリをベースパスとして設定
62
- const basePath = options.basePath || path.dirname(path.resolve(inputPath));
63
- await marhup(markdown, { ...options, basePath });
53
+ export async function marhupFile(inputPath, options) {
54
+ logger.info('Processing markdown file', { inputPath, output: options.output });
55
+ try {
56
+ const markdown = fs.readFileSync(inputPath, 'utf-8');
57
+ logger.debug(`Read ${markdown.length} characters from input file`);
58
+ // メモリ解放のため、処理後にnull化
59
+ const basePath = options.basePath || path.dirname(inputPath);
60
+ logger.debug(`Using base path: ${basePath}`);
61
+ await marhup(markdown, { ...options, basePath });
62
+ // markdownをnull化してGCを助ける
63
+ }
64
+ catch (error) {
65
+ logger.error('File processing failed', { inputPath, error: error instanceof Error ? error.message : String(error) });
66
+ throw error;
67
+ }
64
68
  }
65
69
  /**
66
70
  * Markdownをパースして構造を返す(デバッグ用)
67
71
  */
68
- function parse(markdown) {
69
- return (0, index_1.parseMarkdown)(markdown);
72
+ export function parse(markdown) {
73
+ return parseMarkdown(markdown);
74
+ }
75
+ /**
76
+ * グリッドマップをテキストで表示
77
+ */
78
+ function printGridMap(gridMap, elements) {
79
+ const rows = gridMap.length;
80
+ const cols = gridMap[0]?.length || 0;
81
+ console.log(` Layout (${cols}x${rows}):`);
82
+ // 上辺
83
+ console.log(' +' + '-'.repeat(cols * 2 + 1) + '+');
84
+ for (let row = 0; row < rows; row++) {
85
+ let line = ' |';
86
+ for (let col = 0; col < cols; col++) {
87
+ const cell = gridMap[row][col];
88
+ if (cell.occupied && cell.elementIndex !== undefined) {
89
+ const element = elements[cell.elementIndex];
90
+ const typeChar = getElementTypeChar(element.type);
91
+ line += ` ${typeChar}`;
92
+ }
93
+ else {
94
+ line += ' ';
95
+ }
96
+ line += '|';
97
+ }
98
+ console.log(line);
99
+ // 行区切り(最後の行以外)
100
+ if (row < rows - 1) {
101
+ console.log(' +' + '-'.repeat(cols * 2 + 1) + '+');
102
+ }
103
+ }
104
+ // 下辺
105
+ console.log(' +' + '-'.repeat(cols * 2 + 1) + '+');
106
+ }
107
+ /**
108
+ * 要素タイプを1文字で表現
109
+ */
110
+ function getElementTypeChar(type) {
111
+ switch (type) {
112
+ case 'heading': return 'H';
113
+ case 'paragraph': return 'P';
114
+ case 'list': return 'L';
115
+ case 'image': return 'I';
116
+ case 'video': return 'V';
117
+ case 'table': return 'T';
118
+ case 'code': return 'C';
119
+ case 'blockquote': return 'Q';
120
+ case 'mermaid': return 'M';
121
+ default: return '?';
122
+ }
123
+ }
124
+ /**
125
+ * Markdownのレイアウトをプレビュー表示
126
+ */
127
+ export function previewLayout(markdown, options = {}) {
128
+ const document = parseMarkdown(markdown);
129
+ const globalFrontmatter = document.globalFrontmatter;
130
+ const defaultGrid = options.grid || globalFrontmatter.grid || '12x9';
131
+ console.log('📋 Layout Preview\n');
132
+ document.slides.forEach((slide, slideIndex) => {
133
+ console.log(`Slide ${slideIndex + 1}:`);
134
+ // グリッド設定を決定
135
+ const gridStr = slide.frontmatter.grid || defaultGrid;
136
+ const grid = parseGridString(gridStr);
137
+ console.log(` Grid: ${grid.cols}x${grid.rows}`);
138
+ // レイアウト計算
139
+ const layoutResult = layoutSlide(slide, globalFrontmatter);
140
+ // グリッドマップを表示
141
+ printGridMap(layoutResult.gridMap, slide.elements);
142
+ // 要素リストを表示
143
+ console.log(' Elements:');
144
+ layoutResult.elements.forEach((element, index) => {
145
+ const pos = element.position;
146
+ const type = element.type.toUpperCase();
147
+ const content = typeof element.content === 'string'
148
+ ? element.content.substring(0, 50) + (element.content.length > 50 ? '...' : '')
149
+ : `[${element.type}]`;
150
+ console.log(` ${index + 1}. ${type} [${pos.colStart}-${pos.colEnd}, ${pos.rowStart}-${pos.rowEnd}]: ${content}`);
151
+ });
152
+ console.log('');
153
+ });
154
+ }
155
+ export async function marhupFromJson(jsonPath, options) {
156
+ const jsonContent = fs.readFileSync(jsonPath, 'utf-8');
157
+ const document = JSON.parse(jsonContent);
158
+ await generatePptx(document, options.output, options.basePath);
70
159
  }
71
160
  // デフォルトエクスポート
72
- exports.default = marhup;
161
+ export default marhup;
73
162
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWH,wBASC;AAKD,gCAQC;AAKD,sBAEC;AAtCD,uCAAyB;AACzB,2CAA6B;AAC7B,0CAA+C;AAC/C,6CAAiD;AAGjD;;GAEG;AACI,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,OAAuB;IAEvB,MAAM;IACN,MAAM,QAAQ,GAAG,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC;IAEzC,SAAS;IACT,MAAM,IAAA,oBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,OAAuB;IAEvB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,QAAgB;IACpC,OAAO,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAaD,cAAc;AACd,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,OAAuB;IAEvB,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEhG,IAAI,CAAC;QACH,eAAe;QACf,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM;QACN,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QAErE,wBAAwB;QACxB,MAAM,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAErD,wBAAwB;QACxB,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YACrD,QAAQ,CAAC,iBAAiB,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACvD,QAAQ,CAAC,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,SAAS;QACT,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1G,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,OAAuB;IAEvB,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,6BAA6B,CAAC,CAAC;QAEnE,qBAAqB;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAE7C,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,yBAAyB;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,QAAgB;IACpC,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAyD,EAAE,QAAwB;IACvG,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAErC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;IAE3C,KAAK;IACL,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAEpD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACpC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,IAAI,CAAC;YACf,CAAC;YACD,IAAI,IAAI,GAAG,CAAC;QACd,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElB,eAAe;QACf,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK;IACL,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC;QAC3B,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC;QAC7B,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC;QACxB,KAAK,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;QACzB,KAAK,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;QACzB,KAAK,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;QACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC;QACxB,KAAK,YAAY,CAAC,CAAC,OAAO,GAAG,CAAC;QAC9B,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC;QAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,UAA6B,EAAE;IAC7E,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,IAAI,IAAI,MAAM,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEnC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,YAAY;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC;QACtD,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjD,UAAU;QACV,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAE3D,aAAa;QACb,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnD,WAAW;QACX,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;gBACjD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/E,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;QACtH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,OAAuB;IAEvB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAmB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC;AAaD,cAAc;AACd,eAAe,MAAM,CAAC"}
@@ -7,6 +7,10 @@ import type { GridMap, PlacedElement } from './types.js';
7
7
  * 空のグリッドマップを作成
8
8
  */
9
9
  export declare function createEmptyGridMap(cols: number, rows: number): GridMap;
10
+ /**
11
+ * グリッド位置が有効か検証
12
+ */
13
+ export declare function validateGridPosition(position: GridPosition, grid: GridConfig): void;
10
14
  /**
11
15
  * グリッドマップに要素を配置
12
16
  */
@@ -20,11 +24,19 @@ export declare function isAreaAvailable(gridMap: GridMap, position: GridPosition
20
24
  */
21
25
  export declare function estimateElementHeight(element: SlideElement): number;
22
26
  /**
23
- * 利用可能な位置を検索
27
+ * 要素の幅を推定
28
+ */
29
+ export declare function estimateElementWidth(element: SlideElement, gridCols: number): number;
30
+ /**
31
+ * 利用可能な位置を検索(古いバージョン、フル幅のみ)
24
32
  */
25
33
  export declare function findAvailablePosition(gridMap: GridMap, startRow: number, height: number, grid: GridConfig): GridPosition | null;
34
+ /**
35
+ * 最適な利用可能な位置を検索(幅と高さを指定)
36
+ */
37
+ export declare function findBestAvailablePosition(gridMap: GridMap, width: number, height: number, grid: GridConfig): GridPosition | null;
26
38
  /**
27
39
  * 要素を自動配置
28
40
  */
29
- export declare function autoPlaceElements(elements: SlideElement[], grid: GridConfig): PlacedElement[];
41
+ export declare function autoPlaceElements(elements: SlideElement[], grid: GridConfig, slideIndex?: number): PlacedElement[];
30
42
  //# sourceMappingURL=auto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../src/layout/auto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAazD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAItE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAgBnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GACf,YAAY,GAAG,IAAI,CAuBrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,UAAU,GACf,aAAa,EAAE,CA2DjB"}
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../src/layout/auto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0BzD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAItE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA2CnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAgBnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GACf,YAAY,GAAG,IAAI,CAkBrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GACf,YAAY,GAAG,IAAI,CAoBrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,EAAE,CA0GjB"}
@@ -1,14 +1,8 @@
1
- "use strict";
2
1
  /**
3
2
  * 自動配置ロジック
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createEmptyGridMap = createEmptyGridMap;
7
- exports.placeOnGrid = placeOnGrid;
8
- exports.isAreaAvailable = isAreaAvailable;
9
- exports.estimateElementHeight = estimateElementHeight;
10
- exports.findAvailablePosition = findAvailablePosition;
11
- exports.autoPlaceElements = autoPlaceElements;
4
+ import { GridError } from '../errors.js';
5
+ import { t } from '../utils/i18n.js';
12
6
  // 要素タイプごとのデフォルト高さ
13
7
  const ELEMENT_HEIGHT = {
14
8
  heading: 1,
@@ -19,16 +13,49 @@ const ELEMENT_HEIGHT = {
19
13
  code: 3,
20
14
  blockquote: 2,
21
15
  };
16
+ // 要素タイプごとのデフォルト幅(グリッド列数に対する割合)
17
+ const ELEMENT_WIDTH_RATIO = {
18
+ heading: 1.0, // フル幅
19
+ paragraph: 1.0,
20
+ list: 0.75, // 3/4幅
21
+ image: 0.5, // 半幅
22
+ table: 1.0,
23
+ code: 0.8, // 4/5幅
24
+ blockquote: 0.6, // 3/5幅
25
+ };
22
26
  /**
23
27
  * 空のグリッドマップを作成
24
28
  */
25
- function createEmptyGridMap(cols, rows) {
29
+ export function createEmptyGridMap(cols, rows) {
26
30
  return Array.from({ length: rows }, () => Array.from({ length: cols }, () => ({ occupied: false })));
27
31
  }
32
+ /**
33
+ * グリッド位置が有効か検証
34
+ */
35
+ export function validateGridPosition(position, grid) {
36
+ if (position.colStart < 1 || position.colStart > grid.cols) {
37
+ throw new GridError(t('errors.grid.columnStartOutOfRange', { colStart: position.colStart, cols: grid.cols }), position, t('errors.grid.useColumnNumbers', { cols: grid.cols }));
38
+ }
39
+ if (position.colEnd < 1 || position.colEnd > grid.cols) {
40
+ throw new GridError(t('errors.grid.columnEndOutOfRange', { colEnd: position.colEnd, cols: grid.cols }), position, t('errors.grid.useColumnNumbers', { cols: grid.cols }));
41
+ }
42
+ if (position.rowStart < 1 || position.rowStart > grid.rows) {
43
+ throw new GridError(t('errors.grid.rowStartOutOfRange', { rowStart: position.rowStart, rows: grid.rows }), position, t('errors.grid.useRowNumbers', { rows: grid.rows }));
44
+ }
45
+ if (position.rowEnd < 1 || position.rowEnd > grid.rows) {
46
+ throw new GridError(t('errors.grid.rowEndOutOfRange', { rowEnd: position.rowEnd, rows: grid.rows }), position, t('errors.grid.useRowNumbers', { rows: grid.rows }));
47
+ }
48
+ if (position.colStart > position.colEnd) {
49
+ throw new GridError(t('errors.grid.columnStartGreaterThanEnd', { colStart: position.colStart, colEnd: position.colEnd }), position, t('errors.grid.columnStartShouldBeLessThanEnd'));
50
+ }
51
+ if (position.rowStart > position.rowEnd) {
52
+ throw new GridError(t('errors.grid.rowStartGreaterThanEnd', { rowStart: position.rowStart, rowEnd: position.rowEnd }), position, t('errors.grid.rowStartShouldBeLessThanEnd'));
53
+ }
54
+ }
28
55
  /**
29
56
  * グリッドマップに要素を配置
30
57
  */
31
- function placeOnGrid(gridMap, position, elementIndex) {
58
+ export function placeOnGrid(gridMap, position, elementIndex) {
32
59
  for (let row = position.rowStart - 1; row < position.rowEnd; row++) {
33
60
  for (let col = position.colStart - 1; col < position.colEnd; col++) {
34
61
  if (row >= 0 && row < gridMap.length && col >= 0 && col < gridMap[0].length) {
@@ -40,7 +67,7 @@ function placeOnGrid(gridMap, position, elementIndex) {
40
67
  /**
41
68
  * 指定位置が空いているかチェック
42
69
  */
43
- function isAreaAvailable(gridMap, position) {
70
+ export function isAreaAvailable(gridMap, position) {
44
71
  for (let row = position.rowStart - 1; row < position.rowEnd; row++) {
45
72
  for (let col = position.colStart - 1; col < position.colEnd; col++) {
46
73
  if (row < 0 || row >= gridMap.length || col < 0 || col >= gridMap[0].length) {
@@ -56,7 +83,7 @@ function isAreaAvailable(gridMap, position) {
56
83
  /**
57
84
  * 要素の高さを推定
58
85
  */
59
- function estimateElementHeight(element) {
86
+ export function estimateElementHeight(element) {
60
87
  const baseHeight = ELEMENT_HEIGHT[element.type] || 2;
61
88
  // リストの場合、アイテム数に応じて調整
62
89
  if (element.type === 'list' && Array.isArray(element.content)) {
@@ -71,9 +98,16 @@ function estimateElementHeight(element) {
71
98
  return baseHeight;
72
99
  }
73
100
  /**
74
- * 利用可能な位置を検索
101
+ * 要素の幅を推定
102
+ */
103
+ export function estimateElementWidth(element, gridCols) {
104
+ const ratio = ELEMENT_WIDTH_RATIO[element.type] || 1.0;
105
+ return Math.max(1, Math.floor(gridCols * ratio));
106
+ }
107
+ /**
108
+ * 利用可能な位置を検索(古いバージョン、フル幅のみ)
75
109
  */
76
- function findAvailablePosition(gridMap, startRow, height, grid) {
110
+ export function findAvailablePosition(gridMap, startRow, height, grid) {
77
111
  const { cols, rows } = grid;
78
112
  // 指定行から下に向かって探索
79
113
  for (let row = startRow; row <= rows - height + 1; row++) {
@@ -87,24 +121,54 @@ function findAvailablePosition(gridMap, startRow, height, grid) {
87
121
  return position;
88
122
  }
89
123
  }
90
- // 見つからなければ、高さを縮めて再試行
91
- if (height > 1) {
92
- return findAvailablePosition(gridMap, startRow, height - 1, grid);
124
+ return null;
125
+ }
126
+ /**
127
+ * 最適な利用可能な位置を検索(幅と高さを指定)
128
+ */
129
+ export function findBestAvailablePosition(gridMap, width, height, grid) {
130
+ const { cols, rows } = grid;
131
+ // グリッド全体を左上からスキャン
132
+ for (let row = 1; row <= rows - height + 1; row++) {
133
+ for (let col = 1; col <= cols - width + 1; col++) {
134
+ const position = {
135
+ colStart: col,
136
+ colEnd: col + width - 1,
137
+ rowStart: row,
138
+ rowEnd: row + height - 1,
139
+ };
140
+ if (isAreaAvailable(gridMap, position)) {
141
+ return position;
142
+ }
143
+ }
93
144
  }
94
145
  return null;
95
146
  }
96
147
  /**
97
148
  * 要素を自動配置
98
149
  */
99
- function autoPlaceElements(elements, grid) {
150
+ export function autoPlaceElements(elements, grid, slideIndex) {
100
151
  const gridMap = createEmptyGridMap(grid.cols, grid.rows);
101
152
  const placed = [];
102
- let currentRow = 1;
103
153
  // まず、明示的に位置指定された要素を配置
104
154
  const explicitElements = elements.filter((e) => e.position);
105
155
  const implicitElements = elements.filter((e) => !e.position);
156
+ // 明示的要素を面積の昇順でソート(小さい要素を先に配置)
157
+ explicitElements.sort((a, b) => {
158
+ const areaA = (a.position.rowEnd - a.position.rowStart + 1) * (a.position.colEnd - a.position.colStart + 1);
159
+ const areaB = (b.position.rowEnd - b.position.rowStart + 1) * (b.position.colEnd - b.position.colStart + 1);
160
+ return areaA - areaB;
161
+ });
162
+ // 位置未指定要素を面積の降順でソート(大きい要素を先に配置)
163
+ implicitElements.sort((a, b) => {
164
+ const areaA = estimateElementHeight(a) * estimateElementWidth(a, grid.cols);
165
+ const areaB = estimateElementHeight(b) * estimateElementWidth(b, grid.cols);
166
+ return areaB - areaA;
167
+ });
106
168
  for (let i = 0; i < explicitElements.length; i++) {
107
169
  const element = explicitElements[i];
170
+ validateGridPosition(element.position, grid);
171
+ // 重複を許容するため、利用可能チェックを削除
108
172
  placeOnGrid(gridMap, element.position, placed.length);
109
173
  placed.push({
110
174
  type: element.type,
@@ -112,13 +176,15 @@ function autoPlaceElements(elements, grid) {
112
176
  level: element.level,
113
177
  position: element.position,
114
178
  style: element.style,
179
+ altText: element.altText,
115
180
  raw: element.raw,
116
181
  });
117
182
  }
118
183
  // 次に、位置未指定の要素を自動配置
119
184
  for (const element of implicitElements) {
120
185
  const height = estimateElementHeight(element);
121
- const position = findAvailablePosition(gridMap, currentRow, height, grid);
186
+ const width = estimateElementWidth(element, grid.cols);
187
+ let position = findBestAvailablePosition(gridMap, width, height, grid);
122
188
  if (position) {
123
189
  placeOnGrid(gridMap, position, placed.length);
124
190
  placed.push({
@@ -129,27 +195,53 @@ function autoPlaceElements(elements, grid) {
129
195
  style: element.style,
130
196
  raw: element.raw,
131
197
  });
132
- currentRow = position.rowEnd + 1;
133
198
  }
134
199
  else {
135
- // 配置できない場合は最後に追加(はみ出す可能性あり)
136
- console.warn('要素を配置できませんでした:', element.type);
137
- placed.push({
138
- type: element.type,
139
- content: element.content,
140
- level: element.level,
141
- position: {
142
- colStart: 1,
143
- colEnd: grid.cols,
144
- rowStart: currentRow,
145
- rowEnd: currentRow + height - 1,
146
- },
147
- style: element.style,
148
- raw: element.raw,
149
- });
150
- currentRow += height;
200
+ // 配置できない場合は幅と高さを縮めて再試行
201
+ let placedPosition = null;
202
+ for (let w = width; w >= 1; w--) {
203
+ for (let h = height; h >= 1; h--) {
204
+ const pos = findBestAvailablePosition(gridMap, w, h, grid);
205
+ if (pos) {
206
+ placedPosition = pos;
207
+ break;
208
+ }
209
+ }
210
+ if (placedPosition)
211
+ break;
212
+ }
213
+ if (placedPosition) {
214
+ placeOnGrid(gridMap, placedPosition, placed.length);
215
+ placed.push({
216
+ type: element.type,
217
+ content: element.content,
218
+ level: element.level,
219
+ position: placedPosition,
220
+ style: element.style,
221
+ raw: element.raw,
222
+ });
223
+ }
224
+ else {
225
+ // それでもダメならエラーを投げる(または警告)
226
+ throw new GridError(`Cannot place element of type ${element.type} on the grid${slideIndex ? ` (slide ${slideIndex})` : ''}`, undefined, 'Try reducing the number of elements or increasing grid size');
227
+ }
151
228
  }
152
229
  }
230
+ // 配置順序を決定論的にする(重複時の描画順序を安定化)
231
+ placed.sort((a, b) => {
232
+ // 行でソート
233
+ if (a.position.rowStart !== b.position.rowStart) {
234
+ return a.position.rowStart - b.position.rowStart;
235
+ }
236
+ // 列でソート
237
+ if (a.position.colStart !== b.position.colStart) {
238
+ return a.position.colStart - b.position.colStart;
239
+ }
240
+ // 面積でソート(小さい要素を先に描画)
241
+ const areaA = (a.position.rowEnd - a.position.rowStart + 1) * (a.position.colEnd - a.position.colStart + 1);
242
+ const areaB = (b.position.rowEnd - b.position.rowStart + 1) * (b.position.colEnd - b.position.colStart + 1);
243
+ return areaA - areaB;
244
+ });
153
245
  return placed;
154
246
  }
155
247
  //# sourceMappingURL=auto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/layout/auto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/layout/auto.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import type { LayoutResult } from './types.js';
6
6
  /**
7
7
  * スライドのレイアウトを計算
8
8
  */
9
- export declare function layoutSlide(slide: Slide, globalFrontmatter: SlideFrontmatter): LayoutResult;
9
+ export declare function layoutSlide(slide: Slide, globalFrontmatter: SlideFrontmatter, slideIndex?: number): LayoutResult;
10
10
  /**
11
11
  * グリッド位置をスライド上の座標に変換(インチ単位)
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/layout/engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAK9D;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,gBAAgB,GAClC,YAAY,CAgBd;AA2BD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAChF,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,GAAE,MAAY,GACnB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAahD"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/layout/engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAG9D;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,gBAAgB,EACnC,UAAU,CAAC,EAAE,MAAM,GAClB,YAAY,CAoBd;AA2BD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAChF,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,GAAE,MAAY,GACnB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAahD"}
@@ -1,23 +1,21 @@
1
- "use strict";
2
1
  /**
3
2
  * レイアウトエンジン
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.layoutSlide = layoutSlide;
7
- exports.gridToCoordinates = gridToCoordinates;
8
- const frontmatter_js_1 = require("../parser/frontmatter.js");
9
- const auto_js_1 = require("./auto.js");
10
- // デフォルトグリッド
11
- const _DEFAULT_GRID = { cols: 12, rows: 9 };
4
+ import { parseGridString } from '../parser/frontmatter.js';
5
+ import { autoPlaceElements } from './auto.js';
6
+ import logger from '../utils/logger.js';
12
7
  /**
13
8
  * スライドのレイアウトを計算
14
9
  */
15
- function layoutSlide(slide, globalFrontmatter) {
10
+ export function layoutSlide(slide, globalFrontmatter, slideIndex) {
11
+ logger.debug('Calculating slide layout', { slideIndex, elementCount: slide.elements.length });
16
12
  // グリッド設定を決定(スライド個別 > グローバル > デフォルト)
17
13
  const gridStr = slide.frontmatter.grid || globalFrontmatter.grid || '12x9';
18
- const grid = (0, frontmatter_js_1.parseGridString)(gridStr);
14
+ const grid = parseGridString(gridStr);
15
+ logger.debug('Using grid configuration', { gridStr, grid });
19
16
  // 要素を配置
20
- const elements = (0, auto_js_1.autoPlaceElements)(slide.elements, grid);
17
+ const elements = autoPlaceElements(slide.elements, grid, slideIndex);
18
+ logger.debug(`Auto-placed ${elements.length} elements`);
21
19
  // グリッドマップを作成(デバッグ用)
22
20
  const gridMap = createGridMapFromElements(elements, grid);
23
21
  return {
@@ -45,7 +43,7 @@ function createGridMapFromElements(elements, grid) {
45
43
  /**
46
44
  * グリッド位置をスライド上の座標に変換(インチ単位)
47
45
  */
48
- function gridToCoordinates(position, grid, slideSize, margin = 0.5) {
46
+ export function gridToCoordinates(position, grid, slideSize, margin = 0.5) {
49
47
  const contentWidth = slideSize.width - margin * 2;
50
48
  const contentHeight = slideSize.height - margin * 2;
51
49
  const cellWidth = contentWidth / grid.cols;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/layout/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/layout/engine.ts"],"names":[],"mappings":"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"}