postext-epub 0.49.6 → 0.49.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.
- package/dist/reflowable/css/apparatus.d.ts +17 -0
- package/dist/reflowable/css/apparatus.d.ts.map +1 -0
- package/dist/reflowable/css/apparatus.js +127 -0
- package/dist/reflowable/css/apparatus.js.map +1 -0
- package/dist/reflowable/css/boxes.d.ts +20 -0
- package/dist/reflowable/css/boxes.d.ts.map +1 -0
- package/dist/reflowable/css/boxes.js +134 -0
- package/dist/reflowable/css/boxes.js.map +1 -0
- package/dist/reflowable/css/figures.d.ts +16 -0
- package/dist/reflowable/css/figures.d.ts.map +1 -0
- package/dist/reflowable/css/figures.js +174 -0
- package/dist/reflowable/css/figures.js.map +1 -0
- package/dist/reflowable/css/helpers.d.ts +32 -0
- package/dist/reflowable/css/helpers.d.ts.map +1 -0
- package/dist/reflowable/css/helpers.js +77 -0
- package/dist/reflowable/css/helpers.js.map +1 -0
- package/dist/reflowable/css/text.d.ts +19 -0
- package/dist/reflowable/css/text.d.ts.map +1 -0
- package/dist/reflowable/css/text.js +151 -0
- package/dist/reflowable/css/text.js.map +1 -0
- package/dist/reflowable/css/types.d.ts +46 -0
- package/dist/reflowable/css/types.d.ts.map +1 -0
- package/dist/reflowable/css/types.js +4 -0
- package/dist/reflowable/css/types.js.map +1 -0
- package/dist/reflowable/css/verse.d.ts +18 -0
- package/dist/reflowable/css/verse.d.ts.map +1 -0
- package/dist/reflowable/css/verse.js +126 -0
- package/dist/reflowable/css/verse.js.map +1 -0
- package/dist/reflowable/css.d.ts +4 -52
- package/dist/reflowable/css.d.ts.map +1 -1
- package/dist/reflowable/css.js +24 -736
- package/dist/reflowable/css.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// What the stylesheet of a reflowable book is written with: the Japanese
|
|
2
|
+
// line breaks, emphasis marks, family stacks, alignments and a rule from its
|
|
3
|
+
// declarations (#1276: split out of css.ts).
|
|
4
|
+
import { featureFamilyParts, primaryFontFamily } from 'postext';
|
|
5
|
+
import { cssString } from '../../shared/assets.js';
|
|
6
|
+
/** CSS `line-break` for a Japanese kinsoku level (`cjk.lineBreak`, #417):
|
|
7
|
+
* JLReq's strictest rules are CSS `strict` (no small kana, ー or 々 at a
|
|
8
|
+
* line start), the general books' rules CSS `normal` (they may), the
|
|
9
|
+
* newspapers' CSS `loose`. Chinese levels write none, as before. */
|
|
10
|
+
const LINE_BREAK = { 'ja-very-strict': 'strict', 'ja-strict': 'normal', 'ja-loose': 'loose' };
|
|
11
|
+
/** The declarations of the Japanese text of a book (#428): kinsoku and,
|
|
12
|
+
* with burasagari (`cjk.hangingPunctuation`, on by default in Japan),
|
|
13
|
+
* 、。,. hanging past the line end; and, in any book that asks for it,
|
|
14
|
+
* lines broken only between phrases (`cjk.wordBreak: 'keep-all'`, #463).
|
|
15
|
+
* None for other books. */
|
|
16
|
+
export function japaneseDecls(cjk) {
|
|
17
|
+
const out = [];
|
|
18
|
+
if (cjk.wordBreak === 'keep-all')
|
|
19
|
+
out.push('word-break: keep-all');
|
|
20
|
+
const lineBreak = LINE_BREAK[cjk.lineBreak];
|
|
21
|
+
if (lineBreak)
|
|
22
|
+
out.push(`line-break: ${lineBreak}`, `-epub-line-break: ${lineBreak}`, `-webkit-line-break: ${lineBreak}`);
|
|
23
|
+
if (cjk.region === 'japan' && cjk.hangingPunctuation !== 'none') {
|
|
24
|
+
out.push(`hanging-punctuation: ${cjk.hangingPunctuation === 'force' ? 'force-end' : 'allow-end'}`);
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
/** The emphasis-mark rule of a class `dotsClasses` gives: a shape and fill
|
|
29
|
+
* (`pt-dots-filled-sesame`), or a side (`pt-dots-over`: over horizontal
|
|
30
|
+
* text and right of vertical text; `pt-dots-under`: under and left). */
|
|
31
|
+
export function dotsRule(cls) {
|
|
32
|
+
const side = /^pt-dots-(over|under)$/.exec(cls);
|
|
33
|
+
if (side) {
|
|
34
|
+
const pos = side[1] === 'over' ? 'over right' : 'under left';
|
|
35
|
+
return rule(`.pt-dots.${cls}`, [`text-emphasis-position: ${pos}`, `-webkit-text-emphasis-position: ${pos}`]);
|
|
36
|
+
}
|
|
37
|
+
const shape = /^pt-dots-(filled|open)-(dot|circle|sesame)$/.exec(cls);
|
|
38
|
+
if (!shape)
|
|
39
|
+
return '';
|
|
40
|
+
const style = `${shape[1]} ${shape[2]}`;
|
|
41
|
+
return rule(`.pt-dots.${cls}`, [`text-emphasis-style: ${style}`, `-epub-text-emphasis-style: ${style}`, `-webkit-text-emphasis-style: ${style}`]);
|
|
42
|
+
}
|
|
43
|
+
const SANS = /\b(sans|grotesk|grotesque|gothic|helvetica|arial|inter|roboto|lato|montserrat|open sans|source sans|fira sans|heiti|hei\b|黑)/i;
|
|
44
|
+
const MONO = /\b(mono|code|courier|consol)/i;
|
|
45
|
+
/** A family as a CSS value: the family quoted, then a generic fallback. A
|
|
46
|
+
* feature family (#1237, `Lora@onum`) is its base family's. */
|
|
47
|
+
export function familyStack(family) {
|
|
48
|
+
const name = familyName(family);
|
|
49
|
+
const generic = MONO.test(name) ? 'monospace' : SANS.test(name) ? 'sans-serif' : 'serif';
|
|
50
|
+
return `${cssString(name)}, ${generic}`;
|
|
51
|
+
}
|
|
52
|
+
/** The family names the stylesheet asks for (to warn about missing
|
|
53
|
+
* faces). */
|
|
54
|
+
export function familyName(family) {
|
|
55
|
+
return featureFamilyParts(primaryFontFamily(family).trim().replace(/^['"]|['"]$/g, '')).family;
|
|
56
|
+
}
|
|
57
|
+
/** Whether a configuration sets any style's figures (#1237): a family of
|
|
58
|
+
* it is a feature family. */
|
|
59
|
+
export function setsFigures(config) {
|
|
60
|
+
return /"[^"]*@(?:onum|lnum|pnum|tnum)(?:\+(?:onum|lnum|pnum|tnum))*"/.test(JSON.stringify(config));
|
|
61
|
+
}
|
|
62
|
+
export const ALIGN = { left: 'start', right: 'end', center: 'center', justify: 'justify' };
|
|
63
|
+
/** Beside every `letter-spacing` (#703): letter-spacing never changes the
|
|
64
|
+
* glyphs. A reading system turns the common ligatures off where the
|
|
65
|
+
* letter-spacing is not zero; asked for as features they stay, as in the
|
|
66
|
+
* print layout, the fixed-layout pages and the PDF. */
|
|
67
|
+
export const TRACKED_LIGATURES = "font-feature-settings: 'liga' 1, 'clig' 1";
|
|
68
|
+
/** A rule from its declarations (the falsy ones left out); none when it
|
|
69
|
+
* declares nothing. */
|
|
70
|
+
export function rule(selector, decls) {
|
|
71
|
+
const body = decls.filter((d) => typeof d === 'string' && d.length > 0);
|
|
72
|
+
return body.length > 0 ? { selector, decls: body } : '';
|
|
73
|
+
}
|
|
74
|
+
export function ruleText(r) {
|
|
75
|
+
return `${r.selector} {\n${r.decls.map((d) => ` ${d};`).join('\n')}\n}\n`;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/reflowable/css/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ResolvedConfig, type Dimension, type ColorValue, type ResolvedBodyTextConfig } from 'postext';
|
|
2
|
+
import type { StylesheetOptions, CssRule } from './types.js';
|
|
3
|
+
/** What createTextRules takes from bookStylesheet. */
|
|
4
|
+
export interface TextRulesDeps {
|
|
5
|
+
config: ResolvedConfig;
|
|
6
|
+
options: StylesheetOptions;
|
|
7
|
+
dpi: number;
|
|
8
|
+
body: ResolvedBodyTextConfig;
|
|
9
|
+
bodyPx: number;
|
|
10
|
+
fam: (f: string) => string;
|
|
11
|
+
em: (d: Dimension, basePx?: number) => string;
|
|
12
|
+
lh: (d: Dimension, fontPx: number) => string;
|
|
13
|
+
color: (c: ColorValue | undefined, prop?: string) => string | undefined;
|
|
14
|
+
px: (d: Dimension, basePx?: number) => number;
|
|
15
|
+
spacingEm: (spacing: boolean | Dimension | undefined, lineHeight: Dimension, basePx?: number) => number;
|
|
16
|
+
out: (string | CssRule)[];
|
|
17
|
+
}
|
|
18
|
+
export declare function createTextRules(deps: TextRulesDeps): {};
|
|
19
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/reflowable/css/text.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC3H,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE7D,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACxG,GAAG,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,MAkJlD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// The book stylesheet's rules for the body text, the headings, quotations and
|
|
2
|
+
// lists (#1276: split out of css.ts).
|
|
3
|
+
import { rule, ALIGN, japaneseDecls, TRACKED_LIGATURES } from './helpers.js';
|
|
4
|
+
import { round, idOf } from '../inline.js';
|
|
5
|
+
import { dimensionToPx } from 'postext';
|
|
6
|
+
export function createTextRules(deps) {
|
|
7
|
+
const { config, options, dpi, body, bodyPx, fam, em, lh, color, px, spacingEm, out } = deps;
|
|
8
|
+
// --- body text -----------------------------------------------------------
|
|
9
|
+
const hyphens = body.hyphenation.enabled;
|
|
10
|
+
if (options.vertical) {
|
|
11
|
+
out.push(rule('html', ['writing-mode: vertical-rl', '-epub-writing-mode: vertical-rl', '-webkit-writing-mode: vertical-rl']));
|
|
12
|
+
}
|
|
13
|
+
out.push(rule('body', [
|
|
14
|
+
fam(body.fontFamily),
|
|
15
|
+
lh(body.lineHeight, bodyPx),
|
|
16
|
+
color(body.color),
|
|
17
|
+
`text-align: ${ALIGN[body.textAlign] ?? 'start'}`,
|
|
18
|
+
hyphens && 'hyphens: auto',
|
|
19
|
+
hyphens && '-epub-hyphens: auto',
|
|
20
|
+
hyphens && '-webkit-hyphens: auto',
|
|
21
|
+
body.fontWeight !== 400 && `font-weight: ${body.fontWeight}`,
|
|
22
|
+
// CSS names the two rules the other way round (#717): `orphans` is
|
|
23
|
+
// the lines a paragraph keeps at the foot of a page (the engine's
|
|
24
|
+
// `avoidWidows`), `widows` the lines at the head of the next (its
|
|
25
|
+
// `avoidOrphans`). A rule that is off writes 1: the initial value of
|
|
26
|
+
// both properties is 2, so leaving one out would keep the rule.
|
|
27
|
+
`orphans: ${body.avoidWidows ? Math.max(1, body.widowMinLines) : 1}`,
|
|
28
|
+
`widows: ${body.avoidOrphans ? Math.max(1, body.orphanMinLines) : 1}`,
|
|
29
|
+
'margin: 0',
|
|
30
|
+
'padding: 0 1em',
|
|
31
|
+
...japaneseDecls(config.cjk),
|
|
32
|
+
]));
|
|
33
|
+
const indent = px(body.firstLineIndent);
|
|
34
|
+
const ratio = round(dimensionToPx(body.lineHeight, dpi, bodyPx) / bodyPx);
|
|
35
|
+
const spacing = spacingEm(body.paragraphSpacing, body.lineHeight);
|
|
36
|
+
out.push(rule('p', [
|
|
37
|
+
'margin: 0',
|
|
38
|
+
spacing === 0 && indent > 0 && `text-indent: ${round(indent / bodyPx)}em`,
|
|
39
|
+
spacing > 0 && `margin-block-end: ${spacing}em`,
|
|
40
|
+
]));
|
|
41
|
+
if (spacing === 0 && indent > 0) {
|
|
42
|
+
// The first paragraph after a heading, a list, a figure… is not
|
|
43
|
+
// indented (unless the book indents after headings).
|
|
44
|
+
const after = ['ul', 'ol', 'blockquote', 'figure', 'div', 'aside', 'nav', 'section > p:first-child'];
|
|
45
|
+
if (!body.indentAfterHeading)
|
|
46
|
+
after.unshift('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
|
|
47
|
+
out.push(rule(after.map((s) => (s.includes(' ') ? s : `${s} + p`)).join(', '), ['text-indent: 0']));
|
|
48
|
+
}
|
|
49
|
+
out.push(rule('strong, b', [`font-weight: ${body.boldFontWeight}`, color(body.boldColor)]));
|
|
50
|
+
out.push(rule('em, i', [color(body.italicColor)]));
|
|
51
|
+
out.push(rule('a', ['color: inherit', 'text-decoration: underline']));
|
|
52
|
+
out.push(rule('a.pt-ref', [
|
|
53
|
+
color(body.referenceColor),
|
|
54
|
+
'text-decoration: none',
|
|
55
|
+
body.referenceBold && `font-weight: ${body.boldFontWeight}`,
|
|
56
|
+
body.referenceItalic && 'font-style: italic',
|
|
57
|
+
]));
|
|
58
|
+
out.push(rule('a.pt-pageref', ['text-decoration: none']));
|
|
59
|
+
out.push(rule('sup, sub', ['line-height: 0', 'font-size: 0.7em']));
|
|
60
|
+
// --- headings ------------------------------------------------------------
|
|
61
|
+
const headings = config.headings;
|
|
62
|
+
/** The body's line pitch, px: a 行取り heading (`lineSpan`, #424) takes
|
|
63
|
+
* whole numbers of it. */
|
|
64
|
+
const bodyLinePx = body.lineHeight.unit === 'em' || body.lineHeight.unit === 'rem'
|
|
65
|
+
? body.lineHeight.value * bodyPx
|
|
66
|
+
: px(body.lineHeight);
|
|
67
|
+
for (const level of headings.levels) {
|
|
68
|
+
if (level.level < 1 || level.level > 6)
|
|
69
|
+
continue;
|
|
70
|
+
const hPx = px(level.fontSize);
|
|
71
|
+
// 行取り: the heading's line centred in N body lines, its margins the
|
|
72
|
+
// rest of them (a reflowable book has no grid to keep).
|
|
73
|
+
const lineSpanMargin = level.lineSpan !== undefined
|
|
74
|
+
? Math.max(0, (level.lineSpan * bodyLinePx - (level.lineHeight.unit === 'em' || level.lineHeight.unit === 'rem' ? level.lineHeight.value * hPx : px(level.lineHeight, hPx))) / 2)
|
|
75
|
+
: undefined;
|
|
76
|
+
out.push(rule(`h${level.level}`, [
|
|
77
|
+
fam(level.fontFamily || headings.fontFamily),
|
|
78
|
+
`font-size: ${round(hPx / bodyPx)}em`,
|
|
79
|
+
lh(level.lineHeight, hPx),
|
|
80
|
+
`font-weight: ${level.fontWeight}`,
|
|
81
|
+
`font-style: ${level.italic ? 'italic' : 'normal'}`,
|
|
82
|
+
color(level.color),
|
|
83
|
+
`text-align: ${ALIGN[headings.textAlign] ?? 'start'}`,
|
|
84
|
+
level.letterSpacing.value !== 0 && `letter-spacing: ${em(level.letterSpacing, hPx)}`,
|
|
85
|
+
level.letterSpacing.value !== 0 && TRACKED_LIGATURES,
|
|
86
|
+
level.textTransform === 'uppercase' && 'text-transform: uppercase',
|
|
87
|
+
lineSpanMargin !== undefined
|
|
88
|
+
? `margin: ${round(lineSpanMargin / hPx)}em 0`
|
|
89
|
+
: `margin: ${round(px(level.marginTop, hPx) / hPx)}em 0 ${round(px(level.marginBottom, hPx) / hPx)}em`,
|
|
90
|
+
// 字下げ: the indent counts body characters.
|
|
91
|
+
level.indent && px(level.indent) > 0 && `margin-inline-start: ${round(px(level.indent) / hPx)}em`,
|
|
92
|
+
'hyphens: manual',
|
|
93
|
+
'-epub-hyphens: manual',
|
|
94
|
+
'page-break-after: avoid',
|
|
95
|
+
'break-after: avoid',
|
|
96
|
+
]));
|
|
97
|
+
}
|
|
98
|
+
for (const style of config.headingStyles) {
|
|
99
|
+
const o = style.overrides;
|
|
100
|
+
const sPx = o.fontSize ? px(o.fontSize) : undefined;
|
|
101
|
+
out.push(rule(`.${idOf('hs-', style.id)}`, [
|
|
102
|
+
o.fontFamily && fam(o.fontFamily),
|
|
103
|
+
sPx !== undefined && `font-size: ${round(sPx / bodyPx)}em`,
|
|
104
|
+
o.fontWeight !== undefined && `font-weight: ${o.fontWeight}`,
|
|
105
|
+
o.italic !== undefined && `font-style: ${o.italic ? 'italic' : 'normal'}`,
|
|
106
|
+
o.color && color(o.color),
|
|
107
|
+
o.textTransform && `text-transform: ${o.textTransform === 'uppercase' ? 'uppercase' : 'none'}`,
|
|
108
|
+
]));
|
|
109
|
+
}
|
|
110
|
+
out.push(rule('.pt-part-title', ['text-align: center', 'margin-block-start: 3em']));
|
|
111
|
+
out.push(rule('.pt-part-number', ['display: block', 'font-size: 0.6em', 'margin-block-end: 0.5em']));
|
|
112
|
+
out.push(rule('.pt-hidden', [
|
|
113
|
+
'position: absolute',
|
|
114
|
+
'width: 1px',
|
|
115
|
+
'height: 1px',
|
|
116
|
+
'overflow: hidden',
|
|
117
|
+
'clip: rect(0 0 0 0)',
|
|
118
|
+
'white-space: nowrap',
|
|
119
|
+
]));
|
|
120
|
+
// --- quotations, lists ---------------------------------------------------
|
|
121
|
+
const bq = body.blockquote;
|
|
122
|
+
out.push(rule('blockquote', [
|
|
123
|
+
`margin: ${ratio / 2}em 0`,
|
|
124
|
+
`margin-inline-start: ${em(bq.indent)}`,
|
|
125
|
+
color(bq.color),
|
|
126
|
+
bq.italic && 'font-style: italic',
|
|
127
|
+
]));
|
|
128
|
+
if (bq.italic)
|
|
129
|
+
out.push(rule('blockquote em', ['font-style: normal']));
|
|
130
|
+
const ul = config.unorderedLists;
|
|
131
|
+
const ol = config.orderedLists;
|
|
132
|
+
out.push(rule('ul, ol', [
|
|
133
|
+
'list-style: none',
|
|
134
|
+
`margin: ${em(ol.marginTop)} 0 ${em(ol.marginBottom)}`,
|
|
135
|
+
'padding-inline-start: 1.6em',
|
|
136
|
+
'text-indent: 0',
|
|
137
|
+
]));
|
|
138
|
+
out.push(rule('li', [ol.itemSpacing.value > 0 && `margin-block-start: ${em(ol.itemSpacing)}`]));
|
|
139
|
+
out.push(rule('li li', ['margin-block-start: 0']));
|
|
140
|
+
out.push(rule('li > .pt-lbl:first-child', [
|
|
141
|
+
'display: inline-block',
|
|
142
|
+
'min-width: 1.6em',
|
|
143
|
+
'margin-inline-start: -1.6em',
|
|
144
|
+
'text-indent: 0',
|
|
145
|
+
]));
|
|
146
|
+
out.push(rule('ul > li > .pt-lbl:first-child', [color(ul.color), ul.fontWeight !== body.fontWeight && `font-weight: ${ul.fontWeight}`]));
|
|
147
|
+
out.push(rule('ol > li > .pt-lbl:first-child', [color(ol.color), ol.fontWeight !== body.fontWeight && `font-weight: ${ol.fontWeight}`]));
|
|
148
|
+
out.push(rule('.pt-done', ['text-decoration: line-through']));
|
|
149
|
+
return {};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/reflowable/css/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** What the walk found that decides the writing mode of the book. */
|
|
2
|
+
export interface StylesheetOptions {
|
|
3
|
+
/** Vertical Chinese / Japanese (`layout.writingMode: 'vertical-rl'`). */
|
|
4
|
+
vertical: boolean;
|
|
5
|
+
/** The book sets a `:::verse` poem (its rules are written only then). */
|
|
6
|
+
verse?: boolean;
|
|
7
|
+
/** The book sets a poem line by line (#620): the stanza rules. */
|
|
8
|
+
stanzas?: boolean;
|
|
9
|
+
/** Lines of verse carry their numbers (#621): the margin they stand in. */
|
|
10
|
+
lineNumbers?: boolean;
|
|
11
|
+
/** A line holds a tab at its stop (#622): the tab rows. */
|
|
12
|
+
tabs?: boolean;
|
|
13
|
+
/** The book sets a code listing (#624): the listing's box and lines. */
|
|
14
|
+
code?: boolean;
|
|
15
|
+
/** The drop caps the paragraphs open with (#623), as `lines-sink`. */
|
|
16
|
+
dropCaps?: readonly string[];
|
|
17
|
+
/** A figure or a box text wraps round (#627): the float rules. */
|
|
18
|
+
wraps?: boolean;
|
|
19
|
+
/** A picture carries its labels drawn over it (#955): the box and the
|
|
20
|
+
* layer they are drawn in. */
|
|
21
|
+
labelLayers?: boolean;
|
|
22
|
+
/** Classes of emphasis marks the text uses beyond `pt-dots` (the
|
|
23
|
+
* filled dot on the default side): their rules are written only then
|
|
24
|
+
* (`inline.ts` `dotsClasses`, #428). */
|
|
25
|
+
dots?: readonly string[];
|
|
26
|
+
/** The book sets composed pages (#862): the frame rules, and the
|
|
27
|
+
* callout styles their frames are set in (their boxes are styled on a
|
|
28
|
+
* frame's block too). */
|
|
29
|
+
composed?: {
|
|
30
|
+
frameStyles: readonly string[];
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** A rule of the stylesheet: its selector and declarations
|
|
34
|
+
* (`property: value`). */
|
|
35
|
+
export interface CssRule {
|
|
36
|
+
selector: string;
|
|
37
|
+
decls: string[];
|
|
38
|
+
}
|
|
39
|
+
/** The book's stylesheet: its text, the families it names, and its rules
|
|
40
|
+
* (at-rules aside), which {@link stylesheetOverrides} compares. */
|
|
41
|
+
export interface Stylesheet {
|
|
42
|
+
css: string;
|
|
43
|
+
families: Set<string>;
|
|
44
|
+
rules: CssRule[];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/reflowable/css/types.ts"],"names":[],"mappings":"AAIA,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;mCAC+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;6CAEyC;IACzC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB;;8BAE0B;IAC1B,QAAQ,CAAC,EAAE;QAAE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/C;AAED;2BAC2B;AAC3B,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;oEACoE;AACpE,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/reflowable/css/types.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kDAAkD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Dimension, type ResolvedConfig, type ColorValue, type ResolvedBodyTextConfig } from 'postext';
|
|
2
|
+
import type { StylesheetOptions, CssRule } from './types.js';
|
|
3
|
+
/** What createVerseRules takes from bookStylesheet. */
|
|
4
|
+
export interface VerseRulesDeps {
|
|
5
|
+
config: ResolvedConfig;
|
|
6
|
+
options: StylesheetOptions;
|
|
7
|
+
dpi: number;
|
|
8
|
+
body: ResolvedBodyTextConfig;
|
|
9
|
+
bodyPx: number;
|
|
10
|
+
fam: (f: string) => string;
|
|
11
|
+
em: (d: Dimension, basePx?: number) => string;
|
|
12
|
+
lh: (d: Dimension, fontPx: number) => string;
|
|
13
|
+
color: (c: ColorValue | undefined, prop?: string) => string | undefined;
|
|
14
|
+
px: (d: Dimension, basePx?: number) => number;
|
|
15
|
+
out: (string | CssRule)[];
|
|
16
|
+
}
|
|
17
|
+
export declare function createVerseRules(deps: VerseRulesDeps): {};
|
|
18
|
+
//# sourceMappingURL=verse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verse.d.ts","sourceRoot":"","sources":["../../../src/reflowable/css/verse.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoC,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE9I,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE7D,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,GAAG,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,MAyHpD"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// The book stylesheet's rules for classical verse, stanzas, line numbers,
|
|
2
|
+
// tab stops, code listings, drop caps and text wrap (#1276: split out of
|
|
3
|
+
// css.ts).
|
|
4
|
+
import { rule } from './helpers.js';
|
|
5
|
+
import { resolvedCodeStyle, dimensionToPx } from 'postext';
|
|
6
|
+
import { round } from '../inline.js';
|
|
7
|
+
export function createVerseRules(deps) {
|
|
8
|
+
const { config, options, dpi, body, bodyPx, fam, em, lh, color, px, out } = deps;
|
|
9
|
+
// --- classical verse -----------------------------------------------------
|
|
10
|
+
// A bayt is a row of two equal hemistich columns (and the ornament's,
|
|
11
|
+
// empty without one): the ṣadr from the start side, the ʿajuz flush
|
|
12
|
+
// with the end side, so the rhymes stand in one column as in print. On
|
|
13
|
+
// a narrow screen the two halves stagger, the ʿajuz on its own line
|
|
14
|
+
// flush with the end, as the print does when they do not fit.
|
|
15
|
+
// A stanza set line by line (#620): its lines of verse, a blank line
|
|
16
|
+
// between stanzas, never hyphenated; each line's hang is on its own
|
|
17
|
+
// element.
|
|
18
|
+
if (options.stanzas) {
|
|
19
|
+
out.push(rule('.pt-stanza', ['margin: 0 0 1em', 'text-indent: 0', 'text-align: start', 'hyphens: manual']));
|
|
20
|
+
out.push(rule('.pt-verse-line', ['display: block']));
|
|
21
|
+
}
|
|
22
|
+
// Line numbers (#621): a poem's every Nth line carries its number in a
|
|
23
|
+
// margin on the start side of the stanza, out of the reading order.
|
|
24
|
+
if (options.stanzas && options.lineNumbers) {
|
|
25
|
+
out.push(rule('.pt-stanza', ['padding-left: 3em']));
|
|
26
|
+
out.push(rule('.pt-verse-line', ['position: relative']));
|
|
27
|
+
out.push(rule('.pt-line-number', [
|
|
28
|
+
'position: absolute', 'right: 100%', 'margin-right: 0.8em', 'text-indent: 0', 'font-size: 0.8em',
|
|
29
|
+
'white-space: nowrap', '-webkit-user-select: none', 'user-select: none',
|
|
30
|
+
]));
|
|
31
|
+
out.push(rule('[dir="rtl"] .pt-stanza, .pt-stanza[dir="rtl"]', ['padding-left: 0', 'padding-right: 3em']));
|
|
32
|
+
out.push(rule('[dir="rtl"] .pt-line-number, .pt-stanza[dir="rtl"] .pt-line-number', ['right: auto', 'left: 100%', 'margin-right: 0', 'margin-left: 0.8em']));
|
|
33
|
+
}
|
|
34
|
+
// Tab stops (#622): a line holding tabs is a row of its parts; a filler
|
|
35
|
+
// (with its leader as a border on the baseline) pushes the part after it
|
|
36
|
+
// to the row's end, a start stop's part keeps its printed width.
|
|
37
|
+
if (options.tabs) {
|
|
38
|
+
out.push(rule('.pt-tab-row', ['display: flex', 'align-items: baseline', 'text-indent: 0']));
|
|
39
|
+
out.push(rule('.pt-tab-part', ['flex: 0 1 auto']));
|
|
40
|
+
out.push(rule('.pt-tab-rest', ['flex: 1 1 0']));
|
|
41
|
+
out.push(rule('.pt-tab-fill', ['flex: 1 1 auto', 'min-width: 1em', 'margin: 0 0.5em']));
|
|
42
|
+
out.push(rule('.pt-tab-gap', ['flex: 0 0 0.5em']));
|
|
43
|
+
out.push(rule('.pt-leader-dots', ['border-bottom: 0.12em dotted currentColor']));
|
|
44
|
+
out.push(rule('.pt-leader-rule', ['border-bottom: 0.06em solid currentColor']));
|
|
45
|
+
}
|
|
46
|
+
// Code listings (#624): the box of `codeStyle` around `<pre><code>`, the
|
|
47
|
+
// lines as written in the code face, turned over by the reading system
|
|
48
|
+
// when the screen is narrow (`pre-wrap`); numbers and wrap left out of a
|
|
49
|
+
// selection; the highlighted lines tinted.
|
|
50
|
+
if (options.code) {
|
|
51
|
+
const cs = resolvedCodeStyle(config);
|
|
52
|
+
const codePx = dimensionToPx(cs.fontSize, dpi, bodyPx);
|
|
53
|
+
const bodyLead = body.lineHeight.unit === 'em' || body.lineHeight.unit === 'rem' ? body.lineHeight.value * bodyPx : px(body.lineHeight);
|
|
54
|
+
const codeLead = cs.lineHeight ? lh(cs.lineHeight, codePx) : `line-height: ${round(bodyLead / codePx)}`;
|
|
55
|
+
const len = (d) => em(d, codePx);
|
|
56
|
+
out.push(rule('.pt-code-box', [
|
|
57
|
+
'display: block',
|
|
58
|
+
`margin: ${em(cs.marginTop, codePx)} 0 ${em(cs.marginBottom, codePx)}`,
|
|
59
|
+
`font-size: ${round(codePx / bodyPx)}em`,
|
|
60
|
+
cs.backgroundEnabled && color(cs.background, 'background-color'),
|
|
61
|
+
cs.border.enabled && `border: ${round(px(cs.border.width) / codePx)}em solid ${cs.border.color.hex}`,
|
|
62
|
+
px(cs.borderRadius, codePx) > 0 && `border-radius: ${len(cs.borderRadius)}`,
|
|
63
|
+
`padding: ${len(cs.padding.top)} ${len(cs.padding.right)} ${len(cs.padding.bottom)} ${len(cs.padding.left)}`,
|
|
64
|
+
'text-indent: 0',
|
|
65
|
+
]));
|
|
66
|
+
out.push(rule('.pt-code-title', [fam(cs.titleStyle?.fontFamily ?? cs.fontFamily), 'font-weight: bold', 'margin: 0 0 0.4em', 'text-indent: 0']));
|
|
67
|
+
out.push(rule('pre.pt-code', [
|
|
68
|
+
fam(cs.fontFamily), 'font-size: 1em', codeLead, 'margin: 0', color(cs.color),
|
|
69
|
+
'white-space: pre-wrap', 'overflow-wrap: anywhere', `tab-size: ${cs.tabSize}`, `-moz-tab-size: ${cs.tabSize}`,
|
|
70
|
+
'text-align: left', 'hyphens: none',
|
|
71
|
+
]));
|
|
72
|
+
out.push(rule('pre.pt-code code', ['font: inherit', 'background: none']));
|
|
73
|
+
out.push(rule('.pt-code-num', [color(cs.lineNumberColor), 'margin-right: 1em', '-webkit-user-select: none', 'user-select: none']));
|
|
74
|
+
out.push(rule('mark.pt-code-hl', [color(cs.highlightBackground, 'background-color'), 'color: inherit']));
|
|
75
|
+
}
|
|
76
|
+
// Drop caps (#623): CSS initial letters, `lines` tall, sunk `sink`
|
|
77
|
+
// lines; a reading system without `initial-letter` floats the letter,
|
|
78
|
+
// about as tall, on the start side.
|
|
79
|
+
if (options.dropCaps && options.dropCaps.length > 0) {
|
|
80
|
+
out.push(rule('.pt-has-dropcap', ['text-indent: 0']));
|
|
81
|
+
out.push(rule('.pt-dropcap', ['float: left', 'line-height: 0.85', 'margin: 0.05em 0.08em 0 0', 'text-indent: 0']));
|
|
82
|
+
out.push(rule('[dir="rtl"] .pt-dropcap, p[dir="rtl"] .pt-dropcap', ['float: right', 'margin: 0.05em 0 0 0.08em']));
|
|
83
|
+
for (const shape of options.dropCaps) {
|
|
84
|
+
const [lines, sink] = shape.split('-').map(Number);
|
|
85
|
+
out.push(rule(`.pt-dropcap-${shape}`, [`font-size: ${round(lines * 1.25)}em`]));
|
|
86
|
+
out.push(`@supports (initial-letter: 1) or (-webkit-initial-letter: 1) {\n .pt-dropcap-${shape} { float: none; margin: 0 0.08em 0 0; font-size: 1em; line-height: inherit; -webkit-initial-letter: ${lines} ${sink}; initial-letter: ${lines} ${sink}; }\n}\n`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Text wrap (#627): a figure or a box floated to its side; what cannot
|
|
90
|
+
// run beside it in print (headings, other figures, tables, boxes,
|
|
91
|
+
// formulas, poems) clears it.
|
|
92
|
+
if (options.wraps) {
|
|
93
|
+
out.push(rule('.pt-wrap', ['margin-top: 0', 'margin-bottom: 1em']));
|
|
94
|
+
out.push(rule('.pt-wrap-left', ['float: left', 'clear: left']));
|
|
95
|
+
out.push(rule('.pt-wrap-right', ['float: right', 'clear: right']));
|
|
96
|
+
out.push(rule('.pt-wrap img', ['max-width: 100%', 'height: auto']));
|
|
97
|
+
out.push(rule('h1, h2, h3, h4, h5, h6, figure:not(.pt-wrap), table, aside:not(.pt-wrap), .pt-math-display, .pt-stanza, .pt-verse', ['clear: both']));
|
|
98
|
+
}
|
|
99
|
+
if (options.verse) {
|
|
100
|
+
// The poem as wide as its widest bayt, centred: its hemistichs share
|
|
101
|
+
// one width, as in print, instead of drifting to the screen's edges.
|
|
102
|
+
out.push(rule('.pt-verse', ['width: fit-content', 'max-width: 100%', 'margin: 0.5em auto', 'text-indent: 0']));
|
|
103
|
+
out.push(rule('.pt-bayt', [
|
|
104
|
+
'display: grid',
|
|
105
|
+
'grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr)',
|
|
106
|
+
'column-gap: 1em',
|
|
107
|
+
'margin: 0',
|
|
108
|
+
'text-indent: 0',
|
|
109
|
+
'text-align: start',
|
|
110
|
+
'hyphens: manual',
|
|
111
|
+
'page-break-inside: avoid',
|
|
112
|
+
'break-inside: avoid',
|
|
113
|
+
]));
|
|
114
|
+
out.push(rule('.pt-sadr', ['grid-column: 1', 'text-align: start']));
|
|
115
|
+
out.push(rule('.pt-verse-ornament', ['grid-column: 2', 'text-align: center']));
|
|
116
|
+
out.push(rule('.pt-ajuz', ['grid-column: 3', 'text-align: end']));
|
|
117
|
+
out.push(rule('.pt-bayt-single .pt-sadr', ['grid-column: 1 / -1', 'text-align: center']));
|
|
118
|
+
out.push('@media (max-width: 30em) {\n' +
|
|
119
|
+
' .pt-bayt { display: block; }\n' +
|
|
120
|
+
' .pt-sadr, .pt-ajuz { display: block; }\n' +
|
|
121
|
+
' .pt-verse-ornament { display: none; }\n' +
|
|
122
|
+
'}\n');
|
|
123
|
+
}
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=verse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verse.js","sourceRoot":"","sources":["../../../src/reflowable/css/verse.ts"],"names":[],"mappings":"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"}
|
package/dist/reflowable/css.d.ts
CHANGED
|
@@ -1,55 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
vertical: boolean;
|
|
6
|
-
/** The book sets a `:::verse` poem (its rules are written only then). */
|
|
7
|
-
verse?: boolean;
|
|
8
|
-
/** The book sets a poem line by line (#620): the stanza rules. */
|
|
9
|
-
stanzas?: boolean;
|
|
10
|
-
/** Lines of verse carry their numbers (#621): the margin they stand in. */
|
|
11
|
-
lineNumbers?: boolean;
|
|
12
|
-
/** A line holds a tab at its stop (#622): the tab rows. */
|
|
13
|
-
tabs?: boolean;
|
|
14
|
-
/** The book sets a code listing (#624): the listing's box and lines. */
|
|
15
|
-
code?: boolean;
|
|
16
|
-
/** The drop caps the paragraphs open with (#623), as `lines-sink`. */
|
|
17
|
-
dropCaps?: readonly string[];
|
|
18
|
-
/** A figure or a box text wraps round (#627): the float rules. */
|
|
19
|
-
wraps?: boolean;
|
|
20
|
-
/** A picture carries its labels drawn over it (#955): the box and the
|
|
21
|
-
* layer they are drawn in. */
|
|
22
|
-
labelLayers?: boolean;
|
|
23
|
-
/** Classes of emphasis marks the text uses beyond `pt-dots` (the
|
|
24
|
-
* filled dot on the default side): their rules are written only then
|
|
25
|
-
* (`inline.ts` `dotsClasses`, #428). */
|
|
26
|
-
dots?: readonly string[];
|
|
27
|
-
/** The book sets composed pages (#862): the frame rules, and the
|
|
28
|
-
* callout styles their frames are set in (their boxes are styled on a
|
|
29
|
-
* frame's block too). */
|
|
30
|
-
composed?: {
|
|
31
|
-
frameStyles: readonly string[];
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/** A family as a CSS value: the family quoted, then a generic fallback. A
|
|
35
|
-
* feature family (#1237, `Lora@onum`) is its base family's. */
|
|
36
|
-
export declare function familyStack(family: string): string;
|
|
37
|
-
/** The family names the stylesheet asks for (to warn about missing
|
|
38
|
-
* faces). */
|
|
39
|
-
export declare function familyName(family: string): string;
|
|
40
|
-
/** A rule of the stylesheet: its selector and declarations
|
|
41
|
-
* (`property: value`). */
|
|
42
|
-
export interface CssRule {
|
|
43
|
-
selector: string;
|
|
44
|
-
decls: string[];
|
|
45
|
-
}
|
|
46
|
-
/** The book's stylesheet: its text, the families it names, and its rules
|
|
47
|
-
* (at-rules aside), which {@link stylesheetOverrides} compares. */
|
|
48
|
-
export interface Stylesheet {
|
|
49
|
-
css: string;
|
|
50
|
-
families: Set<string>;
|
|
51
|
-
rules: CssRule[];
|
|
52
|
-
}
|
|
1
|
+
import { type ResolvedConfig } from 'postext';
|
|
2
|
+
import type { StylesheetOptions, Stylesheet, CssRule } from './css/types.js';
|
|
3
|
+
export type { StylesheetOptions, CssRule, Stylesheet } from './css/types.js';
|
|
4
|
+
export { familyStack, familyName } from './css/helpers.js';
|
|
53
5
|
export declare function bookStylesheet(config: ResolvedConfig, fontFaces: string, options: StylesheetOptions): Stylesheet;
|
|
54
6
|
/**
|
|
55
7
|
* What a chapter's stylesheet changes in the book's (`base`): each rule of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/reflowable/css.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/reflowable/css.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAA6G,MAAM,SAAS,CAAC;AAGzJ,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAO7E,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAgEhH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CA2BjG;AAED;;;mEAGmE;AACnE,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,cAAc,CAqB3H"}
|