@retikz/core 0.1.0-alpha.5 → 0.1.0-beta.2
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/es/compile/compile.d.ts +20 -3
- package/dist/es/compile/compile.d.ts.map +1 -1
- package/dist/es/compile/compile.js +44 -19
- package/dist/es/compile/index.d.ts +2 -2
- package/dist/es/compile/index.d.ts.map +1 -1
- package/dist/es/compile/layout.d.ts +5 -0
- package/dist/es/compile/layout.d.ts.map +1 -0
- package/dist/es/compile/{view-box.js → layout.js} +4 -4
- package/dist/es/compile/node.d.ts +4 -4
- package/dist/es/compile/node.d.ts.map +1 -1
- package/dist/es/compile/node.js +7 -7
- package/dist/es/compile/path/anchor.d.ts +19 -0
- package/dist/es/compile/path/anchor.d.ts.map +1 -0
- package/dist/es/compile/path/anchor.js +54 -0
- package/dist/es/compile/path/arrow-geometry.d.ts +22 -0
- package/dist/es/compile/path/arrow-geometry.d.ts.map +1 -0
- package/dist/es/compile/path/arrow-geometry.js +40 -0
- package/dist/es/compile/{path.d.ts → path/index.d.ts} +18 -7
- package/dist/es/compile/path/index.d.ts.map +1 -0
- package/dist/es/compile/path/index.js +308 -0
- package/dist/es/compile/path/label.d.ts +18 -0
- package/dist/es/compile/path/label.d.ts.map +1 -0
- package/dist/es/compile/path/label.js +102 -0
- package/dist/es/compile/path/relative.d.ts +8 -0
- package/dist/es/compile/path/relative.d.ts.map +1 -0
- package/dist/es/compile/path/relative.js +48 -0
- package/dist/es/compile/path/shrink.d.ts +18 -0
- package/dist/es/compile/path/shrink.d.ts.map +1 -0
- package/dist/es/compile/path/shrink.js +126 -0
- package/dist/es/compile/path/split.d.ts +15 -0
- package/dist/es/compile/path/split.d.ts.map +1 -0
- package/dist/es/compile/path/split.js +46 -0
- package/dist/es/compile/text-metrics.d.ts +4 -1
- package/dist/es/compile/text-metrics.d.ts.map +1 -1
- package/dist/es/compile/text-metrics.js +11 -5
- package/dist/es/geometry/_transform.d.ts +21 -0
- package/dist/es/geometry/_transform.d.ts.map +1 -0
- package/dist/es/geometry/_transform.js +27 -0
- package/dist/es/geometry/bend.d.ts +1 -1
- package/dist/es/geometry/bend.js +1 -1
- package/dist/es/geometry/circle.d.ts +2 -3
- package/dist/es/geometry/circle.d.ts.map +1 -1
- package/dist/es/geometry/circle.js +1 -16
- package/dist/es/geometry/diamond.d.ts +2 -3
- package/dist/es/geometry/diamond.d.ts.map +1 -1
- package/dist/es/geometry/diamond.js +1 -16
- package/dist/es/geometry/ellipse.d.ts +2 -3
- package/dist/es/geometry/ellipse.d.ts.map +1 -1
- package/dist/es/geometry/ellipse.js +1 -16
- package/dist/es/geometry/polar.d.ts +2 -2
- package/dist/es/geometry/polar.d.ts.map +1 -1
- package/dist/es/geometry/polar.js +2 -6
- package/dist/es/geometry/rect.d.ts.map +1 -1
- package/dist/es/geometry/rect.js +1 -18
- package/dist/es/geometry/segment.d.ts +5 -1
- package/dist/es/geometry/segment.d.ts.map +1 -1
- package/dist/es/index.d.ts +11 -7
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +5 -2
- package/dist/es/ir/coordinate.d.ts +1 -1
- package/dist/es/ir/coordinate.js +1 -1
- package/dist/es/ir/font.d.ts +21 -0
- package/dist/es/ir/font.d.ts.map +1 -0
- package/dist/es/ir/font.js +15 -0
- package/dist/es/ir/index.d.ts +2 -0
- package/dist/es/ir/index.d.ts.map +1 -1
- package/dist/es/ir/node.d.ts +32 -143
- package/dist/es/ir/node.d.ts.map +1 -1
- package/dist/es/ir/node.js +7 -31
- package/dist/es/ir/path/arrow.d.ts +14 -14
- package/dist/es/ir/path/arrow.d.ts.map +1 -1
- package/dist/es/ir/path/arrow.js +5 -5
- package/dist/es/ir/path/path.d.ts +19 -19
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/path.js +4 -4
- package/dist/es/ir/path/step.d.ts +1 -1
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/step.js +8 -8
- package/dist/es/ir/position/at-position.js +1 -1
- package/dist/es/ir/position/offset-position.js +1 -1
- package/dist/es/ir/position/polar-position.d.ts.map +1 -1
- package/dist/es/ir/position/polar-position.js +2 -2
- package/dist/es/ir/position/position.d.ts.map +1 -1
- package/dist/es/ir/position/position.js +1 -1
- package/dist/es/ir/scene.d.ts +128 -128
- package/dist/es/ir/text.d.ts +96 -0
- package/dist/es/ir/text.d.ts.map +1 -0
- package/dist/es/ir/text.js +20 -0
- package/dist/es/parsers/parseTargetSugar.d.ts +4 -0
- package/dist/es/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/es/parsers/parseTargetSugar.js +3 -2
- package/dist/es/primitive/ellipse.d.ts +3 -3
- package/dist/es/primitive/ellipse.d.ts.map +1 -1
- package/dist/es/primitive/group.d.ts +23 -7
- package/dist/es/primitive/group.d.ts.map +1 -1
- package/dist/es/primitive/index.d.ts +1 -1
- package/dist/es/primitive/index.d.ts.map +1 -1
- package/dist/es/primitive/layout.d.ts +12 -0
- package/dist/es/primitive/layout.d.ts.map +1 -0
- package/dist/es/primitive/path.d.ts +55 -15
- package/dist/es/primitive/path.d.ts.map +1 -1
- package/dist/es/primitive/rect.d.ts +3 -3
- package/dist/es/primitive/rect.d.ts.map +1 -1
- package/dist/es/primitive/scene.d.ts +4 -4
- package/dist/es/primitive/scene.d.ts.map +1 -1
- package/dist/es/primitive/text.d.ts +10 -3
- package/dist/es/primitive/text.d.ts.map +1 -1
- package/dist/es/types.d.ts +8 -0
- package/dist/es/types.d.ts.map +1 -1
- package/dist/lib/compile/compile.cjs +44 -19
- package/dist/lib/compile/compile.d.ts +20 -3
- package/dist/lib/compile/compile.d.ts.map +1 -1
- package/dist/lib/compile/index.d.ts +2 -2
- package/dist/lib/compile/index.d.ts.map +1 -1
- package/dist/lib/compile/{view-box.cjs → layout.cjs} +4 -4
- package/dist/lib/compile/layout.d.ts +5 -0
- package/dist/lib/compile/layout.d.ts.map +1 -0
- package/dist/lib/compile/node.cjs +7 -7
- package/dist/lib/compile/node.d.ts +4 -4
- package/dist/lib/compile/node.d.ts.map +1 -1
- package/dist/lib/compile/path/anchor.cjs +58 -0
- package/dist/lib/compile/path/anchor.d.ts +19 -0
- package/dist/lib/compile/path/anchor.d.ts.map +1 -0
- package/dist/lib/compile/path/arrow-geometry.cjs +41 -0
- package/dist/lib/compile/path/arrow-geometry.d.ts +22 -0
- package/dist/lib/compile/path/arrow-geometry.d.ts.map +1 -0
- package/dist/lib/compile/path/index.cjs +308 -0
- package/dist/lib/compile/{path.d.ts → path/index.d.ts} +18 -7
- package/dist/lib/compile/path/index.d.ts.map +1 -0
- package/dist/lib/compile/path/label.cjs +103 -0
- package/dist/lib/compile/path/label.d.ts +18 -0
- package/dist/lib/compile/path/label.d.ts.map +1 -0
- package/dist/lib/compile/path/relative.cjs +48 -0
- package/dist/lib/compile/path/relative.d.ts +8 -0
- package/dist/lib/compile/path/relative.d.ts.map +1 -0
- package/dist/lib/compile/path/shrink.cjs +128 -0
- package/dist/lib/compile/path/shrink.d.ts +18 -0
- package/dist/lib/compile/path/shrink.d.ts.map +1 -0
- package/dist/lib/compile/path/split.cjs +46 -0
- package/dist/lib/compile/path/split.d.ts +15 -0
- package/dist/lib/compile/path/split.d.ts.map +1 -0
- package/dist/lib/compile/text-metrics.cjs +11 -5
- package/dist/lib/compile/text-metrics.d.ts +4 -1
- package/dist/lib/compile/text-metrics.d.ts.map +1 -1
- package/dist/lib/geometry/_transform.cjs +28 -0
- package/dist/lib/geometry/_transform.d.ts +21 -0
- package/dist/lib/geometry/_transform.d.ts.map +1 -0
- package/dist/lib/geometry/bend.cjs +1 -1
- package/dist/lib/geometry/bend.d.ts +1 -1
- package/dist/lib/geometry/circle.cjs +5 -20
- package/dist/lib/geometry/circle.d.ts +2 -3
- package/dist/lib/geometry/circle.d.ts.map +1 -1
- package/dist/lib/geometry/diamond.cjs +5 -20
- package/dist/lib/geometry/diamond.d.ts +2 -3
- package/dist/lib/geometry/diamond.d.ts.map +1 -1
- package/dist/lib/geometry/ellipse.cjs +5 -20
- package/dist/lib/geometry/ellipse.d.ts +2 -3
- package/dist/lib/geometry/ellipse.d.ts.map +1 -1
- package/dist/lib/geometry/polar.cjs +2 -6
- package/dist/lib/geometry/polar.d.ts +2 -2
- package/dist/lib/geometry/polar.d.ts.map +1 -1
- package/dist/lib/geometry/rect.cjs +5 -22
- package/dist/lib/geometry/rect.d.ts.map +1 -1
- package/dist/lib/geometry/segment.d.ts +5 -1
- package/dist/lib/geometry/segment.d.ts.map +1 -1
- package/dist/lib/index.cjs +7 -3
- package/dist/lib/index.d.ts +11 -7
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/coordinate.cjs +1 -1
- package/dist/lib/ir/coordinate.d.ts +1 -1
- package/dist/lib/ir/font.cjs +15 -0
- package/dist/lib/ir/font.d.ts +21 -0
- package/dist/lib/ir/font.d.ts.map +1 -0
- package/dist/lib/ir/index.d.ts +2 -0
- package/dist/lib/ir/index.d.ts.map +1 -1
- package/dist/lib/ir/node.cjs +8 -35
- package/dist/lib/ir/node.d.ts +32 -143
- package/dist/lib/ir/node.d.ts.map +1 -1
- package/dist/lib/ir/path/arrow.cjs +5 -5
- package/dist/lib/ir/path/arrow.d.ts +14 -14
- package/dist/lib/ir/path/arrow.d.ts.map +1 -1
- package/dist/lib/ir/path/path.cjs +4 -4
- package/dist/lib/ir/path/path.d.ts +19 -19
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.cjs +8 -8
- package/dist/lib/ir/path/step.d.ts +1 -1
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- package/dist/lib/ir/position/at-position.cjs +1 -1
- package/dist/lib/ir/position/offset-position.cjs +1 -1
- package/dist/lib/ir/position/polar-position.cjs +2 -2
- package/dist/lib/ir/position/polar-position.d.ts.map +1 -1
- package/dist/lib/ir/position/position.cjs +1 -1
- package/dist/lib/ir/position/position.d.ts.map +1 -1
- package/dist/lib/ir/scene.d.ts +128 -128
- package/dist/lib/ir/text.cjs +21 -0
- package/dist/lib/ir/text.d.ts +96 -0
- package/dist/lib/ir/text.d.ts.map +1 -0
- package/dist/lib/parsers/parseTargetSugar.cjs +3 -2
- package/dist/lib/parsers/parseTargetSugar.d.ts +4 -0
- package/dist/lib/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/lib/primitive/ellipse.d.ts +3 -3
- package/dist/lib/primitive/ellipse.d.ts.map +1 -1
- package/dist/lib/primitive/group.d.ts +23 -7
- package/dist/lib/primitive/group.d.ts.map +1 -1
- package/dist/lib/primitive/index.d.ts +1 -1
- package/dist/lib/primitive/index.d.ts.map +1 -1
- package/dist/lib/primitive/layout.d.ts +12 -0
- package/dist/lib/primitive/layout.d.ts.map +1 -0
- package/dist/lib/primitive/path.d.ts +55 -15
- package/dist/lib/primitive/path.d.ts.map +1 -1
- package/dist/lib/primitive/rect.d.ts +3 -3
- package/dist/lib/primitive/rect.d.ts.map +1 -1
- package/dist/lib/primitive/scene.d.ts +4 -4
- package/dist/lib/primitive/scene.d.ts.map +1 -1
- package/dist/lib/primitive/text.d.ts +10 -3
- package/dist/lib/primitive/text.d.ts.map +1 -1
- package/dist/lib/types.d.ts +8 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +12 -4
- package/dist/es/compile/path.d.ts.map +0 -1
- package/dist/es/compile/path.js +0 -636
- package/dist/es/compile/view-box.d.ts +0 -5
- package/dist/es/compile/view-box.d.ts.map +0 -1
- package/dist/es/primitive/view-box.d.ts +0 -12
- package/dist/es/primitive/view-box.d.ts.map +0 -1
- package/dist/lib/compile/path.cjs +0 -636
- package/dist/lib/compile/path.d.ts.map +0 -1
- package/dist/lib/compile/view-box.d.ts +0 -5
- package/dist/lib/compile/view-box.d.ts.map +0 -1
- package/dist/lib/primitive/view-box.d.ts +0 -12
- package/dist/lib/primitive/view-box.d.ts.map +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* 单行文本规格:纯字符串走块级默认,对象形式可覆盖 fill/opacity/font
|
|
4
|
+
* @description 行级覆盖只生效于本行;font 子字段未填则继承块级;align/lineHeight 不可被行覆盖
|
|
5
|
+
*/
|
|
6
|
+
export declare const LineSpecSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
7
|
+
text: z.ZodString;
|
|
8
|
+
fill: z.ZodOptional<z.ZodString>;
|
|
9
|
+
opacity: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
font: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
family: z.ZodOptional<z.ZodString>;
|
|
12
|
+
size: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
weight: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["normal", "bold"]>, z.ZodNumber]>>;
|
|
14
|
+
style: z.ZodOptional<z.ZodEnum<["normal", "italic", "oblique"]>>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
family?: string | undefined;
|
|
17
|
+
size?: number | undefined;
|
|
18
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
19
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
family?: string | undefined;
|
|
22
|
+
size?: number | undefined;
|
|
23
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
24
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
25
|
+
}>>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
text: string;
|
|
28
|
+
fill?: string | undefined;
|
|
29
|
+
opacity?: number | undefined;
|
|
30
|
+
font?: {
|
|
31
|
+
family?: string | undefined;
|
|
32
|
+
size?: number | undefined;
|
|
33
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
34
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
35
|
+
} | undefined;
|
|
36
|
+
}, {
|
|
37
|
+
text: string;
|
|
38
|
+
fill?: string | undefined;
|
|
39
|
+
opacity?: number | undefined;
|
|
40
|
+
font?: {
|
|
41
|
+
family?: string | undefined;
|
|
42
|
+
size?: number | undefined;
|
|
43
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
44
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
45
|
+
} | undefined;
|
|
46
|
+
}>]>;
|
|
47
|
+
/** 行规格 IR 类型 */
|
|
48
|
+
export type IRLineSpec = z.infer<typeof LineSpecSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* 文本块:单字符串或非空多行 LineSpec 数组
|
|
51
|
+
* @description 选数组而非 `\n` 字符串:JSON 友好无 escape,行级覆盖天然落字段;通用文本结构,Node text / 未来 Step.label 等共用
|
|
52
|
+
*/
|
|
53
|
+
export declare const TextBlockSchema: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
54
|
+
text: z.ZodString;
|
|
55
|
+
fill: z.ZodOptional<z.ZodString>;
|
|
56
|
+
opacity: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
font: z.ZodOptional<z.ZodObject<{
|
|
58
|
+
family: z.ZodOptional<z.ZodString>;
|
|
59
|
+
size: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
weight: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["normal", "bold"]>, z.ZodNumber]>>;
|
|
61
|
+
style: z.ZodOptional<z.ZodEnum<["normal", "italic", "oblique"]>>;
|
|
62
|
+
}, "strip", z.ZodTypeAny, {
|
|
63
|
+
family?: string | undefined;
|
|
64
|
+
size?: number | undefined;
|
|
65
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
66
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
67
|
+
}, {
|
|
68
|
+
family?: string | undefined;
|
|
69
|
+
size?: number | undefined;
|
|
70
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
71
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
72
|
+
}>>;
|
|
73
|
+
}, "strip", z.ZodTypeAny, {
|
|
74
|
+
text: string;
|
|
75
|
+
fill?: string | undefined;
|
|
76
|
+
opacity?: number | undefined;
|
|
77
|
+
font?: {
|
|
78
|
+
family?: string | undefined;
|
|
79
|
+
size?: number | undefined;
|
|
80
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
81
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
82
|
+
} | undefined;
|
|
83
|
+
}, {
|
|
84
|
+
text: string;
|
|
85
|
+
fill?: string | undefined;
|
|
86
|
+
opacity?: number | undefined;
|
|
87
|
+
font?: {
|
|
88
|
+
family?: string | undefined;
|
|
89
|
+
size?: number | undefined;
|
|
90
|
+
weight?: number | "normal" | "bold" | undefined;
|
|
91
|
+
style?: "normal" | "italic" | "oblique" | undefined;
|
|
92
|
+
} | undefined;
|
|
93
|
+
}>]>, "many">]>;
|
|
94
|
+
/** 文本块 IR 类型(单字符串或多行 LineSpec 数组) */
|
|
95
|
+
export type IRTextBlock = z.infer<typeof TextBlockSchema>;
|
|
96
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/ir/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBxB,CAAC;AAEJ,gBAAgB;AAChB,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAIzB,CAAC;AAEJ,qCAAqC;AACrC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FontSchema } from "./font.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
//#region src/ir/text.ts
|
|
4
|
+
/**
|
|
5
|
+
* 单行文本规格:纯字符串走块级默认,对象形式可覆盖 fill/opacity/font
|
|
6
|
+
* @description 行级覆盖只生效于本行;font 子字段未填则继承块级;align/lineHeight 不可被行覆盖
|
|
7
|
+
*/
|
|
8
|
+
var LineSpecSchema = z.union([z.string(), z.object({
|
|
9
|
+
text: z.string().describe("Line content"),
|
|
10
|
+
fill: z.string().optional().describe("Per-line text color; overrides block default"),
|
|
11
|
+
opacity: z.number().min(0).max(1).optional().describe("Per-line opacity 0..1"),
|
|
12
|
+
font: FontSchema.optional().describe("Per-line font overrides; missing fields inherit from block-level `font`")
|
|
13
|
+
})]).describe("Single line of text: bare string for default styling, or an object with per-line `fill` / `opacity` / `font` overrides.");
|
|
14
|
+
/**
|
|
15
|
+
* 文本块:单字符串或非空多行 LineSpec 数组
|
|
16
|
+
* @description 选数组而非 `\n` 字符串:JSON 友好无 escape,行级覆盖天然落字段;通用文本结构,Node text / 未来 Step.label 等共用
|
|
17
|
+
*/
|
|
18
|
+
var TextBlockSchema = z.union([z.string(), z.array(LineSpecSchema).min(1)]).describe("Text block: a single string for one line, or a non-empty array of line specs (string for default, object for per-line overrides).");
|
|
19
|
+
//#endregion
|
|
20
|
+
export { LineSpecSchema, TextBlockSchema };
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { IRTarget } from '../ir';
|
|
2
|
+
/**
|
|
3
|
+
* Sugar 字符串解析:TikZ 风格相对偏移字面量 → IR 对象
|
|
4
|
+
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ `++`,累积);其他形态(节点 id、笛卡尔 / 极坐标、已是 relative 对象)原样返回。纯函数无 nodeIndex 依赖,react adapter 与 Draw DSL 共用
|
|
5
|
+
*/
|
|
2
6
|
export declare const parseTargetSugar: (input: unknown) => IRTarget;
|
|
3
7
|
//# sourceMappingURL=parseTargetSugar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseTargetSugar.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseTargetSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"parseTargetSugar.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseTargetSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAKtC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,QAWjD,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
//#region src/parsers/parseTargetSugar.ts
|
|
2
|
+
/** TikZ 风格相对偏移字面量正则:捕获 `+` / `++` 前缀 + dx / dy 数值 */
|
|
3
|
+
var RELATIVE_OFFSET_RE = /^(\+{1,2})\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)$/;
|
|
2
4
|
/**
|
|
3
5
|
* Sugar 字符串解析:TikZ 风格相对偏移字面量 → IR 对象
|
|
4
|
-
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ `++`,累积);其他形态(节点 id
|
|
6
|
+
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ `++`,累积);其他形态(节点 id、笛卡尔 / 极坐标、已是 relative 对象)原样返回。纯函数无 nodeIndex 依赖,react adapter 与 Draw DSL 共用
|
|
5
7
|
*/
|
|
6
|
-
var RELATIVE_OFFSET_RE = /^(\+{1,2})\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)$/;
|
|
7
8
|
var parseTargetSugar = (input) => {
|
|
8
9
|
if (typeof input !== "string") return input;
|
|
9
10
|
const match = input.match(RELATIVE_OFFSET_RE);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @description 圆形(rx=ry)复用同一 prim 单 case 处理;rotate
|
|
2
|
+
* 椭圆原语(cx/cy 圆心,rx/ry 半径)
|
|
3
|
+
* @description 圆形(rx=ry)复用同一 prim 单 case 处理;rotate 度数绕中心,非零时由 renderer 在 emit 阶段应用旋转变换
|
|
4
4
|
*/
|
|
5
5
|
export type EllipsePrim = {
|
|
6
6
|
type: 'ellipse';
|
|
@@ -17,7 +17,7 @@ export type EllipsePrim = {
|
|
|
17
17
|
/** 描边透明度 0~1 */
|
|
18
18
|
strokeOpacity?: number;
|
|
19
19
|
strokeWidth?: number;
|
|
20
|
-
|
|
20
|
+
dashPattern?: Array<number>;
|
|
21
21
|
/** 整体透明度 0~1 */
|
|
22
22
|
opacity?: number;
|
|
23
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/primitive/ellipse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/primitive/ellipse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
import { ScenePrimitive } from './scene';
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
6
|
-
export type Transform = {
|
|
2
|
+
/** Translate transform:沿 x / y 平移(user units) */
|
|
3
|
+
export type TranslateTransform = {
|
|
4
|
+
/** 鉴别字面量 */
|
|
7
5
|
kind: 'translate';
|
|
6
|
+
/** x 方向位移 */
|
|
8
7
|
x: number;
|
|
8
|
+
/** y 方向位移(屏幕 y-down) */
|
|
9
9
|
y: number;
|
|
10
|
-
}
|
|
10
|
+
};
|
|
11
|
+
/** Rotate transform:按角度旋转,可指定旋转中心;中心缺省 = 绕原点 (0, 0) */
|
|
12
|
+
export type RotateTransform = {
|
|
13
|
+
/** 鉴别字面量 */
|
|
11
14
|
kind: 'rotate';
|
|
15
|
+
/** 旋转角度(度,正向 = 屏幕 y-down 下的视觉顺时针) */
|
|
12
16
|
degrees: number;
|
|
17
|
+
/** 旋转中心 x(缺省 0) */
|
|
13
18
|
cx?: number;
|
|
19
|
+
/** 旋转中心 y(缺省 0) */
|
|
14
20
|
cy?: number;
|
|
15
|
-
}
|
|
21
|
+
};
|
|
22
|
+
/** Scale transform:等比 / 非等比缩放;y 缺省 = x(等比) */
|
|
23
|
+
export type ScaleTransform = {
|
|
24
|
+
/** 鉴别字面量 */
|
|
16
25
|
kind: 'scale';
|
|
26
|
+
/** x 轴缩放因子 */
|
|
17
27
|
x: number;
|
|
28
|
+
/** y 轴缩放因子;缺省 = x(等比缩放) */
|
|
18
29
|
y?: number;
|
|
19
30
|
};
|
|
31
|
+
/**
|
|
32
|
+
* Group transform:结构化变换(3 分支 discriminated union)
|
|
33
|
+
* @description 按数组顺序应用(与 SVG transform 多操作列表语义一致);角度=度,缩放 y 缺省等比 x,rotate cx/cy 缺省绕原点。每个 kind 有对应 named type export。
|
|
34
|
+
*/
|
|
35
|
+
export type Transform = TranslateTransform | RotateTransform | ScaleTransform;
|
|
20
36
|
/** 编组:把若干 primitive 用结构化 transforms 包起来 */
|
|
21
37
|
export type GroupPrim = {
|
|
22
38
|
/** 类型判别符 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../src/primitive/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../src/primitive/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,iDAAiD;AACjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,cAAc;IACd,CAAC,EAAE,MAAM,CAAC;IACV,2BAA2B;IAC3B,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,eAAe,GACf,cAAc,CAAC;AAEnB,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,2CAA2C;IAC3C,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,YAAY;IACZ,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitive/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitive/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/primitive/layout.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,MAAM,MAAM,MAAM,GAAG;IACnB,iBAAiB;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,iBAAiB;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -1,42 +1,82 @@
|
|
|
1
1
|
import { ArrowShape } from '../ir/path/arrow';
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
6
|
-
export type PathCommand = {
|
|
2
|
+
/** Move command:移动游标到目标点,不绘制 */
|
|
3
|
+
export type MovePathCommand = {
|
|
4
|
+
/** 鉴别字面量 */
|
|
7
5
|
kind: 'move';
|
|
6
|
+
/** 目标点 [x, y] */
|
|
8
7
|
to: [number, number];
|
|
9
|
-
}
|
|
8
|
+
};
|
|
9
|
+
/** Line command:从游标到目标点画直线 */
|
|
10
|
+
export type LinePathCommand = {
|
|
11
|
+
/** 鉴别字面量 */
|
|
10
12
|
kind: 'line';
|
|
13
|
+
/** 终点 [x, y] */
|
|
11
14
|
to: [number, number];
|
|
12
|
-
}
|
|
15
|
+
};
|
|
16
|
+
/** Quad command:二次贝塞尔,一个控制点 */
|
|
17
|
+
export type QuadPathCommand = {
|
|
18
|
+
/** 鉴别字面量 */
|
|
13
19
|
kind: 'quad';
|
|
20
|
+
/** 控制点 [x, y] */
|
|
14
21
|
control: [number, number];
|
|
22
|
+
/** 终点 [x, y] */
|
|
15
23
|
to: [number, number];
|
|
16
|
-
}
|
|
24
|
+
};
|
|
25
|
+
/** Cubic command:三次贝塞尔,两个控制点 */
|
|
26
|
+
export type CubicPathCommand = {
|
|
27
|
+
/** 鉴别字面量 */
|
|
17
28
|
kind: 'cubic';
|
|
29
|
+
/** 第一控制点 [x, y](影响起点切线) */
|
|
18
30
|
control1: [number, number];
|
|
31
|
+
/** 第二控制点 [x, y](影响终点切线) */
|
|
19
32
|
control2: [number, number];
|
|
33
|
+
/** 终点 [x, y] */
|
|
20
34
|
to: [number, number];
|
|
21
|
-
}
|
|
35
|
+
};
|
|
36
|
+
/** Arc command:以 center 为圆心、给定半径与起末角度的圆弧(center-parameterization) */
|
|
37
|
+
export type ArcPathCommand = {
|
|
38
|
+
/** 鉴别字面量 */
|
|
22
39
|
kind: 'arc';
|
|
40
|
+
/** 圆心 [x, y] */
|
|
23
41
|
center: [number, number];
|
|
42
|
+
/** 半径(user units) */
|
|
24
43
|
radius: number;
|
|
44
|
+
/** 起始角度(度,0° = +x、90° = +y screen-down) */
|
|
25
45
|
startAngle: number;
|
|
46
|
+
/** 终止角度(度) */
|
|
26
47
|
endAngle: number;
|
|
48
|
+
/** 是否逆时针扫描;缺省 / `false` = CW(屏幕坐标系正向) */
|
|
27
49
|
counterClockwise?: boolean;
|
|
28
|
-
}
|
|
50
|
+
};
|
|
51
|
+
/** EllipseArc command:以 center 为圆心、给定 x/y 半径与起末角度的椭圆弧;可选 rotation */
|
|
52
|
+
export type EllipseArcPathCommand = {
|
|
53
|
+
/** 鉴别字面量 */
|
|
29
54
|
kind: 'ellipseArc';
|
|
55
|
+
/** 圆心 [x, y] */
|
|
30
56
|
center: [number, number];
|
|
57
|
+
/** x 轴半径 */
|
|
31
58
|
radiusX: number;
|
|
59
|
+
/** y 轴半径 */
|
|
32
60
|
radiusY: number;
|
|
61
|
+
/** 椭圆整体旋转角度(度),缺省 0 */
|
|
33
62
|
rotation?: number;
|
|
63
|
+
/** 起始角度(度) */
|
|
34
64
|
startAngle: number;
|
|
65
|
+
/** 终止角度(度) */
|
|
35
66
|
endAngle: number;
|
|
67
|
+
/** 是否逆时针扫描;缺省 / `false` = CW */
|
|
36
68
|
counterClockwise?: boolean;
|
|
37
|
-
}
|
|
69
|
+
};
|
|
70
|
+
/** Close command:闭合当前子路径回最近一次 move 起点 */
|
|
71
|
+
export type ClosePathCommand = {
|
|
72
|
+
/** 鉴别字面量;无其他字段 */
|
|
38
73
|
kind: 'close';
|
|
39
74
|
};
|
|
75
|
+
/**
|
|
76
|
+
* Path 命令:结构化路径绘制操作(7 分支 discriminated union)
|
|
77
|
+
* @description discriminated union 按 kind 分发;坐标 / 角度均使用 user units(角度=度,0=+x、90=+y/视觉下、CW=正)。各 adapter 自行翻译为原生 API:SVG 拼 `d` 字符串、Canvas 调 ctx.moveTo/lineTo/arc 等。每个 kind 有对应 named type export,便于 wrapper / `Pick<>` 派生。
|
|
78
|
+
*/
|
|
79
|
+
export type PathCommand = MovePathCommand | LinePathCommand | QuadPathCommand | CubicPathCommand | ArcPathCommand | EllipseArcPathCommand | ClosePathCommand;
|
|
40
80
|
/**
|
|
41
81
|
* 端点级解析后的箭头视觉规格(Scene primitive 层)
|
|
42
82
|
* @description compile/path.ts 把 IR `arrowDetail` 顶层 + start/end merge 后产出此结构。`shape` 必填、其余视觉字段全 optional:缺省字段交给 renderer 走 context-stroke / 硬编码 fallback,保持向后兼容
|
|
@@ -69,16 +109,16 @@ export type PathPrim = {
|
|
|
69
109
|
fill?: string;
|
|
70
110
|
/** 填充透明度 0~1 */
|
|
71
111
|
fillOpacity?: number;
|
|
72
|
-
/**
|
|
112
|
+
/** 填充规则:`nonzero`(默认)/ `evenodd`(环形 / 孔洞场景) */
|
|
73
113
|
fillRule?: 'nonzero' | 'evenodd';
|
|
74
114
|
/** 描边色 */
|
|
75
115
|
stroke?: string;
|
|
76
|
-
/** 描边透明度 0~1
|
|
116
|
+
/** 描边透明度 0~1 */
|
|
77
117
|
strokeOpacity?: number;
|
|
78
118
|
/** 描边宽度 */
|
|
79
119
|
strokeWidth?: number;
|
|
80
|
-
/**
|
|
81
|
-
|
|
120
|
+
/** 描边 dash pattern */
|
|
121
|
+
dashPattern?: Array<number>;
|
|
82
122
|
/** 端点形状 */
|
|
83
123
|
strokeLinecap?: 'butt' | 'round' | 'square';
|
|
84
124
|
/** 拐点形状 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/primitive/path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/primitive/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,12 @@ export type RectPrim = {
|
|
|
16
16
|
fillOpacity?: number;
|
|
17
17
|
/** 描边色 */
|
|
18
18
|
stroke?: string;
|
|
19
|
-
/** 描边透明度 0~1
|
|
19
|
+
/** 描边透明度 0~1 */
|
|
20
20
|
strokeOpacity?: number;
|
|
21
21
|
/** 描边宽度 */
|
|
22
22
|
strokeWidth?: number;
|
|
23
|
-
/**
|
|
24
|
-
|
|
23
|
+
/** 描边 dash pattern(如 [4, 2]) */
|
|
24
|
+
dashPattern?: Array<number>;
|
|
25
25
|
/** 圆角半径(同时作用于 rx/ry) */
|
|
26
26
|
cornerRadius?: number;
|
|
27
27
|
/** 整体透明度 0~1 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/primitive/rect.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/primitive/rect.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,CAAC,EAAE,MAAM,CAAC;IACV,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
|
@@ -3,17 +3,17 @@ import { GroupPrim } from './group';
|
|
|
3
3
|
import { PathPrim } from './path';
|
|
4
4
|
import { RectPrim } from './rect';
|
|
5
5
|
import { TextPrim } from './text';
|
|
6
|
-
import {
|
|
6
|
+
import { Layout } from './layout';
|
|
7
7
|
/**
|
|
8
8
|
* Scene primitive:渲染目标无关的最大公约子集
|
|
9
9
|
* @description 所有 adapter(SVG/Canvas/PDF/Skia)都应能消费;不允许出现 SVG-only 或 Canvas-only 特性(filter/marker/imageData)
|
|
10
10
|
*/
|
|
11
11
|
export type ScenePrimitive = RectPrim | EllipsePrim | TextPrim | PathPrim | GroupPrim;
|
|
12
|
-
/** 场景:渲染目标无关的"已布局好的图元集合 +
|
|
12
|
+
/** 场景:渲染目标无关的"已布局好的图元集合 + layout" */
|
|
13
13
|
export type Scene = {
|
|
14
14
|
/** 已布局好的图元数组,按渲染顺序排列 */
|
|
15
15
|
primitives: Array<ScenePrimitive>;
|
|
16
|
-
/**
|
|
17
|
-
|
|
16
|
+
/** 整个场景的布局边界 */
|
|
17
|
+
layout: Layout;
|
|
18
18
|
};
|
|
19
19
|
//# sourceMappingURL=scene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../../../src/primitive/scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../../../src/primitive/scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtF,qCAAqC;AACrC,MAAM,MAAM,KAAK,GAAG;IAClB,wBAAwB;IACxB,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** 行级字段(每行可独立指定),未填走块级 TextPrim 默认 */
|
|
2
2
|
export type TextLine = {
|
|
3
|
+
/** 行文字内容 */
|
|
3
4
|
text: string;
|
|
5
|
+
/** 行级字号 override(user units);缺省走块级 TextPrim.fontSize */
|
|
4
6
|
fontSize?: number;
|
|
7
|
+
/** 行级字体族 override(CSS font-family);缺省走块级 */
|
|
5
8
|
fontFamily?: string;
|
|
9
|
+
/** 行级字重 override(CSS font-weight);缺省走块级 */
|
|
6
10
|
fontWeight?: string | number;
|
|
11
|
+
/** 行级字形 override;缺省走块级 */
|
|
7
12
|
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
13
|
+
/** 行级文字颜色 override;缺省走块级 TextPrim.fill */
|
|
8
14
|
fill?: string;
|
|
15
|
+
/** 行级透明度 0..1 override;缺省走块级 */
|
|
9
16
|
opacity?: number;
|
|
10
17
|
};
|
|
11
18
|
/**
|
|
12
19
|
* 文本原语(measuredWidth/Height 由 Scene 编译阶段算好)
|
|
13
|
-
* @description 多行 lines 至少 1 行;renderer
|
|
20
|
+
* @description 多行 lines 至少 1 行;renderer 按 lineHeight 堆叠每行、按 baseline 在 (x,y) 锚点上下对齐。顶层属性是块级默认,单行 TextLine 可覆盖
|
|
14
21
|
*/
|
|
15
22
|
export type TextPrim = {
|
|
16
23
|
type: 'text';
|
|
@@ -26,7 +33,7 @@ export type TextPrim = {
|
|
|
26
33
|
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
27
34
|
align: 'start' | 'middle' | 'end';
|
|
28
35
|
baseline: 'top' | 'middle' | 'bottom' | 'alphabetic';
|
|
29
|
-
/**
|
|
36
|
+
/** 行高,多行下相邻行的垂直距离 */
|
|
30
37
|
lineHeight: number;
|
|
31
38
|
/** 编译期算好的整块文字宽度 = max line width */
|
|
32
39
|
measuredWidth: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/primitive/text.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/primitive/text.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,0BAA0B;IAC1B,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,+BAA+B;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,0CAA0C;IAC1C,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;IACrD,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
package/dist/es/types.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
/** 获取对象所有值的联合类型,等价于 (typeof T)[keyof typeof T] */
|
|
2
2
|
export type ValueOf<T extends object> = T[keyof T];
|
|
3
|
+
/**
|
|
4
|
+
* 类型层等价检查工具(internal idiom,公开 API 不导出)
|
|
5
|
+
* @description 当 A、B 完全等价时类型为 `true`,否则为 `false`——配合 `as const satisfies` 实现"字段表必须完备覆盖类型 key 集合"的互锁;漏字段或多字段 TS 编译期报错
|
|
6
|
+
* @example
|
|
7
|
+
* const NODE_FIELDS = ['id', 'shape'] as const satisfies ReadonlyArray<keyof IRNode>;
|
|
8
|
+
* type _Check = AssertEqual<typeof NODE_FIELDS[number], keyof IRNode>;
|
|
9
|
+
*/
|
|
10
|
+
export type AssertEqual<TActual, TExpected> = [TActual] extends [TExpected] ? [TExpected] extends [TActual] ? true : false : false;
|
|
3
11
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/es/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GACvE,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAC3B,IAAI,GACJ,KAAK,GACP,KAAK,CAAC"}
|
|
@@ -2,9 +2,9 @@ const require_rect = require("../geometry/rect.cjs");
|
|
|
2
2
|
const require_position = require("./position.cjs");
|
|
3
3
|
const require_node = require("./node.cjs");
|
|
4
4
|
const require_text_metrics = require("./text-metrics.cjs");
|
|
5
|
-
const
|
|
5
|
+
const require_index = require("./path/index.cjs");
|
|
6
6
|
const require_precision = require("./precision.cjs");
|
|
7
|
-
const
|
|
7
|
+
const require_layout = require("./layout.cjs");
|
|
8
8
|
//#region src/compile/compile.ts
|
|
9
9
|
/**
|
|
10
10
|
* 把 coordinate 注册成 0×0 NodeLayout
|
|
@@ -29,37 +29,62 @@ var coordinateAsLayout = (id, center) => ({
|
|
|
29
29
|
fontSize: 0
|
|
30
30
|
});
|
|
31
31
|
/**
|
|
32
|
+
* 默认 warn dispatcher:dev 模式 console.warn、生产静默
|
|
33
|
+
* @description 用户传 onWarn 时使用用户的;不传走此 fallback
|
|
34
|
+
*/
|
|
35
|
+
var defaultWarnDispatcher = (warning) => {
|
|
36
|
+
if (typeof process !== "undefined" && process.env.NODE_ENV === "production") return;
|
|
37
|
+
console.warn(`[retikz] ${warning.code} at ${warning.path}: ${warning.message}`);
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
32
40
|
* IR → Scene 纯函数转换,所有 adapter 共享
|
|
33
|
-
* @description Pass 1 处理 Node/coordinate 并注册 nodeIndex、发 primitive、累积 bbox;Pass 2 解析 Path 端点写 d 字符串;末端按 precision 折算
|
|
41
|
+
* @description Pass 1 处理 Node/coordinate 并注册 nodeIndex、发 primitive、累积 bbox;Pass 2 解析 Path 端点写 d 字符串;末端按 precision 折算 layout
|
|
34
42
|
*/
|
|
35
43
|
var compileToScene = (ir, options = {}) => {
|
|
36
44
|
const measureText = options.measureText ?? require_text_metrics.fallbackMeasurer;
|
|
37
|
-
const
|
|
45
|
+
const layoutPadding = options.padding ?? 10;
|
|
38
46
|
const round = require_precision.makeRound(options.precision ?? 2);
|
|
39
47
|
const nodeDistance = options.nodeDistance;
|
|
48
|
+
const onWarn = options.onWarn ?? defaultWarnDispatcher;
|
|
40
49
|
const primitives = [];
|
|
41
50
|
const nodeIndex = /* @__PURE__ */ new Map();
|
|
42
51
|
const allPoints = [];
|
|
43
|
-
for (
|
|
44
|
-
const
|
|
45
|
-
if (child.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
for (let i = 0; i < ir.children.length; i++) {
|
|
53
|
+
const child = ir.children[i];
|
|
54
|
+
if (child.type === "node") {
|
|
55
|
+
const layout = require_node.layoutNode(child, measureText, nodeIndex, nodeDistance);
|
|
56
|
+
if (child.id) nodeIndex.set(child.id, layout);
|
|
57
|
+
for (const prim of require_node.emitNodePrimitives(layout, round)) primitives.push(prim);
|
|
58
|
+
allPoints.push(require_rect.rect.anchor(layout.rect, "north-west"), require_rect.rect.anchor(layout.rect, "north-east"), require_rect.rect.anchor(layout.rect, "south-west"), require_rect.rect.anchor(layout.rect, "south-east"));
|
|
59
|
+
} else if (child.type === "coordinate") {
|
|
60
|
+
const center = require_position.resolvePosition(child.position, nodeIndex, nodeDistance);
|
|
61
|
+
if (!center) {
|
|
62
|
+
onWarn({
|
|
63
|
+
code: "POLAR_ORIGIN_UNRESOLVED",
|
|
64
|
+
message: `Cannot resolve position for coordinate '${child.id}'; polar.origin or at.of may reference an undefined node`,
|
|
65
|
+
path: `children[${i}].coordinate.position`
|
|
66
|
+
});
|
|
67
|
+
throw new Error(`Cannot resolve position for coordinate ${child.id}; polar.origin or at.of may reference an undefined node`);
|
|
68
|
+
}
|
|
69
|
+
nodeIndex.set(child.id, coordinateAsLayout(child.id, center));
|
|
70
|
+
}
|
|
52
71
|
}
|
|
53
|
-
for (
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
72
|
+
for (let i = 0; i < ir.children.length; i++) {
|
|
73
|
+
const child = ir.children[i];
|
|
74
|
+
if (child.type === "path") {
|
|
75
|
+
const result = require_index.emitPathPrimitive(child, nodeIndex, round, measureText, {
|
|
76
|
+
onWarn,
|
|
77
|
+
irPath: `children[${i}].path`
|
|
78
|
+
});
|
|
79
|
+
if (result) {
|
|
80
|
+
for (const prim of result.primitives) primitives.push(prim);
|
|
81
|
+
for (const p of result.points) allPoints.push(p);
|
|
82
|
+
}
|
|
58
83
|
}
|
|
59
84
|
}
|
|
60
85
|
return {
|
|
61
86
|
primitives,
|
|
62
|
-
|
|
87
|
+
layout: require_layout.computeLayout(allPoints, layoutPadding, round)
|
|
63
88
|
};
|
|
64
89
|
};
|
|
65
90
|
//#endregion
|