md2cv 1.0.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 (87) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +674 -0
  3. package/README.md +219 -0
  4. package/dist/bin.d.ts +6 -0
  5. package/dist/bin.d.ts.map +1 -0
  6. package/dist/bin.js +10 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/cli/index.d.ts +50 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +278 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/generator/index.d.ts +36 -0
  13. package/dist/generator/index.d.ts.map +1 -0
  14. package/dist/generator/index.js +302 -0
  15. package/dist/generator/index.js.map +1 -0
  16. package/dist/generator/resume_en.d.ts +22 -0
  17. package/dist/generator/resume_en.d.ts.map +1 -0
  18. package/dist/generator/resume_en.js +524 -0
  19. package/dist/generator/resume_en.js.map +1 -0
  20. package/dist/generator/resume_ja.d.ts +22 -0
  21. package/dist/generator/resume_ja.d.ts.map +1 -0
  22. package/dist/generator/resume_ja.js +440 -0
  23. package/dist/generator/resume_ja.js.map +1 -0
  24. package/dist/generator/rirekisho/components.d.ts +83 -0
  25. package/dist/generator/rirekisho/components.d.ts.map +1 -0
  26. package/dist/generator/rirekisho/components.js +405 -0
  27. package/dist/generator/rirekisho/components.js.map +1 -0
  28. package/dist/generator/rirekisho/data.d.ts +18 -0
  29. package/dist/generator/rirekisho/data.d.ts.map +1 -0
  30. package/dist/generator/rirekisho/data.js +274 -0
  31. package/dist/generator/rirekisho/data.js.map +1 -0
  32. package/dist/generator/rirekisho/index.d.ts +20 -0
  33. package/dist/generator/rirekisho/index.d.ts.map +1 -0
  34. package/dist/generator/rirekisho/index.js +67 -0
  35. package/dist/generator/rirekisho/index.js.map +1 -0
  36. package/dist/generator/rirekisho/layout.d.ts +20 -0
  37. package/dist/generator/rirekisho/layout.d.ts.map +1 -0
  38. package/dist/generator/rirekisho/layout.js +354 -0
  39. package/dist/generator/rirekisho/layout.js.map +1 -0
  40. package/dist/generator/rirekisho/styles.d.ts +9 -0
  41. package/dist/generator/rirekisho/styles.d.ts.map +1 -0
  42. package/dist/generator/rirekisho/styles.js +362 -0
  43. package/dist/generator/rirekisho/styles.js.map +1 -0
  44. package/dist/generator/rirekisho/types.d.ts +163 -0
  45. package/dist/generator/rirekisho/types.d.ts.map +1 -0
  46. package/dist/generator/rirekisho/types.js +80 -0
  47. package/dist/generator/rirekisho/types.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +10 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/parser/index.d.ts +21 -0
  53. package/dist/parser/index.d.ts.map +1 -0
  54. package/dist/parser/index.js +639 -0
  55. package/dist/parser/index.js.map +1 -0
  56. package/dist/types/config.d.ts +64 -0
  57. package/dist/types/config.d.ts.map +1 -0
  58. package/dist/types/config.js +5 -0
  59. package/dist/types/config.js.map +1 -0
  60. package/dist/types/errors.d.ts +78 -0
  61. package/dist/types/errors.d.ts.map +1 -0
  62. package/dist/types/errors.js +146 -0
  63. package/dist/types/errors.js.map +1 -0
  64. package/dist/types/index.d.ts +9 -0
  65. package/dist/types/index.d.ts.map +1 -0
  66. package/dist/types/index.js +9 -0
  67. package/dist/types/index.js.map +1 -0
  68. package/dist/types/metadata.d.ts +55 -0
  69. package/dist/types/metadata.d.ts.map +1 -0
  70. package/dist/types/metadata.js +136 -0
  71. package/dist/types/metadata.js.map +1 -0
  72. package/dist/types/result.d.ts +50 -0
  73. package/dist/types/result.d.ts.map +1 -0
  74. package/dist/types/result.js +74 -0
  75. package/dist/types/result.js.map +1 -0
  76. package/dist/types/sections.d.ts +168 -0
  77. package/dist/types/sections.d.ts.map +1 -0
  78. package/dist/types/sections.js +122 -0
  79. package/dist/types/sections.js.map +1 -0
  80. package/dist/validator/index.d.ts +20 -0
  81. package/dist/validator/index.d.ts.map +1 -0
  82. package/dist/validator/index.js +67 -0
  83. package/dist/validator/index.js.map +1 -0
  84. package/examples/example-cv-en.md +77 -0
  85. package/examples/example-cv-ja.md +116 -0
  86. package/examples/sample-photo.png +0 -0
  87. package/package.json +93 -0
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Data extraction and transformation for Rirekisho (履歴書)
3
+ */
4
+ // ============================================================================
5
+ // Utility Functions
6
+ // ============================================================================
7
+ function escapeHtml(text) {
8
+ return text
9
+ .replace(/&/g, '&')
10
+ .replace(/</g, '&lt;')
11
+ .replace(/>/g, '&gt;')
12
+ .replace(/"/g, '&quot;')
13
+ .replace(/'/g, '&#039;');
14
+ }
15
+ // ============================================================================
16
+ // Date Functions
17
+ // ============================================================================
18
+ function calculateAge(dob, refDate) {
19
+ let age = refDate.getFullYear() - dob.getFullYear();
20
+ const monthDiff = refDate.getMonth() - dob.getMonth();
21
+ if (monthDiff < 0 || (monthDiff === 0 && refDate.getDate() < dob.getDate())) {
22
+ age--;
23
+ }
24
+ return age;
25
+ }
26
+ function formatDateOfBirth(dob) {
27
+ return {
28
+ year: String(dob.getFullYear()),
29
+ month: String(dob.getMonth() + 1),
30
+ day: String(dob.getDate()),
31
+ };
32
+ }
33
+ function formatYearMonth(date) {
34
+ return {
35
+ year: String(date.getFullYear()),
36
+ month: String(date.getMonth() + 1),
37
+ };
38
+ }
39
+ export function getTodayDate() {
40
+ const today = new Date();
41
+ return {
42
+ year: today.getFullYear(),
43
+ month: today.getMonth() + 1,
44
+ day: today.getDate(),
45
+ };
46
+ }
47
+ // ============================================================================
48
+ // Personal Information Extraction
49
+ // ============================================================================
50
+ export function extractPersonalInfo(metadata, today) {
51
+ const genderDisplay = metadata.gender === 'male'
52
+ ? '男'
53
+ : metadata.gender === 'female'
54
+ ? '女'
55
+ : '';
56
+ return {
57
+ name: escapeHtml(metadata.name_ja ?? metadata.name),
58
+ furigana: escapeHtml(metadata.name_furigana ?? ''),
59
+ phone: metadata.phone_number ? escapeHtml(metadata.phone_number) : '',
60
+ phone2: metadata.phone_number2 ? escapeHtml(metadata.phone_number2) : '',
61
+ address: metadata.home_address ? escapeHtml(metadata.home_address) : '',
62
+ addressFurigana: escapeHtml(metadata.home_address_furigana ?? ''),
63
+ postCode: escapeHtml(metadata.post_code ?? ''),
64
+ address2: escapeHtml(metadata.home_address2 ?? ''),
65
+ address2Furigana: escapeHtml(metadata.home_address2_furigana ?? ''),
66
+ postCode2: escapeHtml(metadata.post_code2 ?? ''),
67
+ email: escapeHtml(metadata.email_address),
68
+ email2: escapeHtml(metadata.email_address2 ?? ''),
69
+ gender: genderDisplay,
70
+ dob: metadata.dob ? formatDateOfBirth(metadata.dob) : null,
71
+ age: metadata.dob ? calculateAge(metadata.dob, today) : null,
72
+ };
73
+ }
74
+ // ============================================================================
75
+ // Table Row Extraction
76
+ // ============================================================================
77
+ function extractTableRows(content) {
78
+ if (content.type === 'table')
79
+ return [...content.rows];
80
+ return [];
81
+ }
82
+ function educationToTableRows(entries) {
83
+ const rows = [];
84
+ for (const entry of entries) {
85
+ if (entry.start) {
86
+ const formatted = formatYearMonth(entry.start);
87
+ rows.push({
88
+ year: formatted.year,
89
+ month: formatted.month,
90
+ content: `${entry.school}${entry.degree ? ' ' + entry.degree : ''} 入学`,
91
+ });
92
+ }
93
+ if (entry.end) {
94
+ const formatted = formatYearMonth(entry.end);
95
+ const degree = entry.degree ?? '';
96
+ const isGraduateSchool = degree.includes('修士') || degree.includes('博士');
97
+ const suffix = isGraduateSchool ? '修了' : '卒業';
98
+ rows.push({
99
+ year: formatted.year,
100
+ month: formatted.month,
101
+ content: `${entry.school}${entry.degree ? ' ' + entry.degree : ''} ${suffix}`,
102
+ });
103
+ }
104
+ }
105
+ return rows;
106
+ }
107
+ function experienceToTableRows(entries) {
108
+ const rows = [];
109
+ for (const entry of entries) {
110
+ for (const role of entry.roles) {
111
+ if (role.start) {
112
+ const formatted = formatYearMonth(role.start);
113
+ rows.push({
114
+ year: formatted.year,
115
+ month: formatted.month,
116
+ content: `${entry.company} 入社`,
117
+ });
118
+ }
119
+ if (role.end && role.end !== 'present') {
120
+ const formatted = formatYearMonth(role.end);
121
+ rows.push({
122
+ year: formatted.year,
123
+ month: formatted.month,
124
+ content: `${entry.company} 退社`,
125
+ });
126
+ }
127
+ }
128
+ }
129
+ return rows;
130
+ }
131
+ function certificationsToTableRows(entries) {
132
+ const rows = [];
133
+ for (const entry of entries) {
134
+ if (entry.date) {
135
+ const formatted = formatYearMonth(entry.date);
136
+ rows.push({
137
+ year: formatted.year,
138
+ month: formatted.month,
139
+ content: entry.name,
140
+ });
141
+ }
142
+ else {
143
+ rows.push({ year: '', month: '', content: entry.name });
144
+ }
145
+ }
146
+ return rows;
147
+ }
148
+ function sortTableRows(rows, order) {
149
+ return [...rows].sort((a, b) => {
150
+ const yearA = parseInt(a.year, 10) || 0;
151
+ const monthA = parseInt(a.month, 10) || 0;
152
+ const yearB = parseInt(b.year, 10) || 0;
153
+ const monthB = parseInt(b.month, 10) || 0;
154
+ const dateA = yearA * 100 + monthA;
155
+ const dateB = yearB * 100 + monthB;
156
+ return order === 'asc' ? dateA - dateB : dateB - dateA;
157
+ });
158
+ }
159
+ // ============================================================================
160
+ // History Data Building
161
+ // ============================================================================
162
+ export function buildHistoryData(sections, order) {
163
+ const rows = [];
164
+ const edu = sections.find((s) => s.id === 'education');
165
+ if (edu) {
166
+ rows.push(['', '', '学歴']);
167
+ let tableRows = edu.content.type === 'education'
168
+ ? educationToTableRows(edu.content.entries)
169
+ : extractTableRows(edu.content);
170
+ tableRows = sortTableRows(tableRows, order);
171
+ for (const row of tableRows) {
172
+ rows.push([row.year, row.month, row.content]);
173
+ }
174
+ }
175
+ const work = sections.find((s) => s.id === 'experience');
176
+ if (work) {
177
+ rows.push(['', '', '職歴']);
178
+ let tableRows = work.content.type === 'experience'
179
+ ? experienceToTableRows(work.content.entries)
180
+ : extractTableRows(work.content);
181
+ tableRows = sortTableRows(tableRows, order);
182
+ for (const row of tableRows) {
183
+ rows.push([row.year, row.month, row.content]);
184
+ }
185
+ }
186
+ if (!rows.some((r) => r[2] === '現在に至る'))
187
+ rows.push(['', '', '現在に至る']);
188
+ if (!rows.some((r) => r[2] === '以上'))
189
+ rows.push(['', '', '以上']);
190
+ return rows;
191
+ }
192
+ export function buildLicenseData(sections, order) {
193
+ const sec = sections.find((s) => s.id === 'certifications');
194
+ if (!sec)
195
+ return [];
196
+ let tableRows = sec.content.type === 'certifications'
197
+ ? certificationsToTableRows(sec.content.entries)
198
+ : extractTableRows(sec.content);
199
+ tableRows = sortTableRows(tableRows, order);
200
+ return tableRows.map((row) => [row.year, row.month, row.content]);
201
+ }
202
+ export function getSectionText(sections, ids) {
203
+ for (const id of ids) {
204
+ const sec = sections.find((s) => s.id === id);
205
+ if (sec && sec.content.type === 'text') {
206
+ return escapeHtml(sec.content.text);
207
+ }
208
+ }
209
+ return '';
210
+ }
211
+ /**
212
+ * Get list items from a section (for competencies)
213
+ */
214
+ export function getSectionList(sections, ids) {
215
+ for (const id of ids) {
216
+ const sec = sections.find((s) => s.id === id);
217
+ if (sec) {
218
+ if (sec.content.type === 'list') {
219
+ return sec.content.items.map((item) => escapeHtml(item));
220
+ }
221
+ if (sec.content.type === 'competencies') {
222
+ return sec.content.entries.map((entry) => escapeHtml(`${entry.header}: ${entry.description}`));
223
+ }
224
+ }
225
+ }
226
+ return [];
227
+ }
228
+ // ============================================================================
229
+ // Data Counting
230
+ // ============================================================================
231
+ export function countDataRows(sections) {
232
+ // Count history rows (education + experience entries)
233
+ let historyDataRows = 0;
234
+ const edu = sections.find((s) => s.id === 'education');
235
+ if (edu) {
236
+ if (edu.content.type === 'education') {
237
+ // Each education entry generates 2 rows (入学 + 卒業/修了)
238
+ historyDataRows += edu.content.entries.length * 2;
239
+ }
240
+ else if (edu.content.type === 'table') {
241
+ historyDataRows += edu.content.rows.length;
242
+ }
243
+ }
244
+ const work = sections.find((s) => s.id === 'experience');
245
+ if (work) {
246
+ if (work.content.type === 'experience') {
247
+ // Each role generates 1-2 rows (入社 + optional 退職)
248
+ for (const entry of work.content.entries) {
249
+ for (const role of entry.roles) {
250
+ historyDataRows += 1; // 入社
251
+ if (role.end && role.end !== 'present') {
252
+ historyDataRows += 1; // 退職
253
+ }
254
+ }
255
+ }
256
+ }
257
+ else if (work.content.type === 'table') {
258
+ historyDataRows += work.content.rows.length;
259
+ }
260
+ }
261
+ // Count license rows
262
+ let licenseDataRows = 0;
263
+ const cert = sections.find((s) => s.id === 'certifications');
264
+ if (cert) {
265
+ if (cert.content.type === 'certifications') {
266
+ licenseDataRows = cert.content.entries.length;
267
+ }
268
+ else if (cert.content.type === 'table') {
269
+ licenseDataRows = cert.content.rows.length;
270
+ }
271
+ }
272
+ return { historyDataRows, licenseDataRows };
273
+ }
274
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/generator/rirekisho/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rirekisho (履歴書) Generator
3
+ * Based on 厚生労働省 履歴書様式例 format
4
+ *
5
+ * This module generates a two-page rirekisho in landscape orientation.
6
+ * The layout is calculated to ensure the bottom edges of the left and right
7
+ * pages align perfectly.
8
+ */
9
+ import type { RirekishoInput, RirekishoOptions } from './types.js';
10
+ export type { RirekishoInput, RirekishoOptions } from './types.js';
11
+ /**
12
+ * Generate HTML for a rirekisho document
13
+ *
14
+ * @param input - The input data containing metadata and sections
15
+ * @param options - Generation options including paper size and chronological order
16
+ * @returns Complete HTML document string
17
+ * @throws Error if the data cannot fit on the page
18
+ */
19
+ export declare function generateRirekishoHTML(input: RirekishoInput, options: RirekishoOptions): string;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/rirekisho/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAkDR"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Rirekisho (履歴書) Generator
3
+ * Based on 厚生労働省 履歴書様式例 format
4
+ *
5
+ * This module generates a two-page rirekisho in landscape orientation.
6
+ * The layout is calculated to ensure the bottom edges of the left and right
7
+ * pages align perfectly.
8
+ */
9
+ import { buildLeftPage, buildRightPage } from './components.js';
10
+ import { buildHistoryData, buildLicenseData, countDataRows, extractPersonalInfo, getSectionList, getSectionText, getTodayDate, } from './data.js';
11
+ import { calculateLayout, validateLayout } from './layout.js';
12
+ import { generateCSS } from './styles.js';
13
+ /**
14
+ * Generate HTML for a rirekisho document
15
+ *
16
+ * @param input - The input data containing metadata and sections
17
+ * @param options - Generation options including paper size and chronological order
18
+ * @returns Complete HTML document string
19
+ * @throws Error if the data cannot fit on the page
20
+ */
21
+ export function generateRirekishoHTML(input, options) {
22
+ const order = options.chronologicalOrder ?? 'asc';
23
+ const hideMotivation = options.hideMotivation ?? false;
24
+ const today = new Date();
25
+ const todayDate = getTodayDate();
26
+ // Count data rows for layout calculation
27
+ const dataCounts = countDataRows(input.sections);
28
+ // Calculate layout dimensions
29
+ const layout = calculateLayout({
30
+ paperSize: options.paperSize,
31
+ hideMotivation,
32
+ dataCounts,
33
+ });
34
+ // Validate layout can fit the data
35
+ const validationError = validateLayout(layout);
36
+ if (validationError) {
37
+ throw new Error(validationError);
38
+ }
39
+ // Extract data
40
+ const info = extractPersonalInfo(input.metadata, today);
41
+ const history = buildHistoryData(input.sections, order);
42
+ const license = buildLicenseData(input.sections, order);
43
+ const motivation = getSectionText(input.sections, ['motivation']);
44
+ const competencies = getSectionList(input.sections, ['competencies']);
45
+ const notes = getSectionText(input.sections, ['notes']);
46
+ // Generate HTML with full-width footer
47
+ return `<!DOCTYPE html>
48
+ <html lang="ja">
49
+ <head>
50
+ <meta charset="UTF-8">
51
+ <title>${info.name} - 履歴書</title>
52
+ <style>${generateCSS(layout)}</style>
53
+ </head>
54
+ <body>
55
+ <div class="spread">
56
+ <main class="spread-content">
57
+ ${buildLeftPage({ layout, info, history, today: todayDate, photoDataUri: options.photoDataUri })}
58
+ ${buildRightPage({ layout, history, license, motivation, competencies, notes })}
59
+ </main>
60
+ <footer class="spread-footer">
61
+ ※「性別」欄:記載は任意です。未記載とすることも可能です。
62
+ </footer>
63
+ </div>
64
+ </body>
65
+ </html>`;
66
+ }
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/rirekisho/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM1C;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAqB,EACrB,OAAyB;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAClD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,yCAAyC;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjD,8BAA8B;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc;QACd,UAAU;KACX,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,eAAe;IACf,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAExD,uCAAuC;IACvC,OAAO;;;;WAIE,IAAI,CAAC,IAAI;WACT,WAAW,CAAC,MAAM,CAAC;;;;;QAKtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9F,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;;;;;;QAO7E,CAAC;AACT,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Layout calculation for Rirekisho (履歴書)
3
+ *
4
+ * This module calculates the optimal layout for the rirekisho document,
5
+ * ensuring that:
6
+ * 1. All content fits within the page
7
+ * 2. Left and right page bottoms align perfectly
8
+ * 3. Font sizes don't go below minimum
9
+ * 4. Each section has at least its minimum height
10
+ */
11
+ import type { LayoutDimensions, LayoutInput } from './types.js';
12
+ /**
13
+ * Calculate complete layout dimensions for the rirekisho document
14
+ */
15
+ export declare function calculateLayout(input: LayoutInput): LayoutDimensions;
16
+ /**
17
+ * Validate that the layout can accommodate the data
18
+ */
19
+ export declare function validateLayout(layout: LayoutDimensions): string | null;
20
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/generator/rirekisho/layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAGZ,MAAM,YAAY,CAAC;AAuWpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,CAqGpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAKtE"}