@retikz/react 0.1.0-alpha.3 → 0.1.0-alpha.4
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/index.d.ts +2 -2
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +2 -1
- package/dist/es/kernel/Coordinate.d.ts +23 -0
- package/dist/es/kernel/Coordinate.d.ts.map +1 -0
- package/dist/es/kernel/Coordinate.js +13 -0
- package/dist/es/kernel/Node.d.ts +16 -3
- package/dist/es/kernel/Node.d.ts.map +1 -1
- package/dist/es/kernel/Tikz.d.ts +6 -0
- package/dist/es/kernel/Tikz.d.ts.map +1 -1
- package/dist/es/kernel/Tikz.js +6 -2
- package/dist/es/kernel/_builder.d.ts.map +1 -1
- package/dist/es/kernel/_builder.js +12 -2
- package/dist/es/kernel/_displayNames.d.ts +3 -1
- package/dist/es/kernel/_displayNames.d.ts.map +1 -1
- package/dist/es/kernel/_displayNames.js +4 -2
- package/dist/es/kernel/_unbuilder.d.ts.map +1 -1
- package/dist/es/kernel/_unbuilder.js +7 -0
- package/dist/es/kernel/index.d.ts +1 -0
- package/dist/es/kernel/index.d.ts.map +1 -1
- package/dist/es/kernel/index.js +1 -0
- package/dist/lib/index.cjs +2 -0
- package/dist/lib/index.d.ts +2 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/kernel/Coordinate.cjs +13 -0
- package/dist/lib/kernel/Coordinate.d.ts +23 -0
- package/dist/lib/kernel/Coordinate.d.ts.map +1 -0
- package/dist/lib/kernel/Node.d.ts +16 -3
- package/dist/lib/kernel/Node.d.ts.map +1 -1
- package/dist/lib/kernel/Tikz.cjs +6 -2
- package/dist/lib/kernel/Tikz.d.ts +6 -0
- package/dist/lib/kernel/Tikz.d.ts.map +1 -1
- package/dist/lib/kernel/_builder.cjs +11 -1
- package/dist/lib/kernel/_builder.d.ts.map +1 -1
- package/dist/lib/kernel/_displayNames.cjs +4 -1
- package/dist/lib/kernel/_displayNames.d.ts +3 -1
- package/dist/lib/kernel/_displayNames.d.ts.map +1 -1
- package/dist/lib/kernel/_unbuilder.cjs +7 -0
- package/dist/lib/kernel/_unbuilder.d.ts.map +1 -1
- package/dist/lib/kernel/index.cjs +1 -0
- package/dist/lib/kernel/index.d.ts +1 -0
- package/dist/lib/kernel/index.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/es/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 渲染管道:buildIR → compileToScene → renderPrim → SVG
|
|
8
8
|
*/
|
|
9
|
-
export { Tikz, Node, Path, Step, Text } from './kernel';
|
|
10
|
-
export type { TikzProps, NodeProps, PathProps, StepProps, TextProps } from './kernel';
|
|
9
|
+
export { Tikz, Node, Path, Step, Text, Coordinate } from './kernel';
|
|
10
|
+
export type { TikzProps, NodeProps, PathProps, StepProps, TextProps, CoordinateProps, } from './kernel';
|
|
11
11
|
export { Draw, EdgeLabel } from './sugar';
|
|
12
12
|
export type { DrawProps, EdgeLabelProps } from './sugar';
|
|
13
13
|
export { DrawWay } from '@retikz/core';
|
package/dist/es/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACpE,YAAY,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/es/index.js
CHANGED
|
@@ -4,10 +4,11 @@ import { Node } from "./kernel/Node.js";
|
|
|
4
4
|
import { Path } from "./kernel/Path.js";
|
|
5
5
|
import { Step } from "./kernel/Step.js";
|
|
6
6
|
import { Text } from "./kernel/Text.js";
|
|
7
|
+
import { Coordinate } from "./kernel/Coordinate.js";
|
|
7
8
|
import "./kernel/index.js";
|
|
8
9
|
import { Draw } from "./sugar/Draw.js";
|
|
9
10
|
import { EdgeLabel } from "./sugar/EdgeLabel.js";
|
|
10
11
|
import "./sugar/index.js";
|
|
11
12
|
import { convertIRToReactNode } from "./kernel/_unbuilder.js";
|
|
12
13
|
import { DrawWay } from "@retikz/core";
|
|
13
|
-
export { Draw, DrawWay, EdgeLabel, Node, Path, Step, Text, Tikz, convertIRToReactNode, buildIR as convertReactNodeToIR };
|
|
14
|
+
export { Coordinate, Draw, DrawWay, EdgeLabel, Node, Path, Step, Text, Tikz, convertIRToReactNode, buildIR as convertReactNodeToIR };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { IRAtPosition, IRPosition, PolarPosition } from '@retikz/core';
|
|
3
|
+
/** <Coordinate> 组件的 props */
|
|
4
|
+
export type CoordinateProps = {
|
|
5
|
+
/** 占位节点的 id;其它 path / node `at.of` 通过这个 id 引用 */
|
|
6
|
+
id: string;
|
|
7
|
+
/**
|
|
8
|
+
* 占位点位置;与 `<Node position>` 形态完全一致:
|
|
9
|
+
* - 笛卡尔 `[x, y]`
|
|
10
|
+
* - 极坐标 `{ angle, radius, origin? }`
|
|
11
|
+
* - 相对定位 `{ direction, of, distance? }`
|
|
12
|
+
*/
|
|
13
|
+
position: IRPosition | PolarPosition | IRAtPosition;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 占位节点——TikZ `\coordinate (id) at (x, y);` 同义。
|
|
17
|
+
*
|
|
18
|
+
* 命名一个点供后续 path 与其他 node 的 `at.of` 引用,自身不渲染任何图形,
|
|
19
|
+
* 不参与 viewBox 扩展。本组件不返回任何 React 元素,由 <Tikz> builder 在
|
|
20
|
+
* children 扫描阶段读出 props 构造 IR。
|
|
21
|
+
*/
|
|
22
|
+
export declare const Coordinate: FC<CoordinateProps>;
|
|
23
|
+
//# sourceMappingURL=Coordinate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Coordinate.d.ts","sourceRoot":"","sources":["../../../src/kernel/Coordinate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG5E,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;CACrD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAAc,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TIKZ_COORDINATE } from "./_displayNames.js";
|
|
2
|
+
//#region src/kernel/Coordinate.tsx
|
|
3
|
+
/**
|
|
4
|
+
* 占位节点——TikZ `\coordinate (id) at (x, y);` 同义。
|
|
5
|
+
*
|
|
6
|
+
* 命名一个点供后续 path 与其他 node 的 `at.of` 引用,自身不渲染任何图形,
|
|
7
|
+
* 不参与 viewBox 扩展。本组件不返回任何 React 元素,由 <Tikz> builder 在
|
|
8
|
+
* children 扫描阶段读出 props 构造 IR。
|
|
9
|
+
*/
|
|
10
|
+
var Coordinate = () => null;
|
|
11
|
+
Coordinate.displayName = TIKZ_COORDINATE;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { Coordinate };
|
package/dist/es/kernel/Node.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { FC, ReactNode } from 'react';
|
|
2
|
-
import { IRFont, IRLineSpec, IRNode, IRPosition, NodeTextAlign, PolarPosition } from '@retikz/core';
|
|
2
|
+
import { IRAtPosition, IRFont, IRLineSpec, IRNode, IRNodeLabel, IRPosition, NodeTextAlign, PolarPosition } from '@retikz/core';
|
|
3
3
|
/** <Node> 组件的 props */
|
|
4
4
|
export type NodeProps = {
|
|
5
5
|
/** 节点 id;其他 Path/Draw 通过这个 id 引用本节点 */
|
|
6
6
|
id?: string;
|
|
7
7
|
/** 节点形状:rectangle(默认)/ circle / ellipse / diamond */
|
|
8
8
|
shape?: IRNode['shape'];
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* 节点中心位置。三种形态:
|
|
11
|
+
* - 笛卡尔 `[x, y]`
|
|
12
|
+
* - 极坐标 `{ angle, radius, origin? }`(编译时解析)
|
|
13
|
+
* - 相对定位 `{ direction, of, distance? }`(TikZ `[<direction>=<distance> of <id>]` 同义;编译时解析)
|
|
14
|
+
*/
|
|
15
|
+
position: IRPosition | PolarPosition | IRAtPosition;
|
|
11
16
|
/** 旋转角度(度数,与 TikZ 一致),绕节点中心;正值顺时针 */
|
|
12
17
|
rotate?: number;
|
|
13
18
|
/**
|
|
@@ -77,6 +82,14 @@ export type NodeProps = {
|
|
|
77
82
|
textColor?: string;
|
|
78
83
|
/** 整节点透明度 0~1(同时作用于 shape 与 text) */
|
|
79
84
|
opacity?: number;
|
|
85
|
+
/**
|
|
86
|
+
* 节点附属标签——TikZ `[label=above:foo]` 同义。
|
|
87
|
+
*
|
|
88
|
+
* 单对象或数组形态;每条 label 接 `text` / `position?` / `distance?` / 样式继承。
|
|
89
|
+
* `position` 接 8 方向枚举(`above`/`right`/...)或数字角度(`label=30:foo` 等价 `position: 30`);
|
|
90
|
+
* 缺省 'above',distance 缺省 4。
|
|
91
|
+
*/
|
|
92
|
+
label?: IRNodeLabel | Array<IRNodeLabel>;
|
|
80
93
|
};
|
|
81
94
|
/**
|
|
82
95
|
* Node 是 DSL 标记组件——本身不渲染任何 React 元素。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/kernel/Node.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AAGtB,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB
|
|
1
|
+
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/kernel/Node.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,YAAY,EACZ,MAAM,EACN,UAAU,EACV,MAAM,EACN,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AAGtB,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;IACpD,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,qDAAqD;IACrD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU;IACV,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAAc,CAAC"}
|
package/dist/es/kernel/Tikz.d.ts
CHANGED
|
@@ -14,6 +14,12 @@ export type TikzProps = {
|
|
|
14
14
|
className?: string;
|
|
15
15
|
/** 透传到 svg 元素的内联样式 */
|
|
16
16
|
style?: CSSProperties;
|
|
17
|
+
/**
|
|
18
|
+
* 节点相对定位(`Node.position = { direction, of }`)的默认距离,单位 user units;
|
|
19
|
+
* 对应 TikZ 的 `node distance=...`。当节点 position 自带 `distance` 时优先用自带值;
|
|
20
|
+
* 都缺省时回退到 1。
|
|
21
|
+
*/
|
|
22
|
+
nodeDistance?: number;
|
|
17
23
|
};
|
|
18
24
|
/**
|
|
19
25
|
* <Tikz> 顶层容器。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tikz.d.ts","sourceRoot":"","sources":["../../../src/kernel/Tikz.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,EAAmB,KAAK,EAAE,EAAuC,MAAM,cAAc,CAAC;AAO7F,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,mDAAmD;IACnD,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,gCAAgC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAgBF;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"Tikz.d.ts","sourceRoot":"","sources":["../../../src/kernel/Tikz.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,EAAmB,KAAK,EAAE,EAAuC,MAAM,cAAc,CAAC;AAO7F,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,mDAAmD;IACnD,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,gCAAgC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAgBF;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CA2B9B,CAAC"}
|
package/dist/es/kernel/Tikz.js
CHANGED
|
@@ -26,9 +26,13 @@ var collectArrowShapes = (prims) => {
|
|
|
26
26
|
* 每种用到的 shape 一个 marker 定义,id 形如 `${prefix}-${shape}`,
|
|
27
27
|
* marker 内 path 借 `context-stroke` / `context-fill` 让颜色随 path 同步。
|
|
28
28
|
*/
|
|
29
|
-
var Tikz = (
|
|
29
|
+
var Tikz = (props) => {
|
|
30
|
+
const { ir: irFromProp, children, width, height, className, style, nodeDistance } = props;
|
|
30
31
|
const ir = useMemo(() => irFromProp ?? buildIR(children), [irFromProp, children]);
|
|
31
|
-
const scene = useMemo(() => compileToScene(ir, {
|
|
32
|
+
const scene = useMemo(() => compileToScene(ir, {
|
|
33
|
+
measureText: browserMeasurer,
|
|
34
|
+
nodeDistance
|
|
35
|
+
}), [ir, nodeDistance]);
|
|
32
36
|
const arrowMarkerPrefix = `retikz-arrow-${useId().replace(/[^a-zA-Z0-9]/g, "")}`;
|
|
33
37
|
const usedShapes = collectArrowShapes(scene.primitives);
|
|
34
38
|
const arrowMarkerIdFor = (shape) => `${arrowMarkerPrefix}-${shape}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_builder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,KAAK,EACV,EAAE,
|
|
1
|
+
{"version":3,"file":"_builder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,KAAK,EACV,EAAE,EASH,MAAM,cAAc,CAAC;AA8XtB;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS,KAAG,EAI5C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TIKZ_NODE, TIKZ_PATH } from "./_displayNames.js";
|
|
1
|
+
import { TIKZ_COORDINATE, TIKZ_NODE, TIKZ_PATH } from "./_displayNames.js";
|
|
2
2
|
import { Children, isValidElement } from "react";
|
|
3
3
|
import { CURRENT_IR_VERSION, parseTargetSugar } from "@retikz/core";
|
|
4
4
|
//#region src/kernel/_builder.ts
|
|
@@ -102,7 +102,8 @@ var buildNode = (props) => ({
|
|
|
102
102
|
outerSep: props.outerSep,
|
|
103
103
|
padding: props.padding,
|
|
104
104
|
margin: props.margin,
|
|
105
|
-
font: props.font
|
|
105
|
+
font: props.font,
|
|
106
|
+
label: props.label
|
|
106
107
|
});
|
|
107
108
|
/**
|
|
108
109
|
* 扫描 Step children,把首个 <EdgeLabel> 翻译为 IRStepLabel;
|
|
@@ -257,6 +258,12 @@ var readPathChildren = (children) => {
|
|
|
257
258
|
}
|
|
258
259
|
return out;
|
|
259
260
|
};
|
|
261
|
+
/** 把 <Coordinate> props 翻成 IRChild(占位节点,无视觉) */
|
|
262
|
+
var buildCoordinate = (props) => ({
|
|
263
|
+
type: "coordinate",
|
|
264
|
+
id: props.id,
|
|
265
|
+
position: props.position
|
|
266
|
+
});
|
|
260
267
|
/** 把 <Path> props 翻成 IRChild;step 序列由 readPathChildren 收集 */
|
|
261
268
|
var buildPath = (props) => ({
|
|
262
269
|
type: "path",
|
|
@@ -293,6 +300,9 @@ var readSceneChildren = (children) => {
|
|
|
293
300
|
case TIKZ_PATH:
|
|
294
301
|
out.push(buildPath(child.props));
|
|
295
302
|
return;
|
|
303
|
+
case TIKZ_COORDINATE:
|
|
304
|
+
out.push(buildCoordinate(child.props));
|
|
305
|
+
return;
|
|
296
306
|
}
|
|
297
307
|
if (typeof child.type === "function") {
|
|
298
308
|
const expanded = child.type(child.props);
|
|
@@ -6,6 +6,8 @@ export declare const TIKZ_PATH = "@retikz/Path";
|
|
|
6
6
|
export declare const TIKZ_STEP = "@retikz/Step";
|
|
7
7
|
/** <Text> 组件的 displayName(Node 内多行文本带样式) */
|
|
8
8
|
export declare const TIKZ_TEXT = "@retikz/Text";
|
|
9
|
-
/** <EdgeLabel> 组件的 displayName(Step
|
|
9
|
+
/** <EdgeLabel> 组件的 displayName(Step 内边标注) */
|
|
10
10
|
export declare const TIKZ_EDGE_LABEL = "@retikz/EdgeLabel";
|
|
11
|
+
/** <Coordinate> 组件的 displayName(占位节点) */
|
|
12
|
+
export declare const TIKZ_COORDINATE = "@retikz/Coordinate";
|
|
11
13
|
//# sourceMappingURL=_displayNames.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_displayNames.d.ts","sourceRoot":"","sources":["../../../src/kernel/_displayNames.ts"],"names":[],"mappings":"AAKA,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,4CAA4C;AAC5C,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,
|
|
1
|
+
{"version":3,"file":"_displayNames.d.ts","sourceRoot":"","sources":["../../../src/kernel/_displayNames.ts"],"names":[],"mappings":"AAKA,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,4CAA4C;AAC5C,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6CAA6C;AAC7C,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,yCAAyC;AACzC,eAAO,MAAM,eAAe,uBAAuB,CAAC"}
|
|
@@ -7,7 +7,9 @@ var TIKZ_PATH = "@retikz/Path";
|
|
|
7
7
|
var TIKZ_STEP = "@retikz/Step";
|
|
8
8
|
/** <Text> 组件的 displayName(Node 内多行文本带样式) */
|
|
9
9
|
var TIKZ_TEXT = "@retikz/Text";
|
|
10
|
-
/** <EdgeLabel> 组件的 displayName(Step
|
|
10
|
+
/** <EdgeLabel> 组件的 displayName(Step 内边标注) */
|
|
11
11
|
var TIKZ_EDGE_LABEL = "@retikz/EdgeLabel";
|
|
12
|
+
/** <Coordinate> 组件的 displayName(占位节点) */
|
|
13
|
+
var TIKZ_COORDINATE = "@retikz/Coordinate";
|
|
12
14
|
//#endregion
|
|
13
|
-
export { TIKZ_EDGE_LABEL, TIKZ_NODE, TIKZ_PATH, TIKZ_STEP, TIKZ_TEXT };
|
|
15
|
+
export { TIKZ_COORDINATE, TIKZ_EDGE_LABEL, TIKZ_NODE, TIKZ_PATH, TIKZ_STEP, TIKZ_TEXT };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_unbuilder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_unbuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,EAAE,EAA2B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"_unbuilder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_unbuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,EAAE,EAA2B,MAAM,cAAc,CAAC;AAmKhE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,IAAI,EAAE,KAAG,SACW,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Node } from "./Node.js";
|
|
2
2
|
import { Path } from "./Path.js";
|
|
3
3
|
import { Step } from "./Step.js";
|
|
4
|
+
import { Coordinate } from "./Coordinate.js";
|
|
4
5
|
import { createElement } from "react";
|
|
5
6
|
//#region src/kernel/_unbuilder.ts
|
|
6
7
|
/** IR 'node' child → NodeProps;过滤 undefined 字段,不污染 React DevTools 显示 */
|
|
@@ -35,6 +36,7 @@ var nodePropsFromIR = (n) => {
|
|
|
35
36
|
if (n.yScale !== void 0) props.yScale = n.yScale;
|
|
36
37
|
if (n.textColor !== void 0) props.textColor = n.textColor;
|
|
37
38
|
if (n.opacity !== void 0) props.opacity = n.opacity;
|
|
39
|
+
if (n.label !== void 0) props.label = n.label;
|
|
38
40
|
return props;
|
|
39
41
|
};
|
|
40
42
|
/** 单个 IRStep → <Step /> element */
|
|
@@ -134,6 +136,11 @@ var childToElement = (child, key) => {
|
|
|
134
136
|
drawOpacity: child.drawOpacity,
|
|
135
137
|
children: child.children.map((s, j) => stepToElement(s, j))
|
|
136
138
|
});
|
|
139
|
+
case "coordinate": return createElement(Coordinate, {
|
|
140
|
+
key,
|
|
141
|
+
id: child.id,
|
|
142
|
+
position: child.position
|
|
143
|
+
});
|
|
137
144
|
default: return assertNever(child);
|
|
138
145
|
}
|
|
139
146
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC"}
|
package/dist/es/kernel/index.js
CHANGED
package/dist/lib/index.cjs
CHANGED
|
@@ -5,12 +5,14 @@ const require_Node = require("./kernel/Node.cjs");
|
|
|
5
5
|
const require_Path = require("./kernel/Path.cjs");
|
|
6
6
|
const require_Step = require("./kernel/Step.cjs");
|
|
7
7
|
const require_Text = require("./kernel/Text.cjs");
|
|
8
|
+
const require_Coordinate = require("./kernel/Coordinate.cjs");
|
|
8
9
|
require("./kernel/index.cjs");
|
|
9
10
|
const require_Draw = require("./sugar/Draw.cjs");
|
|
10
11
|
const require_EdgeLabel = require("./sugar/EdgeLabel.cjs");
|
|
11
12
|
require("./sugar/index.cjs");
|
|
12
13
|
const require__unbuilder = require("./kernel/_unbuilder.cjs");
|
|
13
14
|
let _retikz_core = require("@retikz/core");
|
|
15
|
+
exports.Coordinate = require_Coordinate.Coordinate;
|
|
14
16
|
exports.Draw = require_Draw.Draw;
|
|
15
17
|
Object.defineProperty(exports, "DrawWay", {
|
|
16
18
|
enumerable: true,
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 渲染管道:buildIR → compileToScene → renderPrim → SVG
|
|
8
8
|
*/
|
|
9
|
-
export { Tikz, Node, Path, Step, Text } from './kernel';
|
|
10
|
-
export type { TikzProps, NodeProps, PathProps, StepProps, TextProps } from './kernel';
|
|
9
|
+
export { Tikz, Node, Path, Step, Text, Coordinate } from './kernel';
|
|
10
|
+
export type { TikzProps, NodeProps, PathProps, StepProps, TextProps, CoordinateProps, } from './kernel';
|
|
11
11
|
export { Draw, EdgeLabel } from './sugar';
|
|
12
12
|
export type { DrawProps, EdgeLabelProps } from './sugar';
|
|
13
13
|
export { DrawWay } from '@retikz/core';
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACpE,YAAY,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const require__displayNames = require("./_displayNames.cjs");
|
|
2
|
+
//#region src/kernel/Coordinate.tsx
|
|
3
|
+
/**
|
|
4
|
+
* 占位节点——TikZ `\coordinate (id) at (x, y);` 同义。
|
|
5
|
+
*
|
|
6
|
+
* 命名一个点供后续 path 与其他 node 的 `at.of` 引用,自身不渲染任何图形,
|
|
7
|
+
* 不参与 viewBox 扩展。本组件不返回任何 React 元素,由 <Tikz> builder 在
|
|
8
|
+
* children 扫描阶段读出 props 构造 IR。
|
|
9
|
+
*/
|
|
10
|
+
var Coordinate = () => null;
|
|
11
|
+
Coordinate.displayName = require__displayNames.TIKZ_COORDINATE;
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.Coordinate = Coordinate;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { IRAtPosition, IRPosition, PolarPosition } from '@retikz/core';
|
|
3
|
+
/** <Coordinate> 组件的 props */
|
|
4
|
+
export type CoordinateProps = {
|
|
5
|
+
/** 占位节点的 id;其它 path / node `at.of` 通过这个 id 引用 */
|
|
6
|
+
id: string;
|
|
7
|
+
/**
|
|
8
|
+
* 占位点位置;与 `<Node position>` 形态完全一致:
|
|
9
|
+
* - 笛卡尔 `[x, y]`
|
|
10
|
+
* - 极坐标 `{ angle, radius, origin? }`
|
|
11
|
+
* - 相对定位 `{ direction, of, distance? }`
|
|
12
|
+
*/
|
|
13
|
+
position: IRPosition | PolarPosition | IRAtPosition;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 占位节点——TikZ `\coordinate (id) at (x, y);` 同义。
|
|
17
|
+
*
|
|
18
|
+
* 命名一个点供后续 path 与其他 node 的 `at.of` 引用,自身不渲染任何图形,
|
|
19
|
+
* 不参与 viewBox 扩展。本组件不返回任何 React 元素,由 <Tikz> builder 在
|
|
20
|
+
* children 扫描阶段读出 props 构造 IR。
|
|
21
|
+
*/
|
|
22
|
+
export declare const Coordinate: FC<CoordinateProps>;
|
|
23
|
+
//# sourceMappingURL=Coordinate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Coordinate.d.ts","sourceRoot":"","sources":["../../../src/kernel/Coordinate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG5E,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG;IAC5B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;CACrD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAAc,CAAC"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { FC, ReactNode } from 'react';
|
|
2
|
-
import { IRFont, IRLineSpec, IRNode, IRPosition, NodeTextAlign, PolarPosition } from '@retikz/core';
|
|
2
|
+
import { IRAtPosition, IRFont, IRLineSpec, IRNode, IRNodeLabel, IRPosition, NodeTextAlign, PolarPosition } from '@retikz/core';
|
|
3
3
|
/** <Node> 组件的 props */
|
|
4
4
|
export type NodeProps = {
|
|
5
5
|
/** 节点 id;其他 Path/Draw 通过这个 id 引用本节点 */
|
|
6
6
|
id?: string;
|
|
7
7
|
/** 节点形状:rectangle(默认)/ circle / ellipse / diamond */
|
|
8
8
|
shape?: IRNode['shape'];
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* 节点中心位置。三种形态:
|
|
11
|
+
* - 笛卡尔 `[x, y]`
|
|
12
|
+
* - 极坐标 `{ angle, radius, origin? }`(编译时解析)
|
|
13
|
+
* - 相对定位 `{ direction, of, distance? }`(TikZ `[<direction>=<distance> of <id>]` 同义;编译时解析)
|
|
14
|
+
*/
|
|
15
|
+
position: IRPosition | PolarPosition | IRAtPosition;
|
|
11
16
|
/** 旋转角度(度数,与 TikZ 一致),绕节点中心;正值顺时针 */
|
|
12
17
|
rotate?: number;
|
|
13
18
|
/**
|
|
@@ -77,6 +82,14 @@ export type NodeProps = {
|
|
|
77
82
|
textColor?: string;
|
|
78
83
|
/** 整节点透明度 0~1(同时作用于 shape 与 text) */
|
|
79
84
|
opacity?: number;
|
|
85
|
+
/**
|
|
86
|
+
* 节点附属标签——TikZ `[label=above:foo]` 同义。
|
|
87
|
+
*
|
|
88
|
+
* 单对象或数组形态;每条 label 接 `text` / `position?` / `distance?` / 样式继承。
|
|
89
|
+
* `position` 接 8 方向枚举(`above`/`right`/...)或数字角度(`label=30:foo` 等价 `position: 30`);
|
|
90
|
+
* 缺省 'above',distance 缺省 4。
|
|
91
|
+
*/
|
|
92
|
+
label?: IRNodeLabel | Array<IRNodeLabel>;
|
|
80
93
|
};
|
|
81
94
|
/**
|
|
82
95
|
* Node 是 DSL 标记组件——本身不渲染任何 React 元素。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/kernel/Node.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AAGtB,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB
|
|
1
|
+
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/kernel/Node.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,YAAY,EACZ,MAAM,EACN,UAAU,EACV,MAAM,EACN,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AAGtB,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC;IACpD,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,qDAAqD;IACrD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU;IACV,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAAc,CAAC"}
|
package/dist/lib/kernel/Tikz.cjs
CHANGED
|
@@ -26,9 +26,13 @@ var collectArrowShapes = (prims) => {
|
|
|
26
26
|
* 每种用到的 shape 一个 marker 定义,id 形如 `${prefix}-${shape}`,
|
|
27
27
|
* marker 内 path 借 `context-stroke` / `context-fill` 让颜色随 path 同步。
|
|
28
28
|
*/
|
|
29
|
-
var Tikz = (
|
|
29
|
+
var Tikz = (props) => {
|
|
30
|
+
const { ir: irFromProp, children, width, height, className, style, nodeDistance } = props;
|
|
30
31
|
const ir = (0, react.useMemo)(() => irFromProp ?? require__builder.buildIR(children), [irFromProp, children]);
|
|
31
|
-
const scene = (0, react.useMemo)(() => (0, _retikz_core.compileToScene)(ir, {
|
|
32
|
+
const scene = (0, react.useMemo)(() => (0, _retikz_core.compileToScene)(ir, {
|
|
33
|
+
measureText: require_browser_measurer.browserMeasurer,
|
|
34
|
+
nodeDistance
|
|
35
|
+
}), [ir, nodeDistance]);
|
|
32
36
|
const arrowMarkerPrefix = `retikz-arrow-${(0, react.useId)().replace(/[^a-zA-Z0-9]/g, "")}`;
|
|
33
37
|
const usedShapes = collectArrowShapes(scene.primitives);
|
|
34
38
|
const arrowMarkerIdFor = (shape) => `${arrowMarkerPrefix}-${shape}`;
|
|
@@ -14,6 +14,12 @@ export type TikzProps = {
|
|
|
14
14
|
className?: string;
|
|
15
15
|
/** 透传到 svg 元素的内联样式 */
|
|
16
16
|
style?: CSSProperties;
|
|
17
|
+
/**
|
|
18
|
+
* 节点相对定位(`Node.position = { direction, of }`)的默认距离,单位 user units;
|
|
19
|
+
* 对应 TikZ 的 `node distance=...`。当节点 position 自带 `distance` 时优先用自带值;
|
|
20
|
+
* 都缺省时回退到 1。
|
|
21
|
+
*/
|
|
22
|
+
nodeDistance?: number;
|
|
17
23
|
};
|
|
18
24
|
/**
|
|
19
25
|
* <Tikz> 顶层容器。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tikz.d.ts","sourceRoot":"","sources":["../../../src/kernel/Tikz.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,EAAmB,KAAK,EAAE,EAAuC,MAAM,cAAc,CAAC;AAO7F,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,mDAAmD;IACnD,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,gCAAgC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAgBF;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"Tikz.d.ts","sourceRoot":"","sources":["../../../src/kernel/Tikz.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,EAAmB,KAAK,EAAE,EAAuC,MAAM,cAAc,CAAC;AAO7F,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG;IACtB,mDAAmD;IACnD,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,gCAAgC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAgBF;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CA2B9B,CAAC"}
|
|
@@ -102,7 +102,8 @@ var buildNode = (props) => ({
|
|
|
102
102
|
outerSep: props.outerSep,
|
|
103
103
|
padding: props.padding,
|
|
104
104
|
margin: props.margin,
|
|
105
|
-
font: props.font
|
|
105
|
+
font: props.font,
|
|
106
|
+
label: props.label
|
|
106
107
|
});
|
|
107
108
|
/**
|
|
108
109
|
* 扫描 Step children,把首个 <EdgeLabel> 翻译为 IRStepLabel;
|
|
@@ -257,6 +258,12 @@ var readPathChildren = (children) => {
|
|
|
257
258
|
}
|
|
258
259
|
return out;
|
|
259
260
|
};
|
|
261
|
+
/** 把 <Coordinate> props 翻成 IRChild(占位节点,无视觉) */
|
|
262
|
+
var buildCoordinate = (props) => ({
|
|
263
|
+
type: "coordinate",
|
|
264
|
+
id: props.id,
|
|
265
|
+
position: props.position
|
|
266
|
+
});
|
|
260
267
|
/** 把 <Path> props 翻成 IRChild;step 序列由 readPathChildren 收集 */
|
|
261
268
|
var buildPath = (props) => ({
|
|
262
269
|
type: "path",
|
|
@@ -293,6 +300,9 @@ var readSceneChildren = (children) => {
|
|
|
293
300
|
case require__displayNames.TIKZ_PATH:
|
|
294
301
|
out.push(buildPath(child.props));
|
|
295
302
|
return;
|
|
303
|
+
case require__displayNames.TIKZ_COORDINATE:
|
|
304
|
+
out.push(buildCoordinate(child.props));
|
|
305
|
+
return;
|
|
296
306
|
}
|
|
297
307
|
if (typeof child.type === "function") {
|
|
298
308
|
const expanded = child.type(child.props);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_builder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,KAAK,EACV,EAAE,
|
|
1
|
+
{"version":3,"file":"_builder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AACpF,OAAO,KAAK,EACV,EAAE,EASH,MAAM,cAAc,CAAC;AA8XtB;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS,KAAG,EAI5C,CAAC"}
|
|
@@ -7,9 +7,12 @@ var TIKZ_PATH = "@retikz/Path";
|
|
|
7
7
|
var TIKZ_STEP = "@retikz/Step";
|
|
8
8
|
/** <Text> 组件的 displayName(Node 内多行文本带样式) */
|
|
9
9
|
var TIKZ_TEXT = "@retikz/Text";
|
|
10
|
-
/** <EdgeLabel> 组件的 displayName(Step
|
|
10
|
+
/** <EdgeLabel> 组件的 displayName(Step 内边标注) */
|
|
11
11
|
var TIKZ_EDGE_LABEL = "@retikz/EdgeLabel";
|
|
12
|
+
/** <Coordinate> 组件的 displayName(占位节点) */
|
|
13
|
+
var TIKZ_COORDINATE = "@retikz/Coordinate";
|
|
12
14
|
//#endregion
|
|
15
|
+
exports.TIKZ_COORDINATE = TIKZ_COORDINATE;
|
|
13
16
|
exports.TIKZ_EDGE_LABEL = TIKZ_EDGE_LABEL;
|
|
14
17
|
exports.TIKZ_NODE = TIKZ_NODE;
|
|
15
18
|
exports.TIKZ_PATH = TIKZ_PATH;
|
|
@@ -6,6 +6,8 @@ export declare const TIKZ_PATH = "@retikz/Path";
|
|
|
6
6
|
export declare const TIKZ_STEP = "@retikz/Step";
|
|
7
7
|
/** <Text> 组件的 displayName(Node 内多行文本带样式) */
|
|
8
8
|
export declare const TIKZ_TEXT = "@retikz/Text";
|
|
9
|
-
/** <EdgeLabel> 组件的 displayName(Step
|
|
9
|
+
/** <EdgeLabel> 组件的 displayName(Step 内边标注) */
|
|
10
10
|
export declare const TIKZ_EDGE_LABEL = "@retikz/EdgeLabel";
|
|
11
|
+
/** <Coordinate> 组件的 displayName(占位节点) */
|
|
12
|
+
export declare const TIKZ_COORDINATE = "@retikz/Coordinate";
|
|
11
13
|
//# sourceMappingURL=_displayNames.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_displayNames.d.ts","sourceRoot":"","sources":["../../../src/kernel/_displayNames.ts"],"names":[],"mappings":"AAKA,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,4CAA4C;AAC5C,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,
|
|
1
|
+
{"version":3,"file":"_displayNames.d.ts","sourceRoot":"","sources":["../../../src/kernel/_displayNames.ts"],"names":[],"mappings":"AAKA,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6BAA6B;AAC7B,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,4CAA4C;AAC5C,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,6CAA6C;AAC7C,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,yCAAyC;AACzC,eAAO,MAAM,eAAe,uBAAuB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_Node = require("./Node.cjs");
|
|
2
2
|
const require_Path = require("./Path.cjs");
|
|
3
3
|
const require_Step = require("./Step.cjs");
|
|
4
|
+
const require_Coordinate = require("./Coordinate.cjs");
|
|
4
5
|
let react = require("react");
|
|
5
6
|
//#region src/kernel/_unbuilder.ts
|
|
6
7
|
/** IR 'node' child → NodeProps;过滤 undefined 字段,不污染 React DevTools 显示 */
|
|
@@ -35,6 +36,7 @@ var nodePropsFromIR = (n) => {
|
|
|
35
36
|
if (n.yScale !== void 0) props.yScale = n.yScale;
|
|
36
37
|
if (n.textColor !== void 0) props.textColor = n.textColor;
|
|
37
38
|
if (n.opacity !== void 0) props.opacity = n.opacity;
|
|
39
|
+
if (n.label !== void 0) props.label = n.label;
|
|
38
40
|
return props;
|
|
39
41
|
};
|
|
40
42
|
/** 单个 IRStep → <Step /> element */
|
|
@@ -134,6 +136,11 @@ var childToElement = (child, key) => {
|
|
|
134
136
|
drawOpacity: child.drawOpacity,
|
|
135
137
|
children: child.children.map((s, j) => stepToElement(s, j))
|
|
136
138
|
});
|
|
139
|
+
case "coordinate": return (0, react.createElement)(require_Coordinate.Coordinate, {
|
|
140
|
+
key,
|
|
141
|
+
id: child.id,
|
|
142
|
+
position: child.position
|
|
143
|
+
});
|
|
137
144
|
default: return assertNever(child);
|
|
138
145
|
}
|
|
139
146
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_unbuilder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_unbuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,EAAE,EAA2B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"_unbuilder.d.ts","sourceRoot":"","sources":["../../../src/kernel/_unbuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,EAAE,EAA2B,MAAM,cAAc,CAAC;AAmKhE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,IAAI,EAAE,KAAG,SACW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retikz/react",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.4",
|
|
4
4
|
"description": "React adapter for retikz: Kernel/Sugar JSX components and SVG renderer.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/lib/index.cjs",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"react-dom": ">=18"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@retikz/core": "0.1.0-alpha.
|
|
27
|
+
"@retikz/core": "0.1.0-alpha.4"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^25.6.0",
|