@visactor/vrender-components 1.0.16 → 1.0.17
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/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/legend/discrete/discrete.js +4 -4
- package/cjs/legend/discrete/discrete.js.map +1 -1
- package/dist/index.es.js +4 -4
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/legend/discrete/discrete.js +4 -4
- package/es/legend/discrete/discrete.js.map +1 -1
- package/package.json +5 -5
package/cjs/index.d.ts
CHANGED
package/cjs/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
|
|
|
17
17
|
|
|
18
18
|
Object.defineProperty(exports, "__esModule", {
|
|
19
19
|
value: !0
|
|
20
|
-
}), exports.version = void 0, exports.version = "1.0.
|
|
20
|
+
}), exports.version = void 0, exports.version = "1.0.17", __exportStar(require("./core/base"), exports),
|
|
21
21
|
__exportStar(require("./core/type"), exports), __exportStar(require("./scrollbar"), exports),
|
|
22
22
|
__exportStar(require("./tag"), exports), __exportStar(require("./poptip"), exports),
|
|
23
23
|
__exportStar(require("./crosshair"), exports), __exportStar(require("./label"), exports),
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,QAAQ,CAAC;AAEhC,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,4CAA0B;AAC1B,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,8CAA4B;AAC5B,wCAAsB;AACtB,6CAA2B;AAC3B,0CAAwB;AACxB,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,2CAAyB;AACzB,+CAA6B;AAC7B,wDAAsC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"1.0.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,QAAQ,CAAC;AAEhC,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,4CAA0B;AAC1B,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,8CAA4B;AAC5B,wCAAsB;AACtB,6CAA2B;AAC3B,0CAAwB;AACxB,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,2CAAyB;AACzB,+CAA6B;AAC7B,wDAAsC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"1.0.17\";\n\nexport * from './core/base';\nexport * from './core/type';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './timeline';\nexport * from './interface';\nexport * from './jsx';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './empty-tip';\nexport * from './weather';\nexport * from './util';\nexport * from './switch';\nexport * from './label-item';\nexport * from './table-series-number';\n"]}
|
|
@@ -420,8 +420,8 @@ class DiscreteLegend extends base_1.LegendBase {
|
|
|
420
420
|
!1;
|
|
421
421
|
itemsContainer.getChildren().forEach(((item, index) => {
|
|
422
422
|
const {width: width, height: height} = item.attribute;
|
|
423
|
-
contentWidth < startX + width && (startX = 0, startY += height + spaceRow,
|
|
424
|
-
index > 0 && item.setAttributes({
|
|
423
|
+
contentWidth < startX + width && index > 0 && (startX = 0, startY += height + spaceRow,
|
|
424
|
+
pages += 1), index > 0 && item.setAttributes({
|
|
425
425
|
x: startX,
|
|
426
426
|
y: startY
|
|
427
427
|
}), startX += spaceCol + width;
|
|
@@ -434,8 +434,8 @@ class DiscreteLegend extends base_1.LegendBase {
|
|
|
434
434
|
this._innerView.add(comp), contentHeight = maxHeight - comp.AABBBounds.height() - pagerSpace - renderStartY,
|
|
435
435
|
contentHeight <= 0) return this._innerView.removeChild(comp), !1;
|
|
436
436
|
itemsContainer.getChildren().forEach(((item, index) => {
|
|
437
|
-
const {height: height} = item.attribute;
|
|
438
|
-
contentHeight < startY + height && (startY = 0, startX += this._itemMaxWidth + spaceCol,
|
|
437
|
+
const {width: width, height: height} = item.attribute;
|
|
438
|
+
contentHeight < startY + height && index > 0 && (startY = 0, startX += this._itemMaxWidth + spaceCol,
|
|
439
439
|
pages += 1), index > 0 && item.setAttributes({
|
|
440
440
|
x: startX,
|
|
441
441
|
y: startY
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/legend/discrete/discrete.ts"],"names":[],"mappings":"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","file":"discrete.js","sourcesContent":["/**\n * @description 离散图例\n * @author 章伟星\n */\nimport {\n merge,\n isEmpty,\n normalizePadding,\n get,\n isValid,\n isNil,\n isFunction,\n isArray,\n minInArray,\n throttle,\n isNumberClose,\n clamp,\n isObject\n} from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent,\n IText,\n IRichText,\n FederatedWheelEvent,\n ILinearGradient,\n IRect\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type {\n DiscreteLegendAttrs,\n LegendItem,\n LegendItemDatum,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\nimport { createTextGraphicByType } from '../../util';\nimport type { ScrollBarAttributes } from '../../scrollbar';\nimport { ScrollBar } from '../../scrollbar';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase<DiscreteLegendAttrs> {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _contentMaxHeight = 0; // 存储图例的最大的宽度 (去除 padding)\n private _pagerComponent: Pager | ScrollBar;\n private _lastActiveItem: IGroup;\n private _itemContext: {\n // 水平布局换行标识\n doWrap: boolean;\n // 存储每一列最大的宽度,用于垂直布局的换列\n maxWidthInCol: number;\n startX: number;\n startY: number;\n maxPages: number;\n pages: number;\n // 开始渲染的序号\n startIndex: number;\n items: LegendItemDatum[];\n isHorizontal: boolean;\n currentPage: number;\n totalPage: number;\n isScrollbar: boolean;\n clipContainer: IGroup;\n };\n private _scrollMask: IRect;\n private _scrollMaskContext: {\n startStops: ILinearGradient['stops'];\n endStops: ILinearGradient['stops'];\n };\n\n static defaultAttributes: Partial<DiscreteLegendAttrs> = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n render() {\n super.render();\n this._lastActiveItem = null;\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderItems() {\n const {\n item: itemAttrs = {},\n maxCol = 1,\n maxRow = 2,\n maxWidth,\n defaultSelected,\n lazyload,\n autoPage\n } = this.attribute as DiscreteLegendAttrs;\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n verticalAlign = 'middle'\n } = itemAttrs;\n\n const itemsContainer = this._itemsContainer;\n const { items: legendItems, isHorizontal, startIndex, isScrollbar } = this._itemContext;\n const maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol;\n const maxHeight = this._contentMaxHeight;\n\n let { doWrap, maxWidthInCol, startX, startY, pages } = this._itemContext;\n let item: LegendItemDatum;\n let lastItemWidth = 0;\n\n let lastLineHeight = 0;\n const lastLineItemGroup: IGroup[] = [];\n for (let index = startIndex, len = legendItems.length; index < len; index++) {\n if (lazyload && pages > this._itemContext.currentPage * maxPages) {\n break;\n }\n\n if (lazyload) {\n this._itemContext.startIndex = index + 1;\n }\n item = legendItems[index];\n\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n let isSelected = true;\n if (isArray(defaultSelected)) {\n isSelected = defaultSelected.includes(item.label);\n }\n\n const itemGroup = this._renderEachItem(item, isSelected, index, legendItems);\n\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n // 水平布局\n if (isValid(maxWidth)) {\n if (isScrollbar && autoPage) {\n // 不需要换行时\n pages = Math.ceil((startX + itemWidth) / maxWidth);\n doWrap = pages > 1;\n } else if (startX + itemWidth > maxWidth) {\n // 需要换行\n doWrap = true;\n // 避免第一个元素就超出最大宽度,额外换了一行,所以限制 startX > 0 ?\n if (startX > 0) {\n // 进行换行\n // 换行前,先将上一行的元素按照最大高度进行居中\n if (verticalAlign === 'middle' || verticalAlign === 'bottom') {\n // eslint-disable-next-line no-loop-func\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n pages += 1;\n startX = 0;\n // 应该增加的是上一行的高度 而不是当前元素高度\n startY += lastLineHeight + spaceRow;\n // 重置上一行的临时内容\n lastLineHeight = 0;\n lastLineItemGroup.length = 0;\n }\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n // 此时记录当前行的最大高度\n lastLineHeight = Math.max(lastLineHeight, itemHeight);\n lastLineItemGroup.push(itemGroup);\n } else {\n // 垂直布局\n if (isValid(maxHeight)) {\n if (isScrollbar && autoPage) {\n pages = Math.ceil((startY + itemHeight) / maxHeight);\n doWrap = pages > 1;\n } else if (maxHeight <= itemHeight) {\n // 如果最大高度小于图例项高度,说明只有一行,那么就按照图例项自己的宽度进行布局即可,不需要每列同宽\n pages += 1;\n doWrap = true;\n startY = 0;\n if (index > 0) {\n startX += lastItemWidth + spaceCol;\n }\n } else if (maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n pages += 1;\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n lastItemWidth = itemWidth;\n }\n\n if (isHorizontal && (verticalAlign === 'middle' || verticalAlign === 'bottom')) {\n // 水平布局 最后一行居中\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n this._itemContext.doWrap = doWrap;\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.maxWidthInCol = maxWidthInCol;\n this._itemContext.pages = pages;\n this._itemContext.maxPages = maxPages;\n\n if (isScrollbar) {\n this._itemContext.totalPage = pages;\n }\n\n if (!lazyload) {\n this._itemContext.startIndex = legendItems.length;\n }\n\n return this._itemContext;\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxWidth, maxHeight } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n this._contentMaxHeight = Math.max(0, maxHeight - this._parsedPadding[0] - this._parsedPadding[2]);\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const { maxWidth: maxItemWidth, width: itemWidth, height: itemHeight } = item;\n\n const widthsOptions = [];\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n widthsOptions.push(maxItemWidth);\n }\n if (isValid(itemWidth)) {\n widthsOptions.push(itemWidth);\n }\n\n if (widthsOptions.length) {\n if (isValid(maxWidth)) {\n widthsOptions.push(maxWidth);\n }\n this._itemWidthByUser = minInArray(widthsOptions);\n }\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n const pager = this.attribute.pager;\n this._itemContext = {\n currentPage: pager ? pager.defaultCurrent || 1 : 1,\n doWrap: false,\n maxWidthInCol: 0,\n maxPages: 1,\n pages: 1,\n startX: 0,\n startY: 0,\n startIndex: 0,\n items: legendItems,\n isHorizontal,\n totalPage: Infinity,\n isScrollbar: pager && (pager as LegendScrollbarAttributes).type === 'scrollbar',\n clipContainer: undefined\n };\n\n this._itemContext = this._renderItems();\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (this._itemContext.doWrap && autoPage && this._itemContext.pages > this._itemContext.maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPagerComponent();\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n\n if (hover) {\n let trigger = 'pointermove';\n let triggerOff = 'pointerleave';\n\n if (isObject(hover)) {\n hover.trigger && (trigger = hover.trigger);\n hover.triggerOff && (triggerOff = hover.triggerOff);\n }\n\n this._itemsContainer.addEventListener(trigger, this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener(triggerOff, this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n let trigger = 'pointerdown';\n if (isObject(select) && select.trigger) {\n trigger = select.trigger;\n }\n this._itemsContainer.addEventListener(trigger, this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _autoEllipsis(\n autoEllipsisStrategy: 'labelFirst' | 'valueFirst' | 'none',\n layoutWidth: number,\n labelShape: IText | IRichText,\n valueShape: IText | IRichText\n ) {\n const { label: labelAttr, value: valueAttr } = this.attribute.item as LegendItem;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n let useWidthRatio = false;\n\n if (autoEllipsisStrategy === 'labelFirst') {\n if (labelWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n } else if (autoEllipsisStrategy === 'valueFirst') {\n if (valueWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n }\n } else if (valueWidth + labelWidth > layoutWidth) {\n useWidthRatio = true;\n }\n\n if (useWidthRatio) {\n valueShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (labelAttr.widthRatio ?? 0.5), layoutWidth - labelWidth)\n );\n labelShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (valueAttr.widthRatio ?? 0.5), layoutWidth - valueWidth)\n );\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle, align, autoEllipsisStrategy } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape: IGraphic;\n let focusSpace = 0;\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n boundsPadding: parsedPadding,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise'\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n const text = labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label;\n const labelAttributes = {\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text,\n _originText: labelAttr.formatMethod ? label : undefined\n };\n\n const labelShape = createTextGraphicByType(labelAttributes);\n\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueText = valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value;\n const valueAttributes = {\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueText,\n _originText: valueAttr.formatMethod ? value : undefined\n };\n\n const valueShape = createTextGraphicByType(valueAttributes);\n\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n\n this._autoEllipsis(autoEllipsisStrategy, layoutWidth, labelShape, valueShape);\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n focusStartX = valueSpace + (valueShape.AABBBounds.empty() ? 0 : valueShape.AABBBounds.x2);\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n } else {\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n\n if (align === 'right') {\n const x2 = innerGroupBounds.x2;\n const x1 = innerGroupBounds.x1;\n innerGroup.forEachChildren((child: IGraphic, index: number) => {\n if (\n (child.type !== 'symbol' && (child as IText).attribute.textAlign !== 'right') ||\n child === (focusShape as unknown as IGraphic)\n ) {\n child.setAttribute('x', x1 + x2 - child.attribute.x - child.AABBBounds.width());\n } else if (child.type !== 'symbol') {\n (child as IText).setAttributes({ x: x1 + x2 - child.attribute.x, textAlign: 'left' });\n } else {\n child.setAttribute('x', x1 + x2 - child.attribute.x);\n }\n });\n }\n\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n focusShape && focusShape.setAttribute('visible', false);\n\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _createPager(compStyle: LegendPagerAttributes | LegendScrollbarAttributes) {\n const { disableTriggerEvent, maxRow } = this.attribute;\n const estimateTotal = (num: number) => {\n if (num <= 99) {\n return 99;\n } else if (num <= 999) {\n return 999;\n }\n return 9999;\n };\n return this._itemContext.isHorizontal\n ? new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: estimateTotal(this._itemContext.pages),\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n compStyle as LegendPagerAttributes\n ),\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n disableTriggerEvent\n })\n : new Pager({\n layout: 'horizontal',\n total: estimateTotal(this._itemContext.pages), // 用于估算,\n disableTriggerEvent,\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n ...(compStyle as LegendPagerAttributes)\n });\n }\n\n private _createScrollbar(compStyle: LegendPagerAttributes | LegendScrollbarAttributes, compSize: number) {\n const { disableTriggerEvent } = this.attribute;\n\n return this._itemContext.isHorizontal\n ? new ScrollBar({\n direction: 'horizontal',\n disableTriggerEvent,\n range: [0, 0.5],\n height: compStyle.visible === false ? 0 : 12,\n ...(compStyle as LegendScrollbarAttributes),\n width: compSize\n })\n : new ScrollBar({\n direction: 'vertical',\n width: compStyle.visible === false ? 0 : 12,\n range: [0, 0.5],\n ...(compStyle as LegendScrollbarAttributes),\n height: compSize,\n disableTriggerEvent\n });\n }\n\n private _updatePositionOfPager(renderStartY: number, compWidth: number, compHeight: number) {\n const { pager } = this.attribute;\n const { totalPage, isHorizontal } = this._itemContext;\n const position = (pager && (pager as LegendPagerAttributes).position) || 'middle';\n (this._pagerComponent as Pager).setTotal(totalPage);\n\n if (isHorizontal) {\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + compHeight - this._pagerComponent.AABBBounds.height() / 2;\n } else {\n y = renderStartY + compHeight / 2 - this._pagerComponent.AABBBounds.height() / 2;\n }\n this._pagerComponent.setAttributes({\n x: compWidth - this._pagerComponent.AABBBounds.width(),\n y\n });\n } else {\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = compWidth - this._pagerComponent.AABBBounds.width();\n } else {\n x = (compWidth - this._pagerComponent.AABBBounds.width()) / 2;\n }\n this._pagerComponent.setAttributes({\n x,\n y: compHeight - this._pagerComponent.AABBBounds.height()\n });\n }\n }\n\n private _computeScrollbarDelta() {\n const { isHorizontal, clipContainer } = this._itemContext;\n const itemContainerBounds = this._itemsContainer.AABBBounds;\n const clipContainerBounds = clipContainer.AABBBounds;\n\n let delta;\n let innerViewSize;\n\n if (isHorizontal) {\n innerViewSize = clipContainerBounds.width();\n delta = innerViewSize / itemContainerBounds.width();\n } else {\n innerViewSize = clipContainerBounds.height();\n delta = innerViewSize / itemContainerBounds.height();\n }\n return delta;\n }\n\n private _updatePositionOfScrollbar(contentWidth: number, contentHeight: number, renderStartY: number) {\n const { isHorizontal, currentPage, totalPage } = this._itemContext;\n\n const start = (currentPage - 1) / totalPage;\n\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + this._computeScrollbarDelta()]);\n\n if (isHorizontal) {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: 0,\n y: renderStartY + contentHeight\n });\n } else {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: contentWidth,\n y: renderStartY\n });\n }\n }\n\n private _bindEventsOfPager(pageSize: number, channel: 'x' | 'y') {\n const pager = this.attribute.pager || {};\n const { animation = true, animationDuration = 450, animationEasing = 'quadIn' } = pager;\n const pageParser = this._itemContext.isScrollbar\n ? (e: CustomEvent) => {\n const { value } = e.detail;\n let newPage;\n // page 信息不再用于 scroll 窗口的位置更新\n // scrollbar 模式,记录 newPage 用于开启 lazyLoad 的场景\n if (value[0] === 0) {\n newPage = 1;\n } else if (value[1] === 1) {\n newPage = this._itemContext.totalPage;\n } else {\n newPage = value[0] * this._itemContext.totalPage + 1;\n }\n\n return newPage;\n }\n : (e: CustomEvent) => {\n return e.detail.current;\n };\n\n const onScroll = (e: FederatedWheelEvent) => {\n const scrollComponent = this._pagerComponent as ScrollBar;\n const preScrollRange = scrollComponent.getScrollRange();\n const { direction } = scrollComponent.attribute as ScrollBarAttributes;\n const { width, height } = scrollComponent.getSliderRenderBounds();\n const currentScrollValue = direction === 'vertical' ? e.deltaY / height : e.deltaX / width;\n scrollComponent.setScrollRange(\n [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue],\n true\n );\n\n this.updateScrollMask();\n };\n\n const onPaging = (e: CustomEvent) => {\n const newPage = pageParser(e);\n\n if (newPage === this._itemContext.currentPage) {\n return;\n }\n\n this._itemContext.currentPage = newPage;\n\n if (this._itemContext && this._itemContext.startIndex < this._itemContext.items.length) {\n this._renderItems();\n\n const newTotalPage = Math.ceil(this._itemContext.pages / this._itemContext.maxPages);\n // 更新总页数\n this._itemContext.totalPage = newTotalPage;\n // 更新 scrollbar 的范围\n if (this._itemContext.isScrollbar && this._pagerComponent) {\n const newDelta = this._computeScrollbarDelta();\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + newDelta]);\n }\n }\n\n if (!this._itemContext.isScrollbar) {\n if (animation) {\n (this._itemsContainer as IGroup)\n .animate()\n .to({ [channel]: -(newPage - 1) * pageSize }, animationDuration, animationEasing);\n } else {\n (this._itemsContainer as IGroup).setAttribute(channel, -(newPage - 1) * pageSize);\n }\n } else {\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n let containerSize;\n if (this._itemContext.isHorizontal) {\n containerSize = this._itemsContainer.AABBBounds.width();\n } else {\n containerSize = this._itemsContainer.AABBBounds.height();\n }\n\n const startOffset = containerSize * start;\n this.updateScrollMask();\n\n if (animation) {\n this._itemsContainer.animate().to({ [channel]: -startOffset }, animationDuration, animationEasing);\n } else {\n this._itemsContainer.setAttribute(channel, -startOffset);\n }\n }\n };\n if (this._itemContext.isScrollbar) {\n this._pagerComponent.addEventListener('scrollDrag', onPaging);\n this._pagerComponent.addEventListener('scrollUp', onPaging);\n if (((this.attribute as DiscreteLegendAttrs).pager as LegendScrollbarAttributes).roamScroll) {\n const THROTTLE_TIME = 50;\n // preventDefault不能和throttle一起使用, 否则阻止默认事件失败\n this.addEventListener('wheel', (e: FederatedWheelEvent) => e.nativeEvent.preventDefault());\n this.addEventListener('wheel', throttle(onScroll, THROTTLE_TIME));\n }\n } else {\n this._pagerComponent.addEventListener('toPrev', onPaging);\n this._pagerComponent.addEventListener('toNext', onPaging);\n }\n }\n\n private _renderPager() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxCol = 1, maxRow = 2, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let compWidth = 0;\n let compHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n compHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n compWidth = maxWidth;\n // 水平布局,支持上下翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n contentWidth = (maxWidth as number) - comp.AABBBounds.width() - pagerSpace;\n if (contentWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n if (contentWidth < startX + (width as number)) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.pages = pages;\n const total = Math.ceil(pages / maxRow);\n\n this._itemContext.totalPage = total;\n\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n } else {\n compWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n compHeight = maxHeight;\n contentWidth = compWidth;\n\n // 垂直布局,支持左右翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n contentHeight = (maxHeight as number) - comp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { height } = item.attribute;\n if (contentHeight < startY + (height as number)) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n // todo\n const total = Math.ceil(pages / maxCol);\n\n this._itemContext.totalPage = total;\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(defaultCurrent - 1) * (compHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(defaultCurrent - 1) * (compWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: isHorizontal ? contentWidth : compWidth,\n height: isHorizontal ? compHeight : contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._bindEventsOfPager(isHorizontal ? compHeight + spaceRow : compWidth + spaceCol, isHorizontal ? 'y' : 'x');\n\n return true;\n }\n\n private _renderScrollbar() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let contentWidth = 0;\n let contentHeight = 0;\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n contentWidth = maxWidth;\n contentHeight = this._itemHeight;\n // 水平布局,支持上下翻页\n comp = this._createScrollbar(compStyle, contentWidth);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n } else {\n contentHeight = (maxHeight as number) - renderStartY;\n contentWidth = this._itemMaxWidth;\n // 垂直布局,支持左右翻页\n comp = this._createScrollbar(compStyle, contentHeight);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n // 边界场景: 最后一项item的文字内容在倒数第二页, 但由于bounds比文字本身大一点, 触发分页, 导致最后一页是空白\n // 关联issue: https://github.com/VisActor/VChart/issues/3344\n // 解决方式:\n // - 所有的item 高度一致的时候: 按照 (itemHeight + space) * 倍数 布局\n // - item高度不一致的情况: 最后一项的的高度分到最后一页的高度 >= 1/3 才分页\n const items = itemsContainer.getChildren() as IGroup[];\n const itemsHeightArr = items.map((item: IGroup) => item.attribute.height);\n if (itemsHeightArr.length === 1 || itemsHeightArr.every(entry => entry === itemsHeightArr[0])) {\n const itemHeight = itemsHeightArr[0];\n const maxContentHeight = contentHeight;\n const pageItemsCount = Math.floor(maxContentHeight / (spaceRow + itemHeight));\n contentHeight = pageItemsCount * (spaceRow + itemHeight);\n pages = Math.ceil(items.length / pageItemsCount);\n } else {\n items.forEach((item, index) => {\n const { height } = item.attribute;\n\n const prePages = pages;\n const preStartY = startY;\n pages = Math.floor((startY + height) / contentHeight) + 1;\n startY += spaceRow + (height as number);\n if (\n prePages !== pages && // 触发分页\n index === itemsContainer.getChildren().length - 1 && //\n startY - contentHeight >= (1 / 3) * height\n ) {\n contentHeight = preStartY + height; // 保证刚好完全展示最后一项\n pages -= 1; // 不分页\n }\n });\n }\n\n this._itemContext.totalPage = pages;\n this._itemContext.pages = pages;\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n const maxOffset = this._itemsContainer.AABBBounds.width() - contentWidth;\n itemsContainer.setAttribute('x', -Math.min((defaultCurrent - 1) * (contentWidth + spaceCol), maxOffset));\n } else {\n const maxOffset = this._itemsContainer.AABBBounds.height() - contentHeight;\n itemsContainer.setAttribute('y', -Math.min((defaultCurrent - 1) * (contentHeight + spaceRow), maxOffset));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: contentWidth,\n height: contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._updatePositionOfScrollbar(contentWidth, contentHeight, renderStartY);\n\n if ((pager as LegendScrollbarAttributes).scrollMask?.visible) {\n this.renderScrollMask(clipGroup);\n }\n\n this._bindEventsOfPager(isHorizontal ? contentWidth : contentHeight, isHorizontal ? 'x' : 'y');\n return true;\n }\n\n private renderScrollMask(clipGroup: IGroup) {\n const { scrollMask = {} as LegendScrollbarAttributes['scrollMask'] } = this.attribute\n .pager as LegendScrollbarAttributes;\n const { visible = true, gradientLength = 16, gradientStops } = scrollMask;\n if (!visible || !gradientStops) {\n return;\n }\n const width = clipGroup.AABBBounds.width();\n const height = clipGroup.AABBBounds.height();\n const totalLength = this._itemContext.isHorizontal ? width : height;\n\n const startStops = gradientStops.map(stop => {\n return {\n offset: (gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n const endStops = gradientStops.map(stop => {\n return {\n offset: (totalLength - gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n\n const mask = graphicCreator.rect({\n x: 0,\n y: 0,\n width,\n height\n });\n this._scrollMask = mask;\n this._scrollMaskContext = { startStops, endStops };\n this.updateScrollMask();\n\n clipGroup.add(mask);\n }\n\n private updateScrollMask() {\n if (!this._scrollMask || !this._pagerComponent) {\n return;\n }\n\n if (!this._itemContext.isScrollbar) {\n return;\n }\n\n const [start, end] = (this._pagerComponent as ScrollBar).getScrollRange();\n const stops = [];\n if (!isNumberClose(clamp(end, 0, 1), 1)) {\n stops.push(...this._scrollMaskContext.endStops);\n }\n\n if (!isNumberClose(clamp(start, 0, 1), 0)) {\n stops.push(...this._scrollMaskContext.startStops);\n }\n\n if (stops.length) {\n if (this._itemContext.isHorizontal) {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops\n }\n });\n } else {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops\n }\n });\n }\n }\n }\n\n private _renderPagerComponent() {\n if (this._itemContext.isScrollbar) {\n this._renderScrollbar();\n } else {\n this._renderPager();\n }\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n const { selectMode = 'multiple' } = this.attribute;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus || selectMode === 'focus') {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n\n release(): void {\n super.release();\n this.removeAllEventListeners();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/legend/discrete/discrete.ts"],"names":[],"mappings":"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","file":"discrete.js","sourcesContent":["/**\n * @description 离散图例\n * @author 章伟星\n */\nimport {\n merge,\n isEmpty,\n normalizePadding,\n get,\n isValid,\n isNil,\n isFunction,\n isArray,\n minInArray,\n throttle,\n isNumberClose,\n clamp,\n isObject\n} from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent,\n IText,\n IRichText,\n FederatedWheelEvent,\n ILinearGradient,\n IRect\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type {\n DiscreteLegendAttrs,\n LegendItem,\n LegendItemDatum,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\nimport { createTextGraphicByType } from '../../util';\nimport type { ScrollBarAttributes } from '../../scrollbar';\nimport { ScrollBar } from '../../scrollbar';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase<DiscreteLegendAttrs> {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _contentMaxHeight = 0; // 存储图例的最大的宽度 (去除 padding)\n private _pagerComponent: Pager | ScrollBar;\n private _lastActiveItem: IGroup;\n private _itemContext: {\n // 水平布局换行标识\n doWrap: boolean;\n // 存储每一列最大的宽度,用于垂直布局的换列\n maxWidthInCol: number;\n startX: number;\n startY: number;\n maxPages: number;\n pages: number;\n // 开始渲染的序号\n startIndex: number;\n items: LegendItemDatum[];\n isHorizontal: boolean;\n currentPage: number;\n totalPage: number;\n isScrollbar: boolean;\n clipContainer: IGroup;\n };\n private _scrollMask: IRect;\n private _scrollMaskContext: {\n startStops: ILinearGradient['stops'];\n endStops: ILinearGradient['stops'];\n };\n\n static defaultAttributes: Partial<DiscreteLegendAttrs> = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n render() {\n super.render();\n this._lastActiveItem = null;\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderItems() {\n const {\n item: itemAttrs = {},\n maxCol = 1,\n maxRow = 2,\n maxWidth,\n defaultSelected,\n lazyload,\n autoPage\n } = this.attribute as DiscreteLegendAttrs;\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n verticalAlign = 'middle'\n } = itemAttrs;\n\n const itemsContainer = this._itemsContainer;\n const { items: legendItems, isHorizontal, startIndex, isScrollbar } = this._itemContext;\n const maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol;\n const maxHeight = this._contentMaxHeight;\n\n let { doWrap, maxWidthInCol, startX, startY, pages } = this._itemContext;\n let item: LegendItemDatum;\n let lastItemWidth = 0;\n\n let lastLineHeight = 0;\n const lastLineItemGroup: IGroup[] = [];\n for (let index = startIndex, len = legendItems.length; index < len; index++) {\n if (lazyload && pages > this._itemContext.currentPage * maxPages) {\n break;\n }\n\n if (lazyload) {\n this._itemContext.startIndex = index + 1;\n }\n item = legendItems[index];\n\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n let isSelected = true;\n if (isArray(defaultSelected)) {\n isSelected = defaultSelected.includes(item.label);\n }\n\n const itemGroup = this._renderEachItem(item, isSelected, index, legendItems);\n\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n // 水平布局\n if (isValid(maxWidth)) {\n if (isScrollbar && autoPage) {\n // 不需要换行时\n pages = Math.ceil((startX + itemWidth) / maxWidth);\n doWrap = pages > 1;\n } else if (startX + itemWidth > maxWidth) {\n // 需要换行\n doWrap = true;\n // 避免第一个元素就超出最大宽度,额外换了一行,所以限制 startX > 0 ?\n if (startX > 0) {\n // 进行换行\n // 换行前,先将上一行的元素按照最大高度进行居中\n if (verticalAlign === 'middle' || verticalAlign === 'bottom') {\n // eslint-disable-next-line no-loop-func\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n pages += 1;\n startX = 0;\n // 应该增加的是上一行的高度 而不是当前元素高度\n startY += lastLineHeight + spaceRow;\n // 重置上一行的临时内容\n lastLineHeight = 0;\n lastLineItemGroup.length = 0;\n }\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n // 此时记录当前行的最大高度\n lastLineHeight = Math.max(lastLineHeight, itemHeight);\n lastLineItemGroup.push(itemGroup);\n } else {\n // 垂直布局\n if (isValid(maxHeight)) {\n if (isScrollbar && autoPage) {\n pages = Math.ceil((startY + itemHeight) / maxHeight);\n doWrap = pages > 1;\n } else if (maxHeight <= itemHeight) {\n // 如果最大高度小于图例项高度,说明只有一行,那么就按照图例项自己的宽度进行布局即可,不需要每列同宽\n pages += 1;\n doWrap = true;\n startY = 0;\n if (index > 0) {\n startX += lastItemWidth + spaceCol;\n }\n } else if (maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n pages += 1;\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n lastItemWidth = itemWidth;\n }\n\n if (isHorizontal && (verticalAlign === 'middle' || verticalAlign === 'bottom')) {\n // 水平布局 最后一行居中\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n this._itemContext.doWrap = doWrap;\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.maxWidthInCol = maxWidthInCol;\n this._itemContext.pages = pages;\n this._itemContext.maxPages = maxPages;\n\n if (isScrollbar) {\n this._itemContext.totalPage = pages;\n }\n\n if (!lazyload) {\n this._itemContext.startIndex = legendItems.length;\n }\n\n return this._itemContext;\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxWidth, maxHeight } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n this._contentMaxHeight = Math.max(0, maxHeight - this._parsedPadding[0] - this._parsedPadding[2]);\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const { maxWidth: maxItemWidth, width: itemWidth, height: itemHeight } = item;\n\n const widthsOptions = [];\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n widthsOptions.push(maxItemWidth);\n }\n if (isValid(itemWidth)) {\n widthsOptions.push(itemWidth);\n }\n\n if (widthsOptions.length) {\n if (isValid(maxWidth)) {\n widthsOptions.push(maxWidth);\n }\n this._itemWidthByUser = minInArray(widthsOptions);\n }\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n const pager = this.attribute.pager;\n this._itemContext = {\n currentPage: pager ? pager.defaultCurrent || 1 : 1,\n doWrap: false,\n maxWidthInCol: 0,\n maxPages: 1,\n pages: 1,\n startX: 0,\n startY: 0,\n startIndex: 0,\n items: legendItems,\n isHorizontal,\n totalPage: Infinity,\n isScrollbar: pager && (pager as LegendScrollbarAttributes).type === 'scrollbar',\n clipContainer: undefined\n };\n\n this._itemContext = this._renderItems();\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (this._itemContext.doWrap && autoPage && this._itemContext.pages > this._itemContext.maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPagerComponent();\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n\n if (hover) {\n let trigger = 'pointermove';\n let triggerOff = 'pointerleave';\n\n if (isObject(hover)) {\n hover.trigger && (trigger = hover.trigger);\n hover.triggerOff && (triggerOff = hover.triggerOff);\n }\n\n this._itemsContainer.addEventListener(trigger, this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener(triggerOff, this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n let trigger = 'pointerdown';\n if (isObject(select) && select.trigger) {\n trigger = select.trigger;\n }\n this._itemsContainer.addEventListener(trigger, this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _autoEllipsis(\n autoEllipsisStrategy: 'labelFirst' | 'valueFirst' | 'none',\n layoutWidth: number,\n labelShape: IText | IRichText,\n valueShape: IText | IRichText\n ) {\n const { label: labelAttr, value: valueAttr } = this.attribute.item as LegendItem;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n let useWidthRatio = false;\n\n if (autoEllipsisStrategy === 'labelFirst') {\n if (labelWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n } else if (autoEllipsisStrategy === 'valueFirst') {\n if (valueWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n }\n } else if (valueWidth + labelWidth > layoutWidth) {\n useWidthRatio = true;\n }\n\n if (useWidthRatio) {\n valueShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (labelAttr.widthRatio ?? 0.5), layoutWidth - labelWidth)\n );\n labelShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (valueAttr.widthRatio ?? 0.5), layoutWidth - valueWidth)\n );\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle, align, autoEllipsisStrategy } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape: IGraphic;\n let focusSpace = 0;\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n boundsPadding: parsedPadding,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise'\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n const text = labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label;\n const labelAttributes = {\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text,\n _originText: labelAttr.formatMethod ? label : undefined\n };\n\n const labelShape = createTextGraphicByType(labelAttributes);\n\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueText = valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value;\n const valueAttributes = {\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueText,\n _originText: valueAttr.formatMethod ? value : undefined\n };\n\n const valueShape = createTextGraphicByType(valueAttributes);\n\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n\n this._autoEllipsis(autoEllipsisStrategy, layoutWidth, labelShape, valueShape);\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n focusStartX = valueSpace + (valueShape.AABBBounds.empty() ? 0 : valueShape.AABBBounds.x2);\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n } else {\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n\n if (align === 'right') {\n const x2 = innerGroupBounds.x2;\n const x1 = innerGroupBounds.x1;\n innerGroup.forEachChildren((child: IGraphic, index: number) => {\n if (\n (child.type !== 'symbol' && (child as IText).attribute.textAlign !== 'right') ||\n child === (focusShape as unknown as IGraphic)\n ) {\n child.setAttribute('x', x1 + x2 - child.attribute.x - child.AABBBounds.width());\n } else if (child.type !== 'symbol') {\n (child as IText).setAttributes({ x: x1 + x2 - child.attribute.x, textAlign: 'left' });\n } else {\n child.setAttribute('x', x1 + x2 - child.attribute.x);\n }\n });\n }\n\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n focusShape && focusShape.setAttribute('visible', false);\n\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _createPager(compStyle: LegendPagerAttributes | LegendScrollbarAttributes) {\n const { disableTriggerEvent, maxRow } = this.attribute;\n const estimateTotal = (num: number) => {\n if (num <= 99) {\n return 99;\n } else if (num <= 999) {\n return 999;\n }\n return 9999;\n };\n return this._itemContext.isHorizontal\n ? new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: estimateTotal(this._itemContext.pages),\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n compStyle as LegendPagerAttributes\n ),\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n disableTriggerEvent\n })\n : new Pager({\n layout: 'horizontal',\n total: estimateTotal(this._itemContext.pages), // 用于估算,\n disableTriggerEvent,\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n ...(compStyle as LegendPagerAttributes)\n });\n }\n\n private _createScrollbar(compStyle: LegendPagerAttributes | LegendScrollbarAttributes, compSize: number) {\n const { disableTriggerEvent } = this.attribute;\n\n return this._itemContext.isHorizontal\n ? new ScrollBar({\n direction: 'horizontal',\n disableTriggerEvent,\n range: [0, 0.5],\n height: compStyle.visible === false ? 0 : 12,\n ...(compStyle as LegendScrollbarAttributes),\n width: compSize\n })\n : new ScrollBar({\n direction: 'vertical',\n width: compStyle.visible === false ? 0 : 12,\n range: [0, 0.5],\n ...(compStyle as LegendScrollbarAttributes),\n height: compSize,\n disableTriggerEvent\n });\n }\n\n private _updatePositionOfPager(renderStartY: number, compWidth: number, compHeight: number) {\n const { pager } = this.attribute;\n const { totalPage, isHorizontal } = this._itemContext;\n const position = (pager && (pager as LegendPagerAttributes).position) || 'middle';\n (this._pagerComponent as Pager).setTotal(totalPage);\n\n if (isHorizontal) {\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + compHeight - this._pagerComponent.AABBBounds.height() / 2;\n } else {\n y = renderStartY + compHeight / 2 - this._pagerComponent.AABBBounds.height() / 2;\n }\n this._pagerComponent.setAttributes({\n x: compWidth - this._pagerComponent.AABBBounds.width(),\n y\n });\n } else {\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = compWidth - this._pagerComponent.AABBBounds.width();\n } else {\n x = (compWidth - this._pagerComponent.AABBBounds.width()) / 2;\n }\n this._pagerComponent.setAttributes({\n x,\n y: compHeight - this._pagerComponent.AABBBounds.height()\n });\n }\n }\n\n private _computeScrollbarDelta() {\n const { isHorizontal, clipContainer } = this._itemContext;\n const itemContainerBounds = this._itemsContainer.AABBBounds;\n const clipContainerBounds = clipContainer.AABBBounds;\n\n let delta;\n let innerViewSize;\n\n if (isHorizontal) {\n innerViewSize = clipContainerBounds.width();\n delta = innerViewSize / itemContainerBounds.width();\n } else {\n innerViewSize = clipContainerBounds.height();\n delta = innerViewSize / itemContainerBounds.height();\n }\n return delta;\n }\n\n private _updatePositionOfScrollbar(contentWidth: number, contentHeight: number, renderStartY: number) {\n const { isHorizontal, currentPage, totalPage } = this._itemContext;\n\n const start = (currentPage - 1) / totalPage;\n\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + this._computeScrollbarDelta()]);\n\n if (isHorizontal) {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: 0,\n y: renderStartY + contentHeight\n });\n } else {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: contentWidth,\n y: renderStartY\n });\n }\n }\n\n private _bindEventsOfPager(pageSize: number, channel: 'x' | 'y') {\n const pager = this.attribute.pager || {};\n const { animation = true, animationDuration = 450, animationEasing = 'quadIn' } = pager;\n const pageParser = this._itemContext.isScrollbar\n ? (e: CustomEvent) => {\n const { value } = e.detail;\n let newPage;\n // page 信息不再用于 scroll 窗口的位置更新\n // scrollbar 模式,记录 newPage 用于开启 lazyLoad 的场景\n if (value[0] === 0) {\n newPage = 1;\n } else if (value[1] === 1) {\n newPage = this._itemContext.totalPage;\n } else {\n newPage = value[0] * this._itemContext.totalPage + 1;\n }\n\n return newPage;\n }\n : (e: CustomEvent) => {\n return e.detail.current;\n };\n\n const onScroll = (e: FederatedWheelEvent) => {\n const scrollComponent = this._pagerComponent as ScrollBar;\n const preScrollRange = scrollComponent.getScrollRange();\n const { direction } = scrollComponent.attribute as ScrollBarAttributes;\n const { width, height } = scrollComponent.getSliderRenderBounds();\n const currentScrollValue = direction === 'vertical' ? e.deltaY / height : e.deltaX / width;\n scrollComponent.setScrollRange(\n [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue],\n true\n );\n\n this.updateScrollMask();\n };\n\n const onPaging = (e: CustomEvent) => {\n const newPage = pageParser(e);\n\n if (newPage === this._itemContext.currentPage) {\n return;\n }\n\n this._itemContext.currentPage = newPage;\n\n if (this._itemContext && this._itemContext.startIndex < this._itemContext.items.length) {\n this._renderItems();\n\n const newTotalPage = Math.ceil(this._itemContext.pages / this._itemContext.maxPages);\n // 更新总页数\n this._itemContext.totalPage = newTotalPage;\n // 更新 scrollbar 的范围\n if (this._itemContext.isScrollbar && this._pagerComponent) {\n const newDelta = this._computeScrollbarDelta();\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + newDelta]);\n }\n }\n\n if (!this._itemContext.isScrollbar) {\n if (animation) {\n (this._itemsContainer as IGroup)\n .animate()\n .to({ [channel]: -(newPage - 1) * pageSize }, animationDuration, animationEasing);\n } else {\n (this._itemsContainer as IGroup).setAttribute(channel, -(newPage - 1) * pageSize);\n }\n } else {\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n let containerSize;\n if (this._itemContext.isHorizontal) {\n containerSize = this._itemsContainer.AABBBounds.width();\n } else {\n containerSize = this._itemsContainer.AABBBounds.height();\n }\n\n const startOffset = containerSize * start;\n this.updateScrollMask();\n\n if (animation) {\n this._itemsContainer.animate().to({ [channel]: -startOffset }, animationDuration, animationEasing);\n } else {\n this._itemsContainer.setAttribute(channel, -startOffset);\n }\n }\n };\n if (this._itemContext.isScrollbar) {\n this._pagerComponent.addEventListener('scrollDrag', onPaging);\n this._pagerComponent.addEventListener('scrollUp', onPaging);\n if (((this.attribute as DiscreteLegendAttrs).pager as LegendScrollbarAttributes).roamScroll) {\n const THROTTLE_TIME = 50;\n // preventDefault不能和throttle一起使用, 否则阻止默认事件失败\n this.addEventListener('wheel', (e: FederatedWheelEvent) => e.nativeEvent.preventDefault());\n this.addEventListener('wheel', throttle(onScroll, THROTTLE_TIME));\n }\n } else {\n this._pagerComponent.addEventListener('toPrev', onPaging);\n this._pagerComponent.addEventListener('toNext', onPaging);\n }\n }\n\n private _renderPager() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxCol = 1, maxRow = 2, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let compWidth = 0;\n let compHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n compHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n compWidth = maxWidth;\n // 水平布局,支持上下翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n contentWidth = (maxWidth as number) - comp.AABBBounds.width() - pagerSpace;\n if (contentWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n // 第一个元素不能换行\n if (contentWidth < startX + (width as number) && index > 0) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.pages = pages;\n const total = Math.ceil(pages / maxRow);\n\n this._itemContext.totalPage = total;\n\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n } else {\n compWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n compHeight = maxHeight;\n contentWidth = compWidth;\n\n // 垂直布局,支持左右翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n contentHeight = (maxHeight as number) - comp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n // 第一个元素不能换行\n if (contentHeight < startY + (height as number) && index > 0) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n // todo\n const total = Math.ceil(pages / maxCol);\n\n this._itemContext.totalPage = total;\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(defaultCurrent - 1) * (compHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(defaultCurrent - 1) * (compWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: isHorizontal ? contentWidth : compWidth,\n height: isHorizontal ? compHeight : contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._bindEventsOfPager(isHorizontal ? compHeight + spaceRow : compWidth + spaceCol, isHorizontal ? 'y' : 'x');\n\n return true;\n }\n\n private _renderScrollbar() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let contentWidth = 0;\n let contentHeight = 0;\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n contentWidth = maxWidth;\n contentHeight = this._itemHeight;\n // 水平布局,支持上下翻页\n comp = this._createScrollbar(compStyle, contentWidth);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n } else {\n contentHeight = (maxHeight as number) - renderStartY;\n contentWidth = this._itemMaxWidth;\n // 垂直布局,支持左右翻页\n comp = this._createScrollbar(compStyle, contentHeight);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n // 边界场景: 最后一项item的文字内容在倒数第二页, 但由于bounds比文字本身大一点, 触发分页, 导致最后一页是空白\n // 关联issue: https://github.com/VisActor/VChart/issues/3344\n // 解决方式:\n // - 所有的item 高度一致的时候: 按照 (itemHeight + space) * 倍数 布局\n // - item高度不一致的情况: 最后一项的的高度分到最后一页的高度 >= 1/3 才分页\n const items = itemsContainer.getChildren() as IGroup[];\n const itemsHeightArr = items.map((item: IGroup) => item.attribute.height);\n if (itemsHeightArr.length === 1 || itemsHeightArr.every(entry => entry === itemsHeightArr[0])) {\n const itemHeight = itemsHeightArr[0];\n const maxContentHeight = contentHeight;\n const pageItemsCount = Math.floor(maxContentHeight / (spaceRow + itemHeight));\n contentHeight = pageItemsCount * (spaceRow + itemHeight);\n pages = Math.ceil(items.length / pageItemsCount);\n } else {\n items.forEach((item, index) => {\n const { height } = item.attribute;\n\n const prePages = pages;\n const preStartY = startY;\n pages = Math.floor((startY + height) / contentHeight) + 1;\n startY += spaceRow + (height as number);\n if (\n prePages !== pages && // 触发分页\n index === itemsContainer.getChildren().length - 1 && //\n startY - contentHeight >= (1 / 3) * height\n ) {\n contentHeight = preStartY + height; // 保证刚好完全展示最后一项\n pages -= 1; // 不分页\n }\n });\n }\n\n this._itemContext.totalPage = pages;\n this._itemContext.pages = pages;\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n const maxOffset = this._itemsContainer.AABBBounds.width() - contentWidth;\n itemsContainer.setAttribute('x', -Math.min((defaultCurrent - 1) * (contentWidth + spaceCol), maxOffset));\n } else {\n const maxOffset = this._itemsContainer.AABBBounds.height() - contentHeight;\n itemsContainer.setAttribute('y', -Math.min((defaultCurrent - 1) * (contentHeight + spaceRow), maxOffset));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: contentWidth,\n height: contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._updatePositionOfScrollbar(contentWidth, contentHeight, renderStartY);\n\n if ((pager as LegendScrollbarAttributes).scrollMask?.visible) {\n this.renderScrollMask(clipGroup);\n }\n\n this._bindEventsOfPager(isHorizontal ? contentWidth : contentHeight, isHorizontal ? 'x' : 'y');\n return true;\n }\n\n private renderScrollMask(clipGroup: IGroup) {\n const { scrollMask = {} as LegendScrollbarAttributes['scrollMask'] } = this.attribute\n .pager as LegendScrollbarAttributes;\n const { visible = true, gradientLength = 16, gradientStops } = scrollMask;\n if (!visible || !gradientStops) {\n return;\n }\n const width = clipGroup.AABBBounds.width();\n const height = clipGroup.AABBBounds.height();\n const totalLength = this._itemContext.isHorizontal ? width : height;\n\n const startStops = gradientStops.map(stop => {\n return {\n offset: (gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n const endStops = gradientStops.map(stop => {\n return {\n offset: (totalLength - gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n\n const mask = graphicCreator.rect({\n x: 0,\n y: 0,\n width,\n height\n });\n this._scrollMask = mask;\n this._scrollMaskContext = { startStops, endStops };\n this.updateScrollMask();\n\n clipGroup.add(mask);\n }\n\n private updateScrollMask() {\n if (!this._scrollMask || !this._pagerComponent) {\n return;\n }\n\n if (!this._itemContext.isScrollbar) {\n return;\n }\n\n const [start, end] = (this._pagerComponent as ScrollBar).getScrollRange();\n const stops = [];\n if (!isNumberClose(clamp(end, 0, 1), 1)) {\n stops.push(...this._scrollMaskContext.endStops);\n }\n\n if (!isNumberClose(clamp(start, 0, 1), 0)) {\n stops.push(...this._scrollMaskContext.startStops);\n }\n\n if (stops.length) {\n if (this._itemContext.isHorizontal) {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops\n }\n });\n } else {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops\n }\n });\n }\n }\n }\n\n private _renderPagerComponent() {\n if (this._itemContext.isScrollbar) {\n this._renderScrollbar();\n } else {\n this._renderPager();\n }\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n const { selectMode = 'multiple' } = this.attribute;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus || selectMode === 'focus') {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n\n release(): void {\n super.release();\n this.removeAllEventListeners();\n }\n}\n"]}
|
package/dist/index.es.js
CHANGED
|
@@ -28448,7 +28448,7 @@ class DiscreteLegend extends LegendBase {
|
|
|
28448
28448
|
}
|
|
28449
28449
|
itemsContainer.getChildren().forEach((item, index) => {
|
|
28450
28450
|
const { width, height } = item.attribute;
|
|
28451
|
-
if (contentWidth < startX + width) {
|
|
28451
|
+
if (contentWidth < startX + width && index > 0) {
|
|
28452
28452
|
startX = 0;
|
|
28453
28453
|
startY += height + spaceRow;
|
|
28454
28454
|
pages += 1;
|
|
@@ -28481,8 +28481,8 @@ class DiscreteLegend extends LegendBase {
|
|
|
28481
28481
|
return false;
|
|
28482
28482
|
}
|
|
28483
28483
|
itemsContainer.getChildren().forEach((item, index) => {
|
|
28484
|
-
const { height } = item.attribute;
|
|
28485
|
-
if (contentHeight < startY + height) {
|
|
28484
|
+
const { width, height } = item.attribute;
|
|
28485
|
+
if (contentHeight < startY + height && index > 0) {
|
|
28486
28486
|
startY = 0;
|
|
28487
28487
|
startX += this._itemMaxWidth + spaceCol;
|
|
28488
28488
|
pages += 1;
|
|
@@ -34193,6 +34193,6 @@ TableSeriesNumber.defaultAttributes = {
|
|
|
34193
34193
|
select: true
|
|
34194
34194
|
};
|
|
34195
34195
|
|
|
34196
|
-
const version = "1.0.
|
|
34196
|
+
const version = "1.0.17";
|
|
34197
34197
|
|
|
34198
34198
|
export { AXIS_ELEMENT_NAME, AbstractComponent, ArcInfo, ArcLabel, ArcSegment, AxisStateValue, BasePlayer, Brush, CheckBox, CircleAxis, CircleAxisGrid, CircleCrosshair, ColorContinuousLegend, ContinuousPlayer, DEFAULT_ITEM_SPACE_COL, DEFAULT_ITEM_SPACE_ROW, DEFAULT_LABEL_SPACE, DEFAULT_PAGER_SPACE, DEFAULT_SHAPE_SIZE, DEFAULT_SHAPE_SPACE, DEFAULT_STATES$1 as DEFAULT_STATES, DEFAULT_TITLE_SPACE, DEFAULT_VALUE_SPACE, DataLabel, DataZoom, DataZoomActiveTag, DirectionEnum, DiscreteLegend, DiscretePlayer, EmptyTip, GroupTransition, IMarkAreaLabelPosition, IMarkCommonArcLabelPosition, IMarkLineLabelPosition, IMarkPointItemPosition, IOperateType, Indicator, LEGEND_ELEMENT_NAME, LabelBase, LegendEvent, LegendStateValue, LineAxis, LineAxisGrid, LineCrosshair, LineLabel, LinkPath, MarkArcArea, MarkArcLine, MarkArea, MarkLine, MarkPoint, Pager, PlayerEventEnum, PolygonCrosshair, PolygonSectorCrosshair, PopTip, Radio, RectCrosshair, RectLabel, SLIDER_ELEMENT_NAME, ScrollBar, SectorCrosshair, Segment, SeriesNumberCellStateValue, SeriesNumberEvent, SizeContinuousLegend, Slider, StoryLabelItem, Switch, SymbolLabel, TableSeriesNumber, Tag, Timeline, Title, Tooltip, TopZIndex, VTag, WeatherBox, alignTextInLine, angle, angleLabelOrientAttribute, angleTo, cartesianTicks, clampRadian, computeOffsetForlimit, continuousTicks, contrastAccessibilityChecker, convertDomainToTickData, createTextGraphicByType, deltaXYToAngle, fuzzyEqualNumber, getAxisBreakSymbolAttrs, getCircleLabelPosition, getCirclePoints, getCircleVerticalVector, getElMap, getHorizontalPath, getMarksByName, getNoneGroupMarksByName, getPolarAngleLabelPosition, getPolygonPath, getSizeHandlerPath, getTextAlignAttrOfVerticalDir, getTextType, getVerticalCoord, getVerticalPath, hasOverlap, htmlAttributeTransform, initTextMeasure, isInRange, isPostiveXAxis, isRichText, isVisible, labelSmartInvert, length, limitShapeInBounds, linearDiscreteTicks, loadPoptip, loadScrollbar, measureTextSize, normalize, polarAngleAxisDiscreteTicks, polarTicks, reactAttributeTransform, registerArcDataLabel, registerLineDataLabel, registerMarkArcAreaAnimate, registerMarkArcLineAnimate, registerMarkAreaAnimate, registerMarkLineAnimate, registerMarkPointAnimate, registerRectDataLabel, registerSymbolDataLabel, removeRepeatPoint, richTextAttributeTransform, scale, scrollbarModule, setPoptipTheme, smartInvertStrategy, tan2AngleToAngle, textIntersect, ticks, traverseGroup, version };
|
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
package/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"1.0.
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"1.0.17\";\n\nexport * from './core/base';\nexport * from './core/type';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './timeline';\nexport * from './interface';\nexport * from './jsx';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './empty-tip';\nexport * from './weather';\nexport * from './util';\nexport * from './switch';\nexport * from './label-item';\nexport * from './table-series-number';\n"]}
|
|
@@ -424,8 +424,8 @@ export class DiscreteLegend extends LegendBase {
|
|
|
424
424
|
!1;
|
|
425
425
|
itemsContainer.getChildren().forEach(((item, index) => {
|
|
426
426
|
const {width: width, height: height} = item.attribute;
|
|
427
|
-
contentWidth < startX + width && (startX = 0, startY += height + spaceRow,
|
|
428
|
-
index > 0 && item.setAttributes({
|
|
427
|
+
contentWidth < startX + width && index > 0 && (startX = 0, startY += height + spaceRow,
|
|
428
|
+
pages += 1), index > 0 && item.setAttributes({
|
|
429
429
|
x: startX,
|
|
430
430
|
y: startY
|
|
431
431
|
}), startX += spaceCol + width;
|
|
@@ -438,8 +438,8 @@ export class DiscreteLegend extends LegendBase {
|
|
|
438
438
|
this._innerView.add(comp), contentHeight = maxHeight - comp.AABBBounds.height() - pagerSpace - renderStartY,
|
|
439
439
|
contentHeight <= 0) return this._innerView.removeChild(comp), !1;
|
|
440
440
|
itemsContainer.getChildren().forEach(((item, index) => {
|
|
441
|
-
const {height: height} = item.attribute;
|
|
442
|
-
contentHeight < startY + height && (startY = 0, startX += this._itemMaxWidth + spaceCol,
|
|
441
|
+
const {width: width, height: height} = item.attribute;
|
|
442
|
+
contentHeight < startY + height && index > 0 && (startY = 0, startX += this._itemMaxWidth + spaceCol,
|
|
443
443
|
pages += 1), index > 0 && item.setAttributes({
|
|
444
444
|
x: startX,
|
|
445
445
|
y: startY
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/legend/discrete/discrete.ts"],"names":[],"mappings":"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","file":"discrete.js","sourcesContent":["/**\n * @description 离散图例\n * @author 章伟星\n */\nimport {\n merge,\n isEmpty,\n normalizePadding,\n get,\n isValid,\n isNil,\n isFunction,\n isArray,\n minInArray,\n throttle,\n isNumberClose,\n clamp,\n isObject\n} from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent,\n IText,\n IRichText,\n FederatedWheelEvent,\n ILinearGradient,\n IRect\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type {\n DiscreteLegendAttrs,\n LegendItem,\n LegendItemDatum,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\nimport { createTextGraphicByType } from '../../util';\nimport type { ScrollBarAttributes } from '../../scrollbar';\nimport { ScrollBar } from '../../scrollbar';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase<DiscreteLegendAttrs> {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _contentMaxHeight = 0; // 存储图例的最大的宽度 (去除 padding)\n private _pagerComponent: Pager | ScrollBar;\n private _lastActiveItem: IGroup;\n private _itemContext: {\n // 水平布局换行标识\n doWrap: boolean;\n // 存储每一列最大的宽度,用于垂直布局的换列\n maxWidthInCol: number;\n startX: number;\n startY: number;\n maxPages: number;\n pages: number;\n // 开始渲染的序号\n startIndex: number;\n items: LegendItemDatum[];\n isHorizontal: boolean;\n currentPage: number;\n totalPage: number;\n isScrollbar: boolean;\n clipContainer: IGroup;\n };\n private _scrollMask: IRect;\n private _scrollMaskContext: {\n startStops: ILinearGradient['stops'];\n endStops: ILinearGradient['stops'];\n };\n\n static defaultAttributes: Partial<DiscreteLegendAttrs> = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n render() {\n super.render();\n this._lastActiveItem = null;\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderItems() {\n const {\n item: itemAttrs = {},\n maxCol = 1,\n maxRow = 2,\n maxWidth,\n defaultSelected,\n lazyload,\n autoPage\n } = this.attribute as DiscreteLegendAttrs;\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n verticalAlign = 'middle'\n } = itemAttrs;\n\n const itemsContainer = this._itemsContainer;\n const { items: legendItems, isHorizontal, startIndex, isScrollbar } = this._itemContext;\n const maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol;\n const maxHeight = this._contentMaxHeight;\n\n let { doWrap, maxWidthInCol, startX, startY, pages } = this._itemContext;\n let item: LegendItemDatum;\n let lastItemWidth = 0;\n\n let lastLineHeight = 0;\n const lastLineItemGroup: IGroup[] = [];\n for (let index = startIndex, len = legendItems.length; index < len; index++) {\n if (lazyload && pages > this._itemContext.currentPage * maxPages) {\n break;\n }\n\n if (lazyload) {\n this._itemContext.startIndex = index + 1;\n }\n item = legendItems[index];\n\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n let isSelected = true;\n if (isArray(defaultSelected)) {\n isSelected = defaultSelected.includes(item.label);\n }\n\n const itemGroup = this._renderEachItem(item, isSelected, index, legendItems);\n\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n // 水平布局\n if (isValid(maxWidth)) {\n if (isScrollbar && autoPage) {\n // 不需要换行时\n pages = Math.ceil((startX + itemWidth) / maxWidth);\n doWrap = pages > 1;\n } else if (startX + itemWidth > maxWidth) {\n // 需要换行\n doWrap = true;\n // 避免第一个元素就超出最大宽度,额外换了一行,所以限制 startX > 0 ?\n if (startX > 0) {\n // 进行换行\n // 换行前,先将上一行的元素按照最大高度进行居中\n if (verticalAlign === 'middle' || verticalAlign === 'bottom') {\n // eslint-disable-next-line no-loop-func\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n pages += 1;\n startX = 0;\n // 应该增加的是上一行的高度 而不是当前元素高度\n startY += lastLineHeight + spaceRow;\n // 重置上一行的临时内容\n lastLineHeight = 0;\n lastLineItemGroup.length = 0;\n }\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n // 此时记录当前行的最大高度\n lastLineHeight = Math.max(lastLineHeight, itemHeight);\n lastLineItemGroup.push(itemGroup);\n } else {\n // 垂直布局\n if (isValid(maxHeight)) {\n if (isScrollbar && autoPage) {\n pages = Math.ceil((startY + itemHeight) / maxHeight);\n doWrap = pages > 1;\n } else if (maxHeight <= itemHeight) {\n // 如果最大高度小于图例项高度,说明只有一行,那么就按照图例项自己的宽度进行布局即可,不需要每列同宽\n pages += 1;\n doWrap = true;\n startY = 0;\n if (index > 0) {\n startX += lastItemWidth + spaceCol;\n }\n } else if (maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n pages += 1;\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n lastItemWidth = itemWidth;\n }\n\n if (isHorizontal && (verticalAlign === 'middle' || verticalAlign === 'bottom')) {\n // 水平布局 最后一行居中\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n this._itemContext.doWrap = doWrap;\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.maxWidthInCol = maxWidthInCol;\n this._itemContext.pages = pages;\n this._itemContext.maxPages = maxPages;\n\n if (isScrollbar) {\n this._itemContext.totalPage = pages;\n }\n\n if (!lazyload) {\n this._itemContext.startIndex = legendItems.length;\n }\n\n return this._itemContext;\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxWidth, maxHeight } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n this._contentMaxHeight = Math.max(0, maxHeight - this._parsedPadding[0] - this._parsedPadding[2]);\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const { maxWidth: maxItemWidth, width: itemWidth, height: itemHeight } = item;\n\n const widthsOptions = [];\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n widthsOptions.push(maxItemWidth);\n }\n if (isValid(itemWidth)) {\n widthsOptions.push(itemWidth);\n }\n\n if (widthsOptions.length) {\n if (isValid(maxWidth)) {\n widthsOptions.push(maxWidth);\n }\n this._itemWidthByUser = minInArray(widthsOptions);\n }\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n const pager = this.attribute.pager;\n this._itemContext = {\n currentPage: pager ? pager.defaultCurrent || 1 : 1,\n doWrap: false,\n maxWidthInCol: 0,\n maxPages: 1,\n pages: 1,\n startX: 0,\n startY: 0,\n startIndex: 0,\n items: legendItems,\n isHorizontal,\n totalPage: Infinity,\n isScrollbar: pager && (pager as LegendScrollbarAttributes).type === 'scrollbar',\n clipContainer: undefined\n };\n\n this._itemContext = this._renderItems();\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (this._itemContext.doWrap && autoPage && this._itemContext.pages > this._itemContext.maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPagerComponent();\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n\n if (hover) {\n let trigger = 'pointermove';\n let triggerOff = 'pointerleave';\n\n if (isObject(hover)) {\n hover.trigger && (trigger = hover.trigger);\n hover.triggerOff && (triggerOff = hover.triggerOff);\n }\n\n this._itemsContainer.addEventListener(trigger, this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener(triggerOff, this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n let trigger = 'pointerdown';\n if (isObject(select) && select.trigger) {\n trigger = select.trigger;\n }\n this._itemsContainer.addEventListener(trigger, this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _autoEllipsis(\n autoEllipsisStrategy: 'labelFirst' | 'valueFirst' | 'none',\n layoutWidth: number,\n labelShape: IText | IRichText,\n valueShape: IText | IRichText\n ) {\n const { label: labelAttr, value: valueAttr } = this.attribute.item as LegendItem;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n let useWidthRatio = false;\n\n if (autoEllipsisStrategy === 'labelFirst') {\n if (labelWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n } else if (autoEllipsisStrategy === 'valueFirst') {\n if (valueWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n }\n } else if (valueWidth + labelWidth > layoutWidth) {\n useWidthRatio = true;\n }\n\n if (useWidthRatio) {\n valueShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (labelAttr.widthRatio ?? 0.5), layoutWidth - labelWidth)\n );\n labelShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (valueAttr.widthRatio ?? 0.5), layoutWidth - valueWidth)\n );\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle, align, autoEllipsisStrategy } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape: IGraphic;\n let focusSpace = 0;\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n boundsPadding: parsedPadding,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise'\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n const text = labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label;\n const labelAttributes = {\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text,\n _originText: labelAttr.formatMethod ? label : undefined\n };\n\n const labelShape = createTextGraphicByType(labelAttributes);\n\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueText = valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value;\n const valueAttributes = {\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueText,\n _originText: valueAttr.formatMethod ? value : undefined\n };\n\n const valueShape = createTextGraphicByType(valueAttributes);\n\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n\n this._autoEllipsis(autoEllipsisStrategy, layoutWidth, labelShape, valueShape);\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n focusStartX = valueSpace + (valueShape.AABBBounds.empty() ? 0 : valueShape.AABBBounds.x2);\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n } else {\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n\n if (align === 'right') {\n const x2 = innerGroupBounds.x2;\n const x1 = innerGroupBounds.x1;\n innerGroup.forEachChildren((child: IGraphic, index: number) => {\n if (\n (child.type !== 'symbol' && (child as IText).attribute.textAlign !== 'right') ||\n child === (focusShape as unknown as IGraphic)\n ) {\n child.setAttribute('x', x1 + x2 - child.attribute.x - child.AABBBounds.width());\n } else if (child.type !== 'symbol') {\n (child as IText).setAttributes({ x: x1 + x2 - child.attribute.x, textAlign: 'left' });\n } else {\n child.setAttribute('x', x1 + x2 - child.attribute.x);\n }\n });\n }\n\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n focusShape && focusShape.setAttribute('visible', false);\n\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _createPager(compStyle: LegendPagerAttributes | LegendScrollbarAttributes) {\n const { disableTriggerEvent, maxRow } = this.attribute;\n const estimateTotal = (num: number) => {\n if (num <= 99) {\n return 99;\n } else if (num <= 999) {\n return 999;\n }\n return 9999;\n };\n return this._itemContext.isHorizontal\n ? new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: estimateTotal(this._itemContext.pages),\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n compStyle as LegendPagerAttributes\n ),\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n disableTriggerEvent\n })\n : new Pager({\n layout: 'horizontal',\n total: estimateTotal(this._itemContext.pages), // 用于估算,\n disableTriggerEvent,\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n ...(compStyle as LegendPagerAttributes)\n });\n }\n\n private _createScrollbar(compStyle: LegendPagerAttributes | LegendScrollbarAttributes, compSize: number) {\n const { disableTriggerEvent } = this.attribute;\n\n return this._itemContext.isHorizontal\n ? new ScrollBar({\n direction: 'horizontal',\n disableTriggerEvent,\n range: [0, 0.5],\n height: compStyle.visible === false ? 0 : 12,\n ...(compStyle as LegendScrollbarAttributes),\n width: compSize\n })\n : new ScrollBar({\n direction: 'vertical',\n width: compStyle.visible === false ? 0 : 12,\n range: [0, 0.5],\n ...(compStyle as LegendScrollbarAttributes),\n height: compSize,\n disableTriggerEvent\n });\n }\n\n private _updatePositionOfPager(renderStartY: number, compWidth: number, compHeight: number) {\n const { pager } = this.attribute;\n const { totalPage, isHorizontal } = this._itemContext;\n const position = (pager && (pager as LegendPagerAttributes).position) || 'middle';\n (this._pagerComponent as Pager).setTotal(totalPage);\n\n if (isHorizontal) {\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + compHeight - this._pagerComponent.AABBBounds.height() / 2;\n } else {\n y = renderStartY + compHeight / 2 - this._pagerComponent.AABBBounds.height() / 2;\n }\n this._pagerComponent.setAttributes({\n x: compWidth - this._pagerComponent.AABBBounds.width(),\n y\n });\n } else {\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = compWidth - this._pagerComponent.AABBBounds.width();\n } else {\n x = (compWidth - this._pagerComponent.AABBBounds.width()) / 2;\n }\n this._pagerComponent.setAttributes({\n x,\n y: compHeight - this._pagerComponent.AABBBounds.height()\n });\n }\n }\n\n private _computeScrollbarDelta() {\n const { isHorizontal, clipContainer } = this._itemContext;\n const itemContainerBounds = this._itemsContainer.AABBBounds;\n const clipContainerBounds = clipContainer.AABBBounds;\n\n let delta;\n let innerViewSize;\n\n if (isHorizontal) {\n innerViewSize = clipContainerBounds.width();\n delta = innerViewSize / itemContainerBounds.width();\n } else {\n innerViewSize = clipContainerBounds.height();\n delta = innerViewSize / itemContainerBounds.height();\n }\n return delta;\n }\n\n private _updatePositionOfScrollbar(contentWidth: number, contentHeight: number, renderStartY: number) {\n const { isHorizontal, currentPage, totalPage } = this._itemContext;\n\n const start = (currentPage - 1) / totalPage;\n\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + this._computeScrollbarDelta()]);\n\n if (isHorizontal) {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: 0,\n y: renderStartY + contentHeight\n });\n } else {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: contentWidth,\n y: renderStartY\n });\n }\n }\n\n private _bindEventsOfPager(pageSize: number, channel: 'x' | 'y') {\n const pager = this.attribute.pager || {};\n const { animation = true, animationDuration = 450, animationEasing = 'quadIn' } = pager;\n const pageParser = this._itemContext.isScrollbar\n ? (e: CustomEvent) => {\n const { value } = e.detail;\n let newPage;\n // page 信息不再用于 scroll 窗口的位置更新\n // scrollbar 模式,记录 newPage 用于开启 lazyLoad 的场景\n if (value[0] === 0) {\n newPage = 1;\n } else if (value[1] === 1) {\n newPage = this._itemContext.totalPage;\n } else {\n newPage = value[0] * this._itemContext.totalPage + 1;\n }\n\n return newPage;\n }\n : (e: CustomEvent) => {\n return e.detail.current;\n };\n\n const onScroll = (e: FederatedWheelEvent) => {\n const scrollComponent = this._pagerComponent as ScrollBar;\n const preScrollRange = scrollComponent.getScrollRange();\n const { direction } = scrollComponent.attribute as ScrollBarAttributes;\n const { width, height } = scrollComponent.getSliderRenderBounds();\n const currentScrollValue = direction === 'vertical' ? e.deltaY / height : e.deltaX / width;\n scrollComponent.setScrollRange(\n [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue],\n true\n );\n\n this.updateScrollMask();\n };\n\n const onPaging = (e: CustomEvent) => {\n const newPage = pageParser(e);\n\n if (newPage === this._itemContext.currentPage) {\n return;\n }\n\n this._itemContext.currentPage = newPage;\n\n if (this._itemContext && this._itemContext.startIndex < this._itemContext.items.length) {\n this._renderItems();\n\n const newTotalPage = Math.ceil(this._itemContext.pages / this._itemContext.maxPages);\n // 更新总页数\n this._itemContext.totalPage = newTotalPage;\n // 更新 scrollbar 的范围\n if (this._itemContext.isScrollbar && this._pagerComponent) {\n const newDelta = this._computeScrollbarDelta();\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + newDelta]);\n }\n }\n\n if (!this._itemContext.isScrollbar) {\n if (animation) {\n (this._itemsContainer as IGroup)\n .animate()\n .to({ [channel]: -(newPage - 1) * pageSize }, animationDuration, animationEasing);\n } else {\n (this._itemsContainer as IGroup).setAttribute(channel, -(newPage - 1) * pageSize);\n }\n } else {\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n let containerSize;\n if (this._itemContext.isHorizontal) {\n containerSize = this._itemsContainer.AABBBounds.width();\n } else {\n containerSize = this._itemsContainer.AABBBounds.height();\n }\n\n const startOffset = containerSize * start;\n this.updateScrollMask();\n\n if (animation) {\n this._itemsContainer.animate().to({ [channel]: -startOffset }, animationDuration, animationEasing);\n } else {\n this._itemsContainer.setAttribute(channel, -startOffset);\n }\n }\n };\n if (this._itemContext.isScrollbar) {\n this._pagerComponent.addEventListener('scrollDrag', onPaging);\n this._pagerComponent.addEventListener('scrollUp', onPaging);\n if (((this.attribute as DiscreteLegendAttrs).pager as LegendScrollbarAttributes).roamScroll) {\n const THROTTLE_TIME = 50;\n // preventDefault不能和throttle一起使用, 否则阻止默认事件失败\n this.addEventListener('wheel', (e: FederatedWheelEvent) => e.nativeEvent.preventDefault());\n this.addEventListener('wheel', throttle(onScroll, THROTTLE_TIME));\n }\n } else {\n this._pagerComponent.addEventListener('toPrev', onPaging);\n this._pagerComponent.addEventListener('toNext', onPaging);\n }\n }\n\n private _renderPager() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxCol = 1, maxRow = 2, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let compWidth = 0;\n let compHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n compHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n compWidth = maxWidth;\n // 水平布局,支持上下翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n contentWidth = (maxWidth as number) - comp.AABBBounds.width() - pagerSpace;\n if (contentWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n if (contentWidth < startX + (width as number)) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.pages = pages;\n const total = Math.ceil(pages / maxRow);\n\n this._itemContext.totalPage = total;\n\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n } else {\n compWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n compHeight = maxHeight;\n contentWidth = compWidth;\n\n // 垂直布局,支持左右翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n contentHeight = (maxHeight as number) - comp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { height } = item.attribute;\n if (contentHeight < startY + (height as number)) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n // todo\n const total = Math.ceil(pages / maxCol);\n\n this._itemContext.totalPage = total;\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(defaultCurrent - 1) * (compHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(defaultCurrent - 1) * (compWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: isHorizontal ? contentWidth : compWidth,\n height: isHorizontal ? compHeight : contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._bindEventsOfPager(isHorizontal ? compHeight + spaceRow : compWidth + spaceCol, isHorizontal ? 'y' : 'x');\n\n return true;\n }\n\n private _renderScrollbar() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let contentWidth = 0;\n let contentHeight = 0;\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n contentWidth = maxWidth;\n contentHeight = this._itemHeight;\n // 水平布局,支持上下翻页\n comp = this._createScrollbar(compStyle, contentWidth);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n } else {\n contentHeight = (maxHeight as number) - renderStartY;\n contentWidth = this._itemMaxWidth;\n // 垂直布局,支持左右翻页\n comp = this._createScrollbar(compStyle, contentHeight);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n // 边界场景: 最后一项item的文字内容在倒数第二页, 但由于bounds比文字本身大一点, 触发分页, 导致最后一页是空白\n // 关联issue: https://github.com/VisActor/VChart/issues/3344\n // 解决方式:\n // - 所有的item 高度一致的时候: 按照 (itemHeight + space) * 倍数 布局\n // - item高度不一致的情况: 最后一项的的高度分到最后一页的高度 >= 1/3 才分页\n const items = itemsContainer.getChildren() as IGroup[];\n const itemsHeightArr = items.map((item: IGroup) => item.attribute.height);\n if (itemsHeightArr.length === 1 || itemsHeightArr.every(entry => entry === itemsHeightArr[0])) {\n const itemHeight = itemsHeightArr[0];\n const maxContentHeight = contentHeight;\n const pageItemsCount = Math.floor(maxContentHeight / (spaceRow + itemHeight));\n contentHeight = pageItemsCount * (spaceRow + itemHeight);\n pages = Math.ceil(items.length / pageItemsCount);\n } else {\n items.forEach((item, index) => {\n const { height } = item.attribute;\n\n const prePages = pages;\n const preStartY = startY;\n pages = Math.floor((startY + height) / contentHeight) + 1;\n startY += spaceRow + (height as number);\n if (\n prePages !== pages && // 触发分页\n index === itemsContainer.getChildren().length - 1 && //\n startY - contentHeight >= (1 / 3) * height\n ) {\n contentHeight = preStartY + height; // 保证刚好完全展示最后一项\n pages -= 1; // 不分页\n }\n });\n }\n\n this._itemContext.totalPage = pages;\n this._itemContext.pages = pages;\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n const maxOffset = this._itemsContainer.AABBBounds.width() - contentWidth;\n itemsContainer.setAttribute('x', -Math.min((defaultCurrent - 1) * (contentWidth + spaceCol), maxOffset));\n } else {\n const maxOffset = this._itemsContainer.AABBBounds.height() - contentHeight;\n itemsContainer.setAttribute('y', -Math.min((defaultCurrent - 1) * (contentHeight + spaceRow), maxOffset));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: contentWidth,\n height: contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._updatePositionOfScrollbar(contentWidth, contentHeight, renderStartY);\n\n if ((pager as LegendScrollbarAttributes).scrollMask?.visible) {\n this.renderScrollMask(clipGroup);\n }\n\n this._bindEventsOfPager(isHorizontal ? contentWidth : contentHeight, isHorizontal ? 'x' : 'y');\n return true;\n }\n\n private renderScrollMask(clipGroup: IGroup) {\n const { scrollMask = {} as LegendScrollbarAttributes['scrollMask'] } = this.attribute\n .pager as LegendScrollbarAttributes;\n const { visible = true, gradientLength = 16, gradientStops } = scrollMask;\n if (!visible || !gradientStops) {\n return;\n }\n const width = clipGroup.AABBBounds.width();\n const height = clipGroup.AABBBounds.height();\n const totalLength = this._itemContext.isHorizontal ? width : height;\n\n const startStops = gradientStops.map(stop => {\n return {\n offset: (gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n const endStops = gradientStops.map(stop => {\n return {\n offset: (totalLength - gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n\n const mask = graphicCreator.rect({\n x: 0,\n y: 0,\n width,\n height\n });\n this._scrollMask = mask;\n this._scrollMaskContext = { startStops, endStops };\n this.updateScrollMask();\n\n clipGroup.add(mask);\n }\n\n private updateScrollMask() {\n if (!this._scrollMask || !this._pagerComponent) {\n return;\n }\n\n if (!this._itemContext.isScrollbar) {\n return;\n }\n\n const [start, end] = (this._pagerComponent as ScrollBar).getScrollRange();\n const stops = [];\n if (!isNumberClose(clamp(end, 0, 1), 1)) {\n stops.push(...this._scrollMaskContext.endStops);\n }\n\n if (!isNumberClose(clamp(start, 0, 1), 0)) {\n stops.push(...this._scrollMaskContext.startStops);\n }\n\n if (stops.length) {\n if (this._itemContext.isHorizontal) {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops\n }\n });\n } else {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops\n }\n });\n }\n }\n }\n\n private _renderPagerComponent() {\n if (this._itemContext.isScrollbar) {\n this._renderScrollbar();\n } else {\n this._renderPager();\n }\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n const { selectMode = 'multiple' } = this.attribute;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus || selectMode === 'focus') {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n\n release(): void {\n super.release();\n this.removeAllEventListeners();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/legend/discrete/discrete.ts"],"names":[],"mappings":"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","file":"discrete.js","sourcesContent":["/**\n * @description 离散图例\n * @author 章伟星\n */\nimport {\n merge,\n isEmpty,\n normalizePadding,\n get,\n isValid,\n isNil,\n isFunction,\n isArray,\n minInArray,\n throttle,\n isNumberClose,\n clamp,\n isObject\n} from '@visactor/vutils';\nimport type {\n FederatedPointerEvent,\n IGroup,\n IGraphic,\n INode,\n IGroupGraphicAttribute,\n ISymbolGraphicAttribute,\n ITextGraphicAttribute,\n CustomEvent,\n IText,\n IRichText,\n FederatedWheelEvent,\n ILinearGradient,\n IRect\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport { LegendBase } from '../base';\nimport { Pager } from '../../pager';\nimport {\n DEFAULT_TITLE_SPACE,\n DEFAULT_ITEM_SPACE_COL,\n DEFAULT_ITEM_SPACE_ROW,\n DEFAULT_SHAPE_SPACE,\n DEFAULT_SHAPE_SIZE,\n DEFAULT_LABEL_SPACE,\n DEFAULT_PAGER_SPACE,\n LegendStateValue,\n DEFAULT_VALUE_SPACE,\n LegendEvent,\n LEGEND_ELEMENT_NAME\n} from '../constant';\nimport type {\n DiscreteLegendAttrs,\n LegendItem,\n LegendItemDatum,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from './type';\nimport type { ComponentOptions } from '../../interface';\nimport { loadDiscreteLegendComponent } from '../register';\nimport { createTextGraphicByType } from '../../util';\nimport type { ScrollBarAttributes } from '../../scrollbar';\nimport { ScrollBar } from '../../scrollbar';\n\nconst DEFAULT_STATES = {\n [LegendStateValue.focus]: {},\n [LegendStateValue.selected]: {},\n [LegendStateValue.selectedHover]: {},\n [LegendStateValue.unSelected]: {},\n [LegendStateValue.unSelectedHover]: {}\n};\n\nloadDiscreteLegendComponent();\nexport class DiscreteLegend extends LegendBase<DiscreteLegendAttrs> {\n name = 'discreteLegend';\n\n private _itemsContainer: IGroup | null = null;\n private _itemWidthByUser: number | undefined;\n private _itemHeightByUser: number | undefined = undefined;\n private _itemHeight = 0; // 存储每一个图例项的高度\n private _itemMaxWidth = 0; // 存储图例项的最大的宽度\n private _contentMaxHeight = 0; // 存储图例的最大的宽度 (去除 padding)\n private _pagerComponent: Pager | ScrollBar;\n private _lastActiveItem: IGroup;\n private _itemContext: {\n // 水平布局换行标识\n doWrap: boolean;\n // 存储每一列最大的宽度,用于垂直布局的换列\n maxWidthInCol: number;\n startX: number;\n startY: number;\n maxPages: number;\n pages: number;\n // 开始渲染的序号\n startIndex: number;\n items: LegendItemDatum[];\n isHorizontal: boolean;\n currentPage: number;\n totalPage: number;\n isScrollbar: boolean;\n clipContainer: IGroup;\n };\n private _scrollMask: IRect;\n private _scrollMaskContext: {\n startStops: ILinearGradient['stops'];\n endStops: ILinearGradient['stops'];\n };\n\n static defaultAttributes: Partial<DiscreteLegendAttrs> = {\n layout: 'horizontal',\n title: {\n align: 'start',\n space: DEFAULT_TITLE_SPACE,\n textStyle: {\n fontSize: 12,\n fontWeight: 'bold',\n fill: '#2C3542'\n }\n },\n item: {\n spaceCol: DEFAULT_ITEM_SPACE_COL,\n spaceRow: DEFAULT_ITEM_SPACE_ROW,\n shape: {\n space: DEFAULT_SHAPE_SPACE,\n style: {\n size: DEFAULT_SHAPE_SIZE,\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n opacity: 0.5\n }\n }\n },\n label: {\n space: DEFAULT_LABEL_SPACE,\n style: {\n fontSize: 12,\n fill: '#2C3542',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n value: {\n alignRight: false,\n style: {\n fontSize: 12,\n fill: '#ccc',\n cursor: 'pointer'\n },\n state: {\n selectedHover: {\n opacity: 0.85\n },\n unSelected: {\n fill: '#D8D8D8'\n }\n }\n },\n background: {\n style: {\n cursor: 'pointer'\n }\n },\n focus: false,\n focusIconStyle: {\n size: DEFAULT_SHAPE_SIZE,\n symbolType:\n 'M8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1ZM8.75044 2.55077L8.75 3.75H7.25L7.25006 2.5507C4.81247 2.88304 2.88304 4.81247 2.5507 7.25006L3.75 7.25V8.75L2.55077 8.75044C2.8833 11.1878 4.81264 13.117 7.25006 13.4493L7.25 12.25H8.75L8.75044 13.4492C11.1876 13.1167 13.1167 11.1876 13.4492 8.75044L12.25 8.75V7.25L13.4493 7.25006C13.117 4.81264 11.1878 2.8833 8.75044 2.55077ZM8 5.5C9.38071 5.5 10.5 6.61929 10.5 8C10.5 9.38071 9.38071 10.5 8 10.5C6.61929 10.5 5.5 9.38071 5.5 8C5.5 6.61929 6.61929 5.5 8 5.5ZM8 7C7.44772 7 7 7.44772 7 8C7 8.55228 7.44772 9 8 9C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7Z',\n fill: '#333',\n cursor: 'pointer'\n }\n },\n autoPage: true,\n pager: {\n space: DEFAULT_PAGER_SPACE,\n handler: {\n style: { size: 10 },\n space: 4\n }\n },\n hover: true,\n select: true,\n selectMode: 'multiple',\n allowAllCanceled: true\n };\n\n constructor(attributes: DiscreteLegendAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, DiscreteLegend.defaultAttributes, attributes));\n }\n\n render() {\n super.render();\n this._lastActiveItem = null;\n }\n\n /**\n * 更新选中数据\n * @param value 选中数据范围\n * @returns\n */\n setSelected(selectedData: (string | number)[]) {\n (this._itemsContainer?.getChildren() as IGroup[]).forEach(item => {\n // @ts-ignore\n const itemData = item.data as LegendItemDatum;\n if (selectedData.includes(itemData.label)) {\n this._setLegendItemState(item, LegendStateValue.selected);\n this._removeLegendItemState(item, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover]);\n } else {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(item, [LegendStateValue.selected, LegendStateValue.selectedHover]);\n this._setLegendItemState(item, LegendStateValue.unSelected);\n }\n });\n }\n\n protected _renderItems() {\n const {\n item: itemAttrs = {},\n maxCol = 1,\n maxRow = 2,\n maxWidth,\n defaultSelected,\n lazyload,\n autoPage\n } = this.attribute as DiscreteLegendAttrs;\n const {\n spaceCol = DEFAULT_ITEM_SPACE_COL,\n spaceRow = DEFAULT_ITEM_SPACE_ROW,\n verticalAlign = 'middle'\n } = itemAttrs;\n\n const itemsContainer = this._itemsContainer;\n const { items: legendItems, isHorizontal, startIndex, isScrollbar } = this._itemContext;\n const maxPages = isScrollbar ? 1 : isHorizontal ? maxRow : maxCol;\n const maxHeight = this._contentMaxHeight;\n\n let { doWrap, maxWidthInCol, startX, startY, pages } = this._itemContext;\n let item: LegendItemDatum;\n let lastItemWidth = 0;\n\n let lastLineHeight = 0;\n const lastLineItemGroup: IGroup[] = [];\n for (let index = startIndex, len = legendItems.length; index < len; index++) {\n if (lazyload && pages > this._itemContext.currentPage * maxPages) {\n break;\n }\n\n if (lazyload) {\n this._itemContext.startIndex = index + 1;\n }\n item = legendItems[index];\n\n if (!item.id) {\n item.id = item.label; // 如果没有设置 id,默认使用 label\n }\n item.index = index; // 用于维护图例的顺序\n\n let isSelected = true;\n if (isArray(defaultSelected)) {\n isSelected = defaultSelected.includes(item.label);\n }\n\n const itemGroup = this._renderEachItem(item, isSelected, index, legendItems);\n\n const itemWidth = itemGroup.attribute.width;\n const itemHeight = itemGroup.attribute.height;\n this._itemHeight = Math.max(this._itemHeight, itemHeight);\n maxWidthInCol = Math.max(itemWidth, maxWidthInCol);\n this._itemMaxWidth = Math.max(itemWidth, this._itemMaxWidth);\n\n if (isHorizontal) {\n // 水平布局\n if (isValid(maxWidth)) {\n if (isScrollbar && autoPage) {\n // 不需要换行时\n pages = Math.ceil((startX + itemWidth) / maxWidth);\n doWrap = pages > 1;\n } else if (startX + itemWidth > maxWidth) {\n // 需要换行\n doWrap = true;\n // 避免第一个元素就超出最大宽度,额外换了一行,所以限制 startX > 0 ?\n if (startX > 0) {\n // 进行换行\n // 换行前,先将上一行的元素按照最大高度进行居中\n if (verticalAlign === 'middle' || verticalAlign === 'bottom') {\n // eslint-disable-next-line no-loop-func\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n pages += 1;\n startX = 0;\n // 应该增加的是上一行的高度 而不是当前元素高度\n startY += lastLineHeight + spaceRow;\n // 重置上一行的临时内容\n lastLineHeight = 0;\n lastLineItemGroup.length = 0;\n }\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + itemWidth;\n // 此时记录当前行的最大高度\n lastLineHeight = Math.max(lastLineHeight, itemHeight);\n lastLineItemGroup.push(itemGroup);\n } else {\n // 垂直布局\n if (isValid(maxHeight)) {\n if (isScrollbar && autoPage) {\n pages = Math.ceil((startY + itemHeight) / maxHeight);\n doWrap = pages > 1;\n } else if (maxHeight <= itemHeight) {\n // 如果最大高度小于图例项高度,说明只有一行,那么就按照图例项自己的宽度进行布局即可,不需要每列同宽\n pages += 1;\n doWrap = true;\n startY = 0;\n if (index > 0) {\n startX += lastItemWidth + spaceCol;\n }\n } else if (maxHeight < startY + itemHeight) {\n // 检测是否换列:如果用户声明了 maxHeight 并且超出了,则进行换列\n pages += 1;\n doWrap = true;\n startY = 0;\n startX += maxWidthInCol + spaceCol;\n maxWidthInCol = 0;\n }\n }\n if (startX !== 0 || startY !== 0) {\n itemGroup.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + itemHeight;\n }\n\n itemsContainer.add(itemGroup);\n lastItemWidth = itemWidth;\n }\n\n if (isHorizontal && (verticalAlign === 'middle' || verticalAlign === 'bottom')) {\n // 水平布局 最后一行居中\n lastLineItemGroup.forEach(i => {\n i.setAttributes({\n y: i.attribute.y + (lastLineHeight - i.attribute.height) / (verticalAlign === 'middle' ? 2 : 1)\n });\n });\n }\n\n this._itemContext.doWrap = doWrap;\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.maxWidthInCol = maxWidthInCol;\n this._itemContext.pages = pages;\n this._itemContext.maxPages = maxPages;\n\n if (isScrollbar) {\n this._itemContext.totalPage = pages;\n }\n\n if (!lazyload) {\n this._itemContext.startIndex = legendItems.length;\n }\n\n return this._itemContext;\n }\n\n protected _renderContent() {\n const { item = {}, items, reversed, maxWidth, maxHeight } = this.attribute as DiscreteLegendAttrs;\n if (item.visible === false || isEmpty(items)) {\n return;\n }\n\n let legendItems = items;\n if (reversed) {\n legendItems = items?.reverse();\n }\n\n this._contentMaxHeight = Math.max(0, maxHeight - this._parsedPadding[0] - this._parsedPadding[2]);\n\n const itemsContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n this._itemsContainer = itemsContainer;\n\n const { layout, autoPage } = this.attribute;\n const isHorizontal = layout === 'horizontal';\n\n const { maxWidth: maxItemWidth, width: itemWidth, height: itemHeight } = item;\n\n const widthsOptions = [];\n // 根据用户声明的 maxItemWidth 和 itemWidth 获取图例项宽度\n if (isValid(maxItemWidth)) {\n widthsOptions.push(maxItemWidth);\n }\n if (isValid(itemWidth)) {\n widthsOptions.push(itemWidth);\n }\n\n if (widthsOptions.length) {\n if (isValid(maxWidth)) {\n widthsOptions.push(maxWidth);\n }\n this._itemWidthByUser = minInArray(widthsOptions);\n }\n // 存储用户指定图例项高度\n if (isValid(itemHeight)) {\n this._itemHeightByUser = itemHeight;\n }\n const pager = this.attribute.pager;\n this._itemContext = {\n currentPage: pager ? pager.defaultCurrent || 1 : 1,\n doWrap: false,\n maxWidthInCol: 0,\n maxPages: 1,\n pages: 1,\n startX: 0,\n startY: 0,\n startIndex: 0,\n items: legendItems,\n isHorizontal,\n totalPage: Infinity,\n isScrollbar: pager && (pager as LegendScrollbarAttributes).type === 'scrollbar',\n clipContainer: undefined\n };\n\n this._itemContext = this._renderItems();\n // TODO: 添加测试用例\n let pagerRendered = false;\n if (this._itemContext.doWrap && autoPage && this._itemContext.pages > this._itemContext.maxPages) {\n // 进行分页处理\n pagerRendered = this._renderPagerComponent();\n }\n\n if (!pagerRendered) {\n itemsContainer.setAttribute(\n 'y',\n this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0\n );\n this._innerView.add(itemsContainer);\n }\n }\n\n protected _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!this._itemsContainer) {\n return;\n }\n\n const { hover = true, select = true } = this.attribute;\n\n if (hover) {\n let trigger = 'pointermove';\n let triggerOff = 'pointerleave';\n\n if (isObject(hover)) {\n hover.trigger && (trigger = hover.trigger);\n hover.triggerOff && (triggerOff = hover.triggerOff);\n }\n\n this._itemsContainer.addEventListener(trigger, this._onHover as EventListenerOrEventListenerObject);\n this._itemsContainer.addEventListener(triggerOff, this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n let trigger = 'pointerdown';\n if (isObject(select) && select.trigger) {\n trigger = select.trigger;\n }\n this._itemsContainer.addEventListener(trigger, this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _autoEllipsis(\n autoEllipsisStrategy: 'labelFirst' | 'valueFirst' | 'none',\n layoutWidth: number,\n labelShape: IText | IRichText,\n valueShape: IText | IRichText\n ) {\n const { label: labelAttr, value: valueAttr } = this.attribute.item as LegendItem;\n const valueBounds = valueShape.AABBBounds;\n const labelBounds = labelShape.AABBBounds;\n const valueWidth = valueBounds.width();\n const labelWidth = labelBounds.width();\n let useWidthRatio = false;\n\n if (autoEllipsisStrategy === 'labelFirst') {\n if (labelWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n valueShape.setAttribute('maxLineWidth', layoutWidth - labelWidth);\n }\n } else if (autoEllipsisStrategy === 'valueFirst') {\n if (valueWidth > layoutWidth) {\n useWidthRatio = true;\n } else {\n labelShape.setAttribute('maxLineWidth', layoutWidth - valueWidth);\n }\n } else if (valueWidth + labelWidth > layoutWidth) {\n useWidthRatio = true;\n }\n\n if (useWidthRatio) {\n valueShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (labelAttr.widthRatio ?? 0.5), layoutWidth - labelWidth)\n );\n labelShape.setAttribute(\n 'maxLineWidth',\n Math.max(layoutWidth * (valueAttr.widthRatio ?? 0.5), layoutWidth - valueWidth)\n );\n }\n }\n\n private _renderEachItem(item: LegendItemDatum, isSelected: boolean, index: number, items: LegendItemDatum[]) {\n const { id, label, value, shape } = item;\n const { padding = 0, focus, focusIconStyle, align, autoEllipsisStrategy } = this.attribute.item as LegendItem;\n\n const { shape: shapeAttr, label: labelAttr, value: valueAttr, background } = this.attribute.item as LegendItem;\n\n const shapeStyle = this._handleStyle(shapeAttr, item, isSelected, index, items);\n const labelStyle = this._handleStyle(labelAttr, item, isSelected, index, items);\n const valueStyle = this._handleStyle(valueAttr, item, isSelected, index, items);\n const backgroundStyle = this._handleStyle(background, item, isSelected, index, items);\n\n const parsedPadding = normalizePadding(padding);\n\n let itemGroup;\n if (background.visible === false) {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n cursor: (backgroundStyle.style as IGroupGraphicAttribute)?.cursor\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup);\n } else {\n itemGroup = graphicCreator.group({\n x: 0,\n y: 0,\n ...backgroundStyle.style\n });\n this._appendDataToShape(itemGroup, LEGEND_ELEMENT_NAME.item, item, itemGroup, backgroundStyle.state);\n }\n itemGroup.id = `${id ?? label}-${index}`;\n\n itemGroup.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n const innerGroup = graphicCreator.group({\n x: 0,\n y: 0,\n pickable: false\n });\n itemGroup.add(innerGroup);\n\n let focusStartX = 0;\n let shapeSize = 0;\n let shapeSpace = 0;\n if (shapeAttr && shapeAttr.visible !== false) {\n const s = get(shapeStyle, 'style.size', DEFAULT_SHAPE_SIZE);\n if (isArray(s)) {\n shapeSize = s[0] || 0;\n } else {\n shapeSize = s;\n }\n shapeSpace = get(shapeAttr, 'space', DEFAULT_SHAPE_SPACE);\n const itemShape = graphicCreator.symbol({\n x: 0,\n y: 0,\n symbolType: 'circle',\n strokeBoundsBuffer: 0,\n ...shape,\n ...shapeStyle.style\n });\n // 处理下 shape 的 fill stroke\n Object.keys(shapeStyle.state || {}).forEach(key => {\n const color =\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill ||\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke;\n if (shape.fill && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).fill) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).fill = color as string;\n }\n\n if (shape.stroke && isNil((shapeStyle.state[key] as ISymbolGraphicAttribute).stroke) && color) {\n (shapeStyle.state[key] as ISymbolGraphicAttribute).stroke = color as string;\n }\n });\n this._appendDataToShape(itemShape, LEGEND_ELEMENT_NAME.itemShape, item, itemGroup, shapeStyle.state);\n\n itemShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(itemShape);\n }\n\n let focusShape: IGraphic;\n let focusSpace = 0;\n if (focus) {\n const focusSize = get(focusIconStyle, 'size', DEFAULT_SHAPE_SIZE);\n // 绘制聚焦按钮\n focusShape = graphicCreator.symbol({\n x: 0,\n y: -focusSize / 2 - 1,\n strokeBoundsBuffer: 0,\n boundsPadding: parsedPadding,\n ...focusIconStyle,\n visible: true,\n pickMode: 'imprecise'\n });\n this._appendDataToShape(focusShape, LEGEND_ELEMENT_NAME.focus, item, itemGroup);\n\n focusSpace = focusSize;\n }\n const text = labelAttr.formatMethod ? labelAttr.formatMethod(label, item, index) : label;\n const labelAttributes = {\n x: shapeSize / 2 + shapeSpace,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (labelStyle.style as ITextGraphicAttribute)?.fontSize,\n ...labelStyle.style,\n text,\n _originText: labelAttr.formatMethod ? label : undefined\n };\n\n const labelShape = createTextGraphicByType(labelAttributes);\n\n this._appendDataToShape(labelShape, LEGEND_ELEMENT_NAME.itemLabel, item, itemGroup, labelStyle.state);\n labelShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n innerGroup.add(labelShape);\n const labelSpace = get(labelAttr, 'space', DEFAULT_LABEL_SPACE);\n if (isValid(value)) {\n const valueSpace = get(valueAttr, 'space', focus ? DEFAULT_VALUE_SPACE : 0);\n const valueText = valueAttr.formatMethod ? valueAttr.formatMethod(value, item, index) : value;\n const valueAttributes = {\n x: 0,\n y: 0,\n textAlign: 'start',\n textBaseline: 'middle',\n lineHeight: (valueStyle.style as ITextGraphicAttribute).fontSize,\n ...valueStyle.style,\n text: valueText,\n _originText: valueAttr.formatMethod ? value : undefined\n };\n\n const valueShape = createTextGraphicByType(valueAttributes);\n\n this._appendDataToShape(valueShape, LEGEND_ELEMENT_NAME.itemValue, item, itemGroup, valueStyle.state);\n valueShape.addState(isSelected ? LegendStateValue.selected : LegendStateValue.unSelected);\n\n if (this._itemWidthByUser) {\n // 计算用来防止文本的宽度\n const layoutWidth =\n this._itemWidthByUser -\n parsedPadding[1] -\n parsedPadding[3] -\n shapeSize -\n shapeSpace -\n labelSpace -\n focusSpace -\n valueSpace;\n\n this._autoEllipsis(autoEllipsisStrategy, layoutWidth, labelShape, valueShape);\n\n if (valueAttr.alignRight) {\n valueShape.setAttributes({\n // @ts-ignore\n textAlign: 'right',\n x: this._itemWidthByUser - shapeSize / 2 - parsedPadding[1] - parsedPadding[3] - focusSpace - valueSpace\n });\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n } else {\n valueShape.setAttribute('x', labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2));\n }\n focusStartX = valueSpace + (valueShape.AABBBounds.empty() ? 0 : valueShape.AABBBounds.x2);\n\n innerGroup.add(valueShape);\n } else if (this._itemWidthByUser) {\n labelShape.setAttribute(\n 'maxLineWidth',\n this._itemWidthByUser - parsedPadding[1] - parsedPadding[3] - shapeSize - shapeSpace - focusSpace\n );\n\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n } else {\n focusStartX = labelSpace + (labelShape.AABBBounds.empty() ? 0 : labelShape.AABBBounds.x2);\n }\n\n if (focusShape) {\n focusShape.setAttribute('x', focusStartX);\n innerGroup.add(focusShape);\n }\n\n const innerGroupBounds = innerGroup.AABBBounds;\n const innerGroupWidth = innerGroupBounds.width();\n\n if (align === 'right') {\n const x2 = innerGroupBounds.x2;\n const x1 = innerGroupBounds.x1;\n innerGroup.forEachChildren((child: IGraphic, index: number) => {\n if (\n (child.type !== 'symbol' && (child as IText).attribute.textAlign !== 'right') ||\n child === (focusShape as unknown as IGraphic)\n ) {\n child.setAttribute('x', x1 + x2 - child.attribute.x - child.AABBBounds.width());\n } else if (child.type !== 'symbol') {\n (child as IText).setAttributes({ x: x1 + x2 - child.attribute.x, textAlign: 'left' });\n } else {\n child.setAttribute('x', x1 + x2 - child.attribute.x);\n }\n });\n }\n\n const innerGroupHeight = innerGroupBounds.height();\n const itemGroupWidth = isValid(this.attribute.item.width)\n ? this.attribute.item.width\n : innerGroupWidth + parsedPadding[1] + parsedPadding[3];\n const itemGroupHeight = this._itemHeightByUser || innerGroupHeight + parsedPadding[0] + parsedPadding[2];\n itemGroup.attribute.width = itemGroupWidth;\n itemGroup.attribute.height = itemGroupHeight;\n focusShape && focusShape.setAttribute('visible', false);\n\n innerGroup.translateTo(-innerGroupBounds.x1 + parsedPadding[3], -innerGroupBounds.y1 + parsedPadding[0]);\n return itemGroup;\n }\n\n private _createPager(compStyle: LegendPagerAttributes | LegendScrollbarAttributes) {\n const { disableTriggerEvent, maxRow } = this.attribute;\n const estimateTotal = (num: number) => {\n if (num <= 99) {\n return 99;\n } else if (num <= 999) {\n return 999;\n }\n return 9999;\n };\n return this._itemContext.isHorizontal\n ? new Pager({\n layout: maxRow === 1 ? 'horizontal' : 'vertical',\n total: estimateTotal(this._itemContext.pages),\n ...merge(\n {\n handler: {\n preShape: 'triangleUp',\n nextShape: 'triangleDown'\n }\n },\n compStyle as LegendPagerAttributes\n ),\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n disableTriggerEvent\n })\n : new Pager({\n layout: 'horizontal',\n total: estimateTotal(this._itemContext.pages), // 用于估算,\n disableTriggerEvent,\n defaultCurrent: this.attribute.pager?.defaultCurrent,\n ...(compStyle as LegendPagerAttributes)\n });\n }\n\n private _createScrollbar(compStyle: LegendPagerAttributes | LegendScrollbarAttributes, compSize: number) {\n const { disableTriggerEvent } = this.attribute;\n\n return this._itemContext.isHorizontal\n ? new ScrollBar({\n direction: 'horizontal',\n disableTriggerEvent,\n range: [0, 0.5],\n height: compStyle.visible === false ? 0 : 12,\n ...(compStyle as LegendScrollbarAttributes),\n width: compSize\n })\n : new ScrollBar({\n direction: 'vertical',\n width: compStyle.visible === false ? 0 : 12,\n range: [0, 0.5],\n ...(compStyle as LegendScrollbarAttributes),\n height: compSize,\n disableTriggerEvent\n });\n }\n\n private _updatePositionOfPager(renderStartY: number, compWidth: number, compHeight: number) {\n const { pager } = this.attribute;\n const { totalPage, isHorizontal } = this._itemContext;\n const position = (pager && (pager as LegendPagerAttributes).position) || 'middle';\n (this._pagerComponent as Pager).setTotal(totalPage);\n\n if (isHorizontal) {\n let y;\n if (position === 'start') {\n y = renderStartY;\n } else if (position === 'end') {\n y = renderStartY + compHeight - this._pagerComponent.AABBBounds.height() / 2;\n } else {\n y = renderStartY + compHeight / 2 - this._pagerComponent.AABBBounds.height() / 2;\n }\n this._pagerComponent.setAttributes({\n x: compWidth - this._pagerComponent.AABBBounds.width(),\n y\n });\n } else {\n let x;\n if (position === 'start') {\n x = 0;\n } else if (position === 'end') {\n x = compWidth - this._pagerComponent.AABBBounds.width();\n } else {\n x = (compWidth - this._pagerComponent.AABBBounds.width()) / 2;\n }\n this._pagerComponent.setAttributes({\n x,\n y: compHeight - this._pagerComponent.AABBBounds.height()\n });\n }\n }\n\n private _computeScrollbarDelta() {\n const { isHorizontal, clipContainer } = this._itemContext;\n const itemContainerBounds = this._itemsContainer.AABBBounds;\n const clipContainerBounds = clipContainer.AABBBounds;\n\n let delta;\n let innerViewSize;\n\n if (isHorizontal) {\n innerViewSize = clipContainerBounds.width();\n delta = innerViewSize / itemContainerBounds.width();\n } else {\n innerViewSize = clipContainerBounds.height();\n delta = innerViewSize / itemContainerBounds.height();\n }\n return delta;\n }\n\n private _updatePositionOfScrollbar(contentWidth: number, contentHeight: number, renderStartY: number) {\n const { isHorizontal, currentPage, totalPage } = this._itemContext;\n\n const start = (currentPage - 1) / totalPage;\n\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + this._computeScrollbarDelta()]);\n\n if (isHorizontal) {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: 0,\n y: renderStartY + contentHeight\n });\n } else {\n (this._pagerComponent as ScrollBar).setAttributes({\n x: contentWidth,\n y: renderStartY\n });\n }\n }\n\n private _bindEventsOfPager(pageSize: number, channel: 'x' | 'y') {\n const pager = this.attribute.pager || {};\n const { animation = true, animationDuration = 450, animationEasing = 'quadIn' } = pager;\n const pageParser = this._itemContext.isScrollbar\n ? (e: CustomEvent) => {\n const { value } = e.detail;\n let newPage;\n // page 信息不再用于 scroll 窗口的位置更新\n // scrollbar 模式,记录 newPage 用于开启 lazyLoad 的场景\n if (value[0] === 0) {\n newPage = 1;\n } else if (value[1] === 1) {\n newPage = this._itemContext.totalPage;\n } else {\n newPage = value[0] * this._itemContext.totalPage + 1;\n }\n\n return newPage;\n }\n : (e: CustomEvent) => {\n return e.detail.current;\n };\n\n const onScroll = (e: FederatedWheelEvent) => {\n const scrollComponent = this._pagerComponent as ScrollBar;\n const preScrollRange = scrollComponent.getScrollRange();\n const { direction } = scrollComponent.attribute as ScrollBarAttributes;\n const { width, height } = scrollComponent.getSliderRenderBounds();\n const currentScrollValue = direction === 'vertical' ? e.deltaY / height : e.deltaX / width;\n scrollComponent.setScrollRange(\n [preScrollRange[0] + currentScrollValue, preScrollRange[1] + currentScrollValue],\n true\n );\n\n this.updateScrollMask();\n };\n\n const onPaging = (e: CustomEvent) => {\n const newPage = pageParser(e);\n\n if (newPage === this._itemContext.currentPage) {\n return;\n }\n\n this._itemContext.currentPage = newPage;\n\n if (this._itemContext && this._itemContext.startIndex < this._itemContext.items.length) {\n this._renderItems();\n\n const newTotalPage = Math.ceil(this._itemContext.pages / this._itemContext.maxPages);\n // 更新总页数\n this._itemContext.totalPage = newTotalPage;\n // 更新 scrollbar 的范围\n if (this._itemContext.isScrollbar && this._pagerComponent) {\n const newDelta = this._computeScrollbarDelta();\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n (this._pagerComponent as ScrollBar).setScrollRange([start, start + newDelta]);\n }\n }\n\n if (!this._itemContext.isScrollbar) {\n if (animation) {\n (this._itemsContainer as IGroup)\n .animate()\n .to({ [channel]: -(newPage - 1) * pageSize }, animationDuration, animationEasing);\n } else {\n (this._itemsContainer as IGroup).setAttribute(channel, -(newPage - 1) * pageSize);\n }\n } else {\n const [start] = (this._pagerComponent as ScrollBar).getScrollRange();\n let containerSize;\n if (this._itemContext.isHorizontal) {\n containerSize = this._itemsContainer.AABBBounds.width();\n } else {\n containerSize = this._itemsContainer.AABBBounds.height();\n }\n\n const startOffset = containerSize * start;\n this.updateScrollMask();\n\n if (animation) {\n this._itemsContainer.animate().to({ [channel]: -startOffset }, animationDuration, animationEasing);\n } else {\n this._itemsContainer.setAttribute(channel, -startOffset);\n }\n }\n };\n if (this._itemContext.isScrollbar) {\n this._pagerComponent.addEventListener('scrollDrag', onPaging);\n this._pagerComponent.addEventListener('scrollUp', onPaging);\n if (((this.attribute as DiscreteLegendAttrs).pager as LegendScrollbarAttributes).roamScroll) {\n const THROTTLE_TIME = 50;\n // preventDefault不能和throttle一起使用, 否则阻止默认事件失败\n this.addEventListener('wheel', (e: FederatedWheelEvent) => e.nativeEvent.preventDefault());\n this.addEventListener('wheel', throttle(onScroll, THROTTLE_TIME));\n }\n } else {\n this._pagerComponent.addEventListener('toPrev', onPaging);\n this._pagerComponent.addEventListener('toNext', onPaging);\n }\n }\n\n private _renderPager() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, maxCol = 1, maxRow = 2, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let compWidth = 0;\n let compHeight = 0;\n let contentWidth = 0;\n let contentHeight = 0;\n let startX = 0; // 临时变量,用来存储布局的起始点\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n compHeight = (maxRow - 1) * spaceRow + this._itemHeight * maxRow;\n compWidth = maxWidth;\n // 水平布局,支持上下翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n contentWidth = (maxWidth as number) - comp.AABBBounds.width() - pagerSpace;\n if (contentWidth <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n\n // 第一个元素不能换行\n if (contentWidth < startX + (width as number) && index > 0) {\n // 超出了,则换行\n startX = 0;\n startY += (height as number) + spaceRow;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startX += spaceCol + (width as number);\n });\n\n this._itemContext.startX = startX;\n this._itemContext.startY = startY;\n this._itemContext.pages = pages;\n const total = Math.ceil(pages / maxRow);\n\n this._itemContext.totalPage = total;\n\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n } else {\n compWidth = this._itemMaxWidth * maxCol + (maxCol - 1) * spaceCol;\n compHeight = maxHeight;\n contentWidth = compWidth;\n\n // 垂直布局,支持左右翻页\n comp = this._createPager(compStyle);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n contentHeight = (maxHeight as number) - comp.AABBBounds.height() - pagerSpace - renderStartY;\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n\n (itemsContainer.getChildren() as unknown as IGroup[]).forEach((item, index) => {\n const { width, height } = item.attribute;\n // 第一个元素不能换行\n if (contentHeight < startY + (height as number) && index > 0) {\n startY = 0;\n startX += this._itemMaxWidth + spaceCol;\n pages += 1;\n }\n if (index > 0) {\n item.setAttributes({\n x: startX,\n y: startY\n });\n }\n startY += spaceRow + (height as number);\n });\n\n // todo\n const total = Math.ceil(pages / maxCol);\n\n this._itemContext.totalPage = total;\n this._updatePositionOfPager(renderStartY, compWidth, compHeight);\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n itemsContainer.setAttribute('y', -(defaultCurrent - 1) * (compHeight + spaceRow));\n } else {\n itemsContainer.setAttribute('x', -(defaultCurrent - 1) * (compWidth + spaceCol));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: isHorizontal ? contentWidth : compWidth,\n height: isHorizontal ? compHeight : contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._bindEventsOfPager(isHorizontal ? compHeight + spaceRow : compWidth + spaceCol, isHorizontal ? 'y' : 'x');\n\n return true;\n }\n\n private _renderScrollbar() {\n const renderStartY = this._title ? this._title.AABBBounds.height() + get(this.attribute, 'title.space', 8) : 0;\n const { maxWidth, item = {}, pager = {} } = this.attribute;\n const { spaceCol = DEFAULT_ITEM_SPACE_COL, spaceRow = DEFAULT_ITEM_SPACE_ROW } = item;\n const itemsContainer = this._itemsContainer as IGroup;\n const { space: pagerSpace = DEFAULT_PAGER_SPACE, defaultCurrent = 1, ...compStyle } = pager;\n const { isHorizontal } = this._itemContext;\n const maxHeight = this._contentMaxHeight;\n\n let comp: ScrollBar | Pager;\n let contentWidth = 0;\n let contentHeight = 0;\n let startY = 0; // 临时变量,用来存储布局的起始点\n let pages = 1; // 页数\n\n if (isHorizontal) {\n contentWidth = maxWidth;\n contentHeight = this._itemHeight;\n // 水平布局,支持上下翻页\n comp = this._createScrollbar(compStyle, contentWidth);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n } else {\n contentHeight = (maxHeight as number) - renderStartY;\n contentWidth = this._itemMaxWidth;\n // 垂直布局,支持左右翻页\n comp = this._createScrollbar(compStyle, contentHeight);\n this._pagerComponent = comp;\n this._innerView.add(comp as unknown as INode);\n\n if (contentHeight <= 0) {\n // 布局空间不够则不进行分页器渲染\n this._innerView.removeChild(comp as unknown as INode);\n return false;\n }\n\n // 重新进行布局\n // 边界场景: 最后一项item的文字内容在倒数第二页, 但由于bounds比文字本身大一点, 触发分页, 导致最后一页是空白\n // 关联issue: https://github.com/VisActor/VChart/issues/3344\n // 解决方式:\n // - 所有的item 高度一致的时候: 按照 (itemHeight + space) * 倍数 布局\n // - item高度不一致的情况: 最后一项的的高度分到最后一页的高度 >= 1/3 才分页\n const items = itemsContainer.getChildren() as IGroup[];\n const itemsHeightArr = items.map((item: IGroup) => item.attribute.height);\n if (itemsHeightArr.length === 1 || itemsHeightArr.every(entry => entry === itemsHeightArr[0])) {\n const itemHeight = itemsHeightArr[0];\n const maxContentHeight = contentHeight;\n const pageItemsCount = Math.floor(maxContentHeight / (spaceRow + itemHeight));\n contentHeight = pageItemsCount * (spaceRow + itemHeight);\n pages = Math.ceil(items.length / pageItemsCount);\n } else {\n items.forEach((item, index) => {\n const { height } = item.attribute;\n\n const prePages = pages;\n const preStartY = startY;\n pages = Math.floor((startY + height) / contentHeight) + 1;\n startY += spaceRow + (height as number);\n if (\n prePages !== pages && // 触发分页\n index === itemsContainer.getChildren().length - 1 && //\n startY - contentHeight >= (1 / 3) * height\n ) {\n contentHeight = preStartY + height; // 保证刚好完全展示最后一项\n pages -= 1; // 不分页\n }\n });\n }\n\n this._itemContext.totalPage = pages;\n this._itemContext.pages = pages;\n }\n\n // 初始化 defaultCurrent\n if (defaultCurrent > 1) {\n if (isHorizontal) {\n const maxOffset = this._itemsContainer.AABBBounds.width() - contentWidth;\n itemsContainer.setAttribute('x', -Math.min((defaultCurrent - 1) * (contentWidth + spaceCol), maxOffset));\n } else {\n const maxOffset = this._itemsContainer.AABBBounds.height() - contentHeight;\n itemsContainer.setAttribute('y', -Math.min((defaultCurrent - 1) * (contentHeight + spaceRow), maxOffset));\n }\n }\n\n const clipGroup = graphicCreator.group({\n x: 0,\n y: renderStartY,\n width: contentWidth,\n height: contentHeight,\n clip: true,\n pickable: false\n });\n clipGroup.add(itemsContainer);\n this._innerView.add(clipGroup);\n this._itemContext.clipContainer = clipGroup;\n\n this._updatePositionOfScrollbar(contentWidth, contentHeight, renderStartY);\n\n if ((pager as LegendScrollbarAttributes).scrollMask?.visible) {\n this.renderScrollMask(clipGroup);\n }\n\n this._bindEventsOfPager(isHorizontal ? contentWidth : contentHeight, isHorizontal ? 'x' : 'y');\n return true;\n }\n\n private renderScrollMask(clipGroup: IGroup) {\n const { scrollMask = {} as LegendScrollbarAttributes['scrollMask'] } = this.attribute\n .pager as LegendScrollbarAttributes;\n const { visible = true, gradientLength = 16, gradientStops } = scrollMask;\n if (!visible || !gradientStops) {\n return;\n }\n const width = clipGroup.AABBBounds.width();\n const height = clipGroup.AABBBounds.height();\n const totalLength = this._itemContext.isHorizontal ? width : height;\n\n const startStops = gradientStops.map(stop => {\n return {\n offset: (gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n const endStops = gradientStops.map(stop => {\n return {\n offset: (totalLength - gradientLength * stop.offset) / totalLength,\n color: stop.color\n };\n });\n\n const mask = graphicCreator.rect({\n x: 0,\n y: 0,\n width,\n height\n });\n this._scrollMask = mask;\n this._scrollMaskContext = { startStops, endStops };\n this.updateScrollMask();\n\n clipGroup.add(mask);\n }\n\n private updateScrollMask() {\n if (!this._scrollMask || !this._pagerComponent) {\n return;\n }\n\n if (!this._itemContext.isScrollbar) {\n return;\n }\n\n const [start, end] = (this._pagerComponent as ScrollBar).getScrollRange();\n const stops = [];\n if (!isNumberClose(clamp(end, 0, 1), 1)) {\n stops.push(...this._scrollMaskContext.endStops);\n }\n\n if (!isNumberClose(clamp(start, 0, 1), 0)) {\n stops.push(...this._scrollMaskContext.startStops);\n }\n\n if (stops.length) {\n if (this._itemContext.isHorizontal) {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 0,\n stops\n }\n });\n } else {\n this._scrollMask.setAttributes({\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops\n }\n });\n }\n }\n }\n\n private _renderPagerComponent() {\n if (this._itemContext.isScrollbar) {\n this._renderScrollbar();\n } else {\n this._renderPager();\n }\n\n return true;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n\n // 如果上个激活元素存在,则判断当前元素是否和上个激活元素相同,相同则不做处理,不相同则触发 unhover\n if (this._lastActiveItem) {\n if (this._lastActiveItem.id === legendItem.id) {\n return;\n }\n this._unHover(this._lastActiveItem, e);\n }\n this._hover(legendItem, e);\n } else if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastActiveItem) {\n this._unHover(this._lastActiveItem, e);\n this._lastActiveItem = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGroup;\n if (target && target.name && target.name.startsWith(LEGEND_ELEMENT_NAME.item)) {\n // @ts-ignore\n const legendItem = target.delegate;\n const { selectMode = 'multiple' } = this.attribute;\n\n // 图例聚焦功能\n if (target.name === LEGEND_ELEMENT_NAME.focus || selectMode === 'focus') {\n const isFocusSelected = legendItem.hasState(LegendStateValue.focus);\n legendItem.toggleState(LegendStateValue.focus);\n\n if (isFocusSelected) {\n // 当前为选中态,则再次点击变成全选\n this._itemsContainer?.getChildren().forEach(item => {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.unSelected, LegendStateValue.unSelectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.selected, e);\n });\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover, LegendStateValue.focus],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n } else {\n // 清除 focus 状态\n this._itemsContainer?.getChildren().forEach(item => {\n (item as unknown as IGroup).removeState(LegendStateValue.focus);\n });\n const { allowAllCanceled = true } = this.attribute;\n const isSelected = legendItem.hasState(LegendStateValue.selected);\n const currentSelectedItems = this._getSelectedLegends();\n if (selectMode === 'multiple') {\n if (allowAllCanceled === false && isSelected && currentSelectedItems.length === 1) {\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n return;\n }\n // 多选逻辑\n if (isSelected) {\n // 如果当前为选中状态,则取消选中\n this._removeLegendItemState(legendItem, [LegendStateValue.selected, LegendStateValue.selectedHover], e);\n this._setLegendItemState(legendItem, LegendStateValue.unSelected, e);\n } else {\n // 如果当前为非选中态,则设置为选中状态\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n }\n } else {\n this._setLegendItemState(legendItem, LegendStateValue.selected, e);\n this._removeLegendItemState(legendItem, [LegendStateValue.unSelected, LegendStateValue.unSelectedHover], e);\n\n // 单选逻辑,当前被点击的图例项设置为选中态,其他全部设置为非选中态\n this._itemsContainer?.getChildren().forEach(item => {\n if (legendItem !== item) {\n this._removeLegendItemState(\n item as unknown as IGroup,\n [LegendStateValue.selected, LegendStateValue.selectedHover],\n e\n );\n this._setLegendItemState(item as unknown as IGroup, LegendStateValue.unSelected, e);\n }\n });\n }\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemClick, legendItem, e);\n }\n };\n\n private _hover(legendItem: IGroup, e: FederatedPointerEvent) {\n this._lastActiveItem = legendItem;\n const selected = legendItem.hasState(LegendStateValue.selected);\n\n if (selected) {\n // use selectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.selectedHover, e);\n } else {\n // use unSelectedHover state\n this._setLegendItemState(legendItem, LegendStateValue.unSelectedHover, e);\n }\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', true);\n }\n\n this._dispatchLegendEvent(LegendEvent.legendItemHover, legendItem, e);\n }\n\n private _unHover(legendItem: IGroup, e: FederatedPointerEvent) {\n let attributeUpdate = false;\n if (legendItem.hasState(LegendStateValue.unSelectedHover) || legendItem.hasState(LegendStateValue.selectedHover)) {\n attributeUpdate = true;\n }\n legendItem.removeState(LegendStateValue.unSelectedHover);\n legendItem.removeState(LegendStateValue.selectedHover);\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: any) => {\n if (\n !attributeUpdate &&\n (child.hasState(LegendStateValue.unSelectedHover) || child.hasState(LegendStateValue.selectedHover))\n ) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(LegendStateValue.unSelectedHover);\n (child as unknown as IGraphic).removeState(LegendStateValue.selectedHover);\n });\n\n const focusButton = (legendItem.getChildren()[0] as unknown as IGroup).find(\n node => node.name === LEGEND_ELEMENT_NAME.focus,\n false\n ) as IGraphic;\n if (focusButton) {\n focusButton.setAttribute('visible', false);\n }\n\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n this._dispatchLegendEvent(LegendEvent.legendItemUnHover, legendItem, e);\n }\n\n private _setLegendItemState(legendItem: IGroup, stateName: string, e?: FederatedPointerEvent) {\n const keepCurrentStates = true;\n let attributeUpdate = false;\n if (!legendItem.hasState(stateName)) {\n attributeUpdate = true;\n }\n legendItem.addState(stateName, keepCurrentStates);\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach((child: IGraphic) => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n if (!attributeUpdate && !child.hasState(stateName)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).addState(stateName, keepCurrentStates);\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n private _removeLegendItemState(legendItem: IGroup, stateNames: string[], e?: FederatedPointerEvent) {\n let attributeUpdate = false;\n stateNames.forEach(name => {\n if (!attributeUpdate && legendItem.hasState(name)) {\n attributeUpdate = true;\n }\n legendItem.removeState(name);\n });\n // TODO: 这个比较 hack\n legendItem\n .getChildren()[0]\n .getChildren()\n .forEach(child => {\n if (child.name !== LEGEND_ELEMENT_NAME.focus) {\n stateNames.forEach(name => {\n if (!attributeUpdate && (child as unknown as IGraphic).hasState(name)) {\n attributeUpdate = true;\n }\n (child as unknown as IGraphic).removeState(name);\n });\n }\n });\n if (attributeUpdate) {\n this._dispatchLegendEvent(LegendEvent.legendItemAttributeUpdate, legendItem, e);\n }\n }\n\n // 获取当前选中的图例项\n private _getSelectedLegends() {\n const selectedData: LegendItemDatum[] = [];\n this._itemsContainer?.getChildren().forEach(item => {\n if ((item as unknown as IGroup).hasState(LegendStateValue.selected)) {\n // @ts-ignore\n selectedData.push(item.data);\n }\n });\n\n return selectedData;\n }\n\n private _appendDataToShape(shape: any, name: string, data: any, delegateShape: any, states: any = {}) {\n shape.name = name;\n shape.data = data;\n shape.delegate = delegateShape;\n shape.states = merge({}, DEFAULT_STATES, states);\n }\n\n private _dispatchLegendEvent(eventName: string, legendItem: any, event: FederatedPointerEvent) {\n const currentSelectedItems = this._getSelectedLegends();\n // 需要保持显示顺序\n currentSelectedItems.sort((pre: LegendItemDatum, next: LegendItemDatum) => pre.index - next.index);\n\n const currentSelected = currentSelectedItems.map((obj: LegendItemDatum) => obj.label);\n\n this._dispatchEvent(eventName, {\n item: legendItem, // 当前被选中的图例项整体\n data: legendItem.data, // 当前图例项的数据\n selected: legendItem.hasState(LegendStateValue.selected), // 当前图例项是否被选中\n currentSelectedItems,\n currentSelected,\n event\n });\n }\n\n // 处理回调函数\n private _handleStyle(\n config: any,\n item: LegendItemDatum,\n isSelected: boolean,\n index: number,\n items: LegendItemDatum[]\n ) {\n const newConfig: any = {};\n // 处理下样式\n if (config.style) {\n if (isFunction(config.style)) {\n newConfig.style = config.style(item, isSelected, index, items);\n } else {\n newConfig.style = config.style;\n }\n }\n\n if (config.state) {\n newConfig.state = {};\n\n Object.keys(config.state).forEach(key => {\n if (config.state[key]) {\n if (isFunction(config.state[key])) {\n newConfig.state[key] = config.state[key](item, isSelected, index, items);\n } else {\n newConfig.state[key] = config.state[key];\n }\n }\n });\n }\n\n return newConfig;\n }\n\n release(): void {\n super.release();\n this.removeAllEventListeners();\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vrender-components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"description": "components library for dp visualization",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "cjs/index.js",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@visactor/vutils": "1.0.6",
|
|
16
16
|
"@visactor/vscale": "1.0.6",
|
|
17
|
-
"@visactor/vrender-core": "1.0.
|
|
18
|
-
"@visactor/vrender-kits": "1.0.
|
|
19
|
-
"@visactor/vrender-animate": "1.0.
|
|
17
|
+
"@visactor/vrender-core": "1.0.17",
|
|
18
|
+
"@visactor/vrender-kits": "1.0.17",
|
|
19
|
+
"@visactor/vrender-animate": "1.0.17"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@rushstack/eslint-patch": "~1.1.4",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"vite": "3.2.6",
|
|
31
31
|
"typescript": "4.9.5",
|
|
32
32
|
"cross-env": "^7.0.3",
|
|
33
|
-
"@internal/ts-config": "0.0.1",
|
|
34
33
|
"@internal/bundler": "0.0.1",
|
|
34
|
+
"@internal/ts-config": "0.0.1",
|
|
35
35
|
"@internal/eslint-config": "0.0.1"
|
|
36
36
|
},
|
|
37
37
|
"keywords": [
|