UNPKG

@visactor/vtable

Version:

canvas table width high performance

55 lines (50 loc) 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.BandAxisScale = void 0; const vscale_1 = require("@visactor/vscale"), vutils_1 = require("@visactor/vutils"); class BandAxisScale { constructor() { this._scale = new vscale_1.BandScale, this._scales = [ this._scale ]; } valueToPosition(value) { return this._scale.scale(value); } getPosition(values) { let position = 0, bandScale = this._scale; if (1 === this._scales.length || 1 === values.length) position = this.valueToPosition(values[0]); else { const max = Math.min(values.length, this._scales.length); for (let i = 0; i < max; i++) position += this._scales[i].scale(values[i]); bandScale = this._scales[max - 1]; } return { position: position, bandScale: bandScale }; } calcScales(defalutBandInnerPadding, defalutBandOuterPadding) { var _a, _b; const {bandPadding: bandPadding, paddingInner: paddingInner, paddingOuter: paddingOuter} = this, isBandPaddingArray = (0, vutils_1.isArray)(bandPadding), isPaddingInnerArray = (0, vutils_1.isArray)(paddingInner), isPaddingOuterArray = (0, vutils_1.isArray)(paddingOuter); for (let i = 0; i < this._scales.length; i++) { const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding, _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner, _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter; this._scales[i].paddingInner(null !== (_a = null != _paddingInner ? _paddingInner : _padding) && void 0 !== _a ? _a : defalutBandInnerPadding, !0).paddingOuter(null !== (_b = null != _paddingOuter ? _paddingOuter : _padding) && void 0 !== _b ? _b : defalutBandOuterPadding); } } dataToPosition(values, cfg = {}) { var _a; if (0 === values.length || 0 === this._scales.length) return 0; const {position: position, bandScale: bandScale} = this.getPosition(values); return position + bandScale.bandwidth() * (null !== (_a = cfg.bandPosition) && void 0 !== _a ? _a : .5); } updateScaleDomain(domain) { for (let i = 0; i < this._scales.length; i++) this._scales[i].domain(domain); } updateRange(newRange) { const [start, end] = this._scale.range(); newRange[0] === start && newRange[1] === end || this._scale.range(newRange); } } exports.BandAxisScale = BandAxisScale; //# sourceMappingURL=band-scale.js.map