@antv/infographic 0.2.7 → 0.2.8
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/infographic.min.js +191 -191
- package/dist/infographic.min.js.map +1 -1
- package/esm/designs/items/BadgeCard.js +6 -1
- package/esm/designs/items/SimpleCircleNode.d.ts +8 -0
- package/esm/designs/items/SimpleCircleNode.js +14 -0
- package/esm/designs/items/index.d.ts +1 -0
- package/esm/designs/items/index.js +1 -0
- package/esm/designs/structures/hierarchy-mindmap.js +19 -5
- package/esm/designs/structures/hierarchy-tree.d.ts +2 -1
- package/esm/designs/structures/hierarchy-tree.js +23 -20
- package/esm/designs/structures/index.d.ts +1 -0
- package/esm/designs/structures/index.js +1 -0
- package/esm/designs/structures/relation-dagre-flow.d.ts +21 -0
- package/esm/designs/structures/relation-dagre-flow.js +497 -0
- package/esm/designs/utils/hierarchy-color.d.ts +1 -1
- package/esm/editor/plugins/edit-bar/edit-bar.js +27 -9
- package/esm/index.js +1 -1
- package/esm/jsx/global.d.ts +1 -0
- package/esm/jsx/types/element.d.ts +5 -1
- package/esm/jsx/utils/svg.js +2 -0
- package/esm/renderer/composites/icon.js +2 -0
- package/esm/renderer/composites/illus.d.ts +1 -1
- package/esm/renderer/composites/illus.js +9 -4
- package/esm/renderer/composites/text.js +4 -2
- package/esm/renderer/fonts/loader.js +3 -1
- package/esm/renderer/fonts/registry.js +1 -1
- package/esm/renderer/renderer.js +28 -25
- package/esm/resource/loader.js +3 -1
- package/esm/runtime/Infographic.js +1 -1
- package/esm/ssr/dom-shim.d.ts +4 -0
- package/esm/ssr/dom-shim.js +107 -0
- package/esm/ssr/index.d.ts +1 -0
- package/esm/ssr/index.js +1 -0
- package/esm/ssr/renderer.d.ts +2 -0
- package/esm/ssr/renderer.js +60 -0
- package/esm/syntax/index.js +57 -1
- package/esm/syntax/parser.js +44 -0
- package/esm/syntax/relations.d.ts +6 -0
- package/esm/syntax/relations.js +251 -0
- package/esm/syntax/schema.d.ts +1 -0
- package/esm/syntax/schema.js +12 -0
- package/esm/templates/built-in.js +2 -0
- package/esm/templates/relation-dagre-flow.d.ts +2 -0
- package/esm/templates/relation-dagre-flow.js +68 -0
- package/esm/types/data.d.ts +24 -3
- package/esm/utils/data.js +1 -1
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.js +1 -0
- package/esm/utils/is-browser.js +5 -9
- package/esm/utils/measure-text.d.ts +2 -2
- package/esm/utils/measure-text.js +4 -4
- package/esm/utils/recognizer.js +8 -5
- package/esm/utils/text.js +27 -19
- package/lib/designs/items/BadgeCard.js +6 -1
- package/lib/designs/items/SimpleCircleNode.d.ts +8 -0
- package/lib/designs/items/SimpleCircleNode.js +18 -0
- package/lib/designs/items/index.d.ts +1 -0
- package/lib/designs/items/index.js +1 -0
- package/lib/designs/structures/hierarchy-mindmap.js +19 -5
- package/lib/designs/structures/hierarchy-tree.d.ts +2 -1
- package/lib/designs/structures/hierarchy-tree.js +23 -20
- package/lib/designs/structures/index.d.ts +1 -0
- package/lib/designs/structures/index.js +1 -0
- package/lib/designs/structures/relation-dagre-flow.d.ts +21 -0
- package/lib/designs/structures/relation-dagre-flow.js +501 -0
- package/lib/designs/utils/hierarchy-color.d.ts +1 -1
- package/lib/editor/plugins/edit-bar/edit-bar.js +27 -9
- package/lib/jsx/global.d.ts +1 -0
- package/lib/jsx/types/element.d.ts +5 -1
- package/lib/jsx/utils/svg.js +2 -0
- package/lib/renderer/composites/icon.js +2 -0
- package/lib/renderer/composites/illus.d.ts +1 -1
- package/lib/renderer/composites/illus.js +8 -3
- package/lib/renderer/composites/text.js +4 -2
- package/lib/renderer/fonts/loader.js +2 -0
- package/lib/renderer/fonts/registry.js +6 -6
- package/lib/renderer/renderer.js +27 -24
- package/lib/resource/loader.js +3 -1
- package/lib/runtime/Infographic.js +1 -1
- package/lib/ssr/dom-shim.d.ts +4 -0
- package/lib/ssr/dom-shim.js +110 -0
- package/lib/ssr/index.d.ts +1 -0
- package/lib/ssr/index.js +5 -0
- package/lib/ssr/renderer.d.ts +2 -0
- package/lib/ssr/renderer.js +63 -0
- package/lib/syntax/index.js +57 -1
- package/lib/syntax/parser.js +44 -0
- package/lib/syntax/relations.d.ts +6 -0
- package/lib/syntax/relations.js +254 -0
- package/lib/syntax/schema.d.ts +1 -0
- package/lib/syntax/schema.js +13 -1
- package/lib/templates/built-in.js +2 -0
- package/lib/templates/relation-dagre-flow.d.ts +2 -0
- package/lib/templates/relation-dagre-flow.js +71 -0
- package/lib/types/data.d.ts +24 -3
- package/lib/utils/data.js +2 -5
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/is-browser.js +5 -9
- package/lib/utils/measure-text.d.ts +2 -2
- package/lib/utils/measure-text.js +4 -4
- package/lib/utils/recognizer.js +8 -5
- package/lib/utils/text.js +28 -23
- package/package.json +19 -7
- package/src/designs/items/BadgeCard.tsx +9 -2
- package/src/designs/items/SimpleCircleNode.tsx +46 -0
- package/src/designs/items/index.ts +1 -0
- package/src/designs/structures/hierarchy-mindmap.tsx +15 -2
- package/src/designs/structures/hierarchy-tree.tsx +33 -31
- package/src/designs/structures/index.ts +1 -0
- package/src/designs/structures/relation-dagre-flow.tsx +782 -0
- package/src/designs/utils/hierarchy-color.ts +6 -1
- package/src/editor/plugins/edit-bar/edit-bar.ts +41 -17
- package/src/index.ts +1 -1
- package/src/jsx/global.ts +1 -0
- package/src/jsx/types/element.ts +15 -6
- package/src/jsx/utils/svg.ts +2 -0
- package/src/renderer/composites/icon.ts +2 -0
- package/src/renderer/composites/illus.ts +16 -3
- package/src/renderer/composites/text.ts +7 -2
- package/src/renderer/fonts/loader.ts +7 -1
- package/src/renderer/fonts/registry.ts +1 -1
- package/src/renderer/renderer.ts +42 -24
- package/src/resource/loader.ts +3 -1
- package/src/runtime/Infographic.tsx +1 -1
- package/src/ssr/dom-shim.ts +120 -0
- package/src/ssr/index.ts +1 -0
- package/src/ssr/renderer.ts +72 -0
- package/src/syntax/index.ts +58 -1
- package/src/syntax/parser.ts +49 -0
- package/src/syntax/relations.ts +291 -0
- package/src/syntax/schema.ts +16 -0
- package/src/templates/built-in.ts +4 -2
- package/src/templates/relation-dagre-flow.ts +73 -0
- package/src/types/data.ts +26 -3
- package/src/utils/data.ts +1 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/is-browser.ts +3 -9
- package/src/utils/measure-text.ts +6 -7
- package/src/utils/recognizer.ts +9 -5
- package/src/utils/svg.ts +0 -1
- package/src/utils/text.ts +25 -19
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { measureText as measure, registerFont } from 'measury';
|
|
2
2
|
import AlibabaPuHuiTi from 'measury/fonts/AlibabaPuHuiTi-Regular';
|
|
3
|
-
import { TextProps } from '../jsx';
|
|
3
|
+
import { JSXNode, TextProps } from '../jsx';
|
|
4
4
|
import { DEFAULT_FONT } from '../renderer';
|
|
5
5
|
import { encodeFontFamily } from './font';
|
|
6
6
|
import { isBrowser } from './is-browser';
|
|
7
|
-
import { isNode } from './is-node';
|
|
8
7
|
|
|
9
8
|
let FONT_EXTEND_FACTOR = 1.01;
|
|
10
9
|
|
|
@@ -12,9 +11,7 @@ export const setFontExtendFactor = (factor: number) => {
|
|
|
12
11
|
FONT_EXTEND_FACTOR = factor;
|
|
13
12
|
};
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
registerFont(AlibabaPuHuiTi);
|
|
17
|
-
}
|
|
14
|
+
registerFont(AlibabaPuHuiTi);
|
|
18
15
|
|
|
19
16
|
let canvasContext: CanvasRenderingContext2D | null = null;
|
|
20
17
|
let measureSpan: HTMLSpanElement | null = null;
|
|
@@ -105,13 +102,15 @@ function measureTextInBrowser(
|
|
|
105
102
|
}
|
|
106
103
|
|
|
107
104
|
export function measureText(
|
|
108
|
-
text:
|
|
105
|
+
text: JSXNode = '',
|
|
109
106
|
attrs: TextProps,
|
|
110
107
|
): { width: number; height: number } {
|
|
111
108
|
if (attrs.width && attrs.height) {
|
|
112
109
|
return { width: attrs.width, height: attrs.height };
|
|
113
110
|
}
|
|
114
|
-
|
|
111
|
+
if (typeof text !== 'string' && typeof text !== 'number') {
|
|
112
|
+
return { width: 0, height: 0 };
|
|
113
|
+
}
|
|
115
114
|
const {
|
|
116
115
|
fontFamily = DEFAULT_FONT,
|
|
117
116
|
fontSize = 14,
|
package/src/utils/recognizer.ts
CHANGED
|
@@ -6,8 +6,12 @@ import { getTextEntity } from './text';
|
|
|
6
6
|
const is = (element: SVGElement, role: string) => {
|
|
7
7
|
return element?.dataset?.elementType === role;
|
|
8
8
|
};
|
|
9
|
+
const isTagName = (element: HTMLElement | SVGElement, tagName: string) => {
|
|
10
|
+
return element.tagName.toLowerCase() === tagName.toLowerCase();
|
|
11
|
+
};
|
|
12
|
+
|
|
9
13
|
export const isSVG = (element: any): element is SVGSVGElement =>
|
|
10
|
-
element instanceof SVGElement && element
|
|
14
|
+
element instanceof SVGElement && isTagName(element, 'svg');
|
|
11
15
|
export const isTitle = (element: SVGElement) => is(element, 'title');
|
|
12
16
|
export const isDesc = (element: SVGElement) => is(element, 'desc');
|
|
13
17
|
export const isShape = (element: SVGElement) => is(element, 'shape');
|
|
@@ -15,9 +19,9 @@ export const isShapesGroup = (element: SVGElement) =>
|
|
|
15
19
|
is(element, 'shapes-group');
|
|
16
20
|
export const isIllus = (element: SVGElement) => is(element, 'illus');
|
|
17
21
|
export const isText = (element: SVGElement): element is SVGTextElement =>
|
|
18
|
-
element instanceof SVGElement && element
|
|
22
|
+
element instanceof SVGElement && isTagName(element, 'text');
|
|
19
23
|
export const isGroup = (element: SVGElement): element is SVGGElement =>
|
|
20
|
-
element instanceof SVGElement && element
|
|
24
|
+
element instanceof SVGElement && isTagName(element, 'g');
|
|
21
25
|
export const isItemIcon = (element: SVGElement) => is(element, 'item-icon');
|
|
22
26
|
export const isItemIconGroup = (element: SVGElement) =>
|
|
23
27
|
is(element, 'item-icon-group');
|
|
@@ -37,11 +41,11 @@ export const isRoughVolume = (element: SVGElement) =>
|
|
|
37
41
|
export function isForeignObjectElement(
|
|
38
42
|
element: any,
|
|
39
43
|
): element is SVGForeignObjectElement {
|
|
40
|
-
return element
|
|
44
|
+
return isTagName(element, 'foreignObject');
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
export function isTextEntity(element: any): element is HTMLSpanElement {
|
|
44
|
-
return element
|
|
48
|
+
return isTagName(element, 'SPAN');
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
export function isEditableText(node: SVGElement): node is TextElement {
|
package/src/utils/svg.ts
CHANGED
package/src/utils/text.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import camelCase from 'lodash-es
|
|
1
|
+
import { camelCase } from 'lodash-es';
|
|
2
2
|
import { TextProps } from '../editor';
|
|
3
3
|
import type {
|
|
4
4
|
TextAttributes,
|
|
@@ -7,6 +7,7 @@ import type {
|
|
|
7
7
|
TextVerticalAlign,
|
|
8
8
|
} from '../types';
|
|
9
9
|
import { decodeFontFamily, encodeFontFamily } from './font';
|
|
10
|
+
import { measureText } from './measure-text';
|
|
10
11
|
import { isForeignObjectElement } from './recognizer';
|
|
11
12
|
import { createElement, setAttributes } from './svg';
|
|
12
13
|
|
|
@@ -20,6 +21,8 @@ export function createTextElement(
|
|
|
20
21
|
attributes: TextAttributes,
|
|
21
22
|
): TextElement {
|
|
22
23
|
const entity = document.createElement('span');
|
|
24
|
+
// Set xmlns on the span element (HTML content)
|
|
25
|
+
entity.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
|
|
23
26
|
const foreignObject = createElement<SVGForeignObjectElement>(
|
|
24
27
|
'foreignObject',
|
|
25
28
|
{ overflow: 'visible' },
|
|
@@ -46,9 +49,19 @@ export function updateTextElement(
|
|
|
46
49
|
|
|
47
50
|
if (entity) {
|
|
48
51
|
Object.assign(entity.style, getTextStyle(attributes));
|
|
49
|
-
|
|
50
52
|
if (!width || !height) {
|
|
51
|
-
const
|
|
53
|
+
const content = textContent ?? getTextContent(text);
|
|
54
|
+
const { fontFamily, fontSize, fontWeight, lineHeight } = entity.style;
|
|
55
|
+
const fSize = fontSize ? parseFloat(String(fontSize)) : 12;
|
|
56
|
+
const rect = measureText(content, {
|
|
57
|
+
fontFamily,
|
|
58
|
+
fontSize: fSize,
|
|
59
|
+
fontWeight,
|
|
60
|
+
lineHeight: lineHeight.endsWith('px')
|
|
61
|
+
? parseFloat(lineHeight)
|
|
62
|
+
: (parseFloat(lineHeight) || 1.4) * fSize,
|
|
63
|
+
});
|
|
64
|
+
|
|
52
65
|
if (!width && !text.hasAttribute('width')) width = String(rect.width);
|
|
53
66
|
if (!height && !text.hasAttribute('height')) height = String(rect.height);
|
|
54
67
|
}
|
|
@@ -153,32 +166,25 @@ export function getTextStyle(attributes: TextAttributes) {
|
|
|
153
166
|
: +lineHeight;
|
|
154
167
|
if (letterSpacing) style.letterSpacing = `${letterSpacing}px`;
|
|
155
168
|
if (strokeWidth) style.strokeWidth = `${strokeWidth}px`;
|
|
156
|
-
style.fontFamily = fontFamily
|
|
157
|
-
? encodeFontFamily(fontFamily)
|
|
158
|
-
: fontFamily || '';
|
|
169
|
+
if (fontFamily) style.fontFamily = encodeFontFamily(fontFamily);
|
|
159
170
|
|
|
160
171
|
return style;
|
|
161
172
|
}
|
|
162
173
|
|
|
163
|
-
function measureTextSpan(span: HTMLSpanElement) {
|
|
164
|
-
const parentNode = span.parentNode;
|
|
165
|
-
span.style.visibility = 'hidden';
|
|
166
|
-
document.body.appendChild(span);
|
|
167
|
-
const rect = span.getBoundingClientRect();
|
|
168
|
-
if (parentNode) parentNode.appendChild(span);
|
|
169
|
-
else document.body.removeChild(span);
|
|
170
|
-
span.style.visibility = 'visible';
|
|
171
|
-
return rect;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
174
|
export function getTextContent(text: TextElement): string {
|
|
175
|
-
|
|
175
|
+
const entity = getTextEntity(text);
|
|
176
|
+
if (!entity) return '';
|
|
177
|
+
return entity.innerText || entity.textContent || '';
|
|
176
178
|
}
|
|
177
179
|
|
|
178
180
|
export function setTextContent(text: TextElement, content: string): void {
|
|
179
181
|
const entity = getTextEntity(text);
|
|
180
182
|
if (entity) {
|
|
181
|
-
|
|
183
|
+
try {
|
|
184
|
+
entity.innerText = content;
|
|
185
|
+
} catch {
|
|
186
|
+
entity.textContent = content;
|
|
187
|
+
}
|
|
182
188
|
}
|
|
183
189
|
}
|
|
184
190
|
|