@visactor/vrender-components 1.1.0-alpha.24 → 1.1.0-alpha.25
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/cjs/axis/animate/group-transition.d.ts +2 -1
- package/cjs/axis/animate/group-transition.js +2 -2
- package/cjs/axis/animate/group-transition.js.map +1 -1
- package/cjs/axis/base.js +2 -2
- package/cjs/axis/base.js.map +1 -1
- package/cjs/axis/overlap/auto-hide.d.ts +1 -1
- package/cjs/axis/overlap/auto-hide.js.map +1 -1
- package/cjs/core/base.d.ts +2 -2
- package/cjs/core/base.js +3 -3
- package/cjs/core/base.js.map +1 -1
- package/cjs/crosshair/polygon-sector.js +2 -1
- package/cjs/crosshair/rect.js +1 -2
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/base.js +11 -11
- package/cjs/label/base.js.map +1 -1
- package/cjs/tooltip/tooltip.js +8 -8
- package/cjs/tooltip/tooltip.js.map +1 -1
- package/cjs/util/event.js +2 -2
- package/cjs/util/event.js.map +1 -1
- package/cjs/util/graphic-creator.js +1 -1
- package/cjs/util/graphic-creator.js.map +1 -1
- package/cjs/util/text.js +3 -3
- package/cjs/util/text.js.map +1 -1
- package/dist/index.es.js +1184 -1714
- package/es/axis/animate/group-transition.d.ts +2 -1
- package/es/axis/animate/group-transition.js +1 -1
- package/es/axis/animate/group-transition.js.map +1 -1
- package/es/axis/base.js +1 -1
- package/es/axis/base.js.map +1 -1
- package/es/axis/overlap/auto-hide.d.ts +1 -1
- package/es/axis/overlap/auto-hide.js.map +1 -1
- package/es/core/base.d.ts +2 -2
- package/es/core/base.js +3 -1
- package/es/core/base.js.map +1 -1
- package/es/crosshair/polygon-sector.js +2 -1
- package/es/crosshair/rect.js +1 -2
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/base.js +3 -1
- package/es/label/base.js.map +1 -1
- package/es/tooltip/tooltip.js +3 -1
- package/es/tooltip/tooltip.js.map +1 -1
- package/es/util/event.js +1 -1
- package/es/util/event.js.map +1 -1
- package/es/util/graphic-creator.js +1 -1
- package/es/util/graphic-creator.js.map +1 -1
- package/es/util/text.js +1 -1
- package/es/util/text.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/graphic-creator.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"sources":["../src/util/graphic-creator.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE5F,MAAM,aAAa,GAAG,iBAA+F,CAAC;AAEtH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,CAAC,UAAgC,EAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;IACjF,MAAM,EAAE,CAAC,UAAmC,EAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7F,KAAK,EAAE,CAAC,UAAkC,EAAU,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC;IACzF,KAAK,EAAE,CAAC,UAAkC,EAAU,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC;IACzF,IAAI,EAAE,CAAC,UAAiC,EAAS,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;IACrF,IAAI,EAAE,CAAC,UAAiC,EAAS,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;IACrF,OAAO,EAAE,CAAC,UAAoC,EAAY,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC;IACjG,IAAI,EAAE,CAAC,UAAiC,EAAS,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;IACrF,QAAQ,EAAE,CAAC,UAAqC,EAAa,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;IACrG,MAAM,EAAE,CAAC,UAAmC,EAAW,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7F,IAAI,EAAE,CAAC,UAAiC,EAAS,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;CACtF,CAAC","file":"graphic-creator.js","sourcesContent":["import type {\n IArc,\n IArcGraphicAttribute,\n ICircle,\n ICircleGraphicAttribute,\n IGroup,\n IGroupGraphicAttribute,\n IImage,\n IImageGraphicAttribute,\n ILine,\n ILineGraphicAttribute,\n IPath,\n IPathGraphicAttribute,\n IPolygon,\n IPolygonGraphicAttribute,\n IRect,\n IRectGraphicAttribute,\n IRichText,\n IRichTextGraphicAttribute,\n ISymbol,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute\n} from '@visactor/vrender-core';\nimport { createGraphic as createCoreGraphic } from '@visactor/vrender-core/graphic/creator';\n\nconst createGraphic = createCoreGraphic as <TGraphic, TAttributes>(type: string, attributes: TAttributes) => TGraphic;\n\nexport const graphicCreator = {\n arc: (attributes: IArcGraphicAttribute): IArc => createGraphic('arc', attributes),\n circle: (attributes: ICircleGraphicAttribute): ICircle => createGraphic('circle', attributes),\n group: (attributes: IGroupGraphicAttribute): IGroup => createGraphic('group', attributes),\n image: (attributes: IImageGraphicAttribute): IImage => createGraphic('image', attributes),\n line: (attributes: ILineGraphicAttribute): ILine => createGraphic('line', attributes),\n path: (attributes: IPathGraphicAttribute): IPath => createGraphic('path', attributes),\n polygon: (attributes: IPolygonGraphicAttribute): IPolygon => createGraphic('polygon', attributes),\n rect: (attributes: IRectGraphicAttribute): IRect => createGraphic('rect', attributes),\n richtext: (attributes: IRichTextGraphicAttribute): IRichText => createGraphic('richtext', attributes),\n symbol: (attributes: ISymbolGraphicAttribute): ISymbol => createGraphic('symbol', attributes),\n text: (attributes: ITextGraphicAttribute): IText => createGraphic('text', attributes)\n};\n"]}
|
package/es/util/text.js
CHANGED
package/es/util/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/text.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"sources":["../src/util/text.ts"],"names":[],"mappings":"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","file":"text.js","sourcesContent":["import type {\n IRichText,\n IRichTextAttribute,\n IText,\n ITextGraphicAttribute,\n TextAlignType\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { getTextBounds } from '@visactor/vrender-core/text';\nimport { graphicCreator } from './graphic-creator';\nimport type { ITextMeasureOption } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { TextMeasure, isObject, isValid } from '@visactor/vutils';\nimport { DEFAULT_TEXT_FONT_FAMILY, DEFAULT_TEXT_FONT_SIZE } from '../constant';\nimport type { HTMLTextContent, ReactTextContent, TextContent } from '../core/type';\n\nexport const initTextMeasure = (\n textSpec?: Partial<ITextGraphicAttribute>,\n option?: Partial<ITextMeasureOption>,\n useNaiveCanvas?: boolean,\n defaultFontParams?: Partial<ITextGraphicAttribute>\n): TextMeasure<ITextGraphicAttribute> => {\n return new TextMeasure<ITextGraphicAttribute>(\n {\n defaultFontParams: {\n fontFamily: DEFAULT_TEXT_FONT_FAMILY,\n fontSize: DEFAULT_TEXT_FONT_SIZE,\n ...defaultFontParams\n },\n getTextBounds: useNaiveCanvas ? undefined : getTextBounds,\n specialCharSet: '-/: .,@%\\'\"~' + TextMeasure.ALPHABET_CHAR_SET + TextMeasure.ALPHABET_CHAR_SET.toUpperCase(),\n ...(option ?? {})\n },\n textSpec\n );\n};\n\n// FIXME: 和上一个方法统一,使用 TextMeasure 类\nexport function measureTextSize(\n text: string | number | string[] | number[],\n textSpec: Partial<ITextGraphicAttribute>,\n defaultTextTheme: Partial<ITextGraphicAttribute> = {}\n) {\n if (!text) {\n return { width: 0, height: 0 };\n }\n const bounds = getTextBounds({\n text,\n fontFamily: textSpec.fontFamily || defaultTextTheme.fontFamily || DEFAULT_TEXT_FONT_FAMILY,\n fontSize: textSpec.fontSize || defaultTextTheme.fontSize || 12,\n fontWeight: textSpec.fontWeight || defaultTextTheme.fontWeight,\n textAlign: textSpec.textAlign || 'center',\n textBaseline: textSpec.textBaseline,\n ellipsis: !!textSpec.ellipsis,\n maxLineWidth: textSpec.maxLineWidth || Infinity,\n lineHeight: textSpec.fontSize || defaultTextTheme.fontSize || 12\n });\n\n return { width: bounds.width(), height: bounds.height() };\n}\n\nexport function isRichText(attributes: TextContent, typeKey = 'type') {\n return getTextType(attributes, typeKey) === 'rich';\n}\n\nexport function getTextType(attributes: TextContent, typeKey = 'type') {\n if (isObject(attributes.text) && 'type' in attributes.text) {\n return attributes.text.type ?? 'text';\n }\n\n if (typeKey in attributes) {\n return attributes[typeKey] ?? 'text';\n }\n\n return 'text';\n}\n\nexport function richTextAttributeTransform(attributes: ITextGraphicAttribute & IRichTextAttribute & TextContent) {\n if (isValid(attributes.maxLineWidth)) {\n attributes.maxWidth = attributes.maxLineWidth;\n delete attributes.maxLineWidth;\n }\n\n attributes.width = attributes.width ?? 0;\n attributes.height = attributes.height ?? 0;\n attributes.textConfig = (attributes.text as unknown as any).text || attributes.text;\n return attributes;\n}\n\nexport function htmlAttributeTransform(attributes: ITextGraphicAttribute) {\n const { text, _originText } = attributes as unknown as HTMLTextContent;\n const { text: html } = text;\n\n attributes.html = html;\n attributes.text = _originText;\n attributes.renderable = false; // 文字图元配置了 html,则不绘制原始文字\n return attributes;\n}\n\nexport function reactAttributeTransform(attributes: ITextGraphicAttribute) {\n const { text, _originText } = attributes as unknown as ReactTextContent;\n const { text: react } = text;\n\n attributes.react = react;\n attributes.text = _originText;\n attributes.renderable = false; // 文字图元配置了 react,则不绘制原始文字\n\n return attributes;\n}\n\nexport function createTextGraphicByType(textAttributes: ITextGraphicAttribute, typeKey = 'type') {\n const textType = getTextType(textAttributes, typeKey);\n if (textType === 'rich') {\n return graphicCreator.richtext(richTextAttributeTransform(textAttributes as IRichTextAttribute));\n }\n\n if (textType === 'html') {\n textAttributes = htmlAttributeTransform(textAttributes);\n } else if (textType === 'react') {\n textAttributes = reactAttributeTransform(textAttributes);\n }\n\n return graphicCreator.text(textAttributes as ITextGraphicAttribute);\n}\n\nexport function alignTextInLine(\n layoutAlign: 'left' | 'right',\n graphic: IText | IRichText,\n textAlign: TextAlignType,\n pos: number,\n textWidth: number\n) {\n if (layoutAlign === 'right') {\n if (textAlign === 'center') {\n graphic.setAttribute('x', pos - textWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n graphic.setAttribute('x', pos);\n } else {\n // 默认左对齐\n graphic.setAttribute('x', pos - textWidth);\n }\n } else {\n if (textAlign === 'center') {\n graphic.setAttribute('x', pos + textWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n graphic.setAttribute('x', pos + textWidth);\n } else {\n // 默认左对齐\n graphic.setAttribute('x', pos);\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vrender-components",
|
|
3
|
-
"version": "1.1.0-alpha.
|
|
3
|
+
"version": "1.1.0-alpha.25",
|
|
4
4
|
"description": "components library for dp visualization",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "cjs/index.js",
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@visactor/vutils": "~1.0.12",
|
|
65
65
|
"@visactor/vscale": "~1.0.12",
|
|
66
|
-
"@visactor/vrender-core": "1.1.0-alpha.
|
|
67
|
-
"@visactor/vrender-kits": "1.1.0-alpha.
|
|
68
|
-
"@visactor/vrender-animate": "1.1.0-alpha.
|
|
66
|
+
"@visactor/vrender-core": "1.1.0-alpha.25",
|
|
67
|
+
"@visactor/vrender-kits": "1.1.0-alpha.25",
|
|
68
|
+
"@visactor/vrender-animate": "1.1.0-alpha.25"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@rushstack/eslint-patch": "~1.1.4",
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
"vite": "3.2.6",
|
|
80
80
|
"typescript": "4.9.5",
|
|
81
81
|
"cross-env": "^7.0.3",
|
|
82
|
-
"@internal/
|
|
82
|
+
"@internal/bundler": "0.0.1",
|
|
83
83
|
"@internal/ts-config": "0.0.1",
|
|
84
|
-
"@internal/
|
|
84
|
+
"@internal/eslint-config": "0.0.1"
|
|
85
85
|
},
|
|
86
86
|
"keywords": [
|
|
87
87
|
"VisActor",
|