@retikz/core 0.2.0-alpha.1 → 0.2.0-alpha.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.
Files changed (55) hide show
  1. package/dist/es/compile/compile.d.ts.map +1 -1
  2. package/dist/es/compile/compile.js +7 -5
  3. package/dist/es/compile/node.d.ts +2 -2
  4. package/dist/es/compile/node.d.ts.map +1 -1
  5. package/dist/es/compile/node.js +7 -7
  6. package/dist/es/compile/path/index.js +1 -1
  7. package/dist/es/compile/path/label.d.ts +1 -1
  8. package/dist/es/compile/path/label.d.ts.map +1 -1
  9. package/dist/es/compile/path/label.js +17 -4
  10. package/dist/es/compile/style.d.ts +46 -0
  11. package/dist/es/compile/style.d.ts.map +1 -0
  12. package/dist/es/compile/style.js +259 -0
  13. package/dist/es/index.d.ts +2 -2
  14. package/dist/es/index.d.ts.map +1 -1
  15. package/dist/es/index.js +2 -2
  16. package/dist/es/ir/node.d.ts +5 -2
  17. package/dist/es/ir/node.d.ts.map +1 -1
  18. package/dist/es/ir/node.js +1 -0
  19. package/dist/es/ir/path/path.d.ts +531 -0
  20. package/dist/es/ir/path/path.d.ts.map +1 -1
  21. package/dist/es/ir/path/path.js +1 -0
  22. package/dist/es/ir/path/step.d.ts +834 -0
  23. package/dist/es/ir/path/step.d.ts.map +1 -1
  24. package/dist/es/ir/path/step.js +5 -1
  25. package/dist/es/ir/scope.d.ts +3503 -3
  26. package/dist/es/ir/scope.d.ts.map +1 -1
  27. package/dist/es/ir/scope.js +64 -4
  28. package/dist/lib/compile/compile.cjs +7 -5
  29. package/dist/lib/compile/compile.d.ts.map +1 -1
  30. package/dist/lib/compile/node.cjs +7 -7
  31. package/dist/lib/compile/node.d.ts +2 -2
  32. package/dist/lib/compile/node.d.ts.map +1 -1
  33. package/dist/lib/compile/path/index.cjs +1 -1
  34. package/dist/lib/compile/path/label.cjs +17 -4
  35. package/dist/lib/compile/path/label.d.ts +1 -1
  36. package/dist/lib/compile/path/label.d.ts.map +1 -1
  37. package/dist/lib/compile/style.cjs +262 -0
  38. package/dist/lib/compile/style.d.ts +46 -0
  39. package/dist/lib/compile/style.d.ts.map +1 -0
  40. package/dist/lib/index.cjs +4 -0
  41. package/dist/lib/index.d.ts +2 -2
  42. package/dist/lib/index.d.ts.map +1 -1
  43. package/dist/lib/ir/node.cjs +1 -0
  44. package/dist/lib/ir/node.d.ts +5 -2
  45. package/dist/lib/ir/node.d.ts.map +1 -1
  46. package/dist/lib/ir/path/path.cjs +1 -0
  47. package/dist/lib/ir/path/path.d.ts +531 -0
  48. package/dist/lib/ir/path/path.d.ts.map +1 -1
  49. package/dist/lib/ir/path/step.cjs +5 -1
  50. package/dist/lib/ir/path/step.d.ts +834 -0
  51. package/dist/lib/ir/path/step.d.ts.map +1 -1
  52. package/dist/lib/ir/scope.cjs +67 -3
  53. package/dist/lib/ir/scope.d.ts +3503 -3
  54. package/dist/lib/ir/scope.d.ts.map +1 -1
  55. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/ir/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,aAAa,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC,CAAC;CAC3D,CAAC;AAOF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,CAAC,CAAC,UAAU,KAAG,IAE5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCrB,CAAC"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/ir/scope.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmGrB,CAAC"}
@@ -1,6 +1,47 @@
1
+ import { FontSchema } from "./font.js";
2
+ import { ArrowDetailSchema } from "./path/arrow.js";
3
+ import { PathSchema } from "./path/path.js";
4
+ import { NodeSchema } from "./node.js";
1
5
  import { TransformSchema } from "./transform.js";
2
6
  import { z } from "zod";
3
7
  //#region src/ir/scope.ts
8
+ /**
9
+ * every node 默认样式 schema
10
+ * @description 从 NodeSchema 派生,排除实例专属字段(type / id / position / text / label);
11
+ * 含形状 / 间距 / scale / rotate / color 等所有可作默认的 node 样式字段
12
+ */
13
+ var NodeDefaultSchema = NodeSchema.omit({
14
+ type: true,
15
+ id: true,
16
+ position: true,
17
+ text: true,
18
+ label: true
19
+ }).strict();
20
+ /**
21
+ * every path 默认样式 schema
22
+ * @description 从 PathSchema 派生,排除 type / children / arrow / arrowDetail(arrow 走独立 arrowDefault 通道,免双入口)
23
+ */
24
+ var PathDefaultSchema = PathSchema.omit({
25
+ type: true,
26
+ children: true,
27
+ arrow: true,
28
+ arrowDetail: true
29
+ }).strict();
30
+ /**
31
+ * every label 默认样式 schema(node label 与 step label 共享)
32
+ * @description 单通道双宿主:node-label 跟 node.color、step-label 跟 path.color;本 schema 只定义可继承的 label 样式字段
33
+ */
34
+ var LabelDefaultSchema = z.object({
35
+ color: z.string().optional().describe("Master color for labels in this scope; textColor falls back to it."),
36
+ textColor: z.string().optional().describe("Default text color for node labels and step labels in this scope."),
37
+ opacity: z.number().min(0).max(1).optional().describe("Default label opacity 0..1."),
38
+ font: FontSchema.optional().describe("Default label font (family / size / weight / style); per-field fallback.")
39
+ }).strict().describe("Default style applied to every label (node label + step label) in this scope (TikZ `every label`). All fields optional; unknown keys are rejected.");
40
+ /**
41
+ * every arrow 默认样式 schema
42
+ * @description 直接复用 ArrowDetailSchema(shape / scale / length / width / color / fill / opacity / lineWidth + start / end)
43
+ */
44
+ var ArrowDefaultSchema = ArrowDetailSchema;
4
45
  /** schema 注册顺序:scene.ts import 时由 __registerChildSchema 一次性回灌;之后只读 */
5
46
  var childSchemaRef = null;
6
47
  /**
@@ -11,19 +52,38 @@ var __registerChildSchema = (schema) => {
11
52
  childSchemaRef = schema;
12
53
  };
13
54
  /**
14
- * Scope schema:4 IRScope 字段
55
+ * Scope schema:容器 + 局部 transform + 样式默认挂点
15
56
  * @description 直接 `z.object` 让 ChildSchema discriminatedUnion 能识别 `type` 鉴别字段;
16
- * children 字段内部用 z.lazy 引用 ChildSchema 实现递归,避免直接 `z.lazy(() => z.object(...))` 让外层 union 拒识 type
57
+ * children 字段内部用 z.lazy 引用 ChildSchema 实现递归,避免直接 `z.lazy(() => z.object(...))` 让外层 union 拒识 type
58
+ * alpha.2 加:① 级联 graphic state(color + stroke / fill / strokeWidth / opacity / fillOpacity / drawOpacity);
59
+ * ② 四通道 every-X 默认(nodeDefault / pathDefault / labelDefault / arrowDefault);③ resetStyle 继承屏障。
17
60
  */
18
61
  var ScopeSchema = z.object({
19
62
  type: z.literal("scope").describe("Discriminator marking this child as a scope container."),
20
63
  id: z.string().min(1).optional().describe("Optional reference id; when set, the scope registers a synthetic rectangle bbox node in the **parent** namespace frame so paths / positions can target the scope as a whole. scope.id always registers in the parent frame, regardless of `localNamespace` (it is the external handle)."),
21
64
  localNamespace: z.boolean().optional().describe("When true, the scope creates a local namespace boundary — child node / coordinate / nested-scope ids registered inside do NOT propagate to the parent namespace; external lookups cannot see them. Default false (matches TikZ pgf default: child ids flow up to global). scope.id itself always registers in the parent frame regardless of this flag."),
22
65
  transforms: z.array(TransformSchema).optional().describe("Local transforms applied to all scope children; array order = application order (first element applied innermost, matching Scene `GroupPrim.transforms` / SVG transform list). Supports 6 variants; the 4 translate variants are lowered to Cartesian translate at compile time."),
66
+ color: z.string().optional().describe("Cascading master color for all elements in this scope (TikZ scope `color=`). Stroke / fill / text of inner elements default to it unless individually overridden; cascades into edge labels and arrows."),
67
+ stroke: z.string().optional().describe("Cascading default stroke color for inner nodes and paths; overrides the cascading master color for the stroke channel."),
68
+ fill: z.string().optional().describe("Cascading default fill color for inner nodes and paths."),
69
+ strokeWidth: z.number().optional().describe("Cascading default stroke width (user units) for inner nodes and paths."),
70
+ opacity: z.number().min(0).max(1).optional().describe("Cascading default whole-element opacity 0..1. Replaces (does NOT compound across nested scopes — TikZ default)."),
71
+ fillOpacity: z.number().min(0).max(1).optional().describe("Cascading default fill opacity 0..1 for inner nodes and paths."),
72
+ drawOpacity: z.number().min(0).max(1).optional().describe("Cascading default stroke opacity 0..1 (TikZ `draw opacity`) for inner nodes and paths."),
73
+ nodeDefault: NodeDefaultSchema.optional().describe("Default style applied to every node in this scope (TikZ `every node`). Flat channel, independent from the other defaults."),
74
+ pathDefault: PathDefaultSchema.optional().describe("Default style applied to every path in this scope (TikZ `every path`); arrows use the separate arrowDefault channel."),
75
+ labelDefault: LabelDefaultSchema.optional().describe("Default style applied to every label (node label + step label) in this scope (TikZ `every label`)."),
76
+ arrowDefault: ArrowDefaultSchema.optional().describe("Default style applied to every arrow in this scope (TikZ `every arrow`)."),
77
+ resetStyle: z.union([z.boolean(), z.array(z.enum([
78
+ "node",
79
+ "path",
80
+ "label",
81
+ "arrow"
82
+ ]))]).optional().describe("Inheritance barrier: drop the outer scope cascade + every-X defaults for the listed channels (or all when true), falling back to the built-in baseline. Only cuts the scope-inheritance axis; labels / arrows still follow their host path / node resolved color (structural relation, not scope inheritance)."),
23
83
  children: z.array(z.lazy(() => {
24
84
  if (!childSchemaRef) throw new Error("ScopeSchema: ChildSchema not registered yet; ensure scene.ts loaded");
25
85
  return childSchemaRef;
26
86
  })).describe("Scope children: nested nodes / paths / coordinates / scopes. Recursive via the parent ChildSchema (registered late to break the IRChild <-> IRScope cycle).")
27
- }).describe("Scope container: groups child IR elements and applies local transforms. Corresponds to TikZ `\\begin{scope}` (with optional `local bounding box=id` when id is set, and `name prefix`-like isolation when localNamespace is true).");
87
+ }).describe("Scope container: groups child IR elements, applies local transforms, and acts as a style-default anchor (cascading graphic state + every-X defaults + resetStyle barrier). Corresponds to TikZ `\\begin{scope}`.");
28
88
  //#endregion
29
- export { ScopeSchema, __registerChildSchema };
89
+ export { ArrowDefaultSchema, LabelDefaultSchema, NodeDefaultSchema, PathDefaultSchema, ScopeSchema, __registerChildSchema };
@@ -6,6 +6,7 @@ const require_node = require("./node.cjs");
6
6
  const require_text_metrics = require("./text-metrics.cjs");
7
7
  const require_index = require("./path/index.cjs");
8
8
  const require_precision = require("./precision.cjs");
9
+ const require_style = require("./style.cjs");
9
10
  const require_layout = require("./layout.cjs");
10
11
  //#region src/compile/compile.ts
11
12
  /**
@@ -120,12 +121,13 @@ var compileToScene = (ir, options = {}) => {
120
121
  * @param locatorPrefix IR locator 前缀(如 `''` 表示顶层、`children[2].scope.` 表示某 scope 内)
121
122
  * @param layoutsAccumulator 当前 scope 子树所有"实体"layout(node / coordinate / 嵌套 scope.id synthetic)累积——专给上层 scope.id bbox 计算用;顶层调用传一个共享数组(用得着就用,丢弃也不影响)
122
123
  * @param pathsAccumulator 当前层级收集的 pending paths——由调用方分配并在合适时机 resolve
124
+ * @param styleStack 从根到当前层级累积的样式 frame 栈(scope 级联 graphic state + 四通道 every-X + resetStyle);node / path 进入时按 inside-out per-field 解析 effective 样式
123
125
  */
124
- const processChildren = (children, chain, sink, locatorPrefix, layoutsAccumulator, pathsAccumulator) => {
126
+ const processChildren = (children, chain, sink, locatorPrefix, layoutsAccumulator, pathsAccumulator, styleStack) => {
125
127
  for (let i = 0; i < children.length; i++) {
126
128
  const child = children[i];
127
129
  if (child.type === "node") {
128
- const layout = require_node.layoutNode(child, measureText, nameStack, nodeDistance, chain);
130
+ const layout = require_node.layoutNode(require_style.resolveNodeStyle(child, styleStack), measureText, nameStack, nodeDistance, chain, require_style.resolveLabelDefault(styleStack));
129
131
  const globalLayout = chain.length === 0 ? layout : require_scope.projectLayoutToGlobal(layout, chain);
130
132
  if (child.id) nameStack.register(child.id, globalLayout, `${locatorPrefix}children[${i}].node.id`);
131
133
  for (const prim of require_node.emitNodePrimitives(layout, round)) sink.push(prim);
@@ -165,7 +167,7 @@ var compileToScene = (ir, options = {}) => {
165
167
  * 让 scope 内 path 自引用本 scope.id 端点取真 bbox 而非 placeholder */
166
168
  const innerPaths = [];
167
169
  try {
168
- processChildren(child.children, innerChain, innerSink, `${locatorPrefix}children[${i}].scope.`, innerLayouts, innerPaths);
170
+ processChildren(child.children, innerChain, innerSink, `${locatorPrefix}children[${i}].scope.`, innerLayouts, innerPaths, [...styleStack, require_style.buildStyleFrame(child)]);
169
171
  if (child.id) {
170
172
  const bbox = require_scope.computeScopeBoundingBox(innerLayouts);
171
173
  const fallbackOrigin = innerChain.length === 0 ? [0, 0] : require_scope.applyTransformChain([0, 0], innerChain);
@@ -186,14 +188,14 @@ var compileToScene = (ir, options = {}) => {
186
188
  if (hasOwnTransforms) group.transforms = [...ownTransforms];
187
189
  sink.push(group);
188
190
  } else pathsAccumulator.push({
189
- path: child,
191
+ path: require_style.resolveEffectivePath(child, styleStack),
190
192
  irPath: `${locatorPrefix}children[${i}].path`,
191
193
  scopeChain: chain
192
194
  });
193
195
  }
194
196
  };
195
197
  const rootPaths = [];
196
- processChildren(ir.children, [], primitives, "", [], rootPaths);
198
+ processChildren(ir.children, [], primitives, "", [], rootPaths, []);
197
199
  resolvePendingPaths(rootPaths);
198
200
  return {
199
201
  primitives,
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/compile/compile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAwC,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAa,KAAK,EAA6B,MAAM,cAAc,CAAC;AAahF,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AA2CrE,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,IAAI,EACA,2BAA2B,GAC3B,gBAAgB,GAChB,0BAA0B,GAC1B,wBAAwB,GACxB,yBAAyB,GACzB,sBAAsB,GACtB,8BAA8B,GAC9B,oBAAoB,GACpB,mBAAmB,GACnB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GAAG;IAC3B,oCAAoC;IACpC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5C,CAAC;AAsDF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,EAAE,EAAE,UAAS,cAAmB,KAAG,KAoMrE,CAAC"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/compile/compile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAwC,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAa,KAAK,EAA6B,MAAM,cAAc,CAAC;AAoBhF,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AA2CrE,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,IAAI,EACA,2BAA2B,GAC3B,gBAAgB,GAChB,0BAA0B,GAC1B,wBAAwB,GACxB,yBAAyB,GACzB,sBAAsB,GACtB,8BAA8B,GAC9B,oBAAoB,GACpB,mBAAmB,GACnB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GAAG;IAC3B,oCAAoC;IACpC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5C,CAAC;AAsDF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,EAAE,EAAE,UAAS,cAAmB,KAAG,KA+MrE,CAAC"}
@@ -154,7 +154,7 @@ var angleBoundaryOf = (layout, angleDeg) => {
154
154
  * scope 局部度量),调用方负责后续 `projectLayoutToGlobal` / `applyTransformChain` 投回全局;
155
155
  * 笛卡尔字面量 `Position` 已在 scope 局部度量,行为延续 v0.1。
156
156
  */
157
- var layoutNode = (node, measureText, nameStack, nodeDistance, scopeChain = []) => {
157
+ var layoutNode = (node, measureText, nameStack, nodeDistance, scopeChain = [], labelDefault) => {
158
158
  const sx = node.xScale ?? node.scale ?? 1;
159
159
  const sy = node.yScale ?? node.scale ?? 1;
160
160
  const fontScale = Math.min(sx, sy);
@@ -233,12 +233,12 @@ var layoutNode = (node, measureText, nameStack, nodeDistance, scopeChain = []) =
233
233
  text: lab.text,
234
234
  position: lab.position ?? "above",
235
235
  distance: lab.distance ?? DEFAULT_LABEL_DISTANCE,
236
- textColor: lab.textColor ?? node.textColor,
237
- opacity: lab.opacity,
238
- fontSize: (labFont?.size ?? baseFontSize) * fontScale,
239
- fontFamily: labFont?.family ?? fontFamily,
240
- fontWeight: labFont?.weight ?? fontWeight,
241
- fontStyle: labFont?.style ?? fontStyle
236
+ textColor: lab.textColor ?? labelDefault?.textColor ?? labelDefault?.color ?? node.textColor,
237
+ opacity: lab.opacity ?? labelDefault?.opacity,
238
+ fontSize: (labFont?.size ?? labelDefault?.font?.size ?? baseFontSize) * fontScale,
239
+ fontFamily: labFont?.family ?? labelDefault?.font?.family ?? fontFamily,
240
+ fontWeight: labFont?.weight ?? labelDefault?.font?.weight ?? fontWeight,
241
+ fontStyle: labFont?.style ?? labelDefault?.font?.style ?? fontStyle
242
242
  };
243
243
  });
244
244
  return {
@@ -1,6 +1,6 @@
1
1
  import { Position } from '../geometry/point';
2
2
  import { Rect, RectAnchor } from '../geometry/rect';
3
- import { AtDirection, IRNode, NodeShape } from '../ir';
3
+ import { AtDirection, IRLabelDefault, IRNode, NodeShape } from '../ir';
4
4
  import { ScenePrimitive, TextLine, Transform } from '../primitive';
5
5
  import { NameStack } from './name-stack';
6
6
  import { TextMeasurer } from './text-metrics';
@@ -99,7 +99,7 @@ export declare const angleBoundaryOf: (layout: NodeLayout, angleDeg: number) =>
99
99
  * scope 局部度量),调用方负责后续 `projectLayoutToGlobal` / `applyTransformChain` 投回全局;
100
100
  * 笛卡尔字面量 `Position` 已在 scope 局部度量,行为延续 v0.1。
101
101
  */
102
- export declare const layoutNode: (node: IRNode, measureText: TextMeasurer, nameStack: NameStack, nodeDistance?: number, scopeChain?: ReadonlyArray<Transform>) => NodeLayout;
102
+ export declare const layoutNode: (node: IRNode, measureText: TextMeasurer, nameStack: NameStack, nodeDistance?: number, scopeChain?: ReadonlyArray<Transform>, labelDefault?: IRLabelDefault) => NodeLayout;
103
103
  /**
104
104
  * NodeLayout → Scene primitives
105
105
  * @description shape 主体按 shape 分发(rect/ellipse/path);text 始终走 TextPrim;有旋转时外层 GroupPrim 用 `rotate(deg cx cy)` 统一包裹(text 必须靠 group 旋转)
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/compile/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/compile/node.ts"],"names":[],"mappings":"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"}
@@ -47,7 +47,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
47
47
  const collectLabel = (step, sampleAt) => {
48
48
  if (step.kind === "move" || step.kind === "cycle" || !("label" in step) || !step.label) return;
49
49
  const sample = sampleAt(require_label.tForLabelPosition(step.label.position));
50
- const r = require_label.emitLabelPrimitive(step.label, sample, measureText, round);
50
+ const r = require_label.emitLabelPrimitive(step.label, sample, measureText, round, path.opacity);
51
51
  labelPrims.push(r.primitive);
52
52
  for (const p of r.points) points.push(p);
53
53
  };
@@ -27,13 +27,22 @@ var tForLabelPosition = (pos) => {
27
27
  * step.label + 段采样 → TextPrim(sloped 时裹一层 group 旋转)
28
28
  * @description 默认 side='above'/position='midway':above/below 锚点 y±offset、align=middle、baseline=bottom/top;left/right x±offset、align=end/start、baseline=middle;sloped 不偏移裹 group rotate(angle, cx, cy) 由切线 atan2 算(SVG y-down CW 正)。返回 primitive + layout 外接点
29
29
  */
30
- var emitLabelPrimitive = (label, sample, measureText, round) => {
31
- const fontSize = LABEL_FONT_SIZE;
30
+ var emitLabelPrimitive = (label, sample, measureText, round, hostOpacity) => {
31
+ const fontSize = label.font?.size ?? LABEL_FONT_SIZE;
32
+ const fontFamily = label.font?.family;
33
+ const fontWeight = label.font?.weight;
34
+ const fontStyle = label.font?.style;
32
35
  const lineHeight = fontSize * LABEL_LINE_HEIGHT_FACTOR;
33
- const m = measureText(label.text, { size: fontSize });
36
+ const m = measureText(label.text, {
37
+ size: fontSize,
38
+ family: fontFamily,
39
+ weight: fontWeight,
40
+ style: fontStyle
41
+ });
34
42
  const measuredWidth = m.width;
35
43
  const measuredHeight = m.height || lineHeight;
36
44
  const side = label.side ?? "above";
45
+ const labelOpacity = label.opacity !== void 0 ? hostOpacity !== void 0 ? label.opacity * hostOpacity : label.opacity : hostOpacity;
37
46
  let x = sample.point[0];
38
47
  let y = sample.point[1];
39
48
  let align = "middle";
@@ -62,8 +71,12 @@ var emitLabelPrimitive = (label, sample, measureText, round) => {
62
71
  lineHeight: round(lineHeight),
63
72
  measuredWidth: round(measuredWidth),
64
73
  measuredHeight: round(measuredHeight),
65
- fill: "currentColor"
74
+ fill: label.textColor ?? "currentColor"
66
75
  };
76
+ if (fontFamily !== void 0) text.fontFamily = fontFamily;
77
+ if (fontWeight !== void 0) text.fontWeight = fontWeight;
78
+ if (fontStyle !== void 0) text.fontStyle = fontStyle;
79
+ if (labelOpacity !== void 0) text.opacity = labelOpacity;
67
80
  if (side === "sloped") {
68
81
  const groupPrim = {
69
82
  type: "group",
@@ -11,7 +11,7 @@ export declare const tForLabelPosition: (pos: IRStepLabel["position"]) => number
11
11
  * step.label + 段采样 → TextPrim(sloped 时裹一层 group 旋转)
12
12
  * @description 默认 side='above'/position='midway':above/below 锚点 y±offset、align=middle、baseline=bottom/top;left/right x±offset、align=end/start、baseline=middle;sloped 不偏移裹 group rotate(angle, cx, cy) 由切线 atan2 算(SVG y-down CW 正)。返回 primitive + layout 外接点
13
13
  */
14
- export declare const emitLabelPrimitive: (label: IRStepLabel, sample: SegmentSample, measureText: TextMeasurer, round: (n: number) => number) => {
14
+ export declare const emitLabelPrimitive: (label: IRStepLabel, sample: SegmentSample, measureText: TextMeasurer, round: (n: number) => number, hostOpacity?: number) => {
15
15
  primitive: ScenePrimitive;
16
16
  points: Array<IRPosition>;
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmBpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,WAAW,CAAC,UAAU,CAAC,KAAG,MAIhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,WAAW,EAClB,QAAQ,aAAa,EACrB,aAAa,YAAY,EACzB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CA8ExD,CAAC"}
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmBpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,WAAW,CAAC,UAAU,CAAC,KAAG,MAIhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,WAAW,EAClB,QAAQ,aAAa,EACrB,aAAa,YAAY,EACzB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAc,MAAM,KACnB;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAkGxD,CAAC"}
@@ -0,0 +1,262 @@
1
+ //#region src/compile/style.ts
2
+ /** 拷贝源对象中 `!== undefined` 的字段(per-field 合并按存在性,不按真假值) */
3
+ var pickDefinedKeys = (src) => {
4
+ const out = {};
5
+ for (const key of Object.keys(src)) {
6
+ const value = src[key];
7
+ if (value !== void 0) out[key] = value;
8
+ }
9
+ return out;
10
+ };
11
+ /**
12
+ * 从 IRScope 抽取样式 frame
13
+ * @description 只摘样式相关字段(级联 graphic state + 四通道 + resetStyle);transforms / id / localNamespace 与样式正交,不进 frame
14
+ */
15
+ var buildStyleFrame = (scope) => {
16
+ const cascade = {};
17
+ if (scope.color !== void 0) cascade.color = scope.color;
18
+ if (scope.stroke !== void 0) cascade.stroke = scope.stroke;
19
+ if (scope.fill !== void 0) cascade.fill = scope.fill;
20
+ if (scope.strokeWidth !== void 0) cascade.strokeWidth = scope.strokeWidth;
21
+ if (scope.opacity !== void 0) cascade.opacity = scope.opacity;
22
+ if (scope.fillOpacity !== void 0) cascade.fillOpacity = scope.fillOpacity;
23
+ if (scope.drawOpacity !== void 0) cascade.drawOpacity = scope.drawOpacity;
24
+ const frame = { cascade };
25
+ if (scope.nodeDefault) frame.nodeDefault = scope.nodeDefault;
26
+ if (scope.pathDefault) frame.pathDefault = scope.pathDefault;
27
+ if (scope.labelDefault) frame.labelDefault = scope.labelDefault;
28
+ if (scope.arrowDefault) frame.arrowDefault = scope.arrowDefault;
29
+ if (scope.resetStyle !== void 0) frame.resetStyle = scope.resetStyle;
30
+ return frame;
31
+ };
32
+ /** resetStyle 是否切某通道 */
33
+ var cuts = (reset, channel) => {
34
+ if (reset === void 0 || reset === false) return false;
35
+ if (reset === true) return true;
36
+ return reset.includes(channel);
37
+ };
38
+ /** 级联 graphic state 投影到 node 样式字段(主色展开:stroke / fill / textColor 默认随 color) */
39
+ var cascadeToNode = (c) => {
40
+ const out = {};
41
+ const master = c.color;
42
+ const stroke = c.stroke ?? master;
43
+ if (stroke !== void 0) out.stroke = stroke;
44
+ const fill = c.fill ?? master;
45
+ if (fill !== void 0) out.fill = fill;
46
+ if (master !== void 0) out.textColor = master;
47
+ if (c.strokeWidth !== void 0) out.strokeWidth = c.strokeWidth;
48
+ if (c.opacity !== void 0) out.opacity = c.opacity;
49
+ if (c.fillOpacity !== void 0) out.fillOpacity = c.fillOpacity;
50
+ if (c.drawOpacity !== void 0) out.drawOpacity = c.drawOpacity;
51
+ return out;
52
+ };
53
+ /** 级联 graphic state 投影到 path 样式字段(主色展开 stroke;path fill 不随主色——与 TikZ 一致) */
54
+ var cascadeToPath = (c) => {
55
+ const out = {};
56
+ const stroke = c.stroke ?? c.color;
57
+ if (stroke !== void 0) out.stroke = stroke;
58
+ if (c.fill !== void 0) out.fill = c.fill;
59
+ if (c.strokeWidth !== void 0) out.strokeWidth = c.strokeWidth;
60
+ if (c.opacity !== void 0) out.opacity = c.opacity;
61
+ if (c.fillOpacity !== void 0) out.fillOpacity = c.fillOpacity;
62
+ if (c.drawOpacity !== void 0) out.drawOpacity = c.drawOpacity;
63
+ return out;
64
+ };
65
+ /** node 源同源主色展开:未显式给的 stroke / fill / textColor 取该源 color */
66
+ var expandNodeColor = (src) => {
67
+ const out = { ...src };
68
+ const master = src.color;
69
+ if (master !== void 0) {
70
+ if (out.stroke === void 0) out.stroke = master;
71
+ if (out.fill === void 0) out.fill = master;
72
+ if (out.textColor === void 0) out.textColor = master;
73
+ }
74
+ return out;
75
+ };
76
+ /** path 源同源主色展开:未显式给的 stroke 取该源 color(fill 不随主色) */
77
+ var expandPathColor = (src) => {
78
+ const out = { ...src };
79
+ if (src.color !== void 0 && out.stroke === void 0) out.stroke = src.color;
80
+ return out;
81
+ };
82
+ /**
83
+ * 解析 node 最终样式——fold 外→内 frame 栈 + 元素显式
84
+ * @description 优先级链(每分项就近 model A):元素显式分项 > 元素 color > nodeDefault 分项 > nodeDefault color
85
+ * > scope 级联分项 > scope color > 内置(layoutNode 兜底)。同 frame 内 nodeDefault 优先于级联。
86
+ * resetStyle('node') 丢外层累积;position / id / text / label 取元素自身(不参与继承)。
87
+ */
88
+ var resolveNodeStyle = (node, stack) => {
89
+ let acc = {};
90
+ for (const frame of stack) {
91
+ if (cuts(frame.resetStyle, "node")) acc = {};
92
+ acc = {
93
+ ...acc,
94
+ ...pickDefinedKeys(cascadeToNode(frame.cascade))
95
+ };
96
+ if (frame.nodeDefault) acc = {
97
+ ...acc,
98
+ ...pickDefinedKeys(expandNodeColor(frame.nodeDefault))
99
+ };
100
+ }
101
+ acc = {
102
+ ...acc,
103
+ ...pickDefinedKeys(expandNodeColor(node))
104
+ };
105
+ return acc;
106
+ };
107
+ /** fold labelDefault 通道(node label + step label 共享);resetStyle('label') 丢外层 */
108
+ var resolveLabelDefault = (stack) => {
109
+ let acc = {};
110
+ for (const frame of stack) {
111
+ if (cuts(frame.resetStyle, "label")) acc = {};
112
+ if (frame.labelDefault) acc = {
113
+ ...acc,
114
+ ...pickDefinedKeys(frame.labelDefault)
115
+ };
116
+ }
117
+ return acc;
118
+ };
119
+ /** 逐字段合并字体(a 优先,缺字段回退 b);都空返回 undefined */
120
+ var mergeFont = (a, b) => {
121
+ if (a === void 0) return b;
122
+ if (b === void 0) return a;
123
+ const out = {};
124
+ const family = a.family ?? b.family;
125
+ if (family !== void 0) out.family = family;
126
+ const size = a.size ?? b.size;
127
+ if (size !== void 0) out.size = size;
128
+ const weight = a.weight ?? b.weight;
129
+ if (weight !== void 0) out.weight = weight;
130
+ const style = a.style ?? b.style;
131
+ if (style !== void 0) out.style = style;
132
+ return out;
133
+ };
134
+ /**
135
+ * 解析 step label 最终样式——消费 scope labelDefault + 宿主 path 已解析主色
136
+ * @description 继承顺序:label 显式 > scope.labelDefault (textColor → color) > 宿主 path 主色 > currentColor(emit 兜底)。
137
+ * 跟随的是宿主 path 主色(不是 stroke);font 逐字段回退 labelDefault;opacity 与 path opacity 相乘在 emit 阶段。
138
+ * masterColor 是 host 轴(结构关系),不受 resetStyle('label') 影响——label 仍跟所属线,不成孤岛。
139
+ */
140
+ var resolveStepLabel = (label, labelDefault, masterColor) => {
141
+ const out = { ...label };
142
+ const textColor = label.textColor ?? labelDefault.textColor ?? labelDefault.color ?? masterColor;
143
+ if (textColor !== void 0) out.textColor = textColor;
144
+ else delete out.textColor;
145
+ const font = mergeFont(label.font, labelDefault.font);
146
+ if (font !== void 0) out.font = font;
147
+ const opacity = label.opacity ?? labelDefault.opacity;
148
+ if (opacity !== void 0) out.opacity = opacity;
149
+ return out;
150
+ };
151
+ /** per-field 合并 arrow 端点 spec(b 覆盖 a 的 defined 字段;返回新对象,不共享引用) */
152
+ var mergeArrowEnd = (a, b) => {
153
+ if (a === void 0) return b === void 0 ? void 0 : { ...b };
154
+ if (b === void 0) return { ...a };
155
+ return {
156
+ ...a,
157
+ ...pickDefinedKeys(b)
158
+ };
159
+ };
160
+ /** per-field 合并 arrow detail:顶层 + start / end 各自 nested per-field merge(返回新对象,不共享引用) */
161
+ var mergeArrowDetail = (a, b) => {
162
+ const { start: aStart, end: aEnd, ...aTop } = a;
163
+ const { start: bStart, end: bEnd, ...bTop } = b;
164
+ const out = {
165
+ ...aTop,
166
+ ...pickDefinedKeys(bTop)
167
+ };
168
+ const start = mergeArrowEnd(aStart, bStart);
169
+ if (start !== void 0) out.start = start;
170
+ const end = mergeArrowEnd(aEnd, bEnd);
171
+ if (end !== void 0) out.end = end;
172
+ return out;
173
+ };
174
+ /** 去掉端点 spec 的 color(让端点 color 回退到顶层主色);返回新对象 */
175
+ var dropArrowEndColor = (end) => {
176
+ const next = { ...end };
177
+ delete next.color;
178
+ return next;
179
+ };
180
+ /**
181
+ * 解析 arrow detail——fold arrowDefault 通道 + 跟宿主 path 主色 + 元素 arrowDetail
182
+ * @description color 优先级(顶层与 start / end 端点同理):元素显式 arrowDetail(含 start / end.color)> 宿主 path 已解析主色 > arrowDefault(含 start / end.color)> 内置。
183
+ * 宿主主色(host 轴,决策 13)会清掉 arrowDefault 带来的端点 color,让 start / end 回退到顶层主色;元素自身 arrowDetail(含 start / end.color)仍最高。
184
+ * masterColor 不受 resetStyle('arrow') 影响(host 轴非 scope 继承)。lineWidth / fill 的主色映射推迟(render 端仍按现有兜底继承 path stroke)。
185
+ */
186
+ var resolveArrowDetail = (explicit, stack, masterColor) => {
187
+ let acc = {};
188
+ let touched = false;
189
+ for (const frame of stack) {
190
+ if (cuts(frame.resetStyle, "arrow")) {
191
+ acc = {};
192
+ touched = false;
193
+ }
194
+ if (frame.arrowDefault) {
195
+ acc = mergeArrowDetail(acc, frame.arrowDefault);
196
+ touched = true;
197
+ }
198
+ }
199
+ if (masterColor !== void 0) {
200
+ acc.color = masterColor;
201
+ if (acc.start !== void 0) acc.start = dropArrowEndColor(acc.start);
202
+ if (acc.end !== void 0) acc.end = dropArrowEndColor(acc.end);
203
+ touched = true;
204
+ }
205
+ if (explicit) {
206
+ acc = mergeArrowDetail(acc, explicit);
207
+ touched = true;
208
+ }
209
+ return touched ? acc : void 0;
210
+ };
211
+ /** 替换 path children 中各 step 的 label 为已解析 effective label */
212
+ var resolveStepLabels = (children, labelDefault, masterColor) => children.map((step) => {
213
+ if ("label" in step && step.label !== void 0) return {
214
+ ...step,
215
+ label: resolveStepLabel(step.label, labelDefault, masterColor)
216
+ };
217
+ return step;
218
+ });
219
+ /**
220
+ * 解析 path 最终样式——fold frame 栈 + 元素显式 + arrow / step-label 跟宿主主色
221
+ * @description 返回 effective IRPath:base 样式 fold(优先级链同 node);arrowDetail 消费 arrowDefault 通道 + 跟主色;
222
+ * 每个 step.label 消费 labelDefault 通道 + 跟主色。masterColor = path 已解析主色(就近 color),arrow / step-label 跟它(不跟 stroke)。
223
+ */
224
+ var resolveEffectivePath = (path, stack) => {
225
+ let acc = {};
226
+ let masterColor;
227
+ for (const frame of stack) {
228
+ if (cuts(frame.resetStyle, "path")) {
229
+ acc = {};
230
+ masterColor = void 0;
231
+ }
232
+ if (frame.cascade.color !== void 0) masterColor = frame.cascade.color;
233
+ acc = {
234
+ ...acc,
235
+ ...pickDefinedKeys(cascadeToPath(frame.cascade))
236
+ };
237
+ if (frame.pathDefault) {
238
+ if (frame.pathDefault.color !== void 0) masterColor = frame.pathDefault.color;
239
+ acc = {
240
+ ...acc,
241
+ ...pickDefinedKeys(expandPathColor(frame.pathDefault))
242
+ };
243
+ }
244
+ }
245
+ if (path.color !== void 0) masterColor = path.color;
246
+ acc = {
247
+ ...acc,
248
+ ...pickDefinedKeys(expandPathColor(path))
249
+ };
250
+ const effective = acc;
251
+ const arrowDetail = resolveArrowDetail(path.arrowDetail, stack, masterColor);
252
+ if (arrowDetail !== void 0) effective.arrowDetail = arrowDetail;
253
+ else delete effective.arrowDetail;
254
+ const labelDefault = resolveLabelDefault(stack);
255
+ effective.children = resolveStepLabels(path.children, labelDefault, masterColor);
256
+ return effective;
257
+ };
258
+ //#endregion
259
+ exports.buildStyleFrame = buildStyleFrame;
260
+ exports.resolveEffectivePath = resolveEffectivePath;
261
+ exports.resolveLabelDefault = resolveLabelDefault;
262
+ exports.resolveNodeStyle = resolveNodeStyle;
@@ -0,0 +1,46 @@
1
+ import { IRArrowDetail, IRLabelDefault, IRNode, IRPath, IRScope } from '../ir';
2
+ /**
3
+ * scope 级联 graphic state——主色 color + 跨类共享分项
4
+ * @description 级联到 scope 内全部元素(= TikZ scope option / current color)
5
+ */
6
+ type CascadeState = Pick<IRScope, 'color' | 'stroke' | 'fill' | 'strokeWidth' | 'opacity' | 'fillOpacity' | 'drawOpacity'>;
7
+ /**
8
+ * 单层 scope 的样式 frame——compile 维护 frame 栈做 inside-out per-field 解析
9
+ * @description 级联 graphic state + 四通道 every-X 默认 + resetStyle 屏障;从 IRScope 抽取(buildStyleFrame)
10
+ */
11
+ export type StyleFrame = {
12
+ /** 级联 graphic state(主色 + 跨类共享分项) */
13
+ cascade: CascadeState;
14
+ /** every node 默认 */
15
+ nodeDefault?: IRScope['nodeDefault'];
16
+ /** every path 默认 */
17
+ pathDefault?: IRScope['pathDefault'];
18
+ /** every label 默认(node label + step label 共享) */
19
+ labelDefault?: IRLabelDefault;
20
+ /** every arrow 默认 */
21
+ arrowDefault?: IRArrowDetail;
22
+ /** 朝外的继承屏障:切外层对应通道 */
23
+ resetStyle?: IRScope['resetStyle'];
24
+ };
25
+ /**
26
+ * 从 IRScope 抽取样式 frame
27
+ * @description 只摘样式相关字段(级联 graphic state + 四通道 + resetStyle);transforms / id / localNamespace 与样式正交,不进 frame
28
+ */
29
+ export declare const buildStyleFrame: (scope: IRScope) => StyleFrame;
30
+ /**
31
+ * 解析 node 最终样式——fold 外→内 frame 栈 + 元素显式
32
+ * @description 优先级链(每分项就近 model A):元素显式分项 > 元素 color > nodeDefault 分项 > nodeDefault color
33
+ * > scope 级联分项 > scope color > 内置(layoutNode 兜底)。同 frame 内 nodeDefault 优先于级联。
34
+ * resetStyle('node') 丢外层累积;position / id / text / label 取元素自身(不参与继承)。
35
+ */
36
+ export declare const resolveNodeStyle: (node: IRNode, stack: ReadonlyArray<StyleFrame>) => IRNode;
37
+ /** fold labelDefault 通道(node label + step label 共享);resetStyle('label') 丢外层 */
38
+ export declare const resolveLabelDefault: (stack: ReadonlyArray<StyleFrame>) => IRLabelDefault;
39
+ /**
40
+ * 解析 path 最终样式——fold frame 栈 + 元素显式 + arrow / step-label 跟宿主主色
41
+ * @description 返回 effective IRPath:base 样式 fold(优先级链同 node);arrowDetail 消费 arrowDefault 通道 + 跟主色;
42
+ * 每个 step.label 消费 labelDefault 通道 + 跟主色。masterColor = path 已解析主色(就近 color),arrow / step-label 跟它(不跟 stroke)。
43
+ */
44
+ export declare const resolveEffectivePath: (path: IRPath, stack: ReadonlyArray<StyleFrame>) => IRPath;
45
+ export {};
46
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/compile/style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACd,MAAM,EACN,MAAM,EACN,OAAO,EAIR,MAAM,OAAO,CAAC;AAEf;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CACtB,OAAO,EACP,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CACxF,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,oCAAoC;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,iDAAiD;IACjD,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qBAAqB;IACrB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,sBAAsB;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACpC,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,UAgBhD,CAAC;AAiEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,MAYF,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,GAC9B,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,cAOF,CAAC;AAyHF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,EACZ,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,MA2BF,CAAC"}
@@ -30,6 +30,7 @@ exports.ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH = require_arrow.ARROW_MARKER_HOLL
30
30
  exports.ARROW_SHAPES = require_arrow.ARROW_SHAPES;
31
31
  exports.AT_DIRECTIONS = require_at_position.AT_DIRECTIONS;
32
32
  exports.ArcStepSchema = require_step.ArcStepSchema;
33
+ exports.ArrowDefaultSchema = require_scope.ArrowDefaultSchema;
33
34
  exports.ArrowDetailSchema = require_arrow.ArrowDetailSchema;
34
35
  exports.ArrowEndDetailSchema = require_arrow.ArrowEndDetailSchema;
35
36
  exports.AtPositionSchema = require_at_position.AtPositionSchema;
@@ -48,14 +49,17 @@ exports.EllipsePathStepSchema = require_step.EllipsePathStepSchema;
48
49
  exports.FoldStepSchema = require_step.FoldStepSchema;
49
50
  exports.FontSchema = require_font.FontSchema;
50
51
  exports.HOLLOW_ARROW_SHAPES = require_arrow.HOLLOW_ARROW_SHAPES;
52
+ exports.LabelDefaultSchema = require_scope.LabelDefaultSchema;
51
53
  exports.LineSpecSchema = require_text.LineSpecSchema;
52
54
  exports.LineStepSchema = require_step.LineStepSchema;
53
55
  exports.MoveStepSchema = require_step.MoveStepSchema;
54
56
  exports.NODE_SHAPES = require_node.NODE_SHAPES;
55
57
  exports.NODE_TEXT_ALIGNS = require_node.NODE_TEXT_ALIGNS;
58
+ exports.NodeDefaultSchema = require_scope.NodeDefaultSchema;
56
59
  exports.NodeLabelSchema = require_node.NodeLabelSchema;
57
60
  exports.NodeSchema = require_node.NodeSchema;
58
61
  exports.OffsetPositionSchema = require_offset_position.OffsetPositionSchema;
62
+ exports.PathDefaultSchema = require_scope.PathDefaultSchema;
59
63
  exports.PathSchema = require_path.PathSchema;
60
64
  exports.PolarPositionSchema = require_polar_position.PolarPositionSchema;
61
65
  exports.PositionSchema = require_position.PositionSchema;