postext 1.34.0 → 1.35.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.
- package/dist/__tests__/bundle.test.js +33 -1
- package/dist/__tests__/bundle.test.js.map +1 -1
- package/dist/__tests__/codeBlocks.test.js +88 -0
- package/dist/__tests__/codeBlocks.test.js.map +1 -1
- package/dist/__tests__/composed/fixtures/page8.d.ts +20 -0
- package/dist/__tests__/composed/fixtures/page8.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/page8.js +162 -0
- package/dist/__tests__/composed/fixtures/page8.js.map +1 -0
- package/dist/__tests__/composed/fixtures/timeline.d.ts +26 -0
- package/dist/__tests__/composed/fixtures/timeline.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/timeline.js +153 -0
- package/dist/__tests__/composed/fixtures/timeline.js.map +1 -0
- package/dist/__tests__/composed/groups.test.d.ts +2 -0
- package/dist/__tests__/composed/groups.test.d.ts.map +1 -0
- package/dist/__tests__/composed/groups.test.js +361 -0
- package/dist/__tests__/composed/groups.test.js.map +1 -0
- package/dist/__tests__/composed/layout.test.d.ts +2 -0
- package/dist/__tests__/composed/layout.test.d.ts.map +1 -0
- package/dist/__tests__/composed/layout.test.js +387 -0
- package/dist/__tests__/composed/layout.test.js.map +1 -0
- package/dist/__tests__/composed/outsidePrint.test.d.ts +2 -0
- package/dist/__tests__/composed/outsidePrint.test.d.ts.map +1 -0
- package/dist/__tests__/composed/outsidePrint.test.js +116 -0
- package/dist/__tests__/composed/outsidePrint.test.js.map +1 -0
- package/dist/__tests__/composed/slotChecks.test.js +6 -3
- package/dist/__tests__/composed/slotChecks.test.js.map +1 -1
- package/dist/__tests__/composed/spread.test.d.ts +2 -0
- package/dist/__tests__/composed/spread.test.d.ts.map +1 -0
- package/dist/__tests__/composed/spread.test.js +475 -0
- package/dist/__tests__/composed/spread.test.js.map +1 -0
- package/dist/__tests__/composedPaint.test.d.ts +2 -0
- package/dist/__tests__/composedPaint.test.d.ts.map +1 -0
- package/dist/__tests__/composedPaint.test.js +199 -0
- package/dist/__tests__/composedPaint.test.js.map +1 -0
- package/dist/__tests__/defaults/stripRoundTrip.test.js +3 -2
- package/dist/__tests__/defaults/stripRoundTrip.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +25 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/highlightMarks.test.d.ts +2 -0
- package/dist/__tests__/highlightMarks.test.d.ts.map +1 -0
- package/dist/__tests__/highlightMarks.test.js +169 -0
- package/dist/__tests__/highlightMarks.test.js.map +1 -0
- package/dist/__tests__/tocPartLeader.test.d.ts +2 -0
- package/dist/__tests__/tocPartLeader.test.d.ts.map +1 -0
- package/dist/__tests__/tocPartLeader.test.js +133 -0
- package/dist/__tests__/tocPartLeader.test.js.map +1 -0
- package/dist/bundle/api.d.ts +8 -0
- package/dist/bundle/api.d.ts.map +1 -1
- package/dist/bundle/api.js +6 -3
- package/dist/bundle/api.js.map +1 -1
- package/dist/bundle/codec.d.ts +5 -0
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +4 -0
- package/dist/bundle/codec.js.map +1 -1
- package/dist/bundle/index.d.ts +2 -2
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/index.js.map +1 -1
- package/dist/bundle/manifest.d.ts +14 -0
- package/dist/bundle/manifest.d.ts.map +1 -1
- package/dist/bundle/manifest.js +13 -0
- package/dist/bundle/manifest.js.map +1 -1
- package/dist/bundle/types.d.ts +7 -0
- package/dist/bundle/types.d.ts.map +1 -1
- package/dist/canvas-backend/annotations.d.ts +6 -0
- package/dist/canvas-backend/annotations.d.ts.map +1 -1
- package/dist/canvas-backend/annotations.js +39 -0
- package/dist/canvas-backend/annotations.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +6 -1
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/composed.d.ts +19 -0
- package/dist/canvas-backend/composed.d.ts.map +1 -0
- package/dist/canvas-backend/composed.js +68 -0
- package/dist/canvas-backend/composed.js.map +1 -0
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +15 -1
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +4 -1
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/composed/geometry.d.ts +108 -0
- package/dist/composed/geometry.d.ts.map +1 -0
- package/dist/composed/geometry.js +241 -0
- package/dist/composed/geometry.js.map +1 -0
- package/dist/composed/groups.d.ts +95 -0
- package/dist/composed/groups.d.ts.map +1 -0
- package/dist/composed/groups.js +359 -0
- package/dist/composed/groups.js.map +1 -0
- package/dist/composed/labelText.d.ts +15 -0
- package/dist/composed/labelText.d.ts.map +1 -0
- package/dist/composed/labelText.js +16 -0
- package/dist/composed/labelText.js.map +1 -0
- package/dist/composed/paint.d.ts +64 -0
- package/dist/composed/paint.d.ts.map +1 -0
- package/dist/composed/paint.js +128 -0
- package/dist/composed/paint.js.map +1 -0
- package/dist/composed/reflowLog.d.ts +39 -0
- package/dist/composed/reflowLog.d.ts.map +1 -0
- package/dist/composed/reflowLog.js +123 -0
- package/dist/composed/reflowLog.js.map +1 -0
- package/dist/composed/slotChecks.d.ts +7 -2
- package/dist/composed/slotChecks.d.ts.map +1 -1
- package/dist/composed/slotChecks.js +21 -0
- package/dist/composed/slotChecks.js.map +1 -1
- package/dist/composed/spread.d.ts +106 -0
- package/dist/composed/spread.d.ts.map +1 -0
- package/dist/composed/spread.js +178 -0
- package/dist/composed/spread.js.map +1 -0
- package/dist/composed/types.d.ts +1 -44
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/composed/wrap.d.ts +52 -0
- package/dist/composed/wrap.d.ts.map +1 -0
- package/dist/composed/wrap.js +234 -0
- package/dist/composed/wrap.js.map +1 -0
- package/dist/configWarnings.js +1 -1
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/codeStyle.d.ts.map +1 -1
- package/dist/defaults/codeStyle.js +1 -0
- package/dist/defaults/codeStyle.js.map +1 -1
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +4 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/index.d.ts +1 -0
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +9 -0
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/markStyles.d.ts +23 -0
- package/dist/defaults/markStyles.d.ts.map +1 -0
- package/dist/defaults/markStyles.js +80 -0
- package/dist/defaults/markStyles.js.map +1 -0
- package/dist/defaults/shared.d.ts.map +1 -1
- package/dist/defaults/shared.js +12 -0
- package/dist/defaults/shared.js.map +1 -1
- package/dist/design/bidiText.d.ts +4 -1
- package/dist/design/bidiText.d.ts.map +1 -1
- package/dist/design/bidiText.js +5 -2
- package/dist/design/bidiText.js.map +1 -1
- package/dist/design/layout.d.ts +19 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +110 -8
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts +28 -2
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +24 -1
- package/dist/design/placeholders.js.map +1 -1
- package/dist/design/richText.d.ts +2 -0
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js.map +1 -1
- package/dist/highlightMarks.d.ts +33 -0
- package/dist/highlightMarks.d.ts.map +1 -0
- package/dist/highlightMarks.js +209 -0
- package/dist/highlightMarks.js.map +1 -0
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +96 -9
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlAnnotations.d.ts +5 -0
- package/dist/htmlAnnotations.d.ts.map +1 -1
- package/dist/htmlAnnotations.js +16 -0
- package/dist/htmlAnnotations.js.map +1 -1
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +3 -0
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +3 -2
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/measure/cache.js +3 -3
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/chipEdges.d.ts +13 -1
- package/dist/measure/chipEdges.d.ts.map +1 -1
- package/dist/measure/chipEdges.js +59 -1
- package/dist/measure/chipEdges.js.map +1 -1
- package/dist/measure/links.d.ts.map +1 -1
- package/dist/measure/links.js +78 -5
- package/dist/measure/links.js.map +1 -1
- package/dist/measure/rich.d.ts +3 -0
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +19 -4
- package/dist/measure/rich.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +14 -0
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +104 -5
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/links.js +1 -1
- package/dist/parse/links.js.map +1 -1
- package/dist/parse/softBreaks.js +1 -1
- package/dist/parse/softBreaks.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +19 -3
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +24 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +213 -301
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +4 -1
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +19 -1
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +36 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +93 -3
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/codeInline.d.ts +10 -1
- package/dist/pipeline/codeInline.d.ts.map +1 -1
- package/dist/pipeline/codeInline.js +96 -15
- package/dist/pipeline/codeInline.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts +93 -0
- package/dist/pipeline/composedLayout.d.ts.map +1 -0
- package/dist/pipeline/composedLayout.js +520 -0
- package/dist/pipeline/composedLayout.js.map +1 -0
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +2 -1
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +39 -2
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatSlots.js +1 -1
- package/dist/pipeline/floatSlots.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +120 -0
- package/dist/pipeline/frameLayout.d.ts.map +1 -0
- package/dist/pipeline/frameLayout.js +279 -0
- package/dist/pipeline/frameLayout.js.map +1 -0
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +96 -3
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/pageRoles.d.ts +1 -0
- package/dist/pipeline/pageRoles.d.ts.map +1 -1
- package/dist/pipeline/pageRoles.js +3 -0
- package/dist/pipeline/pageRoles.js.map +1 -1
- package/dist/pipeline/placement.js +1 -1
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +5 -3
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/tabs.js +1 -1
- package/dist/pipeline/tabs.js.map +1 -1
- package/dist/types.d.ts +89 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +247 -1
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frame geometry of a composed page (#855, DESIGN §2.2, §5.2): where each
|
|
3
|
+
* frame of a resolved template stands, in page pixels. Pure: the content's
|
|
4
|
+
* natural height comes from a callback (the layout measures it with the box
|
|
5
|
+
* typesetter), so the rules can be tested without laying text out.
|
|
6
|
+
*
|
|
7
|
+
* - Position: a `grid` cell, else `placement` (the anchor / offset language
|
|
8
|
+
* of design slots: the nine-point grid of the template's `area`, the trim
|
|
9
|
+
* (`'page'`) or the bleed, or `'#frame'` / `'#group'` with the
|
|
10
|
+
* element-to-element edges `right-of`, `below`…), else the whole area.
|
|
11
|
+
* - Size: a fixed `Dimension`, a percentage of the area, `'fill'` (from the
|
|
12
|
+
* anchor point to the area's edge the frame grows towards) or `'auto'`
|
|
13
|
+
* (height only: the content's natural height); then `min*` / `max*`
|
|
14
|
+
* (min wins over max).
|
|
15
|
+
* - Order: a frame is placed after the frame or group it anchors to, after
|
|
16
|
+
* the frame its chain comes from (`next`), and frames that push text
|
|
17
|
+
* (`exclude: 'push'`) before the others; ties keep template order.
|
|
18
|
+
*/
|
|
19
|
+
import type { AnchorEdge, Dimension, ElementPlacement } from '../types';
|
|
20
|
+
import type { FrameSize, ResolvedFrame, ResolvedFrameGroup, ResolvedPageTemplate } from './types';
|
|
21
|
+
export interface Rect {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
}
|
|
27
|
+
/** The rectangles a template's anchors refer to on one page. */
|
|
28
|
+
export interface FrameAreas {
|
|
29
|
+
/** The template's `area` (the content area, the trim or the bleed). */
|
|
30
|
+
area: Rect;
|
|
31
|
+
/** The trim box (`anchor.to: 'page'`) and the bleed box. */
|
|
32
|
+
page: Rect;
|
|
33
|
+
bleed: Rect;
|
|
34
|
+
}
|
|
35
|
+
export interface FrameGeometryContext {
|
|
36
|
+
areas: FrameAreas;
|
|
37
|
+
dpi: number;
|
|
38
|
+
/** Ems of the page's body text, for `em` lengths. */
|
|
39
|
+
emPx: number;
|
|
40
|
+
}
|
|
41
|
+
type Pin = 'start' | 'middle' | 'end';
|
|
42
|
+
/** The anchor point and the side of the box pinned to it. */
|
|
43
|
+
interface Anchor {
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
pinX: Pin;
|
|
47
|
+
pinY: Pin;
|
|
48
|
+
}
|
|
49
|
+
/** The anchor of `edge` on `ref`: the nine-point grid of a container, or an
|
|
50
|
+
* element-to-element edge when `element` (an anchor to `'#name'`). An
|
|
51
|
+
* element edge on a container, or a container edge on an element, reads
|
|
52
|
+
* as `top-left` / `align-top`, as design slots do. */
|
|
53
|
+
export declare function anchorOn(edge: AnchorEdge, ref: Rect, element: boolean): Anchor;
|
|
54
|
+
/** `v` held between `min` and `max` (min wins). */
|
|
55
|
+
export declare function clampSize(v: number, min: number | undefined, max: number | undefined): number;
|
|
56
|
+
/** The rectangle of cell `cell` of the template grid in `area`. */
|
|
57
|
+
export declare function gridCellRect(template: Pick<ResolvedPageTemplate, 'grid'>, cell: Required<{
|
|
58
|
+
col: number;
|
|
59
|
+
row: number;
|
|
60
|
+
cols: number;
|
|
61
|
+
rows: number;
|
|
62
|
+
}>, area: Rect, ctx: FrameGeometryContext): Rect;
|
|
63
|
+
/** What the geometry needs to know of a box it places: a frame's
|
|
64
|
+
* placement and sizes, or a group's. */
|
|
65
|
+
interface Placeable {
|
|
66
|
+
placement?: ElementPlacement;
|
|
67
|
+
grid?: Required<{
|
|
68
|
+
col: number;
|
|
69
|
+
row: number;
|
|
70
|
+
cols: number;
|
|
71
|
+
rows: number;
|
|
72
|
+
}>;
|
|
73
|
+
width: FrameSize;
|
|
74
|
+
height: FrameSize;
|
|
75
|
+
/** The height was written (a grid cell keeps its own otherwise). */
|
|
76
|
+
heightSet: boolean;
|
|
77
|
+
minWidth?: Dimension;
|
|
78
|
+
maxWidth?: Dimension;
|
|
79
|
+
minHeight?: Dimension;
|
|
80
|
+
maxHeight?: Dimension;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The box of a frame (or group): `resolveRef` gives the box of a `'#name'`
|
|
84
|
+
* anchor (undefined when it has none yet: the anchor then reads as the
|
|
85
|
+
* area's); `natural(width)` the content's height at a width, for an
|
|
86
|
+
* `'auto'` height.
|
|
87
|
+
*/
|
|
88
|
+
export declare function placeBox(item: Placeable, template: Pick<ResolvedPageTemplate, 'grid'>, ctx: FrameGeometryContext, resolveRef: (name: string) => Rect | undefined, natural: (width: number) => number): Rect;
|
|
89
|
+
/** A frame as {@link placeBox} reads it. */
|
|
90
|
+
export declare function framePlaceable(frame: ResolvedFrame): Placeable;
|
|
91
|
+
/** A group's own box as {@link placeBox} reads it, or undefined when it has
|
|
92
|
+
* none (its box is then the union of its frames'). */
|
|
93
|
+
export declare function groupPlaceable(group: ResolvedFrameGroup): Placeable | undefined;
|
|
94
|
+
/** The frame of the same page a frame's content goes on in: its `next`,
|
|
95
|
+
* else an `overflow.continueIn` of the form `'#frame'` (the same thing). */
|
|
96
|
+
export declare function nextFrameOf(frame: Pick<ResolvedFrame, 'next' | 'overflow'>): string | undefined;
|
|
97
|
+
/** The smallest rectangle holding `rects` (undefined for none). */
|
|
98
|
+
export declare function unionRect(rects: readonly Rect[]): Rect | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* The order frames are placed and typeset in: a frame after what it
|
|
101
|
+
* anchors to (a group's frames, or the group's own anchor), after the frame
|
|
102
|
+
* of its chain before it (`next`); frames that push text first; otherwise
|
|
103
|
+
* template order. Anchor cycles (rejected by validation, settled by the
|
|
104
|
+
* resolver) are broken where they close.
|
|
105
|
+
*/
|
|
106
|
+
export declare function frameOrder(template: Pick<ResolvedPageTemplate, 'frames' | 'groups'>): ResolvedFrame[];
|
|
107
|
+
export {};
|
|
108
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/composed/geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { dimensionToPx } from '../units';
|
|
2
|
+
import { anchorTarget, continueInFrame } from './templates';
|
|
3
|
+
const ELEMENT_EDGES = new Set(['right-of', 'left-of', 'below', 'above', 'align-top', 'align-bottom', 'align-left', 'align-right']);
|
|
4
|
+
/** The anchor of `edge` on `ref`: the nine-point grid of a container, or an
|
|
5
|
+
* element-to-element edge when `element` (an anchor to `'#name'`). An
|
|
6
|
+
* element edge on a container, or a container edge on an element, reads
|
|
7
|
+
* as `top-left` / `align-top`, as design slots do. */
|
|
8
|
+
export function anchorOn(edge, ref, element) {
|
|
9
|
+
if (element) {
|
|
10
|
+
switch (edge) {
|
|
11
|
+
case 'right-of': return { x: ref.x + ref.width, y: ref.y, pinX: 'start', pinY: 'start' };
|
|
12
|
+
case 'left-of': return { x: ref.x, y: ref.y, pinX: 'end', pinY: 'start' };
|
|
13
|
+
case 'below': return { x: ref.x, y: ref.y + ref.height, pinX: 'start', pinY: 'start' };
|
|
14
|
+
case 'above': return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'end' };
|
|
15
|
+
case 'align-bottom': return { x: ref.x, y: ref.y + ref.height, pinX: 'start', pinY: 'end' };
|
|
16
|
+
case 'align-right': return { x: ref.x + ref.width, y: ref.y, pinX: 'end', pinY: 'start' };
|
|
17
|
+
case 'align-top':
|
|
18
|
+
case 'align-left':
|
|
19
|
+
return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'start' };
|
|
20
|
+
default:
|
|
21
|
+
// A nine-point edge on another frame: that point of its box.
|
|
22
|
+
if (!ELEMENT_EDGES.has(edge))
|
|
23
|
+
return anchorOn(edge, ref, false);
|
|
24
|
+
return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'start' };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const cx = ref.x + ref.width / 2;
|
|
28
|
+
const cy = ref.y + ref.height / 2;
|
|
29
|
+
const r = ref.x + ref.width;
|
|
30
|
+
const b = ref.y + ref.height;
|
|
31
|
+
switch (edge) {
|
|
32
|
+
case 'top': return { x: cx, y: ref.y, pinX: 'middle', pinY: 'start' };
|
|
33
|
+
case 'top-right': return { x: r, y: ref.y, pinX: 'end', pinY: 'start' };
|
|
34
|
+
case 'left': return { x: ref.x, y: cy, pinX: 'start', pinY: 'middle' };
|
|
35
|
+
case 'center': return { x: cx, y: cy, pinX: 'middle', pinY: 'middle' };
|
|
36
|
+
case 'right': return { x: r, y: cy, pinX: 'end', pinY: 'middle' };
|
|
37
|
+
case 'bottom-left': return { x: ref.x, y: b, pinX: 'start', pinY: 'end' };
|
|
38
|
+
case 'bottom': return { x: cx, y: b, pinX: 'middle', pinY: 'end' };
|
|
39
|
+
case 'bottom-right': return { x: r, y: b, pinX: 'end', pinY: 'end' };
|
|
40
|
+
default: return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'start' };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const px = (d, ctx) => d ? dimensionToPx(d, ctx.dpi, ctx.emPx) : undefined;
|
|
44
|
+
/** Room from an anchor coordinate to the area's edge the box grows towards
|
|
45
|
+
* (`'fill'`). */
|
|
46
|
+
function fillRoom(pin, at, lo, hi) {
|
|
47
|
+
if (pin === 'start')
|
|
48
|
+
return Math.max(0, hi - at);
|
|
49
|
+
if (pin === 'end')
|
|
50
|
+
return Math.max(0, at - lo);
|
|
51
|
+
return Math.max(0, 2 * Math.min(at - lo, hi - at));
|
|
52
|
+
}
|
|
53
|
+
/** `v` held between `min` and `max` (min wins). */
|
|
54
|
+
export function clampSize(v, min, max) {
|
|
55
|
+
let out = v;
|
|
56
|
+
if (max !== undefined)
|
|
57
|
+
out = Math.min(out, max);
|
|
58
|
+
if (min !== undefined)
|
|
59
|
+
out = Math.max(out, min);
|
|
60
|
+
return Math.max(0, out);
|
|
61
|
+
}
|
|
62
|
+
/** A fixed size in px, or undefined for `'auto'` / `'fill'`. */
|
|
63
|
+
function fixedSize(size, whole, ctx) {
|
|
64
|
+
if (size === 'auto' || size === 'fill')
|
|
65
|
+
return undefined;
|
|
66
|
+
if ('percent' in size)
|
|
67
|
+
return (whole * size.percent) / 100;
|
|
68
|
+
return px(size, ctx);
|
|
69
|
+
}
|
|
70
|
+
/** The rectangle of cell `cell` of the template grid in `area`. */
|
|
71
|
+
export function gridCellRect(template, cell, area, ctx) {
|
|
72
|
+
const grid = template.grid;
|
|
73
|
+
const cg = px(grid.columnGap, ctx) ?? 0;
|
|
74
|
+
const rg = px(grid.rowGap, ctx) ?? 0;
|
|
75
|
+
const cw = (area.width - (grid.columns - 1) * cg) / grid.columns;
|
|
76
|
+
const rh = (area.height - (grid.rows - 1) * rg) / grid.rows;
|
|
77
|
+
return {
|
|
78
|
+
x: area.x + (cell.col - 1) * (cw + cg),
|
|
79
|
+
y: area.y + (cell.row - 1) * (rh + rg),
|
|
80
|
+
width: cell.cols * cw + (cell.cols - 1) * cg,
|
|
81
|
+
height: cell.rows * rh + (cell.rows - 1) * rg,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The box of a frame (or group): `resolveRef` gives the box of a `'#name'`
|
|
86
|
+
* anchor (undefined when it has none yet: the anchor then reads as the
|
|
87
|
+
* area's); `natural(width)` the content's height at a width, for an
|
|
88
|
+
* `'auto'` height.
|
|
89
|
+
*/
|
|
90
|
+
export function placeBox(item, template, ctx, resolveRef, natural) {
|
|
91
|
+
const { area } = ctx.areas;
|
|
92
|
+
const minW = px(item.minWidth, ctx);
|
|
93
|
+
const maxW = px(item.maxWidth, ctx);
|
|
94
|
+
const minH = px(item.minHeight, ctx);
|
|
95
|
+
const maxH = px(item.maxHeight, ctx);
|
|
96
|
+
if (item.grid && template.grid) {
|
|
97
|
+
const cell = gridCellRect(template, item.grid, area, ctx);
|
|
98
|
+
const width = clampSize(fixedSize(item.width, area.width, ctx) ?? cell.width, minW, maxW);
|
|
99
|
+
let height = cell.height;
|
|
100
|
+
if (item.heightSet) {
|
|
101
|
+
const fixed = fixedSize(item.height, area.height, ctx);
|
|
102
|
+
height = fixed ?? (item.height === 'auto' ? natural(width) : cell.height);
|
|
103
|
+
}
|
|
104
|
+
return { x: cell.x, y: cell.y, width, height: clampSize(height, minH, maxH) };
|
|
105
|
+
}
|
|
106
|
+
if (!item.placement) {
|
|
107
|
+
// The area's top-left, as wide as the area; the height as the frame's
|
|
108
|
+
// rule says (`'auto'`, the default, never past the area's foot).
|
|
109
|
+
const width = clampSize(fixedSize(item.width, area.width, ctx) ?? area.width, minW, maxW);
|
|
110
|
+
const fixed = fixedSize(item.height, area.height, ctx);
|
|
111
|
+
const height = fixed ?? (item.height === 'fill' ? area.height : Math.min(natural(width), area.height));
|
|
112
|
+
return { x: area.x, y: area.y, width, height: clampSize(height, minH, maxH) };
|
|
113
|
+
}
|
|
114
|
+
const placement = item.placement;
|
|
115
|
+
const target = anchorTarget(placement);
|
|
116
|
+
const to = placement.anchor.to;
|
|
117
|
+
const refBox = target ? resolveRef(target) : undefined;
|
|
118
|
+
const ref = refBox ?? (to === 'page' ? ctx.areas.page : to === 'bleed' ? ctx.areas.bleed : area);
|
|
119
|
+
// `'fill'` runs to the edge of the page's frame the anchor names (the
|
|
120
|
+
// area for a frame anchored to another).
|
|
121
|
+
const bounds = to === 'page' ? ctx.areas.page : to === 'bleed' ? ctx.areas.bleed : area;
|
|
122
|
+
const a = anchorOn(placement.anchor.edge, ref, refBox !== undefined);
|
|
123
|
+
const ox = px(placement.offset?.x, ctx) ?? 0;
|
|
124
|
+
const oy = px(placement.offset?.y, ctx) ?? 0;
|
|
125
|
+
const ax = a.x + ox;
|
|
126
|
+
const ay = a.y + oy;
|
|
127
|
+
const width = clampSize(fixedSize(item.width, area.width, ctx) ?? fillRoom(a.pinX, ax, bounds.x, bounds.x + bounds.width), minW, maxW);
|
|
128
|
+
const fixedH = fixedSize(item.height, area.height, ctx);
|
|
129
|
+
const room = fillRoom(a.pinY, ay, bounds.y, bounds.y + bounds.height);
|
|
130
|
+
// An `'auto'` height never runs past the edge the frame grows towards:
|
|
131
|
+
// what does not fit there overflows the frame.
|
|
132
|
+
const height = clampSize(fixedH ?? (item.height === 'fill' ? room : Math.min(natural(width), room)), minH, maxH);
|
|
133
|
+
const x = a.pinX === 'start' ? ax : a.pinX === 'end' ? ax - width : ax - width / 2;
|
|
134
|
+
const y = a.pinY === 'start' ? ay : a.pinY === 'end' ? ay - height : ay - height / 2;
|
|
135
|
+
return { x, y, width, height };
|
|
136
|
+
}
|
|
137
|
+
/** A frame as {@link placeBox} reads it. */
|
|
138
|
+
export function framePlaceable(frame) {
|
|
139
|
+
return {
|
|
140
|
+
...(frame.placement ? { placement: frame.placement } : {}),
|
|
141
|
+
...(frame.grid ? { grid: frame.grid } : {}),
|
|
142
|
+
width: frame.width,
|
|
143
|
+
height: frame.height,
|
|
144
|
+
heightSet: frame.fieldPaths.height !== undefined || frame.placement?.size?.height !== undefined,
|
|
145
|
+
...(frame.minWidth ? { minWidth: frame.minWidth } : {}),
|
|
146
|
+
...(frame.maxWidth ? { maxWidth: frame.maxWidth } : {}),
|
|
147
|
+
...(frame.minHeight ? { minHeight: frame.minHeight } : {}),
|
|
148
|
+
...(frame.maxHeight ? { maxHeight: frame.maxHeight } : {}),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** A group's own box as {@link placeBox} reads it, or undefined when it has
|
|
152
|
+
* none (its box is then the union of its frames'). */
|
|
153
|
+
export function groupPlaceable(group) {
|
|
154
|
+
if (!group.placement && !group.grid)
|
|
155
|
+
return undefined;
|
|
156
|
+
const size = group.placement?.size;
|
|
157
|
+
const norm = (v) => (v === 'auto' || v === 'fill' || (typeof v === 'object' && v !== null) ? v : 'fill');
|
|
158
|
+
return {
|
|
159
|
+
...(group.placement ? { placement: group.placement } : {}),
|
|
160
|
+
...(group.grid ? { grid: group.grid } : {}),
|
|
161
|
+
width: norm(size?.width),
|
|
162
|
+
height: size?.height === undefined || size.height === 'auto' ? 'fill' : norm(size.height),
|
|
163
|
+
heightSet: size?.height !== undefined,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/** The frame of the same page a frame's content goes on in: its `next`,
|
|
167
|
+
* else an `overflow.continueIn` of the form `'#frame'` (the same thing). */
|
|
168
|
+
export function nextFrameOf(frame) {
|
|
169
|
+
return frame.next ?? continueInFrame(frame.overflow?.continueIn);
|
|
170
|
+
}
|
|
171
|
+
/** The smallest rectangle holding `rects` (undefined for none). */
|
|
172
|
+
export function unionRect(rects) {
|
|
173
|
+
if (rects.length === 0)
|
|
174
|
+
return undefined;
|
|
175
|
+
const x = Math.min(...rects.map((r) => r.x));
|
|
176
|
+
const y = Math.min(...rects.map((r) => r.y));
|
|
177
|
+
const right = Math.max(...rects.map((r) => r.x + r.width));
|
|
178
|
+
const bottom = Math.max(...rects.map((r) => r.y + r.height));
|
|
179
|
+
return { x, y, width: right - x, height: bottom - y };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The order frames are placed and typeset in: a frame after what it
|
|
183
|
+
* anchors to (a group's frames, or the group's own anchor), after the frame
|
|
184
|
+
* of its chain before it (`next`); frames that push text first; otherwise
|
|
185
|
+
* template order. Anchor cycles (rejected by validation, settled by the
|
|
186
|
+
* resolver) are broken where they close.
|
|
187
|
+
*/
|
|
188
|
+
export function frameOrder(template) {
|
|
189
|
+
const byName = new Map(template.frames.map((f) => [f.name, f]));
|
|
190
|
+
const groups = new Map(template.groups.map((g) => [g.name, g]));
|
|
191
|
+
const prev = new Map();
|
|
192
|
+
for (const f of template.frames) {
|
|
193
|
+
const n = nextFrameOf(f);
|
|
194
|
+
if (n && byName.has(n) && !prev.has(n))
|
|
195
|
+
prev.set(n, f.name);
|
|
196
|
+
}
|
|
197
|
+
const deps = (name, seenGroups = new Set()) => {
|
|
198
|
+
const out = [];
|
|
199
|
+
const addTarget = (target) => {
|
|
200
|
+
if (!target)
|
|
201
|
+
return;
|
|
202
|
+
if (byName.has(target))
|
|
203
|
+
out.push(target);
|
|
204
|
+
else {
|
|
205
|
+
const g = groups.get(target);
|
|
206
|
+
if (!g || seenGroups.has(g.name))
|
|
207
|
+
return;
|
|
208
|
+
seenGroups.add(g.name);
|
|
209
|
+
if (g.placement || g.grid)
|
|
210
|
+
addTarget(g.grid ? undefined : anchorTarget(g.placement));
|
|
211
|
+
else
|
|
212
|
+
out.push(...g.frames.filter((m) => m !== name && byName.has(m)));
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
const f = byName.get(name);
|
|
216
|
+
if (!f.grid)
|
|
217
|
+
addTarget(anchorTarget(f.placement));
|
|
218
|
+
const p = prev.get(name);
|
|
219
|
+
if (p)
|
|
220
|
+
out.push(p);
|
|
221
|
+
return out;
|
|
222
|
+
};
|
|
223
|
+
const out = [];
|
|
224
|
+
const state = new Map();
|
|
225
|
+
const visit = (name) => {
|
|
226
|
+
if (state.has(name))
|
|
227
|
+
return;
|
|
228
|
+
state.set(name, 'visiting');
|
|
229
|
+
for (const d of deps(name))
|
|
230
|
+
visit(d);
|
|
231
|
+
state.set(name, 'done');
|
|
232
|
+
out.push(byName.get(name));
|
|
233
|
+
};
|
|
234
|
+
for (const f of template.frames)
|
|
235
|
+
if (f.exclude === 'push')
|
|
236
|
+
visit(f.name);
|
|
237
|
+
for (const f of template.frames)
|
|
238
|
+
visit(f.name);
|
|
239
|
+
return out;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/composed/geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Groups of frames on a composed page (#856, DESIGN §2.3, §5.3): a `stack`
|
|
3
|
+
* lays its frames top to bottom, a `row` start to end, with `gap` between
|
|
4
|
+
* them; `grow`, `shrink` and `priority` decide who takes spare space and
|
|
5
|
+
* who gives space back; `pin` frames stay where the template puts them and
|
|
6
|
+
* the others flow round them. Pure: what a frame's content needs comes from
|
|
7
|
+
* a callback, so the rules are tested without laying text out.
|
|
8
|
+
*
|
|
9
|
+
* Also the order frames are placed and filled in once groups count
|
|
10
|
+
* ({@link composedOrder}): a group is placed as a whole, after everything
|
|
11
|
+
* its frames anchor to and before every frame that anchors to it or to one
|
|
12
|
+
* of its frames.
|
|
13
|
+
*/
|
|
14
|
+
import type { Rect } from './geometry';
|
|
15
|
+
import type { ResolvedFrame, ResolvedFrameGroup, ResolvedPageTemplate } from './types';
|
|
16
|
+
/** A frame of a group as the solver reads it. Lengths in page px. */
|
|
17
|
+
export interface GroupItem {
|
|
18
|
+
name: string;
|
|
19
|
+
/** The frame's box from its own placement: a stack keeps its `x` and
|
|
20
|
+
* `width`, a row its `height` when the frame's height is fixed; a pinned
|
|
21
|
+
* frame keeps all of it. */
|
|
22
|
+
own: Rect;
|
|
23
|
+
/** The height the frame asks for: its fixed height, or its content's at
|
|
24
|
+
* its width (`'auto'`), before min/max. */
|
|
25
|
+
want: number;
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
minWidth: number;
|
|
29
|
+
maxWidth: number;
|
|
30
|
+
grow: number;
|
|
31
|
+
shrink: number;
|
|
32
|
+
priority: number;
|
|
33
|
+
pin: boolean;
|
|
34
|
+
/** A height written as a length: a row does not stretch it. */
|
|
35
|
+
fixedHeight: boolean;
|
|
36
|
+
/** The content's height at a width (rows negotiate widths with it). */
|
|
37
|
+
need?: (width: number) => number;
|
|
38
|
+
}
|
|
39
|
+
export interface GroupLayoutInput {
|
|
40
|
+
kind: 'stack' | 'row';
|
|
41
|
+
/** The group's box: its own (`placement` / `grid`), or, for a group with
|
|
42
|
+
* none (`elastic`), where its first frame stands. */
|
|
43
|
+
box: Rect;
|
|
44
|
+
/** No box of its own: a stack runs down as far as its frames need, to
|
|
45
|
+
* the foot of `limit`; a row takes its frames' widths and grows as tall
|
|
46
|
+
* as the tallest needs. Spare space, `grow` and `align` only apply to a
|
|
47
|
+
* group with a box. */
|
|
48
|
+
elastic: boolean;
|
|
49
|
+
/** How far an elastic group may run (the template's area). */
|
|
50
|
+
limit: Rect;
|
|
51
|
+
gap: number;
|
|
52
|
+
align: 'start' | 'center' | 'end' | 'space-between';
|
|
53
|
+
/** In group order. */
|
|
54
|
+
items: readonly GroupItem[];
|
|
55
|
+
/** Pinned frames outside the group: the group's frames flow round them. */
|
|
56
|
+
obstacles?: readonly Rect[];
|
|
57
|
+
/** Page px in a millimetre: a row negotiates widths in whole millimetres. */
|
|
58
|
+
mmPx: number;
|
|
59
|
+
/** Rows: take width from siblings for a frame whose content runs past
|
|
60
|
+
* the row's height. Off for the template's own (declared) layout. */
|
|
61
|
+
negotiate: boolean;
|
|
62
|
+
}
|
|
63
|
+
/** Share `amount` among `items` in proportion to `weight`, none past its
|
|
64
|
+
* `room`; what an item cannot take goes to the others. Returns each one's
|
|
65
|
+
* share, in `items` order. */
|
|
66
|
+
export declare function shareOut(amount: number, items: readonly {
|
|
67
|
+
weight: number;
|
|
68
|
+
room: number;
|
|
69
|
+
}[]): number[];
|
|
70
|
+
/** The boxes of a group's frames, by name. */
|
|
71
|
+
export declare function layoutGroup(input: GroupLayoutInput): Map<string, Rect>;
|
|
72
|
+
/** A step of a composed page's layout: one frame, or a whole group. */
|
|
73
|
+
export type ComposedStep = {
|
|
74
|
+
kind: 'frame';
|
|
75
|
+
frame: ResolvedFrame;
|
|
76
|
+
} | {
|
|
77
|
+
kind: 'group';
|
|
78
|
+
group: ResolvedFrameGroup;
|
|
79
|
+
frames: ResolvedFrame[];
|
|
80
|
+
};
|
|
81
|
+
/** The group each frame belongs to (its first, when validation found it
|
|
82
|
+
* in two). Groups with no frame are left out. */
|
|
83
|
+
export declare function groupOfFrames(template: Pick<ResolvedPageTemplate, 'frames' | 'groups'>): Map<string, ResolvedFrameGroup>;
|
|
84
|
+
/**
|
|
85
|
+
* The order a composed page is placed and filled in: P4's
|
|
86
|
+
* {@link frameOrder} rules (a frame after what it anchors to and after the
|
|
87
|
+
* frame its chain comes from, frames that push text first, else template
|
|
88
|
+
* order), with each group a single step. A group comes after everything
|
|
89
|
+
* its frames and its own box anchor to; anything anchored to the group or
|
|
90
|
+
* to one of its frames comes after it. Its frames are filled in group
|
|
91
|
+
* order. Loops (a group's frame anchored to a frame anchored back into the
|
|
92
|
+
* group) are broken where they close, as P4 breaks anchor loops.
|
|
93
|
+
*/
|
|
94
|
+
export declare function composedOrder(template: Pick<ResolvedPageTemplate, 'frames' | 'groups'>): ComposedStep[];
|
|
95
|
+
//# sourceMappingURL=groups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/composed/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEvF,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;;iCAE6B;IAC7B,GAAG,EAAE,IAAI,CAAC;IACV;gDAC4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,+DAA+D;IAC/D,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB;0DACsD;IACtD,GAAG,EAAE,IAAI,CAAC;IACV;;;4BAGwB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;IACpD,sBAAsB;IACtB,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb;0EACsE;IACtE,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD;;+BAE+B;AAC/B,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAqBrG;AAYD,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAEtE;AAoMD,uEAAuE;AACvE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAE1E;kDACkD;AAClD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAKxH;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,YAAY,EAAE,CAuEvG"}
|