@visactor/vscale
Version:
Scales for visual encoding, used in VGrammar, VTable
41 lines (35 loc) • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.stepTicks = exports.ticks = void 0;
const vutils_1 = require("@visactor/vutils");
function generateTicks(start, stop, step, reverse) {
const ticks = [];
let ptr = start;
for (;ptr <= stop; ) ticks.push(ptr), ptr += step;
return reverse && ticks.reverse(), ticks;
}
function ticks(start, stop, count, allowExcessive) {
let reverse, step;
if (stop = Math.floor(+stop), start = Math.floor(+start), !(count = Math.floor(+count))) return [];
if (start === stop) return [ start ];
if (reverse = stop < start) {
const n = start;
start = stop, stop = n;
}
let expectedCount = (0, vutils_1.clamper)(1, stop - start + 1)(count);
if (step = Math.floor((stop - start + 1) / expectedCount), !allowExcessive) for (;Math.ceil((stop - start + 1) / step) > count && expectedCount > 1; ) expectedCount -= 1,
step = Math.floor((stop - start) / expectedCount);
return generateTicks(start, stop, step, reverse);
}
function stepTicks(start, stop, step) {
let reverse;
if (stop = Math.floor(+stop), start = Math.floor(+start), step = (0, vutils_1.clamper)(1, stop - start + 1)(Math.floor(+step)),
reverse = stop < start) {
const n = start;
start = stop, stop = n;
}
return generateTicks(start, stop, step, reverse);
}
exports.ticks = ticks, exports.stepTicks = stepTicks;
//# sourceMappingURL=tick-sample-int.js.map