@visactor/vrender-components 0.20.2 → 0.20.3
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/config.d.ts +6 -0
- package/cjs/axis/config.js +7 -1
- package/cjs/axis/config.js.map +1 -1
- package/cjs/axis/constant.d.ts +4 -1
- package/cjs/axis/constant.js +4 -3
- package/cjs/axis/constant.js.map +1 -1
- package/cjs/axis/line.d.ts +2 -0
- package/cjs/axis/line.js +62 -8
- package/cjs/axis/line.js.map +1 -1
- package/cjs/axis/overlap/auto-limit.d.ts +2 -0
- package/cjs/axis/overlap/auto-limit.js +26 -5
- package/cjs/axis/overlap/auto-limit.js.map +1 -1
- package/cjs/axis/overlap/auto-wrap.d.ts +9 -0
- package/cjs/axis/overlap/auto-wrap.js +38 -0
- package/cjs/axis/overlap/auto-wrap.js.map +1 -0
- package/cjs/axis/overlap/util.d.ts +2 -0
- package/cjs/axis/overlap/util.js +15 -1
- package/cjs/axis/overlap/util.js.map +1 -1
- package/cjs/axis/tick-data/continuous.js +35 -11
- package/cjs/axis/tick-data/continuous.js.map +1 -1
- package/cjs/axis/type.d.ts +28 -4
- package/cjs/axis/type.js.map +1 -1
- package/cjs/axis/util.d.ts +2 -0
- package/cjs/axis/util.js +15 -5
- package/cjs/axis/util.js.map +1 -1
- package/cjs/brush/type.js +2 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/animate/animate.d.ts +5 -5
- package/cjs/label/animate/animate.js +4 -4
- package/cjs/label/animate/animate.js.map +1 -1
- package/cjs/label/arc.d.ts +2 -0
- package/cjs/label/arc.js +28 -27
- package/cjs/label/arc.js.map +1 -1
- package/cjs/label/base.d.ts +6 -5
- package/cjs/label/base.js +60 -58
- package/cjs/label/base.js.map +1 -1
- package/cjs/label/dataLabel.js +1 -0
- package/cjs/label/dataLabel.js.map +1 -1
- package/cjs/label/type.d.ts +6 -5
- package/cjs/label/type.js.map +1 -1
- package/cjs/label/util.d.ts +1 -0
- package/cjs/label/util.js +6 -2
- package/cjs/label/util.js.map +1 -1
- package/cjs/tag/tag.js +4 -4
- package/cjs/tag/tag.js.map +1 -1
- package/cjs/title/title.js +95 -96
- package/cjs/title/title.js.map +1 -1
- package/dist/index.es.js +394 -164
- package/es/axis/config.d.ts +6 -0
- package/es/axis/config.js +7 -0
- package/es/axis/config.js.map +1 -1
- package/es/axis/constant.d.ts +4 -1
- package/es/axis/constant.js +4 -1
- package/es/axis/constant.js.map +1 -1
- package/es/axis/line.d.ts +2 -0
- package/es/axis/line.js +66 -8
- package/es/axis/line.js.map +1 -1
- package/es/axis/overlap/auto-limit.d.ts +2 -0
- package/es/axis/overlap/auto-limit.js +27 -5
- package/es/axis/overlap/auto-limit.js.map +1 -1
- package/es/axis/overlap/auto-wrap.d.ts +9 -0
- package/es/axis/overlap/auto-wrap.js +31 -0
- package/es/axis/overlap/auto-wrap.js.map +1 -0
- package/es/axis/overlap/util.d.ts +2 -0
- package/es/axis/overlap/util.js +13 -1
- package/es/axis/overlap/util.js.map +1 -1
- package/es/axis/tick-data/continuous.js +34 -11
- package/es/axis/tick-data/continuous.js.map +1 -1
- package/es/axis/type.d.ts +28 -4
- package/es/axis/type.js.map +1 -1
- package/es/axis/util.d.ts +2 -0
- package/es/axis/util.js +13 -3
- package/es/axis/util.js.map +1 -1
- package/es/brush/type.js +2 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/animate/animate.d.ts +5 -5
- package/es/label/animate/animate.js +4 -4
- package/es/label/animate/animate.js.map +1 -1
- package/es/label/arc.d.ts +2 -0
- package/es/label/arc.js +29 -26
- package/es/label/arc.js.map +1 -1
- package/es/label/base.d.ts +6 -5
- package/es/label/base.js +57 -57
- package/es/label/base.js.map +1 -1
- package/es/label/dataLabel.js +1 -0
- package/es/label/dataLabel.js.map +1 -1
- package/es/label/type.d.ts +6 -5
- package/es/label/type.js.map +1 -1
- package/es/label/util.d.ts +1 -0
- package/es/label/util.js +4 -0
- package/es/label/util.js.map +1 -1
- package/es/tag/tag.js +4 -4
- package/es/tag/tag.js.map +1 -1
- package/es/title/title.js +95 -94
- package/es/title/title.js.map +1 -1
- package/package.json +3 -3
package/cjs/label/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n EasingType,\n IGraphic,\n IGroupGraphicAttribute,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute,\n IText,\n TextAlignType,\n TextBaselineType,\n ILineGraphicAttribute,\n IRichTextCharacter,\n IRichText,\n ILine,\n ICustomPath2D\n} from '@visactor/vrender-core';\nimport type { BoundsAnchorType, IPointLike, InsideBoundsAnchorType } from '@visactor/vutils';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n [key: string]: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n // 文本类型:text, rich, html (区分于图元类型)\n textType?: string;\n /**\n * 文本内容,如果需要进行换行,则使用数组形式,如 ['abc', '123']\n * 支持富文本内容, 如textConfig, html\n */\n text?: string | string[] | number | number[] | IRichTextCharacter[];\n /**\n * 兼容ITextGraphicAttribute与IRichTextGraphicAttribute的textAlign属性\n */\n textAlign?: 'left' | 'right' | 'center' | 'start' | 'end';\n textBaseline?: 'top' | 'middle' | 'bottom' | 'alphabetic';\n} & (\n | Omit<Partial<ITextGraphicAttribute>, 'textAlign' | 'textBaseline'>\n | Omit<Partial<IRichTextGraphicAttribute>, 'textAlign' | 'textBaseline'>\n);\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * @hack not recommend to use\n * @returns\n */\n getBaseMarks?: () => IGraphic[];\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 连接线样式 */\n line?: ILabelLineSpec;\n\n /** 连线的交互样式 */\n labelLineState?: LabelItemStateStyle<ILineGraphicAttribute>;\n\n syncState?: boolean;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | boolean;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | boolean;\n\n /** 动画配置 */\n animation?: ILabelAnimation | boolean;\n animationEnter?: ILabelUpdateAnimation;\n animationUpdate?: ILabelUpdateAnimation | ILabelUpdateChannelAnimation[];\n animationExit?: ILabelExitAnimation;\n\n // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局逻辑将不再生效。(position/offset不生效)\n */\n customLayoutFunc?: (\n item: LabelItem[],\n labels: (IText | IRichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (IText | IRichText)[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (\n label: (IText | IRichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (IText | IRichText)[];\n /**\n * 防重叠计算完成后的回调函数\n * @since 1.19.16\n */\n onAfterOverlapping?: (\n labels: (IText | IRichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => void;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n /** 唯一标志符 */\n id?: string;\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 躲避指定图元\n * @default []\n */\n avoidMarks?: string[] | IGraphic[];\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n\n /**\n * 文字在防重叠计算中预留的边距。\n * @default 0\n */\n overlapPadding?: number;\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 对比度度量\n * 'WCAG' | 'lightness'\n * 默认使用'WCAG'\n */\n mode?: string;\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n /**\n * fillStrategy四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持fill设置的颜色)\n * @default 'invertBase'\n */\n fillStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * strokeStrategy的四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持stroke设置的颜色)\n * @default 'base'\n */\n strokeStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * 前景色与亮色具有对比度时,similarSeries使用该色\n * @default '#ffffff'\n */\n brightColor?: string;\n /**\n * 前景色与暗色具有对比度时,similarSeries使用该色\n * @default '#000000'\n */\n darkColor?: string;\n /**\n * label超出mark范围,也以mark作为背景色进行反色\n */\n outsideEnable?: boolean;\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<BoundsAnchorType>;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<InsideBoundsAnchorType | BoundsAnchorType>;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface AreaLabelAttrs extends BaseLabelAttrs {\n type: 'area';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface LineDataLabelAttrs extends BaseLabelAttrs {\n type: 'line-data';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<BoundsAnchorType>;\n}\n\nexport interface PolygonLabelAttrs extends BaseLabelAttrs {\n type: 'polygon';\n /**\n * 标签位置\n * @default 'center'\n */\n position?: Functional<'center'>;\n}\n\nexport interface ArcLabelAttrs extends BaseLabelAttrs {\n type: 'arc';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'outside'\n * @since 0.20.1 support 'inside-center'\n */\n position?: 'inside' | 'outside' | 'inside-inner' | 'inside-outer' | 'inside-center';\n\n // 画布宽度\n width?: number;\n // 画布高度\n height?: number;\n\n /**\n * 是否允许标签重叠\n * @default false\n */\n coverEnable?: boolean;\n /**\n * 是否允许标签旋转\n * @default true\n */\n rotate?: boolean;\n\n /**\n * 文字与引导线间隔宽度\n * @default 5\n */\n spaceWidth?: number;\n /**\n * 标签旋转角度\n */\n angle?: number;\n /**\n * 标签旋转角度的偏移角度\n */\n offsetAngle?: number;\n /**\n * 标签相对于 `outerRadius` 的径向偏移,目前仅作用于 inside 标签\n */\n offsetRadius?: number;\n /**\n * 标签横向点对齐\n */\n textAlign?: TextAlignType;\n /**\n * 标签纵向点对齐\n */\n textBaseline?: TextBaselineType;\n /**\n * 扇区间标签的间隔\n * @default 6\n */\n layoutArcGap?: number;\n /** 标签引导线样式 */\n line?: IArcLabelLineSpec;\n /** 标签布局配置 */\n layout?: IArcLabelLayoutSpec;\n /** 标签引导线点集 */\n points?: IPoint[];\n /** 饼图扇区中心偏移 */\n centerOffset?: number;\n}\n\nexport interface ILabelLineSpec {\n /**\n * 是否显示引导线\n * @default true\n */\n visible?: boolean;\n /**\n * 自定义路径\n * @since 0.19.21\n */\n customShape?: (\n text: ITextGraphicAttribute,\n attrs: Partial<ILineGraphicAttribute>,\n path: ICustomPath2D\n ) => ICustomPath2D;\n /**\n * 引导线样式\n */\n style?: Partial<ILineGraphicAttribute>;\n}\n\nexport interface IArcLabelLineSpec extends ILabelLineSpec {\n /**\n * 引导线 line1 部分最小长度\n * @default 20\n */\n line1MinLength?: number;\n /**\n * 引导线 line2 部分最小长度\n * @default 10\n */\n line2MinLength?: number;\n /**\n * 引导线是否光滑\n * @default false\n */\n smooth?: boolean;\n}\n\nexport type ArcLabelAlignType = 'arc' | 'labelLine' | 'edge';\n\nexport type ArcLabelStrategyType = 'priority' | 'vertical' | 'none';\n\nexport interface IArcLabelLayoutSpec {\n /**\n * 标签对齐方式\n * @default 'arc'\n */\n textAlign?: ArcLabelAlignType;\n /** @deprecate 建议统一使用textAlign,后续将废除 */\n align?: ArcLabelAlignType;\n /**\n * 标签布局策略\n * @default 'priority'\n */\n strategy?: ArcLabelStrategyType;\n /**\n * 是否启用切线约束\n * @default true\n */\n tangentConstraint?: boolean;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs | ArcLabelAttrs | LineDataLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number; padding?: { top?: number; left?: number; right?: number; bottom?: number } };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelExitAnimation {\n duration?: number;\n delay?: number;\n easing?: EasingType;\n}\n\nexport interface ILabelEnterAnimation extends ILabelExitAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n}\n\nexport interface ILabelUpdateAnimation extends ILabelExitAnimation {\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n\nexport interface ILabelUpdateChannelAnimation extends ILabelUpdateAnimation {\n channel?: string[];\n options?: { excludeChannels?: string[] };\n}\n\nexport interface ILabelAnimation extends ILabelEnterAnimation, ILabelExitAnimation, ILabelUpdateAnimation {}\n\nexport interface IPoint {\n x: number;\n y: number;\n}\n\nexport interface IPolarPoint {\n radius: number;\n angle: number;\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport type TextAlign = 'left' | 'right' | 'center';\n\nexport type LabelContent = {\n text: IText | IRichText;\n labelLine?: ILine;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n EasingType,\n IGraphic,\n IGroupGraphicAttribute,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute,\n IText,\n TextAlignType,\n TextBaselineType,\n ILineGraphicAttribute,\n IRichTextCharacter,\n IRichText,\n ILine,\n ICustomPath2D,\n IArc\n} from '@visactor/vrender-core';\nimport type { BoundsAnchorType, IPointLike, InsideBoundsAnchorType } from '@visactor/vutils';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n [key: string]: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n // 文本类型:text, rich, html (区分于图元类型)\n textType?: string;\n /**\n * 文本内容,如果需要进行换行,则使用数组形式,如 ['abc', '123']\n * 支持富文本内容, 如textConfig, html\n */\n text?: string | string[] | number | number[] | IRichTextCharacter[];\n /**\n * 兼容ITextGraphicAttribute与IRichTextGraphicAttribute的textAlign属性\n */\n textAlign?: 'left' | 'right' | 'center' | 'start' | 'end';\n textBaseline?: 'top' | 'middle' | 'bottom' | 'alphabetic';\n} & (\n | Omit<Partial<ITextGraphicAttribute>, 'textAlign' | 'textBaseline'>\n | Omit<Partial<IRichTextGraphicAttribute>, 'textAlign' | 'textBaseline'>\n);\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * @hack not recommend to use\n * @returns\n */\n getBaseMarks?: () => IGraphic[];\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 连接线样式 */\n line?: ILabelLineSpec;\n\n /** 连线的交互样式 */\n labelLineState?: LabelItemStateStyle<ILineGraphicAttribute>;\n\n syncState?: boolean;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | boolean;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | boolean;\n\n /** 动画配置 */\n animation?: ILabelAnimation | boolean;\n animationEnter?: ILabelUpdateAnimation | boolean;\n animationUpdate?: ILabelUpdateAnimation | ILabelUpdateChannelAnimation[] | boolean;\n animationExit?: ILabelExitAnimation | boolean;\n\n // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局逻辑将不再生效。(position/offset不生效)\n */\n customLayoutFunc?: (\n item: LabelItem[],\n labels: (IText | IRichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (IText | IRichText)[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (\n label: (IText | IRichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (IText | IRichText)[];\n /**\n * 防重叠计算完成后的回调函数\n * @since 1.19.16\n */\n onAfterOverlapping?: (\n labels: (IText | IRichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => void;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n /** 唯一标志符 */\n id?: string;\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 躲避指定图元\n * @default []\n */\n avoidMarks?: string[] | IGraphic[];\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n\n /**\n * 文字在防重叠计算中预留的边距。\n * @default 0\n */\n overlapPadding?: number;\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 对比度度量\n * 'WCAG' | 'lightness'\n * 默认使用'WCAG'\n */\n mode?: string;\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n /**\n * fillStrategy四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持fill设置的颜色)\n * @default 'invertBase'\n */\n fillStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * strokeStrategy的四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持stroke设置的颜色)\n * @default 'base'\n */\n strokeStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * 前景色与亮色具有对比度时,similarSeries使用该色\n * @default '#ffffff'\n */\n brightColor?: string;\n /**\n * 前景色与暗色具有对比度时,similarSeries使用该色\n * @default '#000000'\n */\n darkColor?: string;\n /**\n * label超出mark范围,也以mark作为背景色进行反色\n */\n outsideEnable?: boolean;\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<BoundsAnchorType>;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<InsideBoundsAnchorType | BoundsAnchorType>;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface AreaLabelAttrs extends BaseLabelAttrs {\n type: 'area';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface LineDataLabelAttrs extends BaseLabelAttrs {\n type: 'line-data';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<BoundsAnchorType>;\n}\n\nexport interface PolygonLabelAttrs extends BaseLabelAttrs {\n type: 'polygon';\n /**\n * 标签位置\n * @default 'center'\n */\n position?: Functional<'center'>;\n}\n\nexport interface ArcLabelAttrs extends BaseLabelAttrs {\n type: 'arc';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'outside'\n * @since 0.20.1 support 'inside-center'\n */\n position?: 'inside' | 'outside' | 'inside-inner' | 'inside-outer' | 'inside-center';\n\n // 画布宽度\n width?: number;\n // 画布高度\n height?: number;\n\n /**\n * 是否允许标签重叠\n * @default false\n */\n coverEnable?: boolean;\n /**\n * 是否允许标签旋转\n * @default true\n */\n rotate?: boolean;\n\n /**\n * 文字与引导线间隔宽度\n * @default 5\n */\n spaceWidth?: number;\n /**\n * 标签旋转角度\n */\n angle?: number;\n /**\n * 标签旋转角度的偏移角度\n */\n offsetAngle?: number;\n /**\n * 标签相对于 `outerRadius` 的径向偏移,目前仅作用于 inside 标签\n */\n offsetRadius?: number;\n /**\n * 标签横向点对齐\n */\n textAlign?: TextAlignType;\n /**\n * 标签纵向点对齐\n */\n textBaseline?: TextBaselineType;\n /**\n * 扇区间标签的间隔\n * @default 6\n */\n layoutArcGap?: number;\n /** 标签引导线样式 */\n line?: IArcLabelLineSpec;\n /** 标签布局配置 */\n layout?: IArcLabelLayoutSpec;\n /** 标签引导线点集 */\n points?: IPoint[];\n /** 饼图扇区中心偏移 */\n centerOffset?: number;\n}\n\nexport interface ILabelLineSpec {\n /**\n * 是否显示引导线\n * @default true\n */\n visible?: boolean;\n /**\n * 自定义路径\n * @since 0.19.21\n */\n customShape?: (\n text: ITextGraphicAttribute,\n attrs: Partial<ILineGraphicAttribute>,\n path: ICustomPath2D\n ) => ICustomPath2D;\n /**\n * 引导线样式\n */\n style?: Partial<ILineGraphicAttribute>;\n}\n\nexport interface IArcLabelLineSpec extends ILabelLineSpec {\n /**\n * 引导线 line1 部分最小长度\n * @default 20\n */\n line1MinLength?: number;\n /**\n * 引导线 line2 部分最小长度\n * @default 10\n * @since 0.20.3 支持函数回调\n */\n line2MinLength?: number | ((texts: IGraphic[], arcs: IArc[], attrs: Partial<ArcLabelAttrs>) => number);\n /**\n * 引导线是否光滑\n * @default false\n */\n smooth?: boolean;\n}\n\nexport type ArcLabelAlignType = 'arc' | 'labelLine' | 'edge';\n\nexport type ArcLabelStrategyType = 'priority' | 'vertical' | 'none';\n\nexport interface IArcLabelLayoutSpec {\n /**\n * 标签对齐方式\n * @default 'arc'\n */\n textAlign?: ArcLabelAlignType;\n /** @deprecate 建议统一使用textAlign,后续将废除 */\n align?: ArcLabelAlignType;\n /**\n * 标签对齐的偏移量\n * @since 0.20.3\n */\n alignOffset?: number | ((texts: IGraphic[], arcs: IArc[], attrs: Partial<ArcLabelAttrs>) => number);\n /**\n * 标签布局策略\n * @default 'priority'\n */\n strategy?: ArcLabelStrategyType;\n /**\n * 是否启用切线约束\n * @default true\n */\n tangentConstraint?: boolean;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs | ArcLabelAttrs | LineDataLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number; padding?: { top?: number; left?: number; right?: number; bottom?: number } };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelExitAnimation {\n duration?: number;\n delay?: number;\n easing?: EasingType;\n}\n\nexport interface ILabelEnterAnimation extends ILabelExitAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n}\n\nexport interface ILabelUpdateAnimation extends ILabelExitAnimation {\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n\nexport interface ILabelUpdateChannelAnimation extends ILabelUpdateAnimation {\n channel?: string[];\n options?: { excludeChannels?: string[] };\n}\n\nexport interface ILabelAnimation extends ILabelEnterAnimation, ILabelExitAnimation, ILabelUpdateAnimation {}\n\nexport interface IPoint {\n x: number;\n y: number;\n}\n\nexport interface IPolarPoint {\n radius: number;\n angle: number;\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport type TextAlign = 'left' | 'right' | 'center';\n\nexport type LabelContent = {\n text: IText | IRichText;\n labelLine?: ILine;\n};\n"]}
|
package/cjs/label/util.d.ts
CHANGED
package/cjs/label/util.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: !0
|
|
5
|
-
}), exports.connectLineBetweenBounds = exports.labelingLineOrArea = exports.getPointsOfLineArea = exports.labelingPoint = exports.degrees = exports.checkBoundsOverlap = exports.connectLineRadian = exports.lineCirclePoints = exports.isQuadrantRight = exports.isQuadrantLeft = void 0;
|
|
5
|
+
}), exports.getAlignOffset = exports.connectLineBetweenBounds = exports.labelingLineOrArea = exports.getPointsOfLineArea = exports.labelingPoint = exports.degrees = exports.checkBoundsOverlap = exports.connectLineRadian = exports.lineCirclePoints = exports.isQuadrantRight = exports.isQuadrantLeft = void 0;
|
|
6
6
|
|
|
7
7
|
const vutils_1 = require("@visactor/vutils");
|
|
8
8
|
|
|
@@ -169,6 +169,10 @@ function getIntersection(dx, dy, cx, cy, w, h) {
|
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
+
function getAlignOffset(align) {
|
|
173
|
+
return "left" === align ? 0 : "right" === align ? 1 : .5;
|
|
174
|
+
}
|
|
175
|
+
|
|
172
176
|
exports.getPointsOfLineArea = getPointsOfLineArea, exports.labelingLineOrArea = labelingLineOrArea,
|
|
173
|
-
exports.connectLineBetweenBounds = connectLineBetweenBounds;
|
|
177
|
+
exports.connectLineBetweenBounds = connectLineBetweenBounds, exports.getAlignOffset = getAlignOffset;
|
|
174
178
|
//# sourceMappingURL=util.js.map
|
package/cjs/label/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/label/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { IArea, ILine } from '@visactor/vrender-core';\nimport type { IPoint, Quadrant } from './type';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { radianToDegree, isValidNumber, isRectIntersect, normalizeAngle, polarToCartesian } from '@visactor/vutils';\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\nexport const labelingPoint = (textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) => {\n if (!textBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const anchorX = (graphicBounds.x1 + graphicBounds.x2) / 2;\n const anchorY = (graphicBounds.y1 + graphicBounds.y2) / 2;\n\n let sx = 0;\n let sy = 0;\n let offsetX = 0;\n let offsetY = 0;\n if (graphicBounds) {\n offsetX = Math.abs(graphicBounds.x1 - graphicBounds.x2) / 2;\n offsetY = Math.abs(graphicBounds.y1 - graphicBounds.y2) / 2;\n }\n\n const angle = {\n 'top-right': -235,\n 'top-left': 235,\n 'bottom-right': 45,\n 'bottom-left': -45\n };\n\n switch (position) {\n case 'top':\n sy = -1;\n break;\n case 'bottom':\n sy = 1;\n break;\n case 'left':\n sx = -1;\n break;\n case 'right':\n sx = 1;\n break;\n case 'bottom-left':\n case 'bottom-right':\n case 'top-left':\n case 'top-right':\n sx = Math.sin(angle[position] * (Math.PI / 180));\n sy = Math.cos(angle[position] * (Math.PI / 180));\n break;\n case 'center':\n sx = 0;\n sy = 0;\n break;\n }\n\n const x = anchorX + sx * (offset + offsetX) + Math.sign(sx) * (width / 2);\n const y = anchorY + sy * (offset + offsetY) + Math.sign(sy) * (height / 2);\n\n return { x, y };\n};\n\nexport const getPointsOfLineArea = (graphic: ILine | IArea): IPointLike[] => {\n if (!graphic || !graphic.attribute) {\n return [];\n }\n\n const { points, segments } = graphic.attribute;\n\n if (segments && segments.length) {\n const res: IPointLike[] = [];\n\n segments.forEach(seg => {\n const segPoints = seg.points;\n\n segPoints.forEach(point => {\n res.push(point);\n });\n });\n\n return res;\n }\n\n return points;\n};\n\nexport function labelingLineOrArea(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position: string = 'end',\n offset = 0\n) {\n if (!textBounds || !graphicBounds) {\n return { x: Infinity, y: Infinity };\n }\n\n const { x1, x2 } = textBounds;\n const width = Math.abs(x2 - x1);\n\n const anchorX = graphicBounds.x1;\n const anchorY = graphicBounds.y1;\n\n let x = anchorX;\n const y = anchorY;\n\n if (position === 'end') {\n x = anchorX + width / 2 + offset;\n } else if (position === 'start') {\n x = anchorX - width / 2 - offset;\n }\n\n return { x, y };\n}\n\nexport function connectLineBetweenBounds(boundA: IBoundsLike, boundB: IBoundsLike) {\n if (!boundA || !boundB) {\n return;\n }\n\n if (isRectIntersect(boundA, boundB, true)) {\n return;\n }\n // Top left coordinates\n const x1 = Math.min(boundA.x1, boundA.x2);\n const y1 = Math.min(boundA.y1, boundA.y2);\n const x2 = Math.min(boundB.x1, boundB.x2);\n const y2 = Math.min(boundB.y1, boundB.y2);\n\n // Half widths and half heights\n const w1 = Math.abs(boundA.x2 - x1) / 2;\n const h1 = Math.abs(boundA.y2 - y1) / 2;\n const w2 = Math.abs(boundB.x2 - x2) / 2;\n const h2 = Math.abs(boundB.y2 - y2) / 2;\n\n // Center coordinates\n const cx1 = x1 + w1;\n const cy1 = y1 + h1;\n const cx2 = x2 + w2;\n const cy2 = y2 + h2;\n\n // Distance between centers\n const dx = cx2 - cx1;\n const dy = cy2 - cy1;\n\n const p1 = getIntersection(dx, dy, cx1, cy1, w1, h1);\n const p2 = getIntersection(-dx, -dy, cx2, cy2, w2, h2);\n\n return [p1, p2];\n}\n\nfunction getIntersection(dx: number, dy: number, cx: number, cy: number, w: number, h: number) {\n if (Math.abs(dy / dx) < h / w) {\n // Hit vertical edge of box1\n return { x: cx + (dx > 0 ? w : -w), y: cy + (dy * w) / Math.abs(dx) };\n }\n // Hit horizontal edge of box1\n return { x: cx + (dx * h) / Math.abs(dy), y: cy + (dy > 0 ? h : -h) };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/label/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import type { IArea, ILine } from '@visactor/vrender-core';\nimport type { IPoint, Quadrant } from './type';\nimport type { IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { radianToDegree, isValidNumber, isRectIntersect, normalizeAngle, polarToCartesian } from '@visactor/vutils';\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\nexport const labelingPoint = (textBounds: IBoundsLike, graphicBounds: IBoundsLike, position = 'top', offset = 0) => {\n if (!textBounds) {\n return;\n }\n\n const { x1, y1, x2, y2 } = textBounds;\n const width = Math.abs(x2 - x1);\n const height = Math.abs(y2 - y1);\n\n const anchorX = (graphicBounds.x1 + graphicBounds.x2) / 2;\n const anchorY = (graphicBounds.y1 + graphicBounds.y2) / 2;\n\n let sx = 0;\n let sy = 0;\n let offsetX = 0;\n let offsetY = 0;\n if (graphicBounds) {\n offsetX = Math.abs(graphicBounds.x1 - graphicBounds.x2) / 2;\n offsetY = Math.abs(graphicBounds.y1 - graphicBounds.y2) / 2;\n }\n\n const angle = {\n 'top-right': -235,\n 'top-left': 235,\n 'bottom-right': 45,\n 'bottom-left': -45\n };\n\n switch (position) {\n case 'top':\n sy = -1;\n break;\n case 'bottom':\n sy = 1;\n break;\n case 'left':\n sx = -1;\n break;\n case 'right':\n sx = 1;\n break;\n case 'bottom-left':\n case 'bottom-right':\n case 'top-left':\n case 'top-right':\n sx = Math.sin(angle[position] * (Math.PI / 180));\n sy = Math.cos(angle[position] * (Math.PI / 180));\n break;\n case 'center':\n sx = 0;\n sy = 0;\n break;\n }\n\n const x = anchorX + sx * (offset + offsetX) + Math.sign(sx) * (width / 2);\n const y = anchorY + sy * (offset + offsetY) + Math.sign(sy) * (height / 2);\n\n return { x, y };\n};\n\nexport const getPointsOfLineArea = (graphic: ILine | IArea): IPointLike[] => {\n if (!graphic || !graphic.attribute) {\n return [];\n }\n\n const { points, segments } = graphic.attribute;\n\n if (segments && segments.length) {\n const res: IPointLike[] = [];\n\n segments.forEach(seg => {\n const segPoints = seg.points;\n\n segPoints.forEach(point => {\n res.push(point);\n });\n });\n\n return res;\n }\n\n return points;\n};\n\nexport function labelingLineOrArea(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position: string = 'end',\n offset = 0\n) {\n if (!textBounds || !graphicBounds) {\n return { x: Infinity, y: Infinity };\n }\n\n const { x1, x2 } = textBounds;\n const width = Math.abs(x2 - x1);\n\n const anchorX = graphicBounds.x1;\n const anchorY = graphicBounds.y1;\n\n let x = anchorX;\n const y = anchorY;\n\n if (position === 'end') {\n x = anchorX + width / 2 + offset;\n } else if (position === 'start') {\n x = anchorX - width / 2 - offset;\n }\n\n return { x, y };\n}\n\nexport function connectLineBetweenBounds(boundA: IBoundsLike, boundB: IBoundsLike) {\n if (!boundA || !boundB) {\n return;\n }\n\n if (isRectIntersect(boundA, boundB, true)) {\n return;\n }\n // Top left coordinates\n const x1 = Math.min(boundA.x1, boundA.x2);\n const y1 = Math.min(boundA.y1, boundA.y2);\n const x2 = Math.min(boundB.x1, boundB.x2);\n const y2 = Math.min(boundB.y1, boundB.y2);\n\n // Half widths and half heights\n const w1 = Math.abs(boundA.x2 - x1) / 2;\n const h1 = Math.abs(boundA.y2 - y1) / 2;\n const w2 = Math.abs(boundB.x2 - x2) / 2;\n const h2 = Math.abs(boundB.y2 - y2) / 2;\n\n // Center coordinates\n const cx1 = x1 + w1;\n const cy1 = y1 + h1;\n const cx2 = x2 + w2;\n const cy2 = y2 + h2;\n\n // Distance between centers\n const dx = cx2 - cx1;\n const dy = cy2 - cy1;\n\n const p1 = getIntersection(dx, dy, cx1, cy1, w1, h1);\n const p2 = getIntersection(-dx, -dy, cx2, cy2, w2, h2);\n\n return [p1, p2];\n}\n\nfunction getIntersection(dx: number, dy: number, cx: number, cy: number, w: number, h: number) {\n if (Math.abs(dy / dx) < h / w) {\n // Hit vertical edge of box1\n return { x: cx + (dx > 0 ? w : -w), y: cy + (dy * w) / Math.abs(dx) };\n }\n // Hit horizontal edge of box1\n return { x: cx + (dx * h) / Math.abs(dy), y: cy + (dy > 0 ? h : -h) };\n}\n\nexport function getAlignOffset(align: 'left' | 'right' | 'center') {\n if (align === 'left') {\n return 0;\n } else if (align === 'right') {\n return 1;\n }\n\n return 0.5;\n}\n"]}
|
package/cjs/tag/tag.js
CHANGED
|
@@ -73,10 +73,10 @@ class Tag extends base_1.AbstractComponent {
|
|
|
73
73
|
if (visible && (0, vutils_1.isBoolean)(bgVisible)) {
|
|
74
74
|
const bgRect = this.createOrUpdateChild("tag-panel", Object.assign(Object.assign({}, backgroundStyle), {
|
|
75
75
|
visible: bgVisible && !!text,
|
|
76
|
-
x: textShape.AABBBounds.x1,
|
|
77
|
-
y: textShape.AABBBounds.y1,
|
|
78
|
-
width: textShape.AABBBounds.width(),
|
|
79
|
-
height: textShape.AABBBounds.height()
|
|
76
|
+
x: textShape.AABBBounds.x1 - parsedPadding[1],
|
|
77
|
+
y: textShape.AABBBounds.y1 - parsedPadding[0],
|
|
78
|
+
width: textShape.AABBBounds.width() + (parsedPadding[1] + parsedPadding[3]),
|
|
79
|
+
height: textShape.AABBBounds.height() + (parsedPadding[0] + parsedPadding[2])
|
|
80
80
|
}), "rect");
|
|
81
81
|
if ((0, vutils_1.isEmpty)(null == state ? void 0 : state.panel) || (bgRect.states = state.panel),
|
|
82
82
|
backgroundStyle.customShape) {
|
package/cjs/tag/tag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tag/tag.ts"],"names":[],"mappings":"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","file":"tag.js","sourcesContent":["/**\n * @description 标签组件\n */\nimport {\n type IGroup,\n type IRect,\n type ISymbol,\n type IText,\n type ITextAttribute,\n type ITextGraphicAttribute,\n type IRichTextGraphicAttribute,\n type IRichText,\n type IGraphicAttribute,\n CustomPath2D\n} from '@visactor/vrender-core';\nimport { isBoolean, isEmpty, isNil, isNumber, isObject, isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { isRichText, measureTextSize, richTextAttributeTransform } from '../util';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { TagAttributes, TagShapeAttributes } from './type';\nimport { loadTagComponent } from './register';\nimport type { TextContent } from '../core/type';\n\nloadTagComponent();\nexport class Tag extends AbstractComponent<Required<TagAttributes>> {\n name = 'tag';\n\n private _bgRect!: IRect;\n private _textShape!: IText | IRichText;\n private _symbol!: ISymbol;\n private _tagStates: string[] = [];\n private _rectStates: string[] = [];\n private _symbolStates: string[] = [];\n private _textStates: string[] = [];\n\n getBgRect() {\n return this._bgRect;\n }\n\n getTextShape() {\n return this._textShape;\n }\n\n static defaultAttributes: Partial<TagAttributes> = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n space: 4,\n padding: 4,\n // @ts-ignore\n shape: {\n fill: '#000'\n }\n };\n\n constructor(attributes: TagAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tag.defaultAttributes, attributes));\n }\n\n protected render() {\n this.cacheStates();\n const {\n text = '',\n textStyle = {} as ITextGraphicAttribute | IRichTextGraphicAttribute,\n shape = {} as TagShapeAttributes,\n panel = {} as BackgroundAttributes,\n space = 4,\n minWidth,\n maxWidth,\n padding = 4,\n visible,\n state,\n type,\n textAlwaysCenter,\n containerTextAlign\n } = this.attribute as TagAttributes;\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('tag-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n let symbol;\n let tagWidth = parsedPadding[1] + parsedPadding[3];\n let tagHeight = parsedPadding[0] + parsedPadding[2];\n let textX = 0;\n let symbolPlaceWidth = 0;\n const { visible: shapeVisible, ...shapeStyle } = shape;\n if (isBoolean(shapeVisible)) {\n const size = shapeStyle?.size || 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n\n symbol = group.createOrUpdateChild(\n 'tag-shape',\n {\n symbolType: 'circle',\n size,\n strokeBoundsBuffer: 0,\n ...shapeStyle,\n visible: shapeVisible,\n x: maxSize / 2,\n y: maxSize / 2\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.shape)) {\n symbol.states = state.shape;\n }\n\n if (shapeVisible) {\n symbolPlaceWidth = maxSize + space;\n }\n }\n\n tagWidth += symbolPlaceWidth;\n textX += symbolPlaceWidth;\n\n let textShape: IRichText | IText;\n const isRich = isRichText({ text } as TextContent) || type === 'rich';\n if (isRich) {\n const richTextAttrs = {\n ...richTextAttributeTransform({ type, text, ...textStyle } as any),\n ...(textStyle as IRichTextGraphicAttribute),\n visible: isValid(text) && visible !== false,\n x: textX,\n y: 0\n };\n textShape = group.createOrUpdateChild('tag-text', richTextAttrs, 'richtext') as IRichText;\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x: textShape.AABBBounds.x1,\n y: textShape.AABBBounds.y1,\n width: textShape.AABBBounds.width(),\n height: textShape.AABBBounds.height()\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n if (backgroundStyle.customShape) {\n const customShape = backgroundStyle.customShape;\n bgRect.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return customShape(textShape.attribute, attrs, new CustomPath2D());\n };\n }\n this._bgRect = bgRect;\n }\n } else {\n const textAttrs = {\n text: isObject(text) && 'type' in text && text.type === 'text' ? text.text : text,\n visible: isValid(text) && visible !== false,\n lineHeight: (textStyle as ITextGraphicAttribute)?.fontSize,\n ...(textStyle as ITextGraphicAttribute),\n x: textX,\n y: 0\n };\n if (isNil(textAttrs.lineHeight)) {\n textAttrs.lineHeight = (textStyle as ITextGraphicAttribute).fontSize;\n }\n textShape = group.createOrUpdateChild('tag-text', textAttrs as ITextGraphicAttribute, 'text') as IText;\n if (!isEmpty(state?.text)) {\n textShape.states = state.text;\n }\n\n // 因为文本可能发生旋转,所以需要使用 measureTextSize 方法\n const textBounds = measureTextSize(textAttrs.text as string, textStyle, this.stage?.getTheme()?.text);\n const textWidth = textBounds.width;\n const textHeight = textBounds.height;\n tagWidth += textWidth;\n const size = shape.size ?? 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n tagHeight += Math.max(textHeight, shape.visible ? maxSize : 0);\n\n const { textAlign, textBaseline } = textStyle as ITextAttribute;\n\n if (isValid(minWidth) || isValid(maxWidth)) {\n if (isValid(minWidth) && tagWidth < minWidth) {\n tagWidth = minWidth;\n }\n if (isValid(maxWidth) && tagWidth > maxWidth) {\n tagWidth = maxWidth;\n textShape.setAttribute('maxLineWidth', maxWidth - parsedPadding[1] - parsedPadding[2]);\n }\n }\n\n let x = 0;\n let y = 0;\n let flag = 0;\n if (textAlign === 'left' || textAlign === 'start') {\n flag = 1;\n } else if (textAlign === 'right' || textAlign === 'end') {\n flag = -1;\n } else if (textAlign === 'center') {\n flag = 0;\n }\n if (!flag) {\n x -= tagWidth / 2;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth / 2);\n }\n\n group.setAttribute('x', -symbolPlaceWidth / 2);\n } else if (flag < 0) {\n x -= tagWidth;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth);\n }\n\n group.setAttribute('x', -parsedPadding[1] - symbolPlaceWidth);\n } else if (flag > 0) {\n group.setAttribute('x', parsedPadding[3]);\n }\n\n const shouldCenter = containerTextAlign ? containerTextAlign === 'center' : textAlwaysCenter;\n const shouldRight = containerTextAlign === 'right' || containerTextAlign === 'end';\n const shouldLeft = containerTextAlign === 'left' || containerTextAlign === 'start';\n\n if (shouldCenter && flag) {\n // 文本容器内居中\n // 剔除padding后的内宽度\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const tsWidth = textWidth + symbolPlaceWidth;\n const textX =\n flag === 1\n ? (containerWidth - tsWidth) / 2 + symbolPlaceWidth + textWidth / 2\n : parsedPadding[0] + symbolPlaceWidth - (tagWidth / 2 + tsWidth / 2 - symbolPlaceWidth) + textWidth / 2;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'center'\n });\n if (symbol) {\n const symbolX = textX - textWidth / 2 - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldLeft && flag !== 1) {\n // 文本容器内朝左展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const offset =\n flag === 0\n ? -containerWidth / 2 + symbolPlaceWidth / 2\n : -tagWidth + parsedPadding[3] + parsedPadding[1] + symbolPlaceWidth;\n const textX = offset + symbolPlaceWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'left'\n });\n\n if (symbol) {\n const symbolX = offset + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldRight && flag !== -1) {\n // 文本容器内朝右展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const textX = flag === 0 ? containerWidth / 2 + symbolPlaceWidth / 2 : containerWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'right'\n });\n if (symbol) {\n const symbolX = textX - textWidth - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (textBaseline === 'middle') {\n y -= tagHeight / 2;\n if (symbol) {\n symbol.setAttribute('y', 0);\n }\n } else if (textBaseline === 'bottom') {\n y -= tagHeight;\n if (symbol) {\n symbol.setAttribute('y', -textHeight / 2);\n }\n\n group.setAttribute('y', -parsedPadding[2]);\n } else if (textBaseline === 'top') {\n group.setAttribute('y', parsedPadding[0]);\n if (symbol) {\n symbol.setAttribute('y', textHeight / 2);\n }\n }\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x,\n y,\n width: tagWidth,\n height: tagHeight\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n if (backgroundStyle.customShape) {\n const customShape = backgroundStyle.customShape;\n bgRect.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return customShape(textShape.attribute, attrs, new CustomPath2D());\n };\n }\n this._bgRect = bgRect;\n }\n }\n this._textShape = textShape;\n this._symbol = symbol;\n\n this.resetStates();\n }\n\n initAttributes(params: TagAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, Tag.defaultAttributes, params);\n super.initAttributes(params);\n this.render();\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean): void {\n super.addState(stateName, keepCurrentStates, hasAnimation);\n if (this._textShape) {\n this._textShape.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.addState(stateName, keepCurrentStates, hasAnimation);\n }\n }\n\n removeState(stateName: string, hasAnimation?: boolean): void {\n super.removeState(stateName, hasAnimation);\n if (this._textShape) {\n this._textShape.removeState(stateName, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.removeState(stateName, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.removeState(stateName, hasAnimation);\n }\n }\n\n cacheStates() {\n this._tagStates = this.currentStates?.slice() ?? [];\n this._rectStates = this._bgRect?.currentStates?.slice() ?? [];\n this._symbolStates = this._symbol?.currentStates?.slice() ?? [];\n this._textStates = this._textShape?.currentStates?.slice() ?? [];\n this.clearStates();\n this._bgRect?.clearStates();\n this._symbol?.clearStates();\n this._textShape?.clearStates();\n }\n resetStates() {\n this._tagStates.length && this.useStates(this._tagStates);\n this._rectStates.length && this._bgRect?.useStates(this._rectStates);\n this._symbolStates.length && this._symbol?.useStates(this._symbolStates);\n this._textStates.length && this._textShape?.useStates(this._textStates);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tag/tag.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,yDAWgC;AAChC,6CAAmH;AACnH,uCAAiD;AACjD,kCAAkF;AAGlF,yCAA8C;AAG9C,IAAA,2BAAgB,GAAE,CAAC;AACnB,MAAa,GAAI,SAAQ,wBAA0C;IAWjE,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAkBD,YAAY,UAAyB,EAAE,OAA0B;QAC/D,KAAK,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;QAnC1F,SAAI,GAAG,KAAK,CAAC;QAKL,eAAU,GAAa,EAAE,CAAC;QAC1B,gBAAW,GAAa,EAAE,CAAC;QAC3B,kBAAa,GAAa,EAAE,CAAC;QAC7B,gBAAW,GAAa,EAAE,CAAC;IA4BnC,CAAC;IAES,MAAM;;QACd,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,EACJ,IAAI,GAAG,EAAE,EACT,SAAS,GAAG,EAAuD,EACnE,KAAK,GAAG,EAAwB,EAChC,KAAK,GAAG,EAA0B,EAClC,KAAK,GAAG,CAAC,EACT,QAAQ,EACR,QAAQ,EACR,OAAO,GAAG,CAAC,EACX,OAAO,EACP,KAAK,EACL,IAAI,EACJ,gBAAgB,EAChB,kBAAkB,EACnB,GAAG,IAAI,CAAC,SAA0B,CAAC;QACpC,MAAM,aAAa,GAAG,IAAA,yBAAgB,EAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,CAAW,CAAC;QAEpG,IAAI,MAAM,CAAC;QACX,IAAI,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,OAAO,EAAE,YAAY,KAAoB,KAAK,EAApB,UAAU,UAAK,KAAK,EAAhD,WAAwC,CAAQ,CAAC;QACvD,IAAI,IAAA,kBAAS,EAAC,YAAY,CAAC,EAAE;YAC3B,MAAM,IAAI,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,KAAI,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;YAE/E,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAChC,WAAW,gCAET,UAAU,EAAE,QAAQ,EACpB,IAAI,EACJ,kBAAkB,EAAE,CAAC,IAClB,UAAU,KACb,OAAO,EAAE,YAAY,EACrB,CAAC,EAAE,OAAO,GAAG,CAAC,EACd,CAAC,EAAE,OAAO,GAAG,CAAC,KAEhB,QAAQ,CACE,CAAC;YACb,IAAI,CAAC,IAAA,gBAAO,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,EAAE;gBAC1B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;aAC7B;YAED,IAAI,YAAY,EAAE;gBAChB,gBAAgB,GAAG,OAAO,GAAG,KAAK,CAAC;aACpC;SACF;QAED,QAAQ,IAAI,gBAAgB,CAAC;QAC7B,KAAK,IAAI,gBAAgB,CAAC;QAE1B,IAAI,SAA4B,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,EAAE,IAAI,EAAiB,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC;QACtE,IAAI,MAAM,EAAE;YACV,MAAM,aAAa,iDACd,IAAA,iCAA0B,EAAC,gBAAE,IAAI,EAAE,IAAI,IAAK,SAAS,CAAS,CAAC,GAC9D,SAAuC,KAC3C,OAAO,EAAE,IAAA,gBAAO,EAAC,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,EAC3C,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,CAAC,GACL,CAAC;YACF,SAAS,GAAG,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAc,CAAC;YAG1F,MAAM,EAAE,OAAO,EAAE,SAAS,KAAyB,KAAK,EAAzB,eAAe,UAAK,KAAK,EAAlD,WAA0C,CAAQ,CAAC;YACzD,IAAI,OAAO,IAAI,IAAA,kBAAS,EAAC,SAAS,CAAC,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CACrC,WAAW,kCAEN,eAAe,KAClB,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC,IAAI,EAC5B,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAC7C,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAC7C,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAC3E,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAE/E,MAAM,CACE,CAAC;gBACX,IAAI,CAAC,IAAA,gBAAO,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,EAAE;oBAC1B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;iBAC7B;gBACD,IAAI,eAAe,CAAC,WAAW,EAAE;oBAC/B,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;oBAChD,MAAM,CAAC,SAAS,GAAG,CAAC,KAAiC,EAAE,EAAE;wBACvD,OAAO,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,2BAAY,EAAE,CAAC,CAAC;oBACrE,CAAC,CAAC;iBACH;gBACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACvB;SACF;aAAM;YACL,MAAM,SAAS,iCACb,IAAI,EAAE,IAAA,iBAAQ,EAAC,IAAI,CAAC,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACjF,OAAO,EAAE,IAAA,gBAAO,EAAC,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,EAC3C,UAAU,EAAG,SAAmC,aAAnC,SAAS,uBAAT,SAAS,CAA4B,QAAQ,IACtD,SAAmC,KACvC,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,CAAC,GACL,CAAC;YACF,IAAI,IAAA,cAAK,EAAC,SAAS,CAAC,UAAU,CAAC,EAAE;gBAC/B,SAAS,CAAC,UAAU,GAAI,SAAmC,CAAC,QAAQ,CAAC;aACtE;YACD,SAAS,GAAG,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAkC,EAAE,MAAM,CAAU,CAAC;YACvG,IAAI,CAAC,IAAA,gBAAO,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,EAAE;gBACzB,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;aAC/B;YAGD,MAAM,UAAU,GAAG,IAAA,sBAAe,EAAC,SAAS,CAAC,IAAc,EAAE,SAAS,EAAE,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,QAAQ,EAAE,0CAAE,IAAI,CAAC,CAAC;YACtG,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;YACnC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;YACrC,QAAQ,IAAI,SAAS,CAAC;YACtB,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,mCAAI,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;YAC/E,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/D,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAA2B,CAAC;YAEhE,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,EAAE;gBAC1C,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,QAAQ,EAAE;oBAC5C,QAAQ,GAAG,QAAQ,CAAC;iBACrB;gBACD,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,QAAQ,EAAE;oBAC5C,QAAQ,GAAG,QAAQ,CAAC;oBACpB,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxF;aACF;YAED,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE;gBACjD,IAAI,GAAG,CAAC,CAAC;aACV;iBAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvD,IAAI,GAAG,CAAC,CAAC,CAAC;aACX;iBAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;gBACjC,IAAI,GAAG,CAAC,CAAC;aACV;YACD,IAAI,CAAC,IAAI,EAAE;gBACT,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;gBAClB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;iBACrE;gBAED,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;aAChD;iBAAM,IAAI,IAAI,GAAG,CAAC,EAAE;gBACnB,CAAC,IAAI,QAAQ,CAAC;gBACd,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;iBACjE;gBAED,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;aAC/D;iBAAM,IAAI,IAAI,GAAG,CAAC,EAAE;gBACnB,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;YAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAC7F,MAAM,WAAW,GAAG,kBAAkB,KAAK,OAAO,IAAI,kBAAkB,KAAK,KAAK,CAAC;YACnF,MAAM,UAAU,GAAG,kBAAkB,KAAK,MAAM,IAAI,kBAAkB,KAAK,OAAO,CAAC;YAEnF,IAAI,YAAY,IAAI,IAAI,EAAE;gBAGxB,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC;gBAC7C,MAAM,KAAK,GACT,IAAI,KAAK,CAAC;oBACR,CAAC,CAAC,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,SAAS,GAAG,CAAC;oBACnE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;gBAE5G,SAAS,CAAC,aAAa,CAAC;oBACtB,CAAC,EAAE,KAAK;oBACR,SAAS,EAAE,QAAQ;iBACpB,CAAC,CAAC;gBACH,IAAI,MAAM,EAAE;oBACV,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,CAAC,GAAG,gBAAgB,GAAG,OAAO,GAAG,CAAC,CAAC;oBACvE,MAAM,CAAC,aAAa,CAAC;wBACnB,CAAC,EAAE,OAAO;qBACX,CAAC,CAAC;iBACJ;aACF;YAED,IAAI,UAAU,IAAI,IAAI,KAAK,CAAC,EAAE;gBAE5B,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,MAAM,GACV,IAAI,KAAK,CAAC;oBACR,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC;oBAC5C,CAAC,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;gBACzE,MAAM,KAAK,GAAG,MAAM,GAAG,gBAAgB,CAAC;gBAExC,SAAS,CAAC,aAAa,CAAC;oBACtB,CAAC,EAAE,KAAK;oBACR,SAAS,EAAE,MAAM;iBAClB,CAAC,CAAC;gBAEH,IAAI,MAAM,EAAE;oBACV,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;oBACrC,MAAM,CAAC,aAAa,CAAC;wBACnB,CAAC,EAAE,OAAO;qBACX,CAAC,CAAC;iBACJ;aACF;YAED,IAAI,WAAW,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;gBAE9B,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;gBAEtF,SAAS,CAAC,aAAa,CAAC;oBACtB,CAAC,EAAE,KAAK;oBACR,SAAS,EAAE,OAAO;iBACnB,CAAC,CAAC;gBACH,IAAI,MAAM,EAAE;oBACV,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,gBAAgB,GAAG,OAAO,GAAG,CAAC,CAAC;oBACnE,MAAM,CAAC,aAAa,CAAC;wBACnB,CAAC,EAAE,OAAO;qBACX,CAAC,CAAC;iBACJ;aACF;YAED,IAAI,YAAY,KAAK,QAAQ,EAAE;gBAC7B,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;gBACnB,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBAC7B;aACF;iBAAM,IAAI,YAAY,KAAK,QAAQ,EAAE;gBACpC,CAAC,IAAI,SAAS,CAAC;gBACf,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;iBAC3C;gBAED,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C;iBAAM,IAAI,YAAY,KAAK,KAAK,EAAE;gBACjC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;iBAC1C;aACF;YAGD,MAAM,EAAE,OAAO,EAAE,SAAS,KAAyB,KAAK,EAAzB,eAAe,UAAK,KAAK,EAAlD,WAA0C,CAAQ,CAAC;YACzD,IAAI,OAAO,IAAI,IAAA,kBAAS,EAAC,SAAS,CAAC,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CACrC,WAAW,kCAEN,eAAe,KAClB,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC,IAAI,EAC5B,CAAC;oBACD,CAAC,EACD,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,SAAS,KAEnB,MAAM,CACE,CAAC;gBACX,IAAI,CAAC,IAAA,gBAAO,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,EAAE;oBAC1B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;iBAC7B;gBACD,IAAI,eAAe,CAAC,WAAW,EAAE;oBAC/B,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;oBAChD,MAAM,CAAC,SAAS,GAAG,CAAC,KAAiC,EAAE,EAAE;wBACvD,OAAO,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,2BAAY,EAAE,CAAC,CAAC;oBACrE,CAAC,CAAC;iBACH;gBACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACvB;SACF;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,cAAc,CAAC,MAAqB,EAAE,OAA0B;QAC9D,MAAM,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAClF,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,iBAA2B,EAAE,YAAsB;QAC7E,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;SACtE;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;SACnE;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;SACnE;IACH,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,YAAsB;QACnD,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;SACtD;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;SACnD;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;SACnD;IACH,CAAC;IAED,WAAW;;QACT,IAAI,CAAC,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,mCAAI,EAAE,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,0CAAE,KAAK,EAAE,mCAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,aAAa,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,0CAAE,KAAK,EAAE,mCAAI,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,0CAAE,KAAK,EAAE,mCAAI,EAAE,CAAC;QACjE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;QAC5B,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;QAC5B,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IACD,WAAW;;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,MAAM,KAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC;QACrE,IAAI,CAAC,aAAa,CAAC,MAAM,KAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA,CAAC;QACzE,IAAI,CAAC,WAAW,CAAC,MAAM,KAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC;IAC1E,CAAC;;AA3WH,kBA4WC;AAzVQ,qBAAiB,GAA2B;IACjD,OAAO,EAAE,IAAI;IACb,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,KAAK;KACpB;IACD,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IAEV,KAAK,EAAE;QACL,IAAI,EAAE,MAAM;KACb;CACF,CAAC","file":"tag.js","sourcesContent":["/**\n * @description 标签组件\n */\nimport {\n type IGroup,\n type IRect,\n type ISymbol,\n type IText,\n type ITextAttribute,\n type ITextGraphicAttribute,\n type IRichTextGraphicAttribute,\n type IRichText,\n type IGraphicAttribute,\n CustomPath2D\n} from '@visactor/vrender-core';\nimport { isBoolean, isEmpty, isNil, isNumber, isObject, isValid, merge, normalizePadding } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { isRichText, measureTextSize, richTextAttributeTransform } from '../util';\nimport type { BackgroundAttributes, ComponentOptions } from '../interface';\nimport type { TagAttributes, TagShapeAttributes } from './type';\nimport { loadTagComponent } from './register';\nimport type { TextContent } from '../core/type';\n\nloadTagComponent();\nexport class Tag extends AbstractComponent<Required<TagAttributes>> {\n name = 'tag';\n\n private _bgRect!: IRect;\n private _textShape!: IText | IRichText;\n private _symbol!: ISymbol;\n private _tagStates: string[] = [];\n private _rectStates: string[] = [];\n private _symbolStates: string[] = [];\n private _textStates: string[] = [];\n\n getBgRect() {\n return this._bgRect;\n }\n\n getTextShape() {\n return this._textShape;\n }\n\n static defaultAttributes: Partial<TagAttributes> = {\n visible: true,\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'left',\n textBaseline: 'top'\n },\n space: 4,\n padding: 4,\n // @ts-ignore\n shape: {\n fill: '#000'\n }\n };\n\n constructor(attributes: TagAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Tag.defaultAttributes, attributes));\n }\n\n protected render() {\n this.cacheStates();\n const {\n text = '',\n textStyle = {} as ITextGraphicAttribute | IRichTextGraphicAttribute,\n shape = {} as TagShapeAttributes,\n panel = {} as BackgroundAttributes,\n space = 4,\n minWidth,\n maxWidth,\n padding = 4,\n visible,\n state,\n type,\n textAlwaysCenter,\n containerTextAlign\n } = this.attribute as TagAttributes;\n const parsedPadding = normalizePadding(padding);\n\n const group = this.createOrUpdateChild('tag-content', { x: 0, y: 0, zIndex: 1 }, 'group') as IGroup;\n\n let symbol;\n let tagWidth = parsedPadding[1] + parsedPadding[3];\n let tagHeight = parsedPadding[0] + parsedPadding[2];\n let textX = 0;\n let symbolPlaceWidth = 0;\n const { visible: shapeVisible, ...shapeStyle } = shape;\n if (isBoolean(shapeVisible)) {\n const size = shapeStyle?.size || 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n\n symbol = group.createOrUpdateChild(\n 'tag-shape',\n {\n symbolType: 'circle',\n size,\n strokeBoundsBuffer: 0,\n ...shapeStyle,\n visible: shapeVisible,\n x: maxSize / 2,\n y: maxSize / 2\n },\n 'symbol'\n ) as ISymbol;\n if (!isEmpty(state?.shape)) {\n symbol.states = state.shape;\n }\n\n if (shapeVisible) {\n symbolPlaceWidth = maxSize + space;\n }\n }\n\n tagWidth += symbolPlaceWidth;\n textX += symbolPlaceWidth;\n\n let textShape: IRichText | IText;\n const isRich = isRichText({ text } as TextContent) || type === 'rich';\n if (isRich) {\n const richTextAttrs = {\n ...richTextAttributeTransform({ type, text, ...textStyle } as any),\n ...(textStyle as IRichTextGraphicAttribute),\n visible: isValid(text) && visible !== false,\n x: textX,\n y: 0\n };\n textShape = group.createOrUpdateChild('tag-text', richTextAttrs, 'richtext') as IRichText;\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x: textShape.AABBBounds.x1 - parsedPadding[1],\n y: textShape.AABBBounds.y1 - parsedPadding[0],\n width: textShape.AABBBounds.width() + (parsedPadding[1] + parsedPadding[3]),\n height: textShape.AABBBounds.height() + (parsedPadding[0] + parsedPadding[2])\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n if (backgroundStyle.customShape) {\n const customShape = backgroundStyle.customShape;\n bgRect.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return customShape(textShape.attribute, attrs, new CustomPath2D());\n };\n }\n this._bgRect = bgRect;\n }\n } else {\n const textAttrs = {\n text: isObject(text) && 'type' in text && text.type === 'text' ? text.text : text,\n visible: isValid(text) && visible !== false,\n lineHeight: (textStyle as ITextGraphicAttribute)?.fontSize,\n ...(textStyle as ITextGraphicAttribute),\n x: textX,\n y: 0\n };\n if (isNil(textAttrs.lineHeight)) {\n textAttrs.lineHeight = (textStyle as ITextGraphicAttribute).fontSize;\n }\n textShape = group.createOrUpdateChild('tag-text', textAttrs as ITextGraphicAttribute, 'text') as IText;\n if (!isEmpty(state?.text)) {\n textShape.states = state.text;\n }\n\n // 因为文本可能发生旋转,所以需要使用 measureTextSize 方法\n const textBounds = measureTextSize(textAttrs.text as string, textStyle, this.stage?.getTheme()?.text);\n const textWidth = textBounds.width;\n const textHeight = textBounds.height;\n tagWidth += textWidth;\n const size = shape.size ?? 10;\n const maxSize = (isNumber(size) ? size : Math.max(size[0], size[1])) as number;\n tagHeight += Math.max(textHeight, shape.visible ? maxSize : 0);\n\n const { textAlign, textBaseline } = textStyle as ITextAttribute;\n\n if (isValid(minWidth) || isValid(maxWidth)) {\n if (isValid(minWidth) && tagWidth < minWidth) {\n tagWidth = minWidth;\n }\n if (isValid(maxWidth) && tagWidth > maxWidth) {\n tagWidth = maxWidth;\n textShape.setAttribute('maxLineWidth', maxWidth - parsedPadding[1] - parsedPadding[2]);\n }\n }\n\n let x = 0;\n let y = 0;\n let flag = 0;\n if (textAlign === 'left' || textAlign === 'start') {\n flag = 1;\n } else if (textAlign === 'right' || textAlign === 'end') {\n flag = -1;\n } else if (textAlign === 'center') {\n flag = 0;\n }\n if (!flag) {\n x -= tagWidth / 2;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth / 2);\n }\n\n group.setAttribute('x', -symbolPlaceWidth / 2);\n } else if (flag < 0) {\n x -= tagWidth;\n if (symbol) {\n symbol.setAttribute('x', (symbol.attribute.x || 0) - textWidth);\n }\n\n group.setAttribute('x', -parsedPadding[1] - symbolPlaceWidth);\n } else if (flag > 0) {\n group.setAttribute('x', parsedPadding[3]);\n }\n\n const shouldCenter = containerTextAlign ? containerTextAlign === 'center' : textAlwaysCenter;\n const shouldRight = containerTextAlign === 'right' || containerTextAlign === 'end';\n const shouldLeft = containerTextAlign === 'left' || containerTextAlign === 'start';\n\n if (shouldCenter && flag) {\n // 文本容器内居中\n // 剔除padding后的内宽度\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const tsWidth = textWidth + symbolPlaceWidth;\n const textX =\n flag === 1\n ? (containerWidth - tsWidth) / 2 + symbolPlaceWidth + textWidth / 2\n : parsedPadding[0] + symbolPlaceWidth - (tagWidth / 2 + tsWidth / 2 - symbolPlaceWidth) + textWidth / 2;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'center'\n });\n if (symbol) {\n const symbolX = textX - textWidth / 2 - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldLeft && flag !== 1) {\n // 文本容器内朝左展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const offset =\n flag === 0\n ? -containerWidth / 2 + symbolPlaceWidth / 2\n : -tagWidth + parsedPadding[3] + parsedPadding[1] + symbolPlaceWidth;\n const textX = offset + symbolPlaceWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'left'\n });\n\n if (symbol) {\n const symbolX = offset + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (shouldRight && flag !== -1) {\n // 文本容器内朝右展示\n const containerWidth = tagWidth - parsedPadding[1] - parsedPadding[3];\n const textX = flag === 0 ? containerWidth / 2 + symbolPlaceWidth / 2 : containerWidth;\n\n textShape.setAttributes({\n x: textX,\n textAlign: 'right'\n });\n if (symbol) {\n const symbolX = textX - textWidth - symbolPlaceWidth + maxSize / 2;\n symbol.setAttributes({\n x: symbolX\n });\n }\n }\n\n if (textBaseline === 'middle') {\n y -= tagHeight / 2;\n if (symbol) {\n symbol.setAttribute('y', 0);\n }\n } else if (textBaseline === 'bottom') {\n y -= tagHeight;\n if (symbol) {\n symbol.setAttribute('y', -textHeight / 2);\n }\n\n group.setAttribute('y', -parsedPadding[2]);\n } else if (textBaseline === 'top') {\n group.setAttribute('y', parsedPadding[0]);\n if (symbol) {\n symbol.setAttribute('y', textHeight / 2);\n }\n }\n\n // 绘制背景层\n const { visible: bgVisible, ...backgroundStyle } = panel;\n if (visible && isBoolean(bgVisible)) {\n const bgRect = this.createOrUpdateChild(\n 'tag-panel',\n {\n ...backgroundStyle,\n visible: bgVisible && !!text,\n x,\n y,\n width: tagWidth,\n height: tagHeight\n },\n 'rect'\n ) as IRect;\n if (!isEmpty(state?.panel)) {\n bgRect.states = state.panel;\n }\n if (backgroundStyle.customShape) {\n const customShape = backgroundStyle.customShape;\n bgRect.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return customShape(textShape.attribute, attrs, new CustomPath2D());\n };\n }\n this._bgRect = bgRect;\n }\n }\n this._textShape = textShape;\n this._symbol = symbol;\n\n this.resetStates();\n }\n\n initAttributes(params: TagAttributes, options?: ComponentOptions) {\n params = options?.skipDefault ? params : merge({}, Tag.defaultAttributes, params);\n super.initAttributes(params);\n this.render();\n }\n\n addState(stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean): void {\n super.addState(stateName, keepCurrentStates, hasAnimation);\n if (this._textShape) {\n this._textShape.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.addState(stateName, keepCurrentStates, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.addState(stateName, keepCurrentStates, hasAnimation);\n }\n }\n\n removeState(stateName: string, hasAnimation?: boolean): void {\n super.removeState(stateName, hasAnimation);\n if (this._textShape) {\n this._textShape.removeState(stateName, hasAnimation);\n }\n if (this._bgRect) {\n this._bgRect.removeState(stateName, hasAnimation);\n }\n if (this._symbol) {\n this._symbol.removeState(stateName, hasAnimation);\n }\n }\n\n cacheStates() {\n this._tagStates = this.currentStates?.slice() ?? [];\n this._rectStates = this._bgRect?.currentStates?.slice() ?? [];\n this._symbolStates = this._symbol?.currentStates?.slice() ?? [];\n this._textStates = this._textShape?.currentStates?.slice() ?? [];\n this.clearStates();\n this._bgRect?.clearStates();\n this._symbol?.clearStates();\n this._textShape?.clearStates();\n }\n resetStates() {\n this._tagStates.length && this.useStates(this._tagStates);\n this._rectStates.length && this._bgRect?.useStates(this._rectStates);\n this._symbolStates.length && this._symbol?.useStates(this._symbolStates);\n this._textStates.length && this._textShape?.useStates(this._textStates);\n }\n}\n"]}
|
package/cjs/title/title.js
CHANGED
|
@@ -14,112 +14,111 @@ class Title extends base_1.AbstractComponent {
|
|
|
14
14
|
this.name = "title";
|
|
15
15
|
}
|
|
16
16
|
render() {
|
|
17
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t
|
|
17
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
18
18
|
const {textType: textType, text: text, subtextType: subtextType, textStyle: textStyle = {}, subtext: subtext, subtextStyle: subtextStyle = {}, width: width, height: height, minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, align: align, verticalAlign: verticalAlign, padding: padding = 0} = this.attribute, parsedPadding = (0,
|
|
19
19
|
vutils_1.normalizePadding)(padding), group = this.createOrUpdateChild("title-container", {
|
|
20
20
|
x: parsedPadding[3],
|
|
21
21
|
y: parsedPadding[0],
|
|
22
22
|
zIndex: 1
|
|
23
23
|
}, "group");
|
|
24
|
-
if (!1 !== this.attribute.visible && !1 !== textStyle.visible)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
24
|
+
if (!1 !== this.attribute.visible && !1 !== textStyle.visible) {
|
|
25
|
+
const {width: mainTitleWidth, height: mainTitleHeight, maxHeight: mainTitleMaxHeight, maxWidth: mainTitleMaxWidth, x: x = 0, y: y = 0, ellipsis: ellipsis = !0, wordBreak: wordBreak = "break-word", maxWidth: maxWidth, lineClamp: lineClamp} = textStyle;
|
|
26
|
+
if ("rich" === textType || (0, vutils_1.isValid)(textStyle.character)) {
|
|
27
|
+
const attr = Object.assign({
|
|
28
|
+
x: x,
|
|
29
|
+
y: y,
|
|
30
|
+
width: null !== (_a = null != mainTitleWidth ? mainTitleWidth : width) && void 0 !== _a ? _a : 0,
|
|
31
|
+
height: null !== (_b = null != mainTitleHeight ? mainTitleHeight : height) && void 0 !== _b ? _b : 0,
|
|
32
|
+
ellipsis: null == ellipsis || ellipsis,
|
|
33
|
+
wordBreak: null != wordBreak ? wordBreak : "break-word",
|
|
34
|
+
maxHeight: null != mainTitleMaxHeight ? mainTitleMaxHeight : maxHeight,
|
|
35
|
+
maxWidth: null != mainTitleMaxWidth ? mainTitleMaxWidth : maxWidth,
|
|
36
|
+
textConfig: null !== (_c = textStyle.character) && void 0 !== _c ? _c : text
|
|
37
|
+
}, textStyle);
|
|
38
|
+
this._mainTitle = group.createOrUpdateChild("mainTitle", attr, "richtext");
|
|
39
|
+
} else if ("html" === textType) {
|
|
40
|
+
const attr = Object.assign({
|
|
41
|
+
html: Object.assign(Object.assign({
|
|
42
|
+
dom: text
|
|
43
|
+
}, constant_1.DEFAULT_HTML_TEXT_SPEC), textStyle),
|
|
44
|
+
x: x,
|
|
45
|
+
y: y,
|
|
46
|
+
width: null !== (_d = null != mainTitleWidth ? mainTitleWidth : width) && void 0 !== _d ? _d : 0,
|
|
47
|
+
height: null !== (_e = null != mainTitleHeight ? mainTitleHeight : height) && void 0 !== _e ? _e : 0,
|
|
48
|
+
ellipsis: ellipsis,
|
|
49
|
+
wordBreak: wordBreak,
|
|
50
|
+
maxHeight: null != mainTitleMaxHeight ? mainTitleMaxHeight : maxHeight,
|
|
51
|
+
maxWidth: null != mainTitleMaxWidth ? mainTitleMaxWidth : maxWidth,
|
|
52
|
+
textConfig: []
|
|
53
|
+
}, textStyle);
|
|
54
|
+
this._mainTitle = group.createOrUpdateChild("mainTitle", attr, "richtext");
|
|
55
|
+
} else (0, vutils_1.isValid)(text) && (this._mainTitle = group.createOrUpdateChild("mainTitle", Object.assign(Object.assign({
|
|
56
|
+
text: (0, vutils_1.isArray)(text) ? text : [ text ],
|
|
57
|
+
whiteSpace: "normal"
|
|
58
|
+
}, textStyle), {
|
|
59
|
+
maxLineWidth: null !== (_g = null !== (_f = textStyle.maxLineWidth) && void 0 !== _f ? _f : mainTitleWidth) && void 0 !== _g ? _g : width,
|
|
60
|
+
heightLimit: null != mainTitleHeight ? mainTitleHeight : maxHeight,
|
|
61
|
+
lineClamp: lineClamp,
|
|
62
|
+
ellipsis: ellipsis,
|
|
63
|
+
x: x,
|
|
64
|
+
y: y
|
|
65
|
+
}), "text"));
|
|
66
|
+
}
|
|
65
67
|
const maintextHeight = this._mainTitle ? this._mainTitle.AABBBounds.height() : 0, maintextWidth = this._mainTitle ? this._mainTitle.AABBBounds.width() : 0;
|
|
66
|
-
if (!1 !== this.attribute.visible && !1 !== subtextStyle.visible)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
68
|
+
if (!1 !== this.attribute.visible && !1 !== subtextStyle.visible) {
|
|
69
|
+
const {width: subTitleWidth, height: subTitleHeight, maxWidth: subTitleMaxWidth, maxHeight: subTitleMaxHeight, x: x = 0, y: y = 0, ellipsis: ellipsis = !0, wordBreak: wordBreak = "break-word", lineClamp: lineClamp} = subtextStyle, maxSubTextHeight = Math.max(Number.MIN_VALUE, maxHeight - maintextHeight);
|
|
70
|
+
if ("rich" === subtextType || (0, vutils_1.isValid)(subtextStyle.character)) {
|
|
71
|
+
const attr = Object.assign({
|
|
72
|
+
x: x,
|
|
73
|
+
y: y,
|
|
74
|
+
width: null !== (_h = null != subTitleWidth ? subTitleWidth : width) && void 0 !== _h ? _h : 0,
|
|
75
|
+
height: null !== (_j = null != subTitleHeight ? subTitleHeight : height) && void 0 !== _j ? _j : 0,
|
|
76
|
+
ellipsis: ellipsis,
|
|
77
|
+
wordBreak: wordBreak,
|
|
78
|
+
maxHeight: null != subTitleMaxHeight ? subTitleMaxHeight : maxSubTextHeight,
|
|
79
|
+
maxWidth: null != subTitleMaxWidth ? subTitleMaxWidth : maxWidth,
|
|
80
|
+
textConfig: null !== (_k = subtextStyle.character) && void 0 !== _k ? _k : subtext
|
|
81
|
+
}, subtextStyle);
|
|
82
|
+
this._subTitle = group.createOrUpdateChild("subTitle", attr, "richtext");
|
|
83
|
+
} else if ("html" === subtextType) {
|
|
84
|
+
const attr = Object.assign({
|
|
85
|
+
html: Object.assign(Object.assign({
|
|
86
|
+
dom: subtext
|
|
87
|
+
}, constant_1.DEFAULT_HTML_TEXT_SPEC), subtextStyle),
|
|
88
|
+
x: x,
|
|
89
|
+
y: y,
|
|
90
|
+
width: null !== (_l = null != subTitleWidth ? subTitleWidth : width) && void 0 !== _l ? _l : 0,
|
|
91
|
+
height: null !== (_m = null != subTitleHeight ? subTitleHeight : height) && void 0 !== _m ? _m : 0,
|
|
92
|
+
ellipsis: ellipsis,
|
|
93
|
+
wordBreak: wordBreak,
|
|
94
|
+
maxHeight: null != subTitleMaxHeight ? subTitleMaxHeight : maxSubTextHeight,
|
|
95
|
+
maxWidth: null != subTitleMaxWidth ? subTitleMaxWidth : maxWidth,
|
|
96
|
+
textConfig: []
|
|
97
|
+
}, subtextStyle);
|
|
98
|
+
this._subTitle = group.createOrUpdateChild("subTitle", attr, "richtext");
|
|
99
|
+
} else (0, vutils_1.isValid)(subtext) && (this._subTitle = group.createOrUpdateChild("subTitle", Object.assign(Object.assign({
|
|
100
|
+
text: (0, vutils_1.isArray)(subtext) ? subtext : [ subtext ],
|
|
101
|
+
whiteSpace: "normal"
|
|
102
|
+
}, subtextStyle), {
|
|
103
|
+
maxLineWidth: null !== (_o = subtextStyle.maxLineWidth) && void 0 !== _o ? _o : width,
|
|
104
|
+
heightLimit: null !== (_p = subtextStyle.heightLimit) && void 0 !== _p ? _p : maxSubTextHeight,
|
|
105
|
+
lineClamp: lineClamp,
|
|
106
|
+
ellipsis: ellipsis,
|
|
107
|
+
x: 0,
|
|
108
|
+
y: maintextHeight
|
|
109
|
+
}), "text"));
|
|
110
|
+
}
|
|
107
111
|
const subtextHeight = this._subTitle ? this._subTitle.AABBBounds.height() : 0, subtextWidth = this._subTitle ? this._subTitle.AABBBounds.width() : 0;
|
|
108
|
-
let titleWidth = Math.max(maintextWidth, subtextWidth), titleHeight = maintextHeight + (null !== (
|
|
109
|
-
if ((0, vutils_1.isValid)(width) && (titleWidth = width,
|
|
110
|
-
this._subTitle && this._subTitle.setAttribute("maxLineWidth", width)), (0, vutils_1.isValid)(height) && (titleHeight = height),
|
|
112
|
+
let titleWidth = Math.max(maintextWidth, subtextWidth), titleHeight = maintextHeight + (null !== (_q = subtextStyle.height) && void 0 !== _q ? _q : subtextHeight);
|
|
113
|
+
if ((0, vutils_1.isValid)(width) && (titleWidth = width), (0, vutils_1.isValid)(height) && (titleHeight = height),
|
|
111
114
|
(0, vutils_1.isValid)(minWidth) && titleWidth < minWidth && (titleWidth = minWidth),
|
|
112
|
-
(0, vutils_1.isValid)(maxWidth) &&
|
|
113
|
-
this._subTitle && this._subTitle.setAttribute("maxLineWidth", maxWidth), this._mainTitle && this._mainTitle.setAttribute("maxWidth", maxWidth),
|
|
114
|
-
this._subTitle && this._subTitle.setAttribute("maxWidth", maxWidth), titleWidth > maxWidth && (titleWidth = maxWidth)),
|
|
115
|
+
(0, vutils_1.isValid)(maxWidth) && titleWidth > maxWidth && (titleWidth = maxWidth),
|
|
115
116
|
(0, vutils_1.isValid)(minHeight) && titleHeight < minHeight && (titleHeight = minHeight),
|
|
116
|
-
(0, vutils_1.isValid)(maxHeight) &&
|
|
117
|
-
|
|
118
|
-
titleHeight > maxHeight && (titleHeight = maxHeight)), group.attribute.width = titleWidth,
|
|
119
|
-
group.attribute.height = titleHeight, group.attribute.boundsPadding = parsedPadding,
|
|
117
|
+
(0, vutils_1.isValid)(maxHeight) && titleHeight > maxHeight && (titleHeight = maxHeight),
|
|
118
|
+
group.attribute.width = titleWidth, group.attribute.height = titleHeight, group.attribute.boundsPadding = parsedPadding,
|
|
120
119
|
this._mainTitle) {
|
|
121
120
|
if ((0, vutils_1.isValid)(align) || (0, vutils_1.isValid)(textStyle.align)) {
|
|
122
|
-
const mainTitleAlign = textStyle.align ? textStyle.align : align, mainTitleWidth = null !== (
|
|
121
|
+
const mainTitleAlign = textStyle.align ? textStyle.align : align, mainTitleWidth = null !== (_r = textStyle.width) && void 0 !== _r ? _r : maintextWidth;
|
|
123
122
|
"left" === mainTitleAlign ? (this._mainTitle.setAttribute("x", 0), this._mainTitle.setAttribute("textAlign", "left")) : "center" === mainTitleAlign ? (this._mainTitle.setAttribute("x", mainTitleWidth / 2),
|
|
124
123
|
this._mainTitle.setAttribute("textAlign", "center")) : "right" === mainTitleAlign && (this._mainTitle.setAttribute("x", mainTitleWidth),
|
|
125
124
|
this._mainTitle.setAttribute("textAlign", "right"));
|
|
@@ -133,13 +132,13 @@ class Title extends base_1.AbstractComponent {
|
|
|
133
132
|
}
|
|
134
133
|
if (this._subTitle) {
|
|
135
134
|
if ((0, vutils_1.isValid)(align) || (0, vutils_1.isValid)(subtextStyle.align)) {
|
|
136
|
-
const subTitleAlign = subtextStyle.align ? subtextStyle.align : align, subTitleWidth = null !== (
|
|
135
|
+
const subTitleAlign = subtextStyle.align ? subtextStyle.align : align, subTitleWidth = null !== (_s = subtextStyle.width) && void 0 !== _s ? _s : subtextWidth;
|
|
137
136
|
"left" === subTitleAlign ? (this._subTitle.setAttribute("x", 0), this._subTitle.setAttribute("textAlign", "left")) : "center" === subTitleAlign ? (this._subTitle.setAttribute("x", subTitleWidth / 2),
|
|
138
137
|
this._subTitle.setAttribute("textAlign", "center")) : "right" === subTitleAlign && (this._subTitle.setAttribute("x", subTitleWidth),
|
|
139
138
|
this._subTitle.setAttribute("textAlign", "right"));
|
|
140
139
|
}
|
|
141
140
|
if ((0, vutils_1.isValid)(verticalAlign) || (0, vutils_1.isValid)(textStyle.verticalAlign)) {
|
|
142
|
-
const subTitleVerticalAlign = subtextStyle.verticalAlign ? subtextStyle.verticalAlign : verticalAlign, subTitleYStart = maintextHeight, subTitleHeight = null !== (
|
|
141
|
+
const subTitleVerticalAlign = subtextStyle.verticalAlign ? subtextStyle.verticalAlign : verticalAlign, subTitleYStart = maintextHeight, subTitleHeight = null !== (_t = subtextStyle.height) && void 0 !== _t ? _t : 0;
|
|
143
142
|
"top" === subTitleVerticalAlign ? (this._subTitle.setAttribute("y", subTitleYStart),
|
|
144
143
|
this._subTitle.setAttribute("textBaseline", "top")) : "middle" === subTitleVerticalAlign ? (this._subTitle.setAttribute("y", subTitleYStart + subTitleHeight / 2),
|
|
145
144
|
this._subTitle.setAttribute("textBaseline", "middle")) : "bottom" === subTitleVerticalAlign && (this._subTitle.setAttribute("y", subTitleYStart + subTitleHeight),
|