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,354 @@
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 { FIXED_DIMENSIONS, FONT_SIZE, PAPER_SIZES, PREFERRED_ROW_COUNTS, ROW_HEIGHT, SCALE_FACTORS, SECTION_HEIGHTS, } from './types.js';
12
+ // ============================================================================
13
+ // Helper Functions
14
+ // ============================================================================
15
+ /**
16
+ * Calculate the height of the left page header section
17
+ * (title, name, birth/gender, addresses)
18
+ */
19
+ function calculateLeftHeaderHeight(scale) {
20
+ const d = FIXED_DIMENSIONS;
21
+ return (d.headerHeight * scale +
22
+ d.nameRowHeight * scale +
23
+ d.nameMainHeight * scale +
24
+ d.birthGenderHeight * scale +
25
+ d.addressRowHeight * scale * 2);
26
+ }
27
+ /**
28
+ * Calculate table height from row count and row height
29
+ * +1 for header row
30
+ */
31
+ function calculateTableHeight(dataRowCount, rowHeight) {
32
+ return (dataRowCount + 1) * rowHeight;
33
+ }
34
+ /**
35
+ * Calculate optimal allocation of space on the right page
36
+ *
37
+ * Priority rules:
38
+ * 1. When license data is large: reduce motivation/notes height first, then reduce history rows
39
+ * 2. When history data is large: reduce license rows if possible, then reduce motivation/notes height
40
+ * 3. When both are large: reduce motivation/notes to minimum height
41
+ * - If still doesn't fit: reduce row height and font size (applied to all tables on both pages)
42
+ *
43
+ * The algorithm starts with preferred row counts and reduces as needed while
44
+ * maintaining minimum constraints.
45
+ */
46
+ function allocateRightPageSpace(params) {
47
+ const { availableHeight, historyOverflow, licenseDataRows, tableRowHeight, tableMargin, scale, paperSize, hideMotivation, totalHistoryDataRows, leftTableAreaHeight, } = params;
48
+ const preferred = PREFERRED_ROW_COUNTS[paperSize];
49
+ const motivationMinHeight = hideMotivation ? 0 : SECTION_HEIGHTS.motivationMin * scale;
50
+ const notesMinHeight = SECTION_HEIGHTS.notesMin * scale;
51
+ // Row height and font size constraints
52
+ const minRowHeight = ROW_HEIGHT.min * scale;
53
+ const defaultFontSize = FONT_SIZE.default * scale;
54
+ const minFontSize = FONT_SIZE.min * scale;
55
+ // History extra rows (学歴, 職歴, 現在に至る, 以上)
56
+ const historyExtraRows = 4;
57
+ // Minimum row counts: must show all data, at least 1 row
58
+ const minHistoryRows = Math.max(1, historyOverflow);
59
+ const minLicenseRows = Math.max(1, licenseDataRows);
60
+ // Start with preferred row counts (but at least enough for data)
61
+ let rightHistoryRows = Math.max(preferred.rightHistory, minHistoryRows);
62
+ let licenseRows = Math.max(preferred.license, minLicenseRows);
63
+ let currentRowHeight = tableRowHeight;
64
+ let currentFontSize = defaultFontSize;
65
+ // Calculate how many left history rows fit with a given row height
66
+ const calcLeftHistoryRows = (rowHeight) => {
67
+ return Math.floor(leftTableAreaHeight / rowHeight) - 2; // -1 for header, -1 for safety
68
+ };
69
+ // Calculate history overflow with a given row height
70
+ const calcHistoryOverflow = (rowHeight) => {
71
+ const leftRows = calcLeftHistoryRows(rowHeight);
72
+ const totalNeeded = totalHistoryDataRows + historyExtraRows;
73
+ return Math.max(0, totalNeeded - leftRows);
74
+ };
75
+ // Calculate initial heights with preferred 6:4 ratio for motivation/notes
76
+ const calcMotivationNotesHeights = (remaining) => {
77
+ if (hideMotivation) {
78
+ return { motivation: 0, notes: Math.max(notesMinHeight, remaining) };
79
+ }
80
+ const totalMin = motivationMinHeight + notesMinHeight;
81
+ if (remaining >= totalMin) {
82
+ const extra = remaining - totalMin;
83
+ return {
84
+ motivation: motivationMinHeight + extra * 0.6,
85
+ notes: notesMinHeight + extra * 0.4,
86
+ };
87
+ }
88
+ // Below minimum - proportionally reduce
89
+ const ratio = Math.max(0, remaining / totalMin);
90
+ return {
91
+ motivation: motivationMinHeight * ratio,
92
+ notes: notesMinHeight * ratio,
93
+ };
94
+ };
95
+ // Calculate remaining space for motivation/notes (with variable row height)
96
+ const calcRemainingForSections = (histRows, licRows, rowHeight) => {
97
+ const histHeight = calculateTableHeight(histRows, rowHeight);
98
+ const licHeight = calculateTableHeight(licRows, rowHeight);
99
+ const marginCount = hideMotivation ? 2 : 3;
100
+ return availableHeight - histHeight - licHeight - marginCount * tableMargin;
101
+ };
102
+ // Calculate total height (with variable row height)
103
+ const calcTotalHeight = (histRows, licRows, motHeight, notHeight, rowHeight) => {
104
+ const histHeight = calculateTableHeight(histRows, rowHeight);
105
+ const licHeight = calculateTableHeight(licRows, rowHeight);
106
+ const marginCount = hideMotivation ? 2 : 3;
107
+ return histHeight + licHeight + motHeight + notHeight + marginCount * tableMargin;
108
+ };
109
+ // Check if current allocation fits (with variable row height)
110
+ const fitsInAvailable = (histRows, licRows, motHeight, notHeight, rowHeight) => {
111
+ const total = calcTotalHeight(histRows, licRows, motHeight, notHeight, rowHeight);
112
+ return total <= availableHeight + 0.1; // Small tolerance for floating point
113
+ };
114
+ // Determine which data is "large" (exceeds preferred)
115
+ const historyIsLarge = historyOverflow > preferred.rightHistory;
116
+ const licenseIsLarge = licenseDataRows > preferred.license;
117
+ // Initial calculation with preferred rows
118
+ let remaining = calcRemainingForSections(rightHistoryRows, licenseRows, currentRowHeight);
119
+ let { motivation: motivationHeight, notes: notesHeight } = calcMotivationNotesHeights(remaining);
120
+ // If everything fits, we're done
121
+ if (fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight)) {
122
+ return {
123
+ rightHistoryRows,
124
+ licenseRows,
125
+ motivationHeight,
126
+ notesHeight,
127
+ totalHeight: availableHeight,
128
+ adjustedRowHeight: currentRowHeight,
129
+ adjustedFontSize: currentFontSize,
130
+ overflows: false,
131
+ };
132
+ }
133
+ // Need to reduce - apply priority rules
134
+ if (licenseIsLarge && !historyIsLarge) {
135
+ // Priority 1: License is large
136
+ // Step 1: Reduce motivation/notes to minimum
137
+ motivationHeight = motivationMinHeight;
138
+ notesHeight = notesMinHeight;
139
+ if (!fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight)) {
140
+ // Step 2: Reduce history rows (empty rows first)
141
+ while (rightHistoryRows > minHistoryRows) {
142
+ rightHistoryRows--;
143
+ if (fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight))
144
+ break;
145
+ }
146
+ }
147
+ }
148
+ else if (historyIsLarge && !licenseIsLarge) {
149
+ // Priority 2: History is large
150
+ // Step 1: Reduce license rows (empty rows first)
151
+ while (licenseRows > minLicenseRows) {
152
+ licenseRows--;
153
+ remaining = calcRemainingForSections(rightHistoryRows, licenseRows, currentRowHeight);
154
+ ({ motivation: motivationHeight, notes: notesHeight } = calcMotivationNotesHeights(remaining));
155
+ if (fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight))
156
+ break;
157
+ }
158
+ if (!fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight)) {
159
+ // Step 2: Reduce motivation/notes to minimum
160
+ motivationHeight = motivationMinHeight;
161
+ notesHeight = notesMinHeight;
162
+ }
163
+ }
164
+ else {
165
+ // Priority 3: Both are large (or neither but still doesn't fit)
166
+ // Reduce motivation/notes to minimum first
167
+ motivationHeight = motivationMinHeight;
168
+ notesHeight = notesMinHeight;
169
+ // If still doesn't fit, reduce empty rows from both tables
170
+ while (!fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight)) {
171
+ // Alternate reducing license and history empty rows
172
+ let reduced = false;
173
+ if (licenseRows > minLicenseRows) {
174
+ licenseRows--;
175
+ reduced = true;
176
+ }
177
+ if (!fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight) && rightHistoryRows > minHistoryRows) {
178
+ rightHistoryRows--;
179
+ reduced = true;
180
+ }
181
+ if (!reduced)
182
+ break; // Can't reduce anymore
183
+ }
184
+ // If still doesn't fit after reducing rows, reduce row height and font size
185
+ // This affects all tables on both left and right pages
186
+ if (!fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight)) {
187
+ // Calculate the optimal row height that fits all content
188
+ // We need to find a row height where:
189
+ // 1. Left page can fit leftHistoryRows (calculated from row height)
190
+ // 2. Right page can fit rightHistoryRows + licenseRows + motivation + notes
191
+ // Binary search for optimal row height
192
+ let lowHeight = minRowHeight;
193
+ let highHeight = tableRowHeight;
194
+ let bestRowHeight = minRowHeight;
195
+ for (let i = 0; i < 20; i++) { // Max 20 iterations for precision
196
+ const midHeight = (lowHeight + highHeight) / 2;
197
+ // Recalculate overflow with this row height
198
+ const newOverflow = calcHistoryOverflow(midHeight);
199
+ const newRightHistoryRows = Math.max(1, newOverflow);
200
+ // Check if right page fits
201
+ const marginCount = hideMotivation ? 2 : 3;
202
+ const rightTableRows = newRightHistoryRows + 1 + licenseRows + 1; // +1 for headers
203
+ const rightTablesHeight = rightTableRows * midHeight;
204
+ const rightTotalHeight = rightTablesHeight + motivationMinHeight + notesMinHeight + marginCount * tableMargin;
205
+ if (rightTotalHeight <= availableHeight + 0.1) {
206
+ // This height works, try larger
207
+ bestRowHeight = midHeight;
208
+ lowHeight = midHeight;
209
+ }
210
+ else {
211
+ // Too large, try smaller
212
+ highHeight = midHeight;
213
+ }
214
+ // Stop if converged
215
+ if (highHeight - lowHeight < 0.01)
216
+ break;
217
+ }
218
+ // Use the best row height found
219
+ if (bestRowHeight >= minRowHeight) {
220
+ currentRowHeight = bestRowHeight;
221
+ // Recalculate right history rows with new row height
222
+ const newOverflow = calcHistoryOverflow(currentRowHeight);
223
+ rightHistoryRows = Math.max(1, newOverflow);
224
+ // Scale font size proportionally
225
+ const heightRatio = currentRowHeight / tableRowHeight;
226
+ currentFontSize = Math.max(minFontSize, defaultFontSize * heightRatio);
227
+ }
228
+ else {
229
+ // Use minimum row height - content may overflow but we can't go smaller
230
+ currentRowHeight = minRowHeight;
231
+ currentFontSize = minFontSize;
232
+ // Recalculate right history rows with minimum row height
233
+ const newOverflow = calcHistoryOverflow(currentRowHeight);
234
+ rightHistoryRows = Math.max(1, newOverflow);
235
+ }
236
+ }
237
+ }
238
+ // Final recalculation - distribute any remaining space to motivation/notes
239
+ remaining = calcRemainingForSections(rightHistoryRows, licenseRows, currentRowHeight);
240
+ ({ motivation: motivationHeight, notes: notesHeight } = calcMotivationNotesHeights(remaining));
241
+ // Check if content still overflows after all adjustments
242
+ const finalFits = fitsInAvailable(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight);
243
+ return {
244
+ rightHistoryRows,
245
+ licenseRows,
246
+ motivationHeight,
247
+ notesHeight,
248
+ totalHeight: calcTotalHeight(rightHistoryRows, licenseRows, motivationHeight, notesHeight, currentRowHeight),
249
+ adjustedRowHeight: currentRowHeight,
250
+ adjustedFontSize: currentFontSize,
251
+ overflows: !finalFits,
252
+ };
253
+ }
254
+ // ============================================================================
255
+ // Main Layout Calculation
256
+ // ============================================================================
257
+ /**
258
+ * Calculate complete layout dimensions for the rirekisho document
259
+ */
260
+ export function calculateLayout(input) {
261
+ const { paperSize, hideMotivation, dataCounts } = input;
262
+ const { historyDataRows, licenseDataRows } = dataCounts;
263
+ // Paper and scale
264
+ const paper = PAPER_SIZES[paperSize];
265
+ const scale = SCALE_FACTORS[paperSize];
266
+ // Page dimensions
267
+ const margin = FIXED_DIMENSIONS.margin * scale;
268
+ const marginBottom = FIXED_DIMENSIONS.marginBottom * scale;
269
+ const centerGap = FIXED_DIMENSIONS.centerGap * scale;
270
+ const pageWidth = (paper.width - margin * 2 - centerGap) / 2;
271
+ const pageHeight = paper.height - margin - marginBottom;
272
+ const footerHeight = FIXED_DIMENSIONS.footerHeight * scale;
273
+ const tableMargin = FIXED_DIMENSIONS.tableMargin * scale;
274
+ // Table dimensions (default values, may be adjusted by allocation)
275
+ const defaultTableRowHeight = ROW_HEIGHT.default * scale;
276
+ // Left page layout
277
+ const leftHeaderHeight = calculateLeftHeaderHeight(scale);
278
+ const leftContentHeight = pageHeight - footerHeight;
279
+ const leftTableAreaHeight = leftContentHeight - leftHeaderHeight - tableMargin;
280
+ // Calculate how many rows fit on left page (using default row height initially)
281
+ // -1 for header row, -1 for safety margin
282
+ const defaultLeftHistoryRows = Math.floor(leftTableAreaHeight / defaultTableRowHeight) - 2;
283
+ // Calculate history overflow to right page (with default row height)
284
+ const historyExtraRows = 4; // 学歴, 職歴, 現在に至る, 以上
285
+ const totalHistoryNeeded = historyDataRows + historyExtraRows;
286
+ const historyOverflow = Math.max(0, totalHistoryNeeded - defaultLeftHistoryRows);
287
+ // Right page layout - allocate space optimally
288
+ const rightContentHeight = pageHeight - footerHeight;
289
+ const allocation = allocateRightPageSpace({
290
+ availableHeight: rightContentHeight,
291
+ historyOverflow,
292
+ licenseDataRows,
293
+ tableRowHeight: defaultTableRowHeight,
294
+ tableMargin,
295
+ scale,
296
+ paperSize,
297
+ hideMotivation,
298
+ totalHistoryDataRows: historyDataRows,
299
+ leftTableAreaHeight,
300
+ });
301
+ // Use adjusted row height and font size from allocation
302
+ const tableRowHeight = allocation.adjustedRowHeight;
303
+ const tableFontSize = allocation.adjustedFontSize;
304
+ // Recalculate left history rows with the (possibly adjusted) row height
305
+ const leftHistoryRows = Math.floor(leftTableAreaHeight / tableRowHeight) - 2;
306
+ // Calculate table heights with the (possibly adjusted) row height
307
+ const leftTableHeight = calculateTableHeight(leftHistoryRows, tableRowHeight);
308
+ const rightHistoryTableHeight = calculateTableHeight(allocation.rightHistoryRows, tableRowHeight);
309
+ const licenseTableHeight = calculateTableHeight(allocation.licenseRows, tableRowHeight);
310
+ return {
311
+ paper,
312
+ scale,
313
+ margin,
314
+ marginBottom,
315
+ centerGap,
316
+ pageWidth,
317
+ pageHeight,
318
+ photoWidth: FIXED_DIMENSIONS.photoWidth * scale,
319
+ contactWidth: FIXED_DIMENSIONS.contactWidth * scale,
320
+ genderWidth: FIXED_DIMENSIONS.genderWidth * scale,
321
+ headerHeight: FIXED_DIMENSIONS.headerHeight * scale,
322
+ nameRowHeight: FIXED_DIMENSIONS.nameRowHeight * scale,
323
+ nameMainHeight: FIXED_DIMENSIONS.nameMainHeight * scale,
324
+ birthGenderHeight: FIXED_DIMENSIONS.birthGenderHeight * scale,
325
+ addressRowHeight: FIXED_DIMENSIONS.addressRowHeight * scale,
326
+ addressFuriganaHeight: FIXED_DIMENSIONS.addressFuriganaHeight * scale,
327
+ tableRowHeight,
328
+ tableFontSize,
329
+ tableMargin,
330
+ yearColumnWidth: FIXED_DIMENSIONS.yearColumnWidth * scale,
331
+ monthColumnWidth: FIXED_DIMENSIONS.monthColumnWidth * scale,
332
+ leftHistoryRows,
333
+ rightHistoryRows: allocation.rightHistoryRows,
334
+ licenseRows: allocation.licenseRows,
335
+ leftTableHeight,
336
+ rightHistoryTableHeight,
337
+ licenseTableHeight,
338
+ motivationMinHeight: allocation.motivationHeight,
339
+ notesMinHeight: allocation.notesHeight,
340
+ footerHeight,
341
+ hideMotivation,
342
+ overflows: allocation.overflows,
343
+ };
344
+ }
345
+ /**
346
+ * Validate that the layout can accommodate the data
347
+ */
348
+ export function validateLayout(layout) {
349
+ if (layout.overflows) {
350
+ return 'データが多すぎてページに収まりません。学歴・職歴または免許・資格の数を減らしてください。';
351
+ }
352
+ return null;
353
+ }
354
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/generator/rirekisho/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CSS styles for Rirekisho (履歴書)
3
+ */
4
+ import type { LayoutDimensions } from './types.js';
5
+ /**
6
+ * Generate complete CSS for the rirekisho document
7
+ */
8
+ export declare function generateCSS(layout: LayoutDimensions): string;
9
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/generator/rirekisho/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkBnD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAiW5D"}