markdown-to-document-cli 1.1.4 → 1.2.7

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 (40) hide show
  1. package/README.md +54 -9
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +476 -103
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +18 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/services/CoverService.d.ts +25 -3
  10. package/dist/services/CoverService.d.ts.map +1 -1
  11. package/dist/services/CoverService.js +226 -97
  12. package/dist/services/CoverService.js.map +1 -1
  13. package/dist/services/MarkdownPreprocessor.d.ts +5 -0
  14. package/dist/services/MarkdownPreprocessor.d.ts.map +1 -1
  15. package/dist/services/MarkdownPreprocessor.js +18 -7
  16. package/dist/services/MarkdownPreprocessor.js.map +1 -1
  17. package/dist/services/PandocService.d.ts +3 -1
  18. package/dist/services/PandocService.d.ts.map +1 -1
  19. package/dist/services/PandocService.js +31 -15
  20. package/dist/services/PandocService.js.map +1 -1
  21. package/dist/services/TypographyService.d.ts +8 -1
  22. package/dist/services/TypographyService.d.ts.map +1 -1
  23. package/dist/services/TypographyService.js +417 -57
  24. package/dist/services/TypographyService.js.map +1 -1
  25. package/dist/types/index.d.ts +37 -11
  26. package/dist/types/index.d.ts.map +1 -1
  27. package/dist/types/index.js +28 -1
  28. package/dist/types/index.js.map +1 -1
  29. package/dist/utils/constants.d.ts.map +1 -1
  30. package/dist/utils/constants.js +224 -0
  31. package/dist/utils/constants.js.map +1 -1
  32. package/dist/utils/cssBuilder.d.ts +93 -0
  33. package/dist/utils/cssBuilder.d.ts.map +1 -0
  34. package/dist/utils/cssBuilder.js +231 -0
  35. package/dist/utils/cssBuilder.js.map +1 -0
  36. package/dist/utils/themeUtils.d.ts +70 -0
  37. package/dist/utils/themeUtils.d.ts.map +1 -0
  38. package/dist/utils/themeUtils.js +141 -0
  39. package/dist/utils/themeUtils.js.map +1 -0
  40. package/package.json +2 -2
@@ -1,5 +1,32 @@
1
1
  /**
2
2
  * Type Definitions for Markdown to Document CLI
3
3
  */
4
- export {};
4
+ // ============ Enums for Type Safety ============
5
+ export var CoverThemeCategory;
6
+ (function (CoverThemeCategory) {
7
+ CoverThemeCategory["Basic"] = "basic";
8
+ CoverThemeCategory["Professional"] = "professional";
9
+ CoverThemeCategory["Creative"] = "creative";
10
+ CoverThemeCategory["Seasonal"] = "seasonal";
11
+ CoverThemeCategory["Extended"] = "extended";
12
+ })(CoverThemeCategory || (CoverThemeCategory = {}));
13
+ export var CoverThemeStyle;
14
+ (function (CoverThemeStyle) {
15
+ CoverThemeStyle["Minimal"] = "minimal";
16
+ CoverThemeStyle["Gradient"] = "gradient";
17
+ CoverThemeStyle["Dark"] = "dark";
18
+ CoverThemeStyle["Modern"] = "modern";
19
+ })(CoverThemeStyle || (CoverThemeStyle = {}));
20
+ export var TypographyPresetCategory;
21
+ (function (TypographyPresetCategory) {
22
+ TypographyPresetCategory["Basic"] = "basic";
23
+ TypographyPresetCategory["ContentFocused"] = "content";
24
+ TypographyPresetCategory["DocumentType"] = "document";
25
+ })(TypographyPresetCategory || (TypographyPresetCategory = {}));
26
+ export var OutputFormat;
27
+ (function (OutputFormat) {
28
+ OutputFormat["Epub"] = "epub";
29
+ OutputFormat["Pdf"] = "pdf";
30
+ OutputFormat["Both"] = "both";
31
+ })(OutputFormat || (OutputFormat = {}));
5
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kDAAkD;AAElD,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC1B,qCAAe,CAAA;IACf,mDAA6B,CAAA;IAC7B,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;AACzB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACvB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,gCAAa,CAAA;IACb,oCAAiB,CAAA;AACrB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,wBAIX;AAJD,WAAY,wBAAwB;IAChC,2CAAe,CAAA;IACf,sDAA0B,CAAA;IAC1B,qDAAyB,CAAA;AAC7B,CAAC,EAJW,wBAAwB,KAAxB,wBAAwB,QAInC;AAED,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACpB,6BAAa,CAAA;IACb,2BAAW,CAAA;IACX,6BAAa,CAAA;AACjB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEtE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAqFnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA6C/D,CAAC;AAEF,eAAO,MAAM,aAAa,UAGzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAA+C,CAAC;AAE/E,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAa1B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEtE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAwOnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA+H/D,CAAC;AAEF,eAAO,MAAM,aAAa,UAGzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAA+C,CAAC;AAE/E,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAa1B,CAAC"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export const WORDS_PER_MINUTE = 200;
5
5
  export const COVER_THEMES = {
6
+ // === Basic Themes ===
6
7
  apple: {
7
8
  id: 'apple',
8
9
  name: 'Apple Style',
@@ -86,9 +87,153 @@ export const COVER_THEMES = {
86
87
  text: '#000000'
87
88
  },
88
89
  style: 'minimal'
90
+ },
91
+ // === Professional Themes ===
92
+ corporate: {
93
+ id: 'corporate',
94
+ name: 'Corporate Blue',
95
+ category: 'professional',
96
+ description: '비즈니스 문서용 전문적인 블루 톤',
97
+ colors: {
98
+ primary: '#1e3a5f',
99
+ secondary: '#2c5282',
100
+ accent: '#63b3ed',
101
+ background: '#1a365d',
102
+ text: '#ffffff'
103
+ },
104
+ style: 'modern'
105
+ },
106
+ academic: {
107
+ id: 'academic',
108
+ name: 'Academic',
109
+ category: 'professional',
110
+ description: '학술 논문 및 연구 보고서용',
111
+ colors: {
112
+ primary: '#2d3748',
113
+ secondary: '#4a5568',
114
+ accent: '#805ad5',
115
+ background: '#1a202c',
116
+ text: '#e2e8f0'
117
+ },
118
+ style: 'minimal'
119
+ },
120
+ magazine: {
121
+ id: 'magazine',
122
+ name: 'Magazine',
123
+ category: 'professional',
124
+ description: '잡지 스타일의 세련된 디자인',
125
+ colors: {
126
+ primary: '#c53030',
127
+ secondary: '#9b2c2c',
128
+ accent: '#fed7d7',
129
+ background: '#1a1a1a',
130
+ text: '#ffffff'
131
+ },
132
+ style: 'modern'
133
+ },
134
+ // === Creative Themes ===
135
+ sunset: {
136
+ id: 'sunset',
137
+ name: 'Sunset',
138
+ category: 'creative',
139
+ description: '따뜻한 석양 그라데이션',
140
+ colors: {
141
+ primary: '#f6ad55',
142
+ secondary: '#ed64a6',
143
+ accent: '#fbd38d',
144
+ background: '#2d1b4e',
145
+ text: '#ffffff'
146
+ },
147
+ style: 'gradient'
148
+ },
149
+ ocean: {
150
+ id: 'ocean',
151
+ name: 'Ocean',
152
+ category: 'creative',
153
+ description: '시원한 바다 블루 그라데이션',
154
+ colors: {
155
+ primary: '#0bc5ea',
156
+ secondary: '#3182ce',
157
+ accent: '#90cdf4',
158
+ background: '#0d1b2a',
159
+ text: '#ffffff'
160
+ },
161
+ style: 'gradient'
162
+ },
163
+ aurora: {
164
+ id: 'aurora',
165
+ name: 'Aurora',
166
+ category: 'creative',
167
+ description: '오로라 컬러 그라데이션',
168
+ colors: {
169
+ primary: '#38b2ac',
170
+ secondary: '#805ad5',
171
+ accent: '#68d391',
172
+ background: '#0f0f1a',
173
+ text: '#ffffff'
174
+ },
175
+ style: 'gradient'
176
+ },
177
+ rose_gold: {
178
+ id: 'rose_gold',
179
+ name: 'Rose Gold',
180
+ category: 'creative',
181
+ description: '우아한 로즈골드 톤',
182
+ colors: {
183
+ primary: '#b88b8b',
184
+ secondary: '#8b6b6b',
185
+ accent: '#d4a5a5',
186
+ background: '#2d1f1f',
187
+ text: '#ffeaea'
188
+ },
189
+ style: 'modern'
190
+ },
191
+ // === Seasonal Themes ===
192
+ spring: {
193
+ id: 'spring',
194
+ name: 'Spring',
195
+ category: 'seasonal',
196
+ description: '봄의 생동감 있는 파스텔 톤',
197
+ colors: {
198
+ primary: '#f687b3',
199
+ secondary: '#9ae6b4',
200
+ accent: '#fbb6ce',
201
+ background: '#1a1a2e',
202
+ text: '#ffffff'
203
+ },
204
+ style: 'gradient'
205
+ },
206
+ autumn: {
207
+ id: 'autumn',
208
+ name: 'Autumn',
209
+ category: 'seasonal',
210
+ description: '가을의 따뜻한 단풍 컬러',
211
+ colors: {
212
+ primary: '#dd6b20',
213
+ secondary: '#c05621',
214
+ accent: '#fbd38d',
215
+ background: '#1a0f0a',
216
+ text: '#fffaf0'
217
+ },
218
+ style: 'modern'
219
+ },
220
+ winter: {
221
+ id: 'winter',
222
+ name: 'Winter',
223
+ category: 'seasonal',
224
+ description: '겨울의 차가운 블루/화이트 톤',
225
+ colors: {
226
+ primary: '#a0aec0',
227
+ secondary: '#e2e8f0',
228
+ accent: '#bee3f8',
229
+ background: '#1a202c',
230
+ text: '#ffffff'
231
+ },
232
+ style: 'minimal'
89
233
  }
90
234
  };
91
235
  export const TYPOGRAPHY_PRESETS = {
236
+ // === Basic Presets ===
92
237
  novel: {
93
238
  id: 'novel',
94
239
  name: '소설',
@@ -132,6 +277,85 @@ export const TYPOGRAPHY_PRESETS = {
132
277
  textAlign: 'justify',
133
278
  paragraphSpacing: 8,
134
279
  features: ['balanced', 'readable', 'responsive']
280
+ },
281
+ // === Content-focused Presets ===
282
+ text_heavy: {
283
+ id: 'text_heavy',
284
+ name: '텍스트 중심',
285
+ description: '긴 글 위주 문서용 - 12pt, 촘촘한 줄간격, 좁은 여백',
286
+ fontSize: 12,
287
+ lineHeight: 1.5,
288
+ fontFamily: 'Noto Serif CJK KR, serif',
289
+ textAlign: 'justify',
290
+ paragraphSpacing: 3,
291
+ features: ['compact-text', 'indentation', 'hyphenation']
292
+ },
293
+ table_heavy: {
294
+ id: 'table_heavy',
295
+ name: '테이블 중심',
296
+ description: '표가 많은 문서용 - 11pt, 넓은 표 영역, 작은 폰트',
297
+ fontSize: 11,
298
+ lineHeight: 1.4,
299
+ fontFamily: 'Noto Sans CJK KR, sans-serif',
300
+ textAlign: 'left',
301
+ paragraphSpacing: 5,
302
+ features: ['wide-tables', 'compact-margins', 'structured']
303
+ },
304
+ image_heavy: {
305
+ id: 'image_heavy',
306
+ name: '이미지 중심',
307
+ description: '이미지가 많은 문서용 - 13pt, 이미지 최대화, 캡션 강조',
308
+ fontSize: 13,
309
+ lineHeight: 1.5,
310
+ fontFamily: 'Noto Sans CJK KR, sans-serif',
311
+ textAlign: 'left',
312
+ paragraphSpacing: 8,
313
+ features: ['large-images', 'captions', 'visual-focus']
314
+ },
315
+ balanced: {
316
+ id: 'balanced',
317
+ name: '균형 레이아웃',
318
+ description: '텍스트/테이블/이미지 균형 배치 - 12pt, 최적화된 가독성',
319
+ fontSize: 12,
320
+ lineHeight: 1.55,
321
+ fontFamily: 'Noto Sans CJK KR, sans-serif',
322
+ textAlign: 'left',
323
+ paragraphSpacing: 6,
324
+ features: ['balanced', 'adaptive', 'professional']
325
+ },
326
+ // === Document Type Presets ===
327
+ report: {
328
+ id: 'report',
329
+ name: '보고서',
330
+ description: '비즈니스 보고서용 - 11pt, 공식적, 구조화된 레이아웃',
331
+ fontSize: 11,
332
+ lineHeight: 1.5,
333
+ fontFamily: 'Noto Sans CJK KR, sans-serif',
334
+ textAlign: 'justify',
335
+ paragraphSpacing: 7,
336
+ features: ['formal', 'structured', 'toc-friendly']
337
+ },
338
+ manual: {
339
+ id: 'manual',
340
+ name: '매뉴얼',
341
+ description: '기술 문서/매뉴얼용 - 11pt, 코드 블록, 단계별 설명 강조',
342
+ fontSize: 11,
343
+ lineHeight: 1.6,
344
+ fontFamily: 'Noto Sans CJK KR, sans-serif',
345
+ textAlign: 'left',
346
+ paragraphSpacing: 8,
347
+ features: ['code-blocks', 'numbered-steps', 'callouts']
348
+ },
349
+ magazine: {
350
+ id: 'magazine',
351
+ name: '매거진',
352
+ description: '잡지 스타일 - 11pt, 드롭캡, 시각적 강조, 세련된 디자인',
353
+ fontSize: 11,
354
+ lineHeight: 1.5,
355
+ fontFamily: 'Noto Serif CJK KR, serif',
356
+ textAlign: 'justify',
357
+ paragraphSpacing: 5,
358
+ features: ['drop-cap', 'pull-quotes', 'visual-emphasis']
135
359
  }
136
360
  };
137
361
  export const CALLOUT_TYPES = [
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAA+B;IACpD,uBAAuB;IACvB,KAAK,EAAE;QACH,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,qCAAqC;QAClD,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,SAAS;KACnB;IACD,eAAe,EAAE;QACb,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,8BAA8B;QAC3C,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,UAAU;KACpB;IACD,SAAS,EAAE;QACP,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,uBAAuB;QACpC,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,MAAM;KAChB;IACD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,wBAAwB;QACrC,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,QAAQ;KAClB;IACD,YAAY,EAAE;QACV,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,oBAAoB;QACjC,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,SAAS;KACnB;IACD,UAAU,EAAE;QACR,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,SAAS;KACnB;IAED,8BAA8B;IAC9B,SAAS,EAAE;QACP,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,oBAAoB;QACjC,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,QAAQ;KAClB;IACD,QAAQ,EAAE;QACN,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,iBAAiB;QAC9B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,SAAS;KACnB;IACD,QAAQ,EAAE;QACN,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,iBAAiB;QAC9B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,QAAQ;KAClB;IAED,0BAA0B;IAC1B,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,UAAU;KACpB;IACD,KAAK,EAAE;QACH,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,iBAAiB;QAC9B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,UAAU;KACpB;IACD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,UAAU;KACpB;IACD,SAAS,EAAE;QACP,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,QAAQ;KAClB;IAED,0BAA0B;IAC1B,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,iBAAiB;QAC9B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,UAAU;KACpB;IACD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,eAAe;QAC5B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,QAAQ;KAClB;IACD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,SAAS;SAClB;QACD,KAAK,EAAE,SAAS;KACnB;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAChE,wBAAwB;IACxB,KAAK,EAAE;QACH,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,iCAAiC;QAC9C,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,0BAA0B;QACtC,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,aAAa,EAAE,sBAAsB,EAAE,aAAa,CAAC;KACnE;IACD,YAAY,EAAE;QACV,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,iCAAiC;QAC9C,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,EAAE;QACpB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,CAAC;KAC9D;IACD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,SAAS,EAAE,mBAAmB,EAAE,WAAW,CAAC;KAC1D;IACD,KAAK,EAAE;QACH,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,2BAA2B;QACxC,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC;KACnD;IAED,kCAAkC;IAClC,UAAU,EAAE;QACR,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,0BAA0B;QACtC,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC;KAC3D;IACD,WAAW,EAAE;QACT,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,YAAY,CAAC;KAC7D;IACD,WAAW,EAAE;QACT,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC;KACzD;IACD,QAAQ,EAAE;QACN,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;KACrD;IAED,gCAAgC;IAChC,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,CAAC;KACrD;IACD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,qCAAqC;QAClD,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,8BAA8B;QAC1C,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,UAAU,CAAC;KAC1D;IACD,QAAQ,EAAE;QACN,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,qCAAqC;QAClD,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,0BAA0B;QACtC,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,CAAC;KAC3D;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;IAC3E,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO;CAC5D,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,MAAM,EAAE,MAAe;IACvB,gBAAgB,EAAE,OAAgB;IAClC,UAAU,EAAE,OAAO;IACnB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,IAAI;IAChB,oBAAoB,EAAE,KAAK;IAC3B,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,KAAK;IACvB,SAAS,EAAE,IAAa;IACxB,SAAS,EAAE,YAAqB;CACnC,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * CSS Builder Utilities
3
+ * Centralized CSS generation for PDF and EPUB formats
4
+ */
5
+ export declare const FONT_STACKS: {
6
+ readonly serif: "\"Noto Serif KR\", \"Noto Serif CJK KR\", \"Source Han Serif KR\", \"Batang\", \"바탕\", \"AppleMyungjo\", serif";
7
+ readonly sansSerif: "\"Noto Sans KR\", \"Noto Sans CJK KR\", \"Source Han Sans KR\", \"Malgun Gothic\", \"맑은 고딕\", \"Apple SD Gothic Neo\", sans-serif";
8
+ readonly monospace: "\"Noto Sans Mono KR\", \"Noto Sans Mono CJK KR\", \"D2Coding\", \"Source Code Pro\", monospace";
9
+ };
10
+ /**
11
+ * Generate Google Fonts import for PDF
12
+ */
13
+ export declare function buildFontImport(): string;
14
+ /**
15
+ * Generate box-sizing reset
16
+ */
17
+ export declare function buildBoxSizingReset(): string;
18
+ /**
19
+ * Generate image styling CSS with responsive sizing for EPUB
20
+ * Uses !important to override inline styles from markdown source
21
+ */
22
+ export declare function buildImageStyles(): string[];
23
+ /**
24
+ * Generate table styling CSS
25
+ */
26
+ export declare function buildTableStyles(): string[];
27
+ /**
28
+ * Generate code block styling CSS
29
+ */
30
+ export declare function buildCodeStyles(monospaceFont?: string): string[];
31
+ /**
32
+ * Generate blockquote styling CSS
33
+ */
34
+ export declare function buildBlockquoteStyles(): string;
35
+ export interface PageMargins {
36
+ top: string;
37
+ bottom: string;
38
+ left: string;
39
+ right: string;
40
+ }
41
+ /**
42
+ * Generate @page rules for PDF
43
+ */
44
+ export declare function buildPdfPageRules(margins: PageMargins): string[];
45
+ /**
46
+ * Generate PDF-specific body styles
47
+ */
48
+ export declare function buildPdfBodyExtras(): string[];
49
+ /**
50
+ * Generate PDF break-inside rules
51
+ */
52
+ export declare function buildPdfBreakRules(): string;
53
+ /**
54
+ * Generate PDF-specific image styling for proper page layout
55
+ */
56
+ export declare function buildPdfImageStyles(): string[];
57
+ /**
58
+ * Hide Pandoc title block for PDF
59
+ */
60
+ export declare function buildPdfTitleBlockHide(): string;
61
+ export interface HeadingScale {
62
+ h1: number;
63
+ h2: number;
64
+ h3: number;
65
+ h4: number;
66
+ h5: number;
67
+ h6: number;
68
+ }
69
+ /**
70
+ * Generate heading CSS for all levels
71
+ */
72
+ export declare function buildHeadingStyles(scale: HeadingScale, format?: 'epub' | 'pdf'): string[];
73
+ export interface BodyStyleOptions {
74
+ fontFamily: string;
75
+ fontSize: string;
76
+ lineHeight: number;
77
+ justification: 'left' | 'justify';
78
+ hyphenation: boolean;
79
+ format: 'epub' | 'pdf';
80
+ }
81
+ /**
82
+ * Generate body CSS
83
+ */
84
+ export declare function buildBodyStyles(options: BodyStyleOptions): string[];
85
+ /**
86
+ * Generate paragraph CSS
87
+ */
88
+ export declare function buildParagraphStyles(spacing: string, textIndent?: string): string[];
89
+ /**
90
+ * Build common element styles (images, tables, code, blockquotes)
91
+ */
92
+ export declare function buildCommonElementStyles(format?: 'epub' | 'pdf'): string[];
93
+ //# sourceMappingURL=cssBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cssBuilder.d.ts","sourceRoot":"","sources":["../../src/utils/cssBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAIX;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAe3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAW3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,GAAE,MAA8B,GAAG,MAAM,EAAE,CAMvF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAID,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CA0BhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAa9C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAID,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,GAAE,MAAM,GAAG,KAAc,GAChC,MAAM,EAAE,CA2BV;AAID,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAuBnE;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GACpB,MAAM,EAAE,CAaV;AAID;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,MAAM,GAAG,KAAc,GAAG,MAAM,EAAE,CAgBlF"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * CSS Builder Utilities
3
+ * Centralized CSS generation for PDF and EPUB formats
4
+ */
5
+ // ============ Font Stacks ============
6
+ export const FONT_STACKS = {
7
+ serif: '"Noto Serif KR", "Noto Serif CJK KR", "Source Han Serif KR", "Batang", "바탕", "AppleMyungjo", serif',
8
+ sansSerif: '"Noto Sans KR", "Noto Sans CJK KR", "Source Han Sans KR", "Malgun Gothic", "맑은 고딕", "Apple SD Gothic Neo", sans-serif',
9
+ monospace: '"Noto Sans Mono KR", "Noto Sans Mono CJK KR", "D2Coding", "Source Code Pro", monospace',
10
+ };
11
+ // ============ Common CSS Snippets ============
12
+ /**
13
+ * Generate Google Fonts import for PDF
14
+ */
15
+ export function buildFontImport() {
16
+ return `@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;700;900&family=Noto+Serif+KR:wght@300;400;700&display=swap');`;
17
+ }
18
+ /**
19
+ * Generate box-sizing reset
20
+ */
21
+ export function buildBoxSizingReset() {
22
+ return '* { box-sizing: border-box; }';
23
+ }
24
+ /**
25
+ * Generate image styling CSS with responsive sizing for EPUB
26
+ * Uses !important to override inline styles from markdown source
27
+ */
28
+ export function buildImageStyles() {
29
+ return [
30
+ '/* Responsive image styling - override inline styles */',
31
+ // Keep aspect ratio and avoid over-constraining layout (prevents big blank gaps)
32
+ 'img { max-width: 100% !important; max-height: 70vh !important; width: auto !important; height: auto !important; object-fit: contain; display: block; margin: 0.6em auto; }',
33
+ '/* Override fixed-width containers for e-reader compatibility */',
34
+ 'div[style*="width:"], div[style*="width :"] { max-width: 100% !important; width: auto !important; }',
35
+ '/* Image containers should be fluid */',
36
+ 'figure { margin: 0.8em 0; text-align: center; max-width: 100%; }',
37
+ 'figcaption { font-size: 0.9em; color: #666; margin-top: 0.5em; font-style: italic; }',
38
+ '/* Hide iframe embeds that don\'t work in EPUB */',
39
+ 'iframe { display: none !important; }',
40
+ '/* Center images in anchor links */',
41
+ 'a > img { display: block; margin: 0 auto; }'
42
+ ];
43
+ }
44
+ /**
45
+ * Generate table styling CSS
46
+ */
47
+ export function buildTableStyles() {
48
+ return [
49
+ 'table { width: 100%; border-collapse: collapse; margin: 1.2em 0; }',
50
+ 'th, td { border: 1px solid #ddd; padding: 0.5em; text-align: left; }',
51
+ 'th { background-color: #f9f9f9; }',
52
+ '/* Table pagination: allow table to split across pages with repeated header */',
53
+ 'thead { display: table-header-group; }',
54
+ 'tfoot { display: table-footer-group; }',
55
+ 'tr { break-inside: avoid; page-break-inside: avoid; }',
56
+ 'table { break-inside: auto; page-break-inside: auto; }'
57
+ ];
58
+ }
59
+ /**
60
+ * Generate code block styling CSS
61
+ */
62
+ export function buildCodeStyles(monospaceFont = FONT_STACKS.monospace) {
63
+ return [
64
+ `code { font-family: ${monospaceFont}; background-color: #f4f4f4; padding: 0.2em 0.4em; border-radius: 3px; font-size: 0.9em; }`,
65
+ 'pre { background-color: #f4f4f4; padding: 1em; border-radius: 5px; overflow-x: auto; margin: 1.5em 0; }',
66
+ 'pre code { background-color: transparent; padding: 0; font-size: 0.85em; }'
67
+ ];
68
+ }
69
+ /**
70
+ * Generate blockquote styling CSS
71
+ */
72
+ export function buildBlockquoteStyles() {
73
+ return 'blockquote { margin: 1.5em 0; padding: 0.5em 1em; border-left: 4px solid #ddd; color: #666; font-style: italic; }';
74
+ }
75
+ /**
76
+ * Generate @page rules for PDF
77
+ */
78
+ export function buildPdfPageRules(margins) {
79
+ return [
80
+ '/* PDF Page Rules */',
81
+ '@page {',
82
+ ' size: A4;',
83
+ ` margin: ${margins.top} ${margins.right} ${margins.bottom} ${margins.left};`,
84
+ '',
85
+ ' @bottom-center {',
86
+ ' content: counter(page);',
87
+ ' font-size: 10pt;',
88
+ ' color: #666;',
89
+ ' }',
90
+ '}',
91
+ '',
92
+ '/* Cover page: no margins, no page number */',
93
+ '@page :first {',
94
+ ' margin: 0;',
95
+ ' @top-center { content: none; }',
96
+ ' @bottom-center { content: none; }',
97
+ '}',
98
+ '',
99
+ '/* Blank pages: no page number */',
100
+ '@page :blank {',
101
+ ' @bottom-center { content: none; }',
102
+ '}'
103
+ ];
104
+ }
105
+ /**
106
+ * Generate PDF-specific body styles
107
+ */
108
+ export function buildPdfBodyExtras() {
109
+ return [
110
+ 'word-break: keep-all;',
111
+ 'overflow-wrap: break-word;',
112
+ 'orphans: 3;',
113
+ 'widows: 3;'
114
+ ];
115
+ }
116
+ /**
117
+ * Generate PDF break-inside rules
118
+ */
119
+ export function buildPdfBreakRules() {
120
+ // Avoid breaking inside blockquotes/pre, but allow tables/images to flow across pages to prevent large blank gaps
121
+ return 'blockquote, pre { break-inside: avoid; }';
122
+ }
123
+ /**
124
+ * Generate PDF-specific image styling for proper page layout
125
+ */
126
+ export function buildPdfImageStyles() {
127
+ return [
128
+ '/* PDF-specific image constraints */',
129
+ // Allow images to be placed naturally with text; constrain height to avoid overflow
130
+ 'img { max-height: 70vh !important; object-fit: contain; }',
131
+ '/* Ensure images don\'t overflow page width with margins */',
132
+ 'img { max-width: calc(100% - 2em) !important; }',
133
+ '/* Image containers should be fluid */',
134
+ 'figure { max-width: 100%; }',
135
+ '/* Add spacing before/after images for better layout */',
136
+ 'p + figure, p + img { margin-top: 0.8em; }',
137
+ 'figure + p, img + p { margin-top: 0.8em; }'
138
+ ];
139
+ }
140
+ /**
141
+ * Hide Pandoc title block for PDF
142
+ */
143
+ export function buildPdfTitleBlockHide() {
144
+ return '#title-block-header { display: none; }';
145
+ }
146
+ /**
147
+ * Generate heading CSS for all levels
148
+ */
149
+ export function buildHeadingStyles(scale, format = 'epub') {
150
+ const css = [];
151
+ for (const [level, size] of Object.entries(scale)) {
152
+ css.push(`${level} {`);
153
+ css.push(` font-size: ${size}em;`);
154
+ css.push(' margin-top: 1.5em;');
155
+ css.push(' margin-bottom: 0.5em;');
156
+ css.push(' font-weight: bold;');
157
+ css.push(' line-height: 1.2;');
158
+ css.push(' color: #1a1a1a;');
159
+ if (format === 'pdf') {
160
+ if (level === 'h1') {
161
+ css.push(' break-before: page;');
162
+ }
163
+ if (level === 'h1' || level === 'h2' || level === 'h3') {
164
+ css.push(' page-break-after: avoid;');
165
+ css.push(' break-after: avoid;');
166
+ }
167
+ }
168
+ css.push('}');
169
+ css.push('');
170
+ }
171
+ return css;
172
+ }
173
+ /**
174
+ * Generate body CSS
175
+ */
176
+ export function buildBodyStyles(options) {
177
+ const css = [
178
+ 'body {',
179
+ ` font-family: ${options.fontFamily};`,
180
+ ` font-size: ${options.fontSize};`,
181
+ ` line-height: ${options.lineHeight};`,
182
+ ` text-align: ${options.justification};`,
183
+ ' color: #333;',
184
+ ' margin: 0;'
185
+ ];
186
+ if (options.format === 'pdf') {
187
+ css.push(...buildPdfBodyExtras().map(s => ' ' + s));
188
+ }
189
+ if (options.hyphenation) {
190
+ css.push(' hyphens: auto;');
191
+ css.push(' -webkit-hyphens: auto;');
192
+ css.push(' -ms-hyphens: auto;');
193
+ }
194
+ css.push('}');
195
+ return css;
196
+ }
197
+ // ============ Paragraph Styles ============
198
+ /**
199
+ * Generate paragraph CSS
200
+ */
201
+ export function buildParagraphStyles(spacing, textIndent) {
202
+ const css = [
203
+ 'p {',
204
+ ' margin-top: 0;',
205
+ ` margin-bottom: ${spacing};`
206
+ ];
207
+ if (textIndent) {
208
+ css.push(` text-indent: ${textIndent};`);
209
+ }
210
+ css.push('}');
211
+ return css;
212
+ }
213
+ // ============ Composite Builders ============
214
+ /**
215
+ * Build common element styles (images, tables, code, blockquotes)
216
+ */
217
+ export function buildCommonElementStyles(format = 'epub') {
218
+ const css = [
219
+ '',
220
+ '/* Common Element Styles */',
221
+ ...buildImageStyles(),
222
+ buildBlockquoteStyles(),
223
+ ];
224
+ if (format === 'pdf') {
225
+ css.push(buildPdfBreakRules());
226
+ }
227
+ css.push(...buildCodeStyles());
228
+ css.push(...buildTableStyles());
229
+ return css;
230
+ }
231
+ //# sourceMappingURL=cssBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cssBuilder.js","sourceRoot":"","sources":["../../src/utils/cssBuilder.ts"],"names":[],"mappings":"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"}