@visactor/vrender-components 0.18.7-alpha.1 → 0.18.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/axis/base.js +1 -5
- package/cjs/axis/base.js.map +1 -1
- package/cjs/axis/circle.js +1 -1
- package/cjs/axis/circle.js.map +1 -1
- package/cjs/axis/grid/base.js +1 -5
- package/cjs/axis/grid/base.js.map +1 -1
- package/cjs/axis/index.d.ts +1 -0
- package/cjs/axis/index.js +1 -1
- package/cjs/axis/index.js.map +1 -1
- package/cjs/axis/mixin/circle.js +2 -4
- package/cjs/axis/mixin/circle.js.map +1 -1
- package/cjs/axis/overlap/auto-limit.js +8 -13
- package/cjs/axis/overlap/auto-limit.js.map +1 -1
- package/cjs/axis/util.d.ts +5 -2
- package/cjs/axis/util.js +18 -5
- package/cjs/axis/util.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/legend/color/color.js +7 -5
- package/cjs/legend/color/color.js.map +1 -1
- package/cjs/legend/size/size.js +6 -4
- package/cjs/legend/size/size.js.map +1 -1
- package/cjs/slider/slider.d.ts +2 -0
- package/cjs/slider/slider.js +53 -38
- package/cjs/slider/slider.js.map +1 -1
- package/cjs/slider/type.d.ts +1 -0
- package/cjs/slider/type.js.map +1 -1
- package/es/axis/base.js +2 -6
- package/es/axis/base.js.map +1 -1
- package/es/axis/circle.js +2 -2
- package/es/axis/circle.js.map +1 -1
- package/es/axis/grid/base.js +2 -6
- package/es/axis/grid/base.js.map +1 -1
- package/es/axis/index.d.ts +1 -0
- package/es/axis/index.js +2 -0
- package/es/axis/index.js.map +1 -1
- package/es/axis/mixin/circle.js +2 -3
- package/es/axis/mixin/circle.js.map +1 -1
- package/es/axis/overlap/auto-limit.js +9 -13
- package/es/axis/overlap/auto-limit.js.map +1 -1
- package/es/axis/util.d.ts +5 -2
- package/es/axis/util.js +15 -1
- package/es/axis/util.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/legend/color/color.js +7 -5
- package/es/legend/color/color.js.map +1 -1
- package/es/legend/size/size.js +6 -4
- package/es/legend/size/size.js.map +1 -1
- package/es/slider/slider.d.ts +2 -0
- package/es/slider/slider.js +50 -36
- package/es/slider/slider.js.map +1 -1
- package/es/slider/type.d.ts +1 -0
- package/es/slider/type.js.map +1 -1
- package/package.json +5 -5
package/cjs/slider/slider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/slider/slider.ts"],"names":[],"mappings":"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","file":"slider.js","sourcesContent":["/**\n * @description slider 滑块组件\n * TODO:\n * 3. step 功能开发\n * 4. tooltip 功能开发\n */\nimport type {\n IGroup,\n ISymbol,\n IGraphic,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n FederatedPointerEvent,\n Cursor\n} from '@visactor/vrender-core';\nimport { isNil, merge, clamp, isValid, array, isObject, isArray, clampRange, debounce } from '@visactor/vutils';\nimport { graphicCreator, vglobal, CustomEvent } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport { SLIDER_ELEMENT_NAME } from './constant';\n\nimport type { SliderAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSliderComponent } from './register';\n\nfunction convertValueToRange(value: number | [number, number]) {\n if (isArray(value)) {\n return value;\n }\n return [value, value];\n}\n\nfunction getDefaultCursor(isHorizontal: boolean) {\n return isHorizontal ? 'ew-resize' : 'ns-resize';\n}\n\nloadSliderComponent();\n\nexport class Slider extends AbstractComponent<Required<SliderAttributes>> {\n name = 'slider';\n\n static defaultAttributes = {\n slidable: true,\n layout: 'horizontal',\n align: 'bottom',\n height: 8,\n showHandler: true,\n handlerSize: 14,\n handlerStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n tooltip: {\n shapeStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n text: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n },\n railStyle: {\n fill: 'rgba(0,0,0,.04)'\n },\n trackStyle: {\n fill: '#91caff'\n },\n showValue: true,\n valueStyle: {\n fill: '#2C3542',\n fontSize: 12\n },\n startText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n endText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n handlerText: {\n visible: true,\n space: 4,\n precision: 0,\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n };\n\n protected _isHorizontal = true;\n protected _innerView!: IGroup;\n protected _mainContainer!: IGroup;\n protected _startHandler: ISymbol | null = null;\n protected _endHandler: ISymbol | null = null;\n protected _startHandlerText: IText | null = null;\n protected _endHandlerText: IText | null = null;\n protected _railContainer!: IGroup;\n protected _rail!: IGraphic;\n protected _track!: IGraphic;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // 存储当前正在操作的滑块\n private _currentHandler: IGraphic | null = null;\n private _currentValue: { startValue?: number; endValue?: number; startPos?: number; endPos?: number } = {};\n private _tooltipState: {\n isActive?: boolean;\n pos?: number;\n value?: number;\n };\n private _isChanging?: boolean;\n\n protected _tooltipShape?: ISymbol;\n protected _tooltipText?: IText;\n\n get track() {\n return this._track;\n }\n\n get currentValue() {\n return this._currentValue;\n }\n\n get startHandler() {\n return this._startHandler;\n }\n\n get endHandler() {\n return this._endHandler;\n }\n\n get tooltipShape() {\n return this._tooltipShape;\n }\n\n constructor(attributes: SliderAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Slider.defaultAttributes, attributes));\n }\n\n /**\n * 更新值域\n */\n setValue(value: number | number[]) {\n const { layout, railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const [startValue, endValue] = array(value);\n\n const { startHandler, endHandler } = this._getHandlers();\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n const startPos = ((startValue - min) / (max - min)) * railLen;\n if (startHandler) {\n this._updateHandler(startHandler, startPos, startValue);\n }\n\n if (endHandler) {\n const endPos = ((endValue - min) / (max - min)) * railLen;\n this._updateHandler(endHandler, endPos, endValue);\n }\n\n this._updateTrack();\n }\n\n render() {\n this.removeAllChild(true);\n const {\n layout = 'horizontal',\n railWidth,\n railHeight,\n startText,\n endText,\n min,\n max,\n showHandler = true,\n showTooltip\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n this._currentValue = {\n startValue: convertValueToRange(value)[0],\n endValue: convertValueToRange(value)[1]\n };\n const isHorizontal = layout === 'horizontal';\n this._isHorizontal = isHorizontal;\n\n const innerView = graphicCreator.group({\n x: 0,\n y: 0\n });\n innerView.name = SLIDER_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n\n let startLen = 0;\n let startTextShape;\n if (startText && startText.visible) {\n // 渲染首部文本\n startTextShape = graphicCreator.text({\n x: isHorizontal ? 0 : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : 0,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: startText.text,\n lineHeight: startText.style?.fontSize,\n ...startText.style\n });\n startTextShape.name = SLIDER_ELEMENT_NAME.startText;\n innerView.add(startTextShape);\n const space = isValid(startText.space) ? startText.space : 0;\n startLen += (isHorizontal ? startTextShape.AABBBounds.width() : startTextShape.AABBBounds.height()) + space;\n }\n const mainContainer = graphicCreator.group({\n x: isHorizontal ? startLen : 0,\n y: isHorizontal ? 0 : startLen\n });\n innerView.add(mainContainer);\n\n const railContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n railContainer.name = SLIDER_ELEMENT_NAME.railContainer;\n this._railContainer = railContainer;\n mainContainer.add(railContainer);\n\n this._mainContainer = mainContainer;\n\n this._renderRail(railContainer);\n\n startLen += isHorizontal ? (railWidth as number) : (railHeight as number);\n\n let endTextShape;\n if (endText && endText.visible) {\n const space = isValid(endText.space) ? endText.space : 0;\n\n // 渲染首部文本\n endTextShape = graphicCreator.text({\n x: isHorizontal ? startLen + space : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : startLen + space,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: endText.text,\n lineHeight: endText.style?.fontSize,\n ...endText.style\n });\n endTextShape.name = SLIDER_ELEMENT_NAME.endText;\n innerView.add(endTextShape);\n }\n\n this._renderTrack(railContainer);\n\n if (showHandler) {\n this._renderHandlers(mainContainer);\n this._bindEvents();\n }\n\n if (showTooltip) {\n this._renderTooltip();\n this._bindTooltipEvents();\n }\n }\n\n // 渲染滑块轨道\n protected _renderRail(container: IGroup) {\n const { railWidth, railHeight, railStyle, slidable } = this.attribute;\n\n let cursor: Cursor = 'default';\n if (slidable !== false) {\n cursor = 'pointer';\n }\n\n const railShape = graphicCreator.rect({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cursor,\n ...railStyle\n });\n railShape.name = SLIDER_ELEMENT_NAME.rail;\n container.add(railShape);\n this._rail = railShape;\n\n return railShape;\n }\n\n // 渲染 handler\n protected _renderHandlers(container: IGroup) {\n const {\n range,\n min,\n max,\n handlerSize = 14,\n handlerStyle,\n handlerText,\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n const handlerTextVisible = handlerText && handlerText.visible;\n const isHorizontal = this._isHorizontal;\n const railLen = isHorizontal ? railWidth : railHeight;\n\n const [startValue, endValue] = convertValueToRange(value);\n // 单滑块\n const handlerStart = max === min ? (range ? 0 : railLen) : (((startValue as number) - min) / (max - min)) * railLen;\n const startHandler = this._renderHandler({\n x: isHorizontal ? handlerStart : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : handlerStart,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n startHandler.name = SLIDER_ELEMENT_NAME.startHandler;\n this._startHandler = startHandler;\n container.add(startHandler);\n this._currentValue.startPos = handlerStart;\n\n if (handlerTextVisible) {\n const startHandlerText = this._renderHandlerText(startValue, range ? 'start' : 'end');\n startHandlerText.name = SLIDER_ELEMENT_NAME.startHandlerText;\n container.add(startHandlerText);\n\n this._startHandlerText = startHandlerText;\n }\n\n if (range) {\n // 绘制第二个滑块\n // 单滑块\n const handlerEnd = max === min ? railLen : (((endValue as number) - min) / (max - min)) * railLen;\n const endHandler = this._renderHandler({\n x: isHorizontal ? handlerEnd : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : handlerEnd,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n endHandler.name = SLIDER_ELEMENT_NAME.endHandler;\n this._endHandler = endHandler;\n container.add(endHandler);\n this._currentValue.endPos = handlerEnd;\n\n if (handlerTextVisible) {\n const endHandlerText = this._renderHandlerText(endValue, 'end');\n endHandlerText.name = SLIDER_ELEMENT_NAME.endHandlerText;\n container.add(endHandlerText);\n\n this._endHandlerText = endHandlerText;\n }\n }\n }\n\n // 渲染选中区域\n protected _renderTrack(container: IGroup) {\n const { range, min, max, railHeight, railWidth, trackStyle, railStyle, slidable, value } = this\n .attribute as SliderAttributes;\n\n let startValue;\n let endValue;\n\n if (isNil(value)) {\n if (range) {\n startValue = min;\n endValue = max;\n } else {\n startValue = endValue = min;\n }\n } else {\n if (range) {\n const clampValue = clampRange(value as [number, number], min, max);\n startValue = clampValue[0];\n endValue = clampValue[1];\n } else {\n startValue = min;\n endValue = clamp(value as number, min, max);\n }\n }\n\n const isHorizontal = this._isHorizontal;\n const railLen = isHorizontal ? railWidth : railHeight;\n // eslint-disable-next-line prefer-const\n // let [startValue, endValue] = convertValueToRange(value);\n\n if (!range) {\n startValue = min;\n }\n\n const trackContainer = graphicCreator.group({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cornerRadius: railStyle?.cornerRadius,\n clip: true,\n pickable: false\n });\n trackContainer.name = SLIDER_ELEMENT_NAME.trackContainer;\n\n const draggableTrack = isObject(range) && range.draggableTrack === true;\n let cursor: Cursor;\n if (slidable === false) {\n cursor = 'default';\n } else if (range === false) {\n cursor = 'pointer';\n } else if (draggableTrack === false) {\n cursor = 'pointer';\n } else {\n cursor = getDefaultCursor(isHorizontal);\n }\n\n const trackWidth = max === min ? railLen : ((endValue - startValue) / (max - min)) * railLen;\n const startPos = max === min ? 0 : ((startValue - min) / (max - min)) * railLen;\n const track = graphicCreator.rect({\n x: isHorizontal ? startPos : 0,\n y: isHorizontal ? 0 : startPos,\n width: isHorizontal ? trackWidth : railWidth,\n height: isHorizontal ? railHeight : trackWidth,\n cursor,\n ...trackStyle\n });\n track.name = SLIDER_ELEMENT_NAME.track;\n this._track = track;\n trackContainer.add(track);\n container.add(trackContainer);\n }\n\n protected _renderHandler(style: Partial<ISymbolGraphicAttribute>) {\n // 渲染单个滑块\n const handler = graphicCreator.symbol(style);\n\n return handler;\n }\n\n private _renderHandlerText(value: number, position: string) {\n const {\n align,\n min,\n max,\n handlerSize = 14,\n handlerText = {},\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n\n const isHorizontal = this._isHorizontal;\n const railLen = isHorizontal ? railWidth : railHeight;\n const handlerStart =\n max === min ? (position === 'start' ? 0 : railLen) : (((value as number) - min) / (max - min)) * railLen;\n const textSpace = handlerText.space ?? 4;\n const textStyle: ITextGraphicAttribute = {\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n lineHeight: handlerText.style?.lineHeight,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal)\n };\n if (isHorizontal) {\n if (align === 'top') {\n // 展示 slider 上部\n textStyle.textBaseline = 'bottom';\n textStyle.textAlign = 'center';\n textStyle.x = handlerStart;\n textStyle.y = (railHeight - handlerSize) / 2 - textSpace;\n } else {\n // 展示 slider 下部\n textStyle.textBaseline = 'top';\n textStyle.textAlign = 'center';\n textStyle.x = handlerStart;\n textStyle.y = (railHeight + handlerSize) / 2 + textSpace;\n }\n } else {\n if (align === 'left') {\n // 展示 slider 左侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'end';\n textStyle.x = (railWidth - handlerSize) / 2 - textSpace;\n textStyle.y = handlerStart;\n } else {\n // 展示 slider 右侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'start';\n textStyle.x = (railWidth + handlerSize) / 2 + textSpace;\n textStyle.y = handlerStart;\n }\n }\n\n // 展示 handler 当前所在的数值\n const textShape = graphicCreator.text({\n ...textStyle,\n ...handlerText.style\n });\n return textShape;\n }\n\n private _renderTooltip() {\n const { tooltip, railHeight, railWidth, align } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n this._tooltipState = {\n value: this._currentValue.startValue,\n pos: this._currentValue.startPos\n };\n } else {\n this._tooltipState = null;\n }\n\n const cx = this._isHorizontal ? 0 : railWidth / 2;\n const cy = this._isHorizontal ? railHeight / 2 : 0;\n\n if (tooltip && tooltip.shape) {\n const shape = graphicCreator.symbol({\n pickable: false,\n visible: !!this._tooltipState,\n x: cx,\n y: cy,\n symbolType: 'circle',\n\n ...tooltip.shapeStyle\n });\n\n this._tooltipShape = shape;\n this._mainContainer.add(shape);\n }\n\n const textConfig = (tooltip && tooltip.text) || {};\n const space = textConfig.space ?? 6;\n\n const textStyle: ITextGraphicAttribute = {\n pickable: false,\n visible: !!this._tooltipState,\n text: ''\n };\n\n if (this._isHorizontal) {\n textStyle.x = cx;\n textStyle.y = align === 'top' ? cy - railHeight / 2 - space : cy + railHeight / 2 + space;\n textStyle.textAlign = 'center';\n textStyle.textBaseline = align === 'top' ? 'bottom' : 'top';\n } else {\n textStyle.y = cy;\n textStyle.x = align === 'left' ? cx - railWidth / 2 - space : cy + railWidth / 2 + space;\n textStyle.textAlign = align === 'left' ? 'end' : 'start';\n textStyle.textBaseline = 'middle';\n }\n const text = graphicCreator.text({\n ...textStyle,\n ...textConfig.style\n });\n\n this._mainContainer.add(text);\n this._tooltipText = text;\n\n if (this._tooltipState) {\n this._updateTooltip();\n }\n }\n\n private _updateTooltip() {\n if ((!this._tooltipShape && !this._tooltipText) || !this._tooltipState) {\n return;\n }\n\n const coord = this._isHorizontal\n ? this._tooltipState.pos * this.attribute.railWidth\n : this._tooltipState.pos * this.attribute.railHeight;\n const coordKey = this._isHorizontal ? 'x' : 'y';\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttributes({\n visible: true,\n [coordKey]: coord\n });\n }\n const { align } = this.attribute;\n\n if (this._tooltipText) {\n const textConfig = (this.attribute.tooltip && this.attribute.tooltip.text) || {};\n this._tooltipText.setAttributes({\n visible: true,\n [coordKey]: coord,\n text: textConfig.formatter\n ? textConfig.formatter(this._tooltipState.value)\n : !this._isHorizontal && align === 'left'\n ? `${this._tooltipState.value.toFixed(textConfig.precision ?? 0)} ≈`\n : `≈ ${this._tooltipState.value.toFixed(textConfig.precision ?? 0)}`\n });\n }\n }\n\n private _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { slidable, range } = this.attribute as SliderAttributes;\n if (slidable) {\n if (this._startHandler) {\n this._startHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._startHandlerText) {\n this._startHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandler) {\n this._endHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandlerText) {\n this._endHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n\n if (isObject(range) && range.draggableTrack) {\n this._track.addEventListener('pointerdown', this._onTrackPointerdown as EventListenerOrEventListenerObject);\n }\n\n this._railContainer.addEventListener(\n 'pointerdown',\n this._onRailPointerDown as EventListenerOrEventListenerObject\n );\n }\n }\n\n private _bindTooltipEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n\n this._mainContainer.addEventListener('pointerenter', this._onTooltipShow as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointermove', this._onTooltipUpdate as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointerleave', this._onTooltipHide as EventListenerOrEventListenerObject);\n }\n\n private _onTooltipShow = (e: FederatedPointerEvent) => {\n if (this._isChanging || (this._tooltipState && this._tooltipState.isActive)) {\n return;\n }\n\n if (!this._tooltipState) {\n this._tooltipState = { isActive: true };\n } else {\n this._tooltipState.isActive = true;\n }\n\n this._onTooltipUpdate(e);\n this._dispatchTooltipEvent('sliderTooltipShow');\n };\n\n private _onTooltipUpdate = (e: FederatedPointerEvent) => {\n if (this._isChanging || !this._tooltipState || !this._tooltipState.isActive) {\n return;\n }\n\n const { min, max } = this.attribute;\n const pos = clamp(\n this._isHorizontal\n ? (e.viewX - this._rail.globalAABBBounds.x1) / this._rail.globalAABBBounds.width()\n : (e.viewY - this._rail.globalAABBBounds.y1) / this._rail.globalAABBBounds.height(),\n 0,\n 1\n );\n\n if (pos !== this._tooltipState.pos) {\n this._tooltipState.pos = pos;\n this._tooltipState.value = min + (max - min) * pos;\n\n this._updateTooltip();\n this._dispatchTooltipEvent('sliderTooltipUpdate');\n }\n };\n\n private _onTooltipHide = () => {\n const { tooltip } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n return;\n }\n\n this._tooltipState = null;\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttribute('visible', false);\n }\n if (this._tooltipText) {\n this._tooltipText.setAttribute('visible', false);\n }\n this._dispatchTooltipEvent('sliderTooltipHide');\n };\n\n private _onHandlerPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n\n this._currentHandler = e.target as unknown as IGraphic;\n this._prePos = this._isHorizontal ? e.clientX : e.clientY;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onHandlerPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n let currentPos;\n let delta = 0;\n let originPos;\n let railLen;\n if (!this._isHorizontal) {\n currentPos = e.clientY;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.y as number;\n railLen = railHeight;\n } else {\n currentPos = e.clientX;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.x as number;\n railLen = railWidth;\n }\n\n const newPos = clamp(originPos + delta, 0, railLen);\n const currentValue = (newPos / railLen) * (max - min) + min;\n\n if (this._currentHandler.type === 'text') {\n this._updateHandlerText(this._currentHandler as IText, newPos, currentValue);\n } else {\n this._updateHandler(this._currentHandler as ISymbol, newPos, currentValue);\n }\n\n this._updateTrack();\n this._prePos = currentPos;\n\n this._dispatchChangeEvent();\n };\n\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n this._currentHandler = null;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener(\n 'pointerupoutside',\n this._onHandlerPointerUp as EventListenerOrEventListenerObject\n );\n }\n };\n\n private _onTrackPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n this._prePos = this._isHorizontal ? e.clientX : e.clientY;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onTrackPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n const { startHandler, endHandler } = this._getHandlers();\n\n let currentPos;\n let trackLen;\n let railLen;\n if (this._isHorizontal) {\n currentPos = e.clientX;\n // @ts-ignore\n trackLen = this._track.attribute.width;\n railLen = railWidth;\n } else {\n currentPos = e.clientY;\n // @ts-ignore\n trackLen = this._track.attribute.height;\n railLen = railHeight;\n }\n const delta = currentPos - this._prePos; // 实际位移的变化\n if (startHandler) {\n const originPos = (this._isHorizontal ? startHandler.attribute.x : startHandler.attribute.y) as number;\n const newPos = clamp(originPos + delta, 0, railLen - trackLen);\n const currentValue = (newPos / railLen) * (max - min) + min;\n this._updateHandler(startHandler, newPos, currentValue);\n }\n\n if (endHandler) {\n const originPos = (this._isHorizontal ? endHandler.attribute.x : endHandler.attribute.y) as number;\n const newPos = clamp(originPos + delta, trackLen, railLen);\n const currentValue = (newPos / railLen) * (max - min) + min;\n const startHandlerAttribute = startHandler?.attribute;\n this._updateHandler(endHandler, newPos, currentValue);\n this._track.setAttributes(\n this._isHorizontal\n ? {\n x: Math.min(startHandlerAttribute.x as number, endHandler.attribute.x as number),\n // @ts-ignore\n width: Math.abs((startHandlerAttribute.x as number) - (endHandler.attribute.x as number))\n }\n : {\n y: Math.min(startHandlerAttribute.y as number, endHandler.attribute.y as number),\n // @ts-ignore\n height: Math.abs((startHandlerAttribute.y as number) - (endHandler.attribute.y as number))\n }\n );\n }\n\n this._prePos = currentPos;\n this._dispatchChangeEvent();\n };\n\n private _onTrackPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n\n const startHandler = this._startHandler as ISymbol;\n const endHandler = this._endHandler;\n\n let currentPos;\n let startHandlerPos;\n let endHandlerPos;\n let railLen;\n // 更新 handler, text 以及 track\n if (this._isHorizontal) {\n currentPos = e.viewX - this._rail.globalAABBBounds.x1;\n startHandlerPos = startHandler?.attribute.x as number;\n endHandlerPos = endHandler?.attribute.x;\n railLen = railWidth;\n } else {\n currentPos = e.viewY - this._rail.globalAABBBounds.y1;\n startHandlerPos = startHandler?.attribute.y as number;\n endHandlerPos = endHandler?.attribute.y;\n railLen = railHeight;\n }\n\n const currentValue = (currentPos / railLen) * (max - min) + min;\n\n if (isValid(endHandlerPos)) {\n const updateHandler = (\n Math.abs(currentPos - startHandlerPos) > Math.abs(currentPos - endHandlerPos) ? endHandler : startHandler\n ) as ISymbol;\n this._updateHandler(updateHandler, currentPos, currentValue);\n } else {\n this._updateHandler(startHandler, currentPos, currentValue);\n }\n this._updateTrack();\n\n this._dispatchChangeEvent();\n };\n\n // 更新 track 样式\n private _updateTrack() {\n // 更新 track\n const startHandler = this._startHandler;\n const endHandler = this._endHandler;\n\n if (this._isHorizontal) {\n const startHandlerPos = startHandler?.attribute.x as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.x as number;\n // 区间\n this._track.setAttributes({\n x: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n width: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n width: startHandlerPos\n });\n }\n } else {\n const startHandlerPos = startHandler?.attribute.y as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.y as number;\n // 区间\n this._track.setAttributes({\n y: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n height: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n height: startHandlerPos\n });\n }\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandler(handler: ISymbol, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n handler.setAttribute(isHorizontal ? 'x' : 'y', position);\n const updateHandlerText =\n handler.name === SLIDER_ELEMENT_NAME.startHandler ? this._startHandlerText : this._endHandlerText;\n if (updateHandlerText) {\n const { handlerText = {} } = this.attribute as SliderAttributes;\n updateHandlerText.setAttributes({\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handler.name === SLIDER_ELEMENT_NAME.startHandler) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandlerText(handlerText: IText, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n const { handlerText: handlerTextAttr = {} } = this.attribute as SliderAttributes;\n handlerText.setAttributes({\n [isHorizontal ? 'x' : 'y']: position,\n text: handlerTextAttr.formatter ? handlerTextAttr.formatter(value) : value.toFixed(handlerTextAttr.precision ?? 0)\n });\n const updateHandler =\n handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? this._startHandler : this._endHandler;\n if (updateHandler) {\n updateHandler.setAttributes({\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n private _dispatchChangeEvent() {\n const isRange = !!this.attribute.range;\n const currentValue = this._currentValue;\n\n this._dispatchEvent('change', {\n value: isRange\n ? [\n Math.min(currentValue.endValue as number, currentValue.startValue as number),\n Math.max(currentValue.endValue as number, currentValue.startValue as number)\n ]\n : currentValue.startValue,\n position: isRange\n ? [\n Math.min(currentValue.endPos as number, currentValue.startPos as number),\n Math.max(currentValue.endPos as number, currentValue.startPos as number)\n ]\n : currentValue.startPos\n });\n }\n\n private _dispatchTooltipEvent(type: string) {\n this._dispatchEvent('sliderTooltip', {\n type,\n position: this._tooltipState && this._tooltipState.pos,\n value: this._tooltipState && this._tooltipState.value\n });\n }\n\n private _getHandlers() {\n let startHandler = this._startHandler;\n let endHandler = this._endHandler;\n let temp;\n\n if (this._isHorizontal) {\n if (endHandler && (endHandler.attribute.x as number) < (startHandler?.attribute.x as number)) {\n temp = startHandler;\n startHandler = endHandler;\n endHandler = temp;\n }\n } else {\n if (endHandler && (endHandler.attribute.y as number) < (startHandler?.attribute.y as number)) {\n temp = startHandler;\n startHandler = endHandler;\n endHandler = temp;\n }\n }\n\n return {\n startHandler,\n endHandler\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/slider/slider.ts"],"names":[],"mappings":"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","file":"slider.js","sourcesContent":["/**\n * @description slider 滑块组件\n * TODO:\n * 3. step 功能开发\n * 4. tooltip 功能开发\n */\nimport type {\n IGroup,\n ISymbol,\n IGraphic,\n ISymbolGraphicAttribute,\n IText,\n ITextGraphicAttribute,\n FederatedPointerEvent,\n Cursor\n} from '@visactor/vrender-core';\nimport { isNil, merge, clamp, isValid, array, isObject, isArray, clampRange, debounce } from '@visactor/vutils';\nimport { graphicCreator, vglobal, CustomEvent } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport { SLIDER_ELEMENT_NAME } from './constant';\n\nimport type { SliderAttributes } from './type';\nimport type { ComponentOptions } from '../interface';\nimport { loadSliderComponent } from './register';\n\nfunction convertValueToRange(value: number | [number, number]) {\n if (isArray(value)) {\n return value;\n }\n return [value, value];\n}\n\nfunction getDefaultCursor(isHorizontal: boolean) {\n return isHorizontal ? 'ew-resize' : 'ns-resize';\n}\n\nloadSliderComponent();\n\nexport class Slider extends AbstractComponent<Required<SliderAttributes>> {\n name = 'slider';\n\n static defaultAttributes = {\n slidable: true,\n layout: 'horizontal',\n align: 'bottom',\n height: 8,\n showHandler: true,\n handlerSize: 14,\n handlerStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n tooltip: {\n shapeStyle: {\n symbolType: 'circle',\n fill: '#fff',\n stroke: '#91caff',\n lineWidth: 2\n },\n text: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n },\n railStyle: {\n fill: 'rgba(0,0,0,.04)'\n },\n trackStyle: {\n fill: '#91caff'\n },\n showValue: true,\n valueStyle: {\n fill: '#2C3542',\n fontSize: 12\n },\n startText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n endText: {\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n },\n handlerText: {\n visible: true,\n space: 4,\n precision: 0,\n style: {\n fill: '#2C3542',\n fontSize: 12\n }\n }\n };\n\n protected _isHorizontal = true;\n protected _innerView!: IGroup;\n protected _mainContainer!: IGroup;\n protected _startHandler: ISymbol | null = null;\n protected _endHandler: ISymbol | null = null;\n protected _startHandlerText: IText | null = null;\n protected _endHandlerText: IText | null = null;\n protected _railContainer!: IGroup;\n protected _rail!: IGraphic;\n protected _track!: IGraphic;\n // 保留滑块上一次的位置\n private _prePos!: number;\n // 存储当前正在操作的滑块\n private _currentHandler: IGraphic | null = null;\n private _currentValue: { startValue?: number; endValue?: number; startPos?: number; endPos?: number } = {};\n private _tooltipState: {\n isActive?: boolean;\n pos?: number;\n value?: number;\n };\n private _isChanging?: boolean;\n\n protected _tooltipShape?: ISymbol;\n protected _tooltipText?: IText;\n\n get track() {\n return this._track;\n }\n\n get currentValue() {\n return this._currentValue;\n }\n\n get startHandler() {\n return this._startHandler;\n }\n\n get endHandler() {\n return this._endHandler;\n }\n\n get tooltipShape() {\n return this._tooltipShape;\n }\n\n constructor(attributes: SliderAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Slider.defaultAttributes, attributes));\n }\n\n protected calculatePosByValue(value: number, pos?: 'start' | 'end') {\n const { layout, railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n let ratio = 0;\n\n if (min === max) {\n ratio = pos === 'start' ? 0 : pos === 'end' ? 1 : 0;\n } else {\n ratio = (value - min) / (max - min);\n }\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n\n return (inverse ? 1 - ratio : ratio) * railLen;\n }\n\n protected calculateValueByPos(pos: number) {\n const { layout, railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n\n const railLen = layout === 'vertical' ? railHeight : railWidth;\n\n return min + (max - min) * (inverse ? 1 - pos / railLen : pos / railLen);\n }\n\n /**\n * 更新值域\n */\n setValue(value: number | number[]) {\n const { min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n const [startValue, endValue] = array(value);\n\n const { startHandler, endHandler } = this._getHandlers();\n if (startHandler) {\n this._updateHandler(startHandler, this.calculatePosByValue(startValue), startValue);\n }\n\n if (endHandler) {\n this._updateHandler(endHandler, this.calculatePosByValue(endValue), endValue);\n }\n\n this._updateTrack();\n }\n\n render() {\n this.removeAllChild(true);\n const {\n layout = 'horizontal',\n railWidth,\n railHeight,\n startText,\n endText,\n min,\n max,\n showHandler = true,\n showTooltip\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n this._currentValue = {\n startValue: convertValueToRange(value)[0],\n endValue: convertValueToRange(value)[1]\n };\n const isHorizontal = layout === 'horizontal';\n this._isHorizontal = isHorizontal;\n\n const innerView = graphicCreator.group({\n x: 0,\n y: 0\n });\n innerView.name = SLIDER_ELEMENT_NAME.innerView;\n this.add(innerView);\n this._innerView = innerView;\n\n let startLen = 0;\n let startTextShape;\n if (startText && startText.visible) {\n // 渲染首部文本\n startTextShape = graphicCreator.text({\n x: isHorizontal ? 0 : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : 0,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: startText.text,\n lineHeight: startText.style?.fontSize,\n ...startText.style\n });\n startTextShape.name = SLIDER_ELEMENT_NAME.startText;\n innerView.add(startTextShape);\n const space = isValid(startText.space) ? startText.space : 0;\n startLen += (isHorizontal ? startTextShape.AABBBounds.width() : startTextShape.AABBBounds.height()) + space;\n }\n const mainContainer = graphicCreator.group({\n x: isHorizontal ? startLen : 0,\n y: isHorizontal ? 0 : startLen\n });\n innerView.add(mainContainer);\n\n const railContainer = graphicCreator.group({\n x: 0,\n y: 0\n });\n railContainer.name = SLIDER_ELEMENT_NAME.railContainer;\n this._railContainer = railContainer;\n mainContainer.add(railContainer);\n\n this._mainContainer = mainContainer;\n\n this._renderRail(railContainer);\n\n startLen += isHorizontal ? (railWidth as number) : (railHeight as number);\n\n let endTextShape;\n if (endText && endText.visible) {\n const space = isValid(endText.space) ? endText.space : 0;\n\n // 渲染首部文本\n endTextShape = graphicCreator.text({\n x: isHorizontal ? startLen + space : railWidth / 2,\n y: isHorizontal ? (railHeight as number) / 2 : startLen + space,\n textAlign: isHorizontal ? 'start' : 'center',\n textBaseline: isHorizontal ? 'middle' : 'top',\n text: endText.text,\n lineHeight: endText.style?.fontSize,\n ...endText.style\n });\n endTextShape.name = SLIDER_ELEMENT_NAME.endText;\n innerView.add(endTextShape);\n }\n\n this._renderTrack(railContainer);\n\n if (showHandler) {\n this._renderHandlers(mainContainer);\n this._bindEvents();\n }\n\n if (showTooltip) {\n this._renderTooltip();\n this._bindTooltipEvents();\n }\n }\n\n // 渲染滑块轨道\n protected _renderRail(container: IGroup) {\n const { railWidth, railHeight, railStyle, slidable } = this.attribute;\n\n let cursor: Cursor = 'default';\n if (slidable !== false) {\n cursor = 'pointer';\n }\n\n const railShape = graphicCreator.rect({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cursor,\n ...railStyle\n });\n railShape.name = SLIDER_ELEMENT_NAME.rail;\n container.add(railShape);\n this._rail = railShape;\n\n return railShape;\n }\n\n // 渲染 handler\n protected _renderHandlers(container: IGroup) {\n const {\n range,\n min,\n max,\n handlerSize = 14,\n handlerStyle,\n handlerText,\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n let { value } = this.attribute as SliderAttributes;\n if (isNil(value)) {\n value = [min, max];\n }\n\n const handlerTextVisible = handlerText && handlerText.visible;\n const isHorizontal = this._isHorizontal;\n\n const [startValue, endValue] = convertValueToRange(value);\n // 单滑块\n const startPos = this.calculatePosByValue(startValue, range ? 'start' : 'end');\n const startHandler = this._renderHandler({\n x: isHorizontal ? startPos : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : startPos,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n startHandler.name = SLIDER_ELEMENT_NAME.startHandler;\n this._startHandler = startHandler;\n container.add(startHandler);\n this._currentValue.startPos = startPos;\n\n if (handlerTextVisible) {\n const startHandlerText = this._renderHandlerText(startValue, range ? 'start' : 'end');\n startHandlerText.name = SLIDER_ELEMENT_NAME.startHandlerText;\n container.add(startHandlerText);\n\n this._startHandlerText = startHandlerText;\n }\n\n if (range) {\n // 绘制第二个滑块\n // 单滑块\n const endPos = this.calculatePosByValue(endValue, 'end');\n const endHandler = this._renderHandler({\n x: isHorizontal ? endPos : railWidth / 2,\n y: isHorizontal ? railHeight / 2 : endPos,\n size: handlerSize,\n strokeBoundsBuffer: 0,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal),\n ...handlerStyle\n });\n endHandler.name = SLIDER_ELEMENT_NAME.endHandler;\n this._endHandler = endHandler;\n container.add(endHandler);\n this._currentValue.endPos = endPos;\n\n if (handlerTextVisible) {\n const endHandlerText = this._renderHandlerText(endValue, 'end');\n endHandlerText.name = SLIDER_ELEMENT_NAME.endHandlerText;\n container.add(endHandlerText);\n\n this._endHandlerText = endHandlerText;\n }\n }\n }\n\n // 渲染选中区域\n protected _renderTrack(container: IGroup) {\n const { range, min, max, railHeight, railWidth, trackStyle, railStyle, slidable, value } = this\n .attribute as SliderAttributes;\n\n let startValue;\n let endValue;\n\n if (isNil(value)) {\n if (range) {\n startValue = min;\n endValue = max;\n } else {\n startValue = endValue = min;\n }\n } else {\n if (range) {\n const clampValue = clampRange(value as [number, number], min, max);\n startValue = clampValue[0];\n endValue = clampValue[1];\n } else {\n startValue = min;\n endValue = clamp(value as number, min, max);\n }\n }\n\n const isHorizontal = this._isHorizontal;\n // eslint-disable-next-line prefer-const\n // let [startValue, endValue] = convertValueToRange(value);\n\n if (!range) {\n startValue = min;\n }\n\n const trackContainer = graphicCreator.group({\n x: 0,\n y: 0,\n width: railWidth,\n height: railHeight,\n cornerRadius: railStyle?.cornerRadius,\n clip: true,\n pickable: false\n });\n trackContainer.name = SLIDER_ELEMENT_NAME.trackContainer;\n\n const draggableTrack = isObject(range) && range.draggableTrack === true;\n let cursor: Cursor;\n if (slidable === false) {\n cursor = 'default';\n } else if (range === false) {\n cursor = 'pointer';\n } else if (draggableTrack === false) {\n cursor = 'pointer';\n } else {\n cursor = getDefaultCursor(isHorizontal);\n }\n\n const startPos = this.calculatePosByValue(startValue, 'start');\n const endPos = this.calculatePosByValue(endValue, range ? 'end' : 'start');\n\n const track = graphicCreator.rect({\n x: isHorizontal ? Math.min(startPos, endPos) : 0,\n y: isHorizontal ? 0 : Math.min(startPos, endPos),\n width: isHorizontal ? Math.abs(endPos - startPos) : railWidth,\n height: isHorizontal ? railHeight : Math.abs(endPos - startPos),\n cursor,\n ...trackStyle\n });\n track.name = SLIDER_ELEMENT_NAME.track;\n this._track = track;\n trackContainer.add(track);\n container.add(trackContainer);\n }\n\n protected _renderHandler(style: Partial<ISymbolGraphicAttribute>) {\n // 渲染单个滑块\n const handler = graphicCreator.symbol(style);\n\n return handler;\n }\n\n private _renderHandlerText(value: number, position: 'start' | 'end') {\n const {\n align,\n handlerSize = 14,\n handlerText = {},\n railHeight,\n railWidth,\n slidable\n } = this.attribute as SliderAttributes;\n\n const isHorizontal = this._isHorizontal;\n\n const pos = this.calculatePosByValue(value, position);\n const textSpace = handlerText.space ?? 4;\n const textStyle: ITextGraphicAttribute = {\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n lineHeight: handlerText.style?.lineHeight,\n cursor: slidable === false ? 'default' : getDefaultCursor(isHorizontal)\n };\n if (isHorizontal) {\n if (align === 'top') {\n // 展示 slider 上部\n textStyle.textBaseline = 'bottom';\n textStyle.textAlign = 'center';\n textStyle.x = pos;\n textStyle.y = (railHeight - handlerSize) / 2 - textSpace;\n } else {\n // 展示 slider 下部\n textStyle.textBaseline = 'top';\n textStyle.textAlign = 'center';\n textStyle.x = pos;\n textStyle.y = (railHeight + handlerSize) / 2 + textSpace;\n }\n } else {\n if (align === 'left') {\n // 展示 slider 左侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'end';\n textStyle.x = (railWidth - handlerSize) / 2 - textSpace;\n textStyle.y = pos;\n } else {\n // 展示 slider 右侧\n textStyle.textBaseline = 'middle';\n textStyle.textAlign = 'start';\n textStyle.x = (railWidth + handlerSize) / 2 + textSpace;\n textStyle.y = pos;\n }\n }\n\n // 展示 handler 当前所在的数值\n const textShape = graphicCreator.text({\n ...textStyle,\n ...handlerText.style\n });\n return textShape;\n }\n\n private _renderTooltip() {\n const { tooltip, railHeight, railWidth, align } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n this._tooltipState = {\n value: this._currentValue.startValue,\n pos: this._currentValue.startPos\n };\n } else {\n this._tooltipState = null;\n }\n\n const cx = this._isHorizontal ? 0 : railWidth / 2;\n const cy = this._isHorizontal ? railHeight / 2 : 0;\n\n if (tooltip && tooltip.shape) {\n const shape = graphicCreator.symbol({\n pickable: false,\n visible: !!this._tooltipState,\n x: cx,\n y: cy,\n symbolType: 'circle',\n\n ...tooltip.shapeStyle\n });\n\n this._tooltipShape = shape;\n this._mainContainer.add(shape);\n }\n\n const textConfig = (tooltip && tooltip.text) || {};\n const space = textConfig.space ?? 6;\n\n const textStyle: ITextGraphicAttribute = {\n pickable: false,\n visible: !!this._tooltipState,\n text: ''\n };\n\n if (this._isHorizontal) {\n textStyle.x = cx;\n textStyle.y = align === 'top' ? cy - railHeight / 2 - space : cy + railHeight / 2 + space;\n textStyle.textAlign = 'center';\n textStyle.textBaseline = align === 'top' ? 'bottom' : 'top';\n } else {\n textStyle.y = cy;\n textStyle.x = align === 'left' ? cx - railWidth / 2 - space : cy + railWidth / 2 + space;\n textStyle.textAlign = align === 'left' ? 'end' : 'start';\n textStyle.textBaseline = 'middle';\n }\n const text = graphicCreator.text({\n ...textStyle,\n ...textConfig.style\n });\n\n this._mainContainer.add(text);\n this._tooltipText = text;\n\n if (this._tooltipState) {\n this._updateTooltip();\n }\n }\n\n private _updateTooltip() {\n if ((!this._tooltipShape && !this._tooltipText) || !this._tooltipState) {\n return;\n }\n const { railWidth, railHeight } = this.attribute;\n\n const railLen = this._isHorizontal ? railWidth : railHeight;\n const coord = this._tooltipState.pos * railLen;\n const coordKey = this._isHorizontal ? 'x' : 'y';\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttributes({\n visible: true,\n [coordKey]: coord\n });\n }\n const { align } = this.attribute;\n\n if (this._tooltipText) {\n const textConfig = (this.attribute.tooltip && this.attribute.tooltip.text) || {};\n this._tooltipText.setAttributes({\n visible: true,\n [coordKey]: coord,\n text: textConfig.formatter\n ? textConfig.formatter(this._tooltipState.value)\n : !this._isHorizontal && align === 'left'\n ? `${this._tooltipState.value.toFixed(textConfig.precision ?? 0)} ≈`\n : `≈ ${this._tooltipState.value.toFixed(textConfig.precision ?? 0)}`\n });\n }\n }\n\n private _bindEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { slidable, range } = this.attribute as SliderAttributes;\n if (slidable) {\n if (this._startHandler) {\n this._startHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._startHandlerText) {\n this._startHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandler) {\n this._endHandler.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n if (this._endHandlerText) {\n this._endHandlerText.addEventListener(\n 'pointerdown',\n this._onHandlerPointerdown as EventListenerOrEventListenerObject\n );\n }\n\n if (isObject(range) && range.draggableTrack) {\n this._track.addEventListener('pointerdown', this._onTrackPointerdown as EventListenerOrEventListenerObject);\n }\n\n this._railContainer.addEventListener(\n 'pointerdown',\n this._onRailPointerDown as EventListenerOrEventListenerObject\n );\n }\n }\n\n private _bindTooltipEvents() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n\n this._mainContainer.addEventListener('pointerenter', this._onTooltipShow as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointermove', this._onTooltipUpdate as EventListenerOrEventListenerObject);\n this._mainContainer.addEventListener('pointerleave', this._onTooltipHide as EventListenerOrEventListenerObject);\n }\n\n private _onTooltipShow = (e: FederatedPointerEvent) => {\n if (this._isChanging || (this._tooltipState && this._tooltipState.isActive)) {\n return;\n }\n\n if (!this._tooltipState) {\n this._tooltipState = { isActive: true };\n } else {\n this._tooltipState.isActive = true;\n }\n\n this._onTooltipUpdate(e);\n this._dispatchTooltipEvent('sliderTooltipShow');\n };\n\n private _onTooltipUpdate = (e: FederatedPointerEvent) => {\n if (this._isChanging || !this._tooltipState || !this._tooltipState.isActive) {\n return;\n }\n const railLen = this._isHorizontal ? this._rail.globalAABBBounds.width() : this._rail.globalAABBBounds.height();\n const pos = clamp(\n this._isHorizontal\n ? (e.viewX - this._rail.globalAABBBounds.x1) / railLen\n : (e.viewY - this._rail.globalAABBBounds.y1) / railLen,\n 0,\n 1\n );\n\n if (pos !== this._tooltipState.pos) {\n this._tooltipState.pos = pos;\n this._tooltipState.value = this.calculateValueByPos(pos * railLen);\n\n this._updateTooltip();\n this._dispatchTooltipEvent('sliderTooltipUpdate');\n }\n };\n\n private _onTooltipHide = () => {\n const { tooltip } = this.attribute as SliderAttributes;\n\n if (tooltip && tooltip.alwaysShow) {\n return;\n }\n\n this._tooltipState = null;\n\n if (this._tooltipShape) {\n this._tooltipShape.setAttribute('visible', false);\n }\n if (this._tooltipText) {\n this._tooltipText.setAttribute('visible', false);\n }\n this._dispatchTooltipEvent('sliderTooltipHide');\n };\n\n private _onHandlerPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n\n this._currentHandler = e.target as unknown as IGraphic;\n this._prePos = this._isHorizontal ? e.clientX : e.clientY;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onHandlerPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n if (max === min) {\n return;\n }\n\n let currentPos;\n let delta = 0;\n let originPos;\n let railLen;\n if (!this._isHorizontal) {\n currentPos = e.clientY;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.y as number;\n railLen = railHeight;\n } else {\n currentPos = e.clientX;\n delta = currentPos - this._prePos; // 实际位移的变化\n originPos = this._currentHandler?.attribute.x as number;\n railLen = railWidth;\n }\n\n const newPos = clamp(originPos + delta, 0, railLen);\n const currentValue = this.calculateValueByPos(newPos);\n\n if (this._currentHandler.type === 'text') {\n this._updateHandlerText(this._currentHandler as IText, newPos, currentValue);\n } else {\n this._updateHandler(this._currentHandler as ISymbol, newPos, currentValue);\n }\n\n this._updateTrack();\n this._prePos = currentPos;\n\n this._dispatchChangeEvent();\n };\n\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n this._currentHandler = null;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onHandlerPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onHandlerPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener(\n 'pointerupoutside',\n this._onHandlerPointerUp as EventListenerOrEventListenerObject\n );\n }\n };\n\n private _onTrackPointerdown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n this._prePos = this._isHorizontal ? e.clientX : e.clientY;\n if (vglobal.env === 'browser') {\n vglobal.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.addEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.addEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.addEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onTrackPointerMove = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max, inverse } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n const { startHandler, endHandler } = this._getHandlers();\n\n let currentPos;\n let trackLen;\n let railLen;\n if (this._isHorizontal) {\n currentPos = e.clientX;\n // @ts-ignore\n trackLen = this._track.attribute.width;\n railLen = railWidth;\n } else {\n currentPos = e.clientY;\n // @ts-ignore\n trackLen = this._track.attribute.height;\n railLen = railHeight;\n }\n const delta = currentPos - this._prePos; // 实际位移的变化\n if (startHandler) {\n const originPos = (this._isHorizontal ? startHandler.attribute.x : startHandler.attribute.y) as number;\n const newPos = inverse\n ? clamp(originPos + delta, trackLen, railLen)\n : clamp(originPos + delta, 0, railLen - trackLen);\n const currentValue = this.calculateValueByPos(newPos);\n this._updateHandler(startHandler, newPos, currentValue);\n }\n\n if (endHandler) {\n const originPos = (this._isHorizontal ? endHandler.attribute.x : endHandler.attribute.y) as number;\n const newPos = inverse\n ? clamp(originPos + delta, 0, railLen - trackLen)\n : clamp(originPos + delta, trackLen, railLen);\n const currentValue = this.calculateValueByPos(newPos);\n const startHandlerAttribute = startHandler?.attribute;\n this._updateHandler(endHandler, newPos, currentValue);\n this._track.setAttributes(\n this._isHorizontal\n ? {\n x: Math.min(startHandlerAttribute.x as number, endHandler.attribute.x as number),\n // @ts-ignore\n width: Math.abs((startHandlerAttribute.x as number) - (endHandler.attribute.x as number))\n }\n : {\n y: Math.min(startHandlerAttribute.y as number, endHandler.attribute.y as number),\n // @ts-ignore\n height: Math.abs((startHandlerAttribute.y as number) - (endHandler.attribute.y as number))\n }\n );\n }\n\n this._prePos = currentPos;\n this._dispatchChangeEvent();\n };\n\n private _onTrackPointerUp = (e: FederatedPointerEvent) => {\n e.preventDefault();\n this._isChanging = false;\n if (vglobal.env === 'browser') {\n vglobal.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n vglobal.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n } else {\n this.stage.removeEventListener('pointermove', this._onTrackPointerMove as EventListenerOrEventListenerObject, {\n capture: true\n });\n this.stage.removeEventListener('pointerup', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n this.stage.removeEventListener('pointerupoutside', this._onTrackPointerUp as EventListenerOrEventListenerObject);\n }\n };\n\n private _onRailPointerDown = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this._isChanging = true;\n const { railWidth, railHeight, min, max } = this.attribute as SliderAttributes;\n\n if (max === min) {\n return;\n }\n\n const startHandler = this._startHandler as ISymbol;\n const endHandler = this._endHandler;\n\n let currentPos;\n let startHandlerPos;\n let endHandlerPos;\n let railLen;\n // 更新 handler, text 以及 track\n if (this._isHorizontal) {\n currentPos = e.viewX - this._rail.globalAABBBounds.x1;\n startHandlerPos = startHandler?.attribute.x as number;\n endHandlerPos = endHandler?.attribute.x;\n railLen = railWidth;\n } else {\n currentPos = e.viewY - this._rail.globalAABBBounds.y1;\n startHandlerPos = startHandler?.attribute.y as number;\n endHandlerPos = endHandler?.attribute.y;\n railLen = railHeight;\n }\n\n const currentValue = this.calculateValueByPos(currentPos);\n\n if (isValid(endHandlerPos)) {\n const updateHandler = (\n Math.abs(currentPos - startHandlerPos) > Math.abs(currentPos - endHandlerPos) ? endHandler : startHandler\n ) as ISymbol;\n this._updateHandler(updateHandler, currentPos, currentValue);\n } else {\n this._updateHandler(startHandler, currentPos, currentValue);\n }\n this._updateTrack();\n\n this._dispatchChangeEvent();\n };\n\n // 更新 track 样式\n private _updateTrack() {\n // 更新 track\n const { inverse, railWidth, railHeight } = this.attribute;\n const startHandler = this._startHandler;\n const endHandler = this._endHandler;\n\n if (this._isHorizontal) {\n const startHandlerPos = startHandler?.attribute.x as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.x as number;\n // 区间\n this._track.setAttributes({\n x: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n width: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else if (inverse) {\n this._track.setAttributes({\n x: startHandlerPos,\n // @ts-ignore\n width: railWidth - startHandlerPos\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n width: startHandlerPos\n });\n }\n } else {\n const startHandlerPos = startHandler?.attribute.y as number;\n if (endHandler) {\n const endHandlerPos = endHandler?.attribute.y as number;\n // 区间\n this._track.setAttributes({\n y: Math.min(startHandlerPos, endHandlerPos),\n // @ts-ignore\n height: Math.abs(startHandlerPos - endHandlerPos)\n });\n } else if (inverse) {\n this._track.setAttributes({\n y: startHandlerPos,\n // @ts-ignore\n height: railHeight - startHandlerPos\n });\n } else {\n this._track.setAttributes({\n // @ts-ignore\n height: startHandlerPos\n });\n }\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandler(handler: ISymbol, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n handler.setAttribute(isHorizontal ? 'x' : 'y', position);\n const updateHandlerText =\n handler.name === SLIDER_ELEMENT_NAME.startHandler ? this._startHandlerText : this._endHandlerText;\n if (updateHandlerText) {\n const { handlerText = {} } = this.attribute as SliderAttributes;\n updateHandlerText.setAttributes({\n text: handlerText.formatter ? handlerText.formatter(value) : value.toFixed(handlerText.precision ?? 0),\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handler.name === SLIDER_ELEMENT_NAME.startHandler) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n // 更新 handler 以及对应 text\n private _updateHandlerText(handlerText: IText, position: number, value: number) {\n const isHorizontal = this._isHorizontal;\n const { handlerText: handlerTextAttr = {} } = this.attribute as SliderAttributes;\n handlerText.setAttributes({\n [isHorizontal ? 'x' : 'y']: position,\n text: handlerTextAttr.formatter ? handlerTextAttr.formatter(value) : value.toFixed(handlerTextAttr.precision ?? 0)\n });\n const updateHandler =\n handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText ? this._startHandler : this._endHandler;\n if (updateHandler) {\n updateHandler.setAttributes({\n [isHorizontal ? 'x' : 'y']: position\n });\n }\n\n if (handlerText.name === SLIDER_ELEMENT_NAME.startHandlerText) {\n this._currentValue.startValue = value;\n this._currentValue.startPos = position;\n } else {\n this._currentValue.endValue = value;\n this._currentValue.endPos = position;\n }\n }\n\n private _dispatchChangeEvent() {\n const isRange = !!this.attribute.range;\n const currentValue = this._currentValue;\n\n this._dispatchEvent('change', {\n value: isRange\n ? [\n Math.min(currentValue.endValue as number, currentValue.startValue as number),\n Math.max(currentValue.endValue as number, currentValue.startValue as number)\n ]\n : currentValue.startValue,\n position: isRange\n ? [\n Math.min(currentValue.endPos as number, currentValue.startPos as number),\n Math.max(currentValue.endPos as number, currentValue.startPos as number)\n ]\n : currentValue.startPos\n });\n }\n\n private _dispatchTooltipEvent(type: string) {\n this._dispatchEvent('sliderTooltip', {\n type,\n position: this._tooltipState && this._tooltipState.pos,\n value: this._tooltipState && this._tooltipState.value\n });\n }\n\n private _getHandlers() {\n let startHandler = this._startHandler;\n let endHandler = this._endHandler;\n let temp;\n\n if (this._isHorizontal) {\n if (endHandler && (endHandler.attribute.x as number) < (startHandler?.attribute.x as number)) {\n temp = startHandler;\n startHandler = endHandler;\n endHandler = temp;\n }\n } else {\n if (endHandler && (endHandler.attribute.y as number) < (startHandler?.attribute.y as number)) {\n temp = startHandler;\n startHandler = endHandler;\n endHandler = temp;\n }\n }\n\n return {\n startHandler,\n endHandler\n };\n }\n}\n"]}
|
package/cjs/slider/type.d.ts
CHANGED
package/cjs/slider/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/slider/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n ISymbolGraphicAttribute,\n IRectGraphicAttribute,\n ITextGraphicAttribute,\n IGroupGraphicAttribute\n} from '@visactor/vrender-core';\n\ntype Text = string | number;\n\nexport type TextAttribute = {\n /** 是否展示 */\n visible?: boolean;\n /** 文本内容 */\n text?: Text;\n /**\n * 文本同滑块的间距,默认为 6\n */\n space?: number;\n /**\n * 文本样式\n */\n style?: Omit<Partial<ITextGraphicAttribute>, 'text'>;\n};\n\nexport type HandlerTextAttribute = {\n /** 是否展示 */\n visible?: boolean;\n /**\n * 数据展示的小数精度,默认为0,无小数点。\n */\n precision?: number;\n /** 文本内容格式化函数 */\n formatter?: (text: Text) => Text;\n /**\n * 文本同滑块的间距,默认为 6\n */\n space?: number;\n /**\n * 文本样式\n */\n style?: Omit<Partial<ITextGraphicAttribute>, 'text'>;\n};\n\nexport type TooltipConfig = {\n /**\n * 是否展示图标\n */\n shape?: boolean;\n /**\n * 图标的样式配置\n */\n shapeStyle?: Partial<ISymbolGraphicAttribute>;\n\n text?: {\n /**\n * 数据展示的小数精度,默认为0,无小数点。\n */\n precision?: number;\n /**\n * 文本同滑块的间距,默认为 6\n */\n space?: number;\n /**\n * 格式化函数\n */\n formatter?: (value: Text) => Text;\n /**\n * 文本样式\n */\n style?: Omit<Partial<ITextGraphicAttribute>, 'text'>;\n };\n /**\n * 是否始终展示\n */\n alwaysShow?: boolean;\n};\n\nexport type RangeType =\n | boolean\n | {\n /**\n * 范围刻度是否可被拖拽,默认值为 false\n */\n draggableTrack?: boolean;\n };\n\nexport type SliderAttributes = {\n /**\n * 是否允许拖动,默认为 true\n */\n slidable?: boolean;\n /**\n * TODO: 这个类型有问题\n * 布局方式。\n * - 'horizontal' 水平布局\n * - 'vertical' 垂直布局\n */\n layout?: 'horizontal' | 'vertical' | string;\n /**\n * 指定组件中手柄和文字的摆放位置,可选值为:\n * 'left' 手柄和label在滑块左侧,layout 为 vertical 时有效。\n * 'right' 手柄和label在滑块右侧,layout 为 vertical 时有效。\n * 'top' 手柄和label在滑块上侧,layout 为 horizontal 时有效。\n * 'bottom' 手柄和label在滑块下侧,layout 为 horizontal 时有效。\n */\n align?: 'top' | 'bottom' | 'left' | 'right';\n /**\n * 双滑块模式,默认为 false,单滑块模式\n */\n range?: RangeType;\n /**\n * 最小值\n */\n min: number;\n /**\n * 最大值\n */\n max: number;\n /**\n * 设置当前取值。当 range 为 false 时,使用 number,否则用 [number, number]\n */\n value?: number | [number, number];\n /**\n * TODO:\n * 步长,取值必须大于 0,并且可被 (max - min) 整除。\n * 用于离散连续场景\n */\n step?: number;\n\n /**\n * 滑块的宽度\n */\n railWidth: number;\n /**\n * 滑块的高度\n */\n railHeight: number;\n\n /**\n * 是否绘制 handler,默认为 true\n */\n showHandler?: boolean;\n\n /**\n * handler 操作按钮的大小\n */\n handlerSize?: number;\n\n /**\n * 滑块手柄的样式配置\n */\n handlerStyle?: Partial<ISymbolGraphicAttribute>;\n /**\n * 背景轨道样式配置\n */\n railStyle?: Omit<Partial<IRectGraphicAttribute>, 'width' | 'height'>;\n /**\n * 选中区域样式配置\n */\n trackStyle?: Omit<Partial<IRectGraphicAttribute>, 'width' | 'height'>;\n\n /**\n * 滑块首部文本配置\n */\n startText?: TextAttribute;\n /**\n * 滑块尾部文本配置\n */\n endText?: TextAttribute;\n\n /**\n * 滑块对应的文本配置项\n */\n handlerText?: HandlerTextAttribute;\n\n /**\n * tooltip,默认不显示\n * 需要通过交互触发展示:\n * 1. 鼠标移动到组件上\n * 2. 通过API手动触发显示\n *\n * 是否显示 hander 上的 tooltip\n */\n showTooltip?: boolean;\n /**\n * handler tooltip 配置\n */\n tooltip?: TooltipConfig;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n} & IGroupGraphicAttribute;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/slider/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n ISymbolGraphicAttribute,\n IRectGraphicAttribute,\n ITextGraphicAttribute,\n IGroupGraphicAttribute\n} from '@visactor/vrender-core';\n\ntype Text = string | number;\n\nexport type TextAttribute = {\n /** 是否展示 */\n visible?: boolean;\n /** 文本内容 */\n text?: Text;\n /**\n * 文本同滑块的间距,默认为 6\n */\n space?: number;\n /**\n * 文本样式\n */\n style?: Omit<Partial<ITextGraphicAttribute>, 'text'>;\n};\n\nexport type HandlerTextAttribute = {\n /** 是否展示 */\n visible?: boolean;\n /**\n * 数据展示的小数精度,默认为0,无小数点。\n */\n precision?: number;\n /** 文本内容格式化函数 */\n formatter?: (text: Text) => Text;\n /**\n * 文本同滑块的间距,默认为 6\n */\n space?: number;\n /**\n * 文本样式\n */\n style?: Omit<Partial<ITextGraphicAttribute>, 'text'>;\n};\n\nexport type TooltipConfig = {\n /**\n * 是否展示图标\n */\n shape?: boolean;\n /**\n * 图标的样式配置\n */\n shapeStyle?: Partial<ISymbolGraphicAttribute>;\n\n text?: {\n /**\n * 数据展示的小数精度,默认为0,无小数点。\n */\n precision?: number;\n /**\n * 文本同滑块的间距,默认为 6\n */\n space?: number;\n /**\n * 格式化函数\n */\n formatter?: (value: Text) => Text;\n /**\n * 文本样式\n */\n style?: Omit<Partial<ITextGraphicAttribute>, 'text'>;\n };\n /**\n * 是否始终展示\n */\n alwaysShow?: boolean;\n};\n\nexport type RangeType =\n | boolean\n | {\n /**\n * 范围刻度是否可被拖拽,默认值为 false\n */\n draggableTrack?: boolean;\n };\n\nexport type SliderAttributes = {\n /**\n * 是否开启反向展示\n * @default false\n */\n inverse?: boolean;\n /**\n * 是否允许拖动,默认为 true\n */\n slidable?: boolean;\n /**\n * TODO: 这个类型有问题\n * 布局方式。\n * - 'horizontal' 水平布局\n * - 'vertical' 垂直布局\n */\n layout?: 'horizontal' | 'vertical' | string;\n /**\n * 指定组件中手柄和文字的摆放位置,可选值为:\n * 'left' 手柄和label在滑块左侧,layout 为 vertical 时有效。\n * 'right' 手柄和label在滑块右侧,layout 为 vertical 时有效。\n * 'top' 手柄和label在滑块上侧,layout 为 horizontal 时有效。\n * 'bottom' 手柄和label在滑块下侧,layout 为 horizontal 时有效。\n */\n align?: 'top' | 'bottom' | 'left' | 'right';\n /**\n * 双滑块模式,默认为 false,单滑块模式\n */\n range?: RangeType;\n /**\n * 最小值\n */\n min: number;\n /**\n * 最大值\n */\n max: number;\n /**\n * 设置当前取值。当 range 为 false 时,使用 number,否则用 [number, number]\n */\n value?: number | [number, number];\n /**\n * TODO:\n * 步长,取值必须大于 0,并且可被 (max - min) 整除。\n * 用于离散连续场景\n */\n step?: number;\n\n /**\n * 滑块的宽度\n */\n railWidth: number;\n /**\n * 滑块的高度\n */\n railHeight: number;\n\n /**\n * 是否绘制 handler,默认为 true\n */\n showHandler?: boolean;\n\n /**\n * handler 操作按钮的大小\n */\n handlerSize?: number;\n\n /**\n * 滑块手柄的样式配置\n */\n handlerStyle?: Partial<ISymbolGraphicAttribute>;\n /**\n * 背景轨道样式配置\n */\n railStyle?: Omit<Partial<IRectGraphicAttribute>, 'width' | 'height'>;\n /**\n * 选中区域样式配置\n */\n trackStyle?: Omit<Partial<IRectGraphicAttribute>, 'width' | 'height'>;\n\n /**\n * 滑块首部文本配置\n */\n startText?: TextAttribute;\n /**\n * 滑块尾部文本配置\n */\n endText?: TextAttribute;\n\n /**\n * 滑块对应的文本配置项\n */\n handlerText?: HandlerTextAttribute;\n\n /**\n * tooltip,默认不显示\n * 需要通过交互触发展示:\n * 1. 鼠标移动到组件上\n * 2. 通过API手动触发显示\n *\n * 是否显示 hander 上的 tooltip\n */\n showTooltip?: boolean;\n /**\n * handler tooltip 配置\n */\n tooltip?: TooltipConfig;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n} & IGroupGraphicAttribute;\n"]}
|
package/es/axis/base.js
CHANGED
|
@@ -14,7 +14,7 @@ import { DEFAULT_AXIS_THEME } from "./config";
|
|
|
14
14
|
|
|
15
15
|
import { Tag } from "../tag/tag";
|
|
16
16
|
|
|
17
|
-
import { getElMap } from "./util";
|
|
17
|
+
import { getElMap, getVerticalCoord } from "./util";
|
|
18
18
|
|
|
19
19
|
export class AxisBase extends AbstractComponent {
|
|
20
20
|
constructor() {
|
|
@@ -177,11 +177,7 @@ export class AxisBase extends AbstractComponent {
|
|
|
177
177
|
container.add(axisTitle);
|
|
178
178
|
}
|
|
179
179
|
getVerticalCoord(point, offset, inside) {
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
x: point.x + vector[0],
|
|
183
|
-
y: point.y + vector[1]
|
|
184
|
-
};
|
|
180
|
+
return getVerticalCoord(point, this.getVerticalVector(offset, inside, point));
|
|
185
181
|
}
|
|
186
182
|
getTextAlign(vector) {
|
|
187
183
|
let align = "center";
|
package/es/axis/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/axis/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * TODO:\n * 1. trunk 坐标轴截断\n * @description 坐标轴组件基类\n */\nimport type {\n IGroup,\n INode,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType,\n FederatedPointerEvent,\n IGraphic,\n IText\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { abs, cloneDeep, get, isEmpty, isFunction, isNumberClose, merge, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { Point } from '../core/type';\nimport type { TagAttributes } from '../tag';\nimport { isRichText, richTextAttributeTransform, traverseGroup } from '../util';\nimport { DEFAULT_STATES, StateValue } from '../constant';\nimport { AXIS_ELEMENT_NAME } from './constant';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport type {\n LabelAttributes,\n AxisBaseAttributes,\n AxisItem,\n TickAttributes,\n TransformedAxisItem,\n SubTickAttributes,\n TickLineItem\n} from './type';\nimport { Tag } from '../tag/tag';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { getElMap } from './util';\n\nexport abstract class AxisBase<T extends AxisBaseAttributes> extends AbstractComponent<Required<T>> {\n name = 'axis';\n\n // TODO: 组件整体统一起来\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: { [key: string]: IGraphic }; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n protected tickLineItems: TickLineItem[] = [];\n protected subTickLineItems: TickLineItem[] = [];\n protected axisLabelLayerSize: Dict<{ width: number; height: number; textAlign: string; textBaseline: string }> = {};\n protected axisLabelsContainer: IGroup | null = null;\n protected axisContainer: IGroup;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract renderLine(container: IGroup): void;\n abstract isInValidValue(value: number): boolean;\n abstract getTickCoord(value: number): Point;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n abstract getRelativeVector(point?: Point): [number, number];\n protected abstract getTitleAttribute(): TagAttributes;\n protected abstract getTextBaseline(vector: [number, number], inside?: boolean): TextBaselineType;\n protected abstract beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType };\n\n /**\n * 坐标轴的一个特殊的方法,用于不更新场景树来获取更新属性后的包围盒\n * TODO:后面看情况再抽象为通用的方法\n */\n getBoundsWithoutRender(attributes: Partial<T>) {\n const currentAttribute = cloneDeep(this.attribute);\n merge(this.attribute, attributes);\n\n const offscreenGroup = graphicCreator.group({\n x: this.attribute.x,\n y: this.attribute.y\n });\n this.add(offscreenGroup);\n\n this._renderInner(offscreenGroup);\n\n this.removeChild(offscreenGroup);\n this.attribute = currentAttribute;\n return offscreenGroup.AABBBounds;\n }\n\n protected render(): void {\n this._prevInnerView = this._innerView && getElMap(this._innerView);\n this.removeAllChild(true);\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n this._renderInner(this._innerView);\n\n this._bindEvent();\n }\n\n private _bindEvent() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._innerView.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._innerView.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._innerView.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && target.name && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState(StateValue.selected)) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (target.name && !isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _renderInner(container: IGroup) {\n const { title, label, tick, line, items } = this.attribute;\n\n const axisContainer = graphicCreator.group({ x: 0, y: 0, zIndex: 1 });\n axisContainer.name = AXIS_ELEMENT_NAME.axisContainer;\n axisContainer.id = this._getNodeId('container');\n axisContainer.setMode(this.mode);\n this.axisContainer = axisContainer;\n container.add(axisContainer);\n\n // 渲染轴线\n if (line && line.visible) {\n this.renderLine(axisContainer);\n }\n\n if (items && items.length) {\n this.data = this._transformItems(items[0]);\n\n // 渲染刻度线,包含子刻度线\n if (tick && tick.visible) {\n this.renderTicks(axisContainer);\n }\n // 渲染标签\n if (label && label.visible) {\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = AXIS_ELEMENT_NAME.labelContainer;\n labelGroup.id = this._getNodeId('label-container');\n this.axisLabelsContainer = labelGroup;\n axisContainer.add(labelGroup);\n items.forEach((axisItems: AxisItem[], layer: number) => {\n const layerLabelGroup = this.renderLabels(labelGroup, axisItems, layer);\n\n const labels = layerLabelGroup.getChildren() as IText[];\n this.beforeLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n // handle overlap\n this.handleLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n this.afterLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n\n let maxTextWidth = 0;\n let maxTextHeight = 0;\n let textAlign = 'center';\n let textBaseline = 'middle';\n labels.forEach((label: IText) => {\n const labelStyle = label.attribute;\n const angle = labelStyle.angle ?? 0;\n const textBounds = label.AABBBounds;\n let textWidth = textBounds.width();\n let textHeight = textBounds.height();\n if (angle) {\n textWidth = Math.abs(textWidth * Math.cos(angle));\n textHeight = Math.abs(textHeight * Math.sin(angle));\n }\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, textHeight);\n\n textAlign = labelStyle.textAlign as string;\n textBaseline = labelStyle.textBaseline as string;\n });\n this.axisLabelLayerSize[layer] = {\n width: maxTextWidth,\n height: maxTextHeight,\n\n textAlign,\n textBaseline\n };\n });\n }\n }\n\n // 渲染标题\n if (title && title.visible) {\n this.renderTitle(axisContainer);\n }\n }\n protected renderTicks(container: IGroup) {\n const tickLineItems = this.getTickLineItems();\n\n const tickLineGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n tickLineGroup.name = AXIS_ELEMENT_NAME.tickContainer;\n tickLineGroup.id = this._getNodeId('tick-container');\n container.add(tickLineGroup);\n\n tickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('tick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.tick;\n line.id = this._getNodeId(item.id);\n\n if (isEmpty(this.attribute.tick?.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const data = this.data[index];\n const tickLineState = merge({}, DEFAULT_STATES, this.attribute.tick.state);\n Object.keys(tickLineState).forEach(key => {\n if (isFunction(tickLineState[key])) {\n tickLineState[key] = tickLineState[key](data.rawValue, index, data, this.data);\n }\n });\n line.states = tickLineState;\n }\n\n tickLineGroup.add(line);\n });\n this.tickLineItems = tickLineItems;\n\n // subTick 处理\n const { subTick } = this.attribute;\n if (subTick && subTick.visible) {\n const subTickLineItems: TickLineItem[] = this.getSubTickLineItems();\n if (subTickLineItems.length) {\n subTickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('subTick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.subTick;\n line.id = this._getNodeId(`${index}`);\n\n if (isEmpty(subTick.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const subTickLineState = merge({}, DEFAULT_STATES, subTick.state);\n Object.keys(subTickLineState).forEach(key => {\n if (isFunction(subTickLineState[key])) {\n subTickLineState[key] = subTickLineState[key](item.value, index, item, tickLineItems);\n }\n });\n line.states = subTickLineState;\n }\n\n tickLineGroup.add(line);\n });\n }\n\n this.subTickLineItems = subTickLineItems;\n }\n }\n\n protected renderLabels(container: IGroup, items: AxisItem[], layer: number) {\n const { dataFilter } = this.attribute.label;\n if (dataFilter && isFunction(dataFilter)) {\n items = dataFilter(items, layer) as TransformedAxisItem[];\n }\n const data = this._transformItems(items);\n\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = `${AXIS_ELEMENT_NAME.labelContainer}-layer-${layer}`;\n labelGroup.id = this._getNodeId(`label-container-layer-${layer}`);\n container.add(labelGroup);\n\n data.forEach((item: TransformedAxisItem, index: number) => {\n const labelStyle: any = this._getLabelAttribute(item, index, data, layer);\n let text;\n if (isRichText(labelStyle)) {\n text = graphicCreator.richtext(richTextAttributeTransform(labelStyle));\n } else {\n text = graphicCreator.text(labelStyle as any);\n }\n text.name = AXIS_ELEMENT_NAME.label;\n text.id = this._getNodeId(`layer${layer}-label-${item.id}`);\n if (isEmpty(this.attribute.label?.state)) {\n text.states = DEFAULT_STATES;\n } else {\n const labelState = merge({}, DEFAULT_STATES, this.attribute.label.state);\n Object.keys(labelState).forEach(key => {\n if (isFunction(labelState[key])) {\n labelState[key] = labelState[key](item, index, data, layer);\n }\n });\n text.states = labelState;\n }\n\n labelGroup.add(text);\n });\n\n return labelGroup;\n }\n\n protected renderTitle(container: IGroup) {\n const titleAttributes = this.getTitleAttribute();\n const axisTitle = new Tag({\n ...titleAttributes\n });\n axisTitle.name = AXIS_ELEMENT_NAME.title;\n axisTitle.id = this._getNodeId('title');\n container.add(axisTitle as unknown as INode);\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n const vector = this.getVerticalVector(offset, inside, point);\n return {\n x: point.x + vector[0],\n y: point.y + vector[1]\n };\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n protected getTickLineItems() {\n const { tick } = this.attribute;\n const data = this.data;\n // tick 处理\n const tickLineItems: TickLineItem[] = [];\n const { alignWithLabel, inside = false, length, dataFilter } = tick as TickAttributes;\n let tickSegment = 1;\n const count = data.length;\n if (count >= 2) {\n tickSegment = data[1].value - data[0].value;\n }\n\n (dataFilter && isFunction(dataFilter) ? dataFilter(data) : data).forEach((item: TransformedAxisItem) => {\n let point = item.point;\n let tickValue = item.value;\n if (!alignWithLabel) {\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n tickValue = value;\n }\n const endPoint = this.getVerticalCoord(point, length as number, inside);\n\n if (this.mode === '3d') {\n const vec = this.getVerticalVector(length as number, inside, point);\n let alpha = 0;\n let beta = 0;\n if (abs(vec[0]) > abs(vec[1])) {\n alpha = (pi / 2) * (endPoint.x > point.x ? 1 : -1);\n } else {\n beta = (pi / 2) * (endPoint.y > point.y ? -1 : 1);\n }\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`,\n anchor: [point.x, point.y],\n alpha,\n beta\n });\n } else {\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`\n });\n }\n });\n\n return tickLineItems;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as AxisBaseAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n\n if (tickLineCount >= 2) {\n for (let i = 0; i < tickLineCount - 1; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value,\n id: `sub-tick-${value}`\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n\n private _getTickLineAttribute(type: string, tickItem: TickLineItem, index: number, tickItems: TickLineItem[]) {\n let style = get(this.attribute, `${type}.style`);\n const data = this.data[index];\n style = isFunction(style)\n ? merge(\n {},\n get(DEFAULT_AXIS_THEME, `${type}.style`),\n type === 'tick'\n ? style(data.rawValue, index, data, this.data)\n : style(tickItem.value, index, tickItem, tickItems)\n )\n : style;\n\n const { start, end, anchor, alpha, beta } = tickItem;\n return {\n points: [start, end],\n anchor,\n alpha,\n beta,\n ...style\n };\n }\n\n private _getLabelAttribute(\n tickDatum: TransformedAxisItem,\n index: number,\n tickData: TransformedAxisItem[],\n layer: number\n ) {\n const { space = 4, inside = false, formatMethod, type = 'text', text } = this.attribute.label as LabelAttributes;\n let offset = space;\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === inside) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === inside) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n offset += tickLength;\n\n // 先测试 line\n const axisVector = this.getRelativeVector(tickDatum.point);\n if (layer > 0) {\n if (axisVector[1] === 0) {\n offset += (this.axisLabelLayerSize[layer - 1].height + get(this.attribute, 'label.space', 4)) * layer;\n } else {\n offset += (this.axisLabelLayerSize[layer - 1].width + get(this.attribute, 'label.space', 4)) * layer;\n }\n }\n\n const point = this.getVerticalCoord(tickDatum.point, offset, inside);\n const vector = this.getVerticalVector(offset || 1, inside, point);\n const textContent = formatMethod\n ? formatMethod(`${tickDatum.label}`, tickDatum, index, tickData, layer)\n : tickDatum.label;\n let { style: textStyle } = this.attribute.label as LabelAttributes;\n textStyle = isFunction(textStyle)\n ? merge({}, DEFAULT_AXIS_THEME.label.style, textStyle(tickDatum, index, tickData, layer))\n : textStyle;\n\n const labelAlign = this.getLabelAlign(vector, inside, (textStyle as ITextGraphicAttribute).angle);\n textStyle = merge(labelAlign, textStyle) as Partial<ITextGraphicAttribute>;\n // 兼容原先 style.text 回调的方式\n if (isFunction(textStyle.text)) {\n // @ts-ignore\n textStyle.text = textStyle.text({\n label: tickDatum.label,\n value: tickDatum.rawValue,\n index: tickDatum.index,\n layer\n });\n }\n\n return {\n ...this.getLabelPosition(point, vector, textContent, textStyle),\n text: text ?? textContent,\n lineHeight: textStyle?.fontSize,\n type,\n ...textStyle\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial<ITextGraphicAttribute>\n ) {\n return point;\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n\n release(): void {\n super.release();\n this._prevInnerView = null;\n this._innerView = null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/axis/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * TODO:\n * 1. trunk 坐标轴截断\n * @description 坐标轴组件基类\n */\nimport type {\n IGroup,\n INode,\n ITextGraphicAttribute,\n TextAlignType,\n TextBaselineType,\n FederatedPointerEvent,\n IGraphic,\n IText\n} from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { Dict } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { abs, cloneDeep, get, isEmpty, isFunction, isNumberClose, merge, pi } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { Point } from '../core/type';\nimport type { TagAttributes } from '../tag';\nimport { isRichText, richTextAttributeTransform, traverseGroup } from '../util';\nimport { DEFAULT_STATES, StateValue } from '../constant';\nimport { AXIS_ELEMENT_NAME } from './constant';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport type {\n LabelAttributes,\n AxisBaseAttributes,\n AxisItem,\n TickAttributes,\n TransformedAxisItem,\n SubTickAttributes,\n TickLineItem\n} from './type';\nimport { Tag } from '../tag/tag';\nimport { DEFAULT_HTML_TEXT_SPEC } from '../constant';\nimport { getElMap, getVerticalCoord } from './util';\n\nexport abstract class AxisBase<T extends AxisBaseAttributes> extends AbstractComponent<Required<T>> {\n name = 'axis';\n\n // TODO: 组件整体统一起来\n protected _innerView: IGroup;\n getInnerView() {\n return this._innerView;\n }\n\n protected _prevInnerView: { [key: string]: IGraphic }; // 缓存旧场景树,用于自定义动画\n /**\n * 获取更新前的旧场景树\n * @returns 返回更新前的旧场景树\n */\n getPrevInnerView() {\n return this._prevInnerView;\n }\n\n // 经过处理后的坐标轴点数据\n protected data: TransformedAxisItem[] = [];\n protected tickLineItems: TickLineItem[] = [];\n protected subTickLineItems: TickLineItem[] = [];\n protected axisLabelLayerSize: Dict<{ width: number; height: number; textAlign: string; textBaseline: string }> = {};\n protected axisLabelsContainer: IGroup | null = null;\n protected axisContainer: IGroup;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n protected abstract renderLine(container: IGroup): void;\n abstract isInValidValue(value: number): boolean;\n abstract getTickCoord(value: number): Point;\n abstract getVerticalVector(offset: number, inside: boolean, point: Point): [number, number];\n abstract getRelativeVector(point?: Point): [number, number];\n protected abstract getTitleAttribute(): TagAttributes;\n protected abstract getTextBaseline(vector: [number, number], inside?: boolean): TextBaselineType;\n protected abstract beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void;\n protected abstract getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType };\n\n /**\n * 坐标轴的一个特殊的方法,用于不更新场景树来获取更新属性后的包围盒\n * TODO:后面看情况再抽象为通用的方法\n */\n getBoundsWithoutRender(attributes: Partial<T>) {\n const currentAttribute = cloneDeep(this.attribute);\n merge(this.attribute, attributes);\n\n const offscreenGroup = graphicCreator.group({\n x: this.attribute.x,\n y: this.attribute.y\n });\n this.add(offscreenGroup);\n\n this._renderInner(offscreenGroup);\n\n this.removeChild(offscreenGroup);\n this.attribute = currentAttribute;\n return offscreenGroup.AABBBounds;\n }\n\n protected render(): void {\n this._prevInnerView = this._innerView && getElMap(this._innerView);\n this.removeAllChild(true);\n this._innerView = graphicCreator.group({ x: 0, y: 0, pickable: false });\n this.add(this._innerView);\n\n this._renderInner(this._innerView);\n\n this._bindEvent();\n }\n\n private _bindEvent() {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { hover, select } = this.attribute;\n\n if (hover) {\n this._innerView.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n this._innerView.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n this._innerView.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && target.name && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState(StateValue.selected)) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node.name && !isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (target.name && !isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this.axisContainer, (node: IGraphic) => {\n if (node !== target && node.name && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _renderInner(container: IGroup) {\n const { title, label, tick, line, items } = this.attribute;\n\n const axisContainer = graphicCreator.group({ x: 0, y: 0, zIndex: 1 });\n axisContainer.name = AXIS_ELEMENT_NAME.axisContainer;\n axisContainer.id = this._getNodeId('container');\n axisContainer.setMode(this.mode);\n this.axisContainer = axisContainer;\n container.add(axisContainer);\n\n // 渲染轴线\n if (line && line.visible) {\n this.renderLine(axisContainer);\n }\n\n if (items && items.length) {\n this.data = this._transformItems(items[0]);\n\n // 渲染刻度线,包含子刻度线\n if (tick && tick.visible) {\n this.renderTicks(axisContainer);\n }\n // 渲染标签\n if (label && label.visible) {\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = AXIS_ELEMENT_NAME.labelContainer;\n labelGroup.id = this._getNodeId('label-container');\n this.axisLabelsContainer = labelGroup;\n axisContainer.add(labelGroup);\n items.forEach((axisItems: AxisItem[], layer: number) => {\n const layerLabelGroup = this.renderLabels(labelGroup, axisItems, layer);\n\n const labels = layerLabelGroup.getChildren() as IText[];\n this.beforeLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n // handle overlap\n this.handleLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n this.afterLabelsOverlap(labels, axisItems, layerLabelGroup, layer, items.length);\n\n let maxTextWidth = 0;\n let maxTextHeight = 0;\n let textAlign = 'center';\n let textBaseline = 'middle';\n labels.forEach((label: IText) => {\n const labelStyle = label.attribute;\n const angle = labelStyle.angle ?? 0;\n const textBounds = label.AABBBounds;\n let textWidth = textBounds.width();\n let textHeight = textBounds.height();\n if (angle) {\n textWidth = Math.abs(textWidth * Math.cos(angle));\n textHeight = Math.abs(textHeight * Math.sin(angle));\n }\n maxTextWidth = Math.max(maxTextWidth, textWidth);\n maxTextHeight = Math.max(maxTextHeight, textHeight);\n\n textAlign = labelStyle.textAlign as string;\n textBaseline = labelStyle.textBaseline as string;\n });\n this.axisLabelLayerSize[layer] = {\n width: maxTextWidth,\n height: maxTextHeight,\n\n textAlign,\n textBaseline\n };\n });\n }\n }\n\n // 渲染标题\n if (title && title.visible) {\n this.renderTitle(axisContainer);\n }\n }\n protected renderTicks(container: IGroup) {\n const tickLineItems = this.getTickLineItems();\n\n const tickLineGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n tickLineGroup.name = AXIS_ELEMENT_NAME.tickContainer;\n tickLineGroup.id = this._getNodeId('tick-container');\n container.add(tickLineGroup);\n\n tickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('tick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.tick;\n line.id = this._getNodeId(item.id);\n\n if (isEmpty(this.attribute.tick?.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const data = this.data[index];\n const tickLineState = merge({}, DEFAULT_STATES, this.attribute.tick.state);\n Object.keys(tickLineState).forEach(key => {\n if (isFunction(tickLineState[key])) {\n tickLineState[key] = tickLineState[key](data.rawValue, index, data, this.data);\n }\n });\n line.states = tickLineState;\n }\n\n tickLineGroup.add(line);\n });\n this.tickLineItems = tickLineItems;\n\n // subTick 处理\n const { subTick } = this.attribute;\n if (subTick && subTick.visible) {\n const subTickLineItems: TickLineItem[] = this.getSubTickLineItems();\n if (subTickLineItems.length) {\n subTickLineItems.forEach((item: TickLineItem, index) => {\n const line = graphicCreator.line({\n ...this._getTickLineAttribute('subTick', item, index, tickLineItems)\n });\n line.name = AXIS_ELEMENT_NAME.subTick;\n line.id = this._getNodeId(`${index}`);\n\n if (isEmpty(subTick.state)) {\n line.states = DEFAULT_STATES;\n } else {\n const subTickLineState = merge({}, DEFAULT_STATES, subTick.state);\n Object.keys(subTickLineState).forEach(key => {\n if (isFunction(subTickLineState[key])) {\n subTickLineState[key] = subTickLineState[key](item.value, index, item, tickLineItems);\n }\n });\n line.states = subTickLineState;\n }\n\n tickLineGroup.add(line);\n });\n }\n\n this.subTickLineItems = subTickLineItems;\n }\n }\n\n protected renderLabels(container: IGroup, items: AxisItem[], layer: number) {\n const { dataFilter } = this.attribute.label;\n if (dataFilter && isFunction(dataFilter)) {\n items = dataFilter(items, layer) as TransformedAxisItem[];\n }\n const data = this._transformItems(items);\n\n const labelGroup = graphicCreator.group({ x: 0, y: 0, pickable: false });\n labelGroup.name = `${AXIS_ELEMENT_NAME.labelContainer}-layer-${layer}`;\n labelGroup.id = this._getNodeId(`label-container-layer-${layer}`);\n container.add(labelGroup);\n\n data.forEach((item: TransformedAxisItem, index: number) => {\n const labelStyle: any = this._getLabelAttribute(item, index, data, layer);\n let text;\n if (isRichText(labelStyle)) {\n text = graphicCreator.richtext(richTextAttributeTransform(labelStyle));\n } else {\n text = graphicCreator.text(labelStyle as any);\n }\n text.name = AXIS_ELEMENT_NAME.label;\n text.id = this._getNodeId(`layer${layer}-label-${item.id}`);\n if (isEmpty(this.attribute.label?.state)) {\n text.states = DEFAULT_STATES;\n } else {\n const labelState = merge({}, DEFAULT_STATES, this.attribute.label.state);\n Object.keys(labelState).forEach(key => {\n if (isFunction(labelState[key])) {\n labelState[key] = labelState[key](item, index, data, layer);\n }\n });\n text.states = labelState;\n }\n\n labelGroup.add(text);\n });\n\n return labelGroup;\n }\n\n protected renderTitle(container: IGroup) {\n const titleAttributes = this.getTitleAttribute();\n const axisTitle = new Tag({\n ...titleAttributes\n });\n axisTitle.name = AXIS_ELEMENT_NAME.title;\n axisTitle.id = this._getNodeId('title');\n container.add(axisTitle as unknown as INode);\n }\n\n protected getVerticalCoord(point: Point, offset: number, inside: boolean): Point {\n return getVerticalCoord(point, this.getVerticalVector(offset, inside, point));\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n protected getTickLineItems() {\n const { tick } = this.attribute;\n const data = this.data;\n // tick 处理\n const tickLineItems: TickLineItem[] = [];\n const { alignWithLabel, inside = false, length, dataFilter } = tick as TickAttributes;\n let tickSegment = 1;\n const count = data.length;\n if (count >= 2) {\n tickSegment = data[1].value - data[0].value;\n }\n\n (dataFilter && isFunction(dataFilter) ? dataFilter(data) : data).forEach((item: TransformedAxisItem) => {\n let point = item.point;\n let tickValue = item.value;\n if (!alignWithLabel) {\n const value = item.value - tickSegment / 2;\n if (this.isInValidValue(value)) {\n return;\n }\n point = this.getTickCoord(value);\n tickValue = value;\n }\n const endPoint = this.getVerticalCoord(point, length as number, inside);\n\n if (this.mode === '3d') {\n const vec = this.getVerticalVector(length as number, inside, point);\n let alpha = 0;\n let beta = 0;\n if (abs(vec[0]) > abs(vec[1])) {\n alpha = (pi / 2) * (endPoint.x > point.x ? 1 : -1);\n } else {\n beta = (pi / 2) * (endPoint.y > point.y ? -1 : 1);\n }\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`,\n anchor: [point.x, point.y],\n alpha,\n beta\n });\n } else {\n tickLineItems.push({\n start: point,\n end: endPoint,\n value: tickValue,\n id: `tick-${item.id}`\n });\n }\n });\n\n return tickLineItems;\n }\n\n protected getSubTickLineItems() {\n const { subTick } = this.attribute as AxisBaseAttributes;\n const subTickLineItems: TickLineItem[] = [];\n const { count: subCount = 4, inside = false, length = 2 } = subTick as SubTickAttributes;\n const tickLineItems = this.tickLineItems;\n const tickLineCount = tickLineItems.length;\n\n if (tickLineCount >= 2) {\n for (let i = 0; i < tickLineCount - 1; i++) {\n const pre = tickLineItems[i];\n const next = tickLineItems[i + 1];\n for (let j = 0; j < subCount; j++) {\n const percent = (j + 1) / (subCount + 1);\n const value = (1 - percent) * pre.value + percent * next.value;\n const point = this.getTickCoord(value);\n const endPoint = this.getVerticalCoord(point, length, inside);\n subTickLineItems.push({\n start: point,\n end: endPoint,\n value,\n id: `sub-tick-${value}`\n });\n }\n }\n }\n\n return subTickLineItems;\n }\n\n private _getTickLineAttribute(type: string, tickItem: TickLineItem, index: number, tickItems: TickLineItem[]) {\n let style = get(this.attribute, `${type}.style`);\n const data = this.data[index];\n style = isFunction(style)\n ? merge(\n {},\n get(DEFAULT_AXIS_THEME, `${type}.style`),\n type === 'tick'\n ? style(data.rawValue, index, data, this.data)\n : style(tickItem.value, index, tickItem, tickItems)\n )\n : style;\n\n const { start, end, anchor, alpha, beta } = tickItem;\n return {\n points: [start, end],\n anchor,\n alpha,\n beta,\n ...style\n };\n }\n\n private _getLabelAttribute(\n tickDatum: TransformedAxisItem,\n index: number,\n tickData: TransformedAxisItem[],\n layer: number\n ) {\n const { space = 4, inside = false, formatMethod, type = 'text', text } = this.attribute.label as LabelAttributes;\n let offset = space;\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === inside) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === inside) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n offset += tickLength;\n\n // 先测试 line\n const axisVector = this.getRelativeVector(tickDatum.point);\n if (layer > 0) {\n if (axisVector[1] === 0) {\n offset += (this.axisLabelLayerSize[layer - 1].height + get(this.attribute, 'label.space', 4)) * layer;\n } else {\n offset += (this.axisLabelLayerSize[layer - 1].width + get(this.attribute, 'label.space', 4)) * layer;\n }\n }\n\n const point = this.getVerticalCoord(tickDatum.point, offset, inside);\n const vector = this.getVerticalVector(offset || 1, inside, point);\n const textContent = formatMethod\n ? formatMethod(`${tickDatum.label}`, tickDatum, index, tickData, layer)\n : tickDatum.label;\n let { style: textStyle } = this.attribute.label as LabelAttributes;\n textStyle = isFunction(textStyle)\n ? merge({}, DEFAULT_AXIS_THEME.label.style, textStyle(tickDatum, index, tickData, layer))\n : textStyle;\n\n const labelAlign = this.getLabelAlign(vector, inside, (textStyle as ITextGraphicAttribute).angle);\n textStyle = merge(labelAlign, textStyle) as Partial<ITextGraphicAttribute>;\n // 兼容原先 style.text 回调的方式\n if (isFunction(textStyle.text)) {\n // @ts-ignore\n textStyle.text = textStyle.text({\n label: tickDatum.label,\n value: tickDatum.rawValue,\n index: tickDatum.index,\n layer\n });\n }\n\n return {\n ...this.getLabelPosition(point, vector, textContent, textStyle),\n text: text ?? textContent,\n lineHeight: textStyle?.fontSize,\n type,\n ...textStyle\n };\n }\n\n protected getLabelPosition(\n point: Point,\n vector: [number, number],\n text: string | number,\n style: Partial<ITextGraphicAttribute>\n ) {\n return point;\n }\n\n private _transformItems(items: AxisItem[]) {\n const data: TransformedAxisItem[] = [];\n items.forEach((item: AxisItem) => {\n data.push({\n ...item,\n point: this.getTickCoord(item.value),\n id: item.id ?? item.label\n });\n });\n return data;\n }\n\n release(): void {\n super.release();\n this._prevInnerView = null;\n this._innerView = null;\n }\n}\n"]}
|
package/es/axis/circle.js
CHANGED
|
@@ -22,7 +22,7 @@ import { AXIS_ELEMENT_NAME, DEFAULT_STATES } from "./constant";
|
|
|
22
22
|
|
|
23
23
|
import { CircleAxisMixin } from "./mixin/circle";
|
|
24
24
|
|
|
25
|
-
import {
|
|
25
|
+
import { getCircleLabelPosition } from "./util";
|
|
26
26
|
|
|
27
27
|
import { loadCircleAxisComponent } from "./register";
|
|
28
28
|
|
|
@@ -114,7 +114,7 @@ export class CircleAxis extends AxisBase {
|
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
116
|
getLabelPosition(point, vector, text, style) {
|
|
117
|
-
return
|
|
117
|
+
return getCircleLabelPosition(point, vector, text, style);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|