UNPKG

@tanstack/charts

Version:

A chart grammar for TypeScript and JavaScript. Marks consume your data directly, channels describe visual encodings, and the engine compiles them into a renderer-neutral keyed scene. TanStack's compact scales cover common numeric and categorical mappings.

53 lines (52 loc) 1.39 kB
import { intern, uniqueDomain } from "./intern.js"; const implicit = /* @__PURE__ */ Symbol("implicit"); function scaleOrdinal(first, second) { let domain = []; let index = /* @__PURE__ */ new Map(); let range = []; let unknown = implicit; const scale = ((value) => { const key = intern(value); let position = index.get(key); if (position === void 0) { if (unknown !== implicit) return unknown; position = domain.length; index.set(key, position); domain.push(value); } return range[position % range.length]; }); scale.domain = ((values) => { if (values === void 0) return domain.slice(); const next = uniqueDomain(values); domain = next.domain; index = next.index; return scale; }); scale.range = ((values) => { if (values === void 0) return range.slice(); range = Array.from(values); return scale; }); scale.unknown = function(value) { if (arguments.length === 0) { return unknown === implicit ? void 0 : unknown; } unknown = value; return scale; }; scale.copy = () => { const copy = scaleOrdinal(domain, range); if (unknown !== implicit) copy.unknown(unknown); return copy; }; if (second !== void 0) { scale.domain(first).range(second); } else if (first !== void 0) { scale.range(first); } return scale; } export { scaleOrdinal };