UNPKG

squarified

Version:
83 lines (80 loc) 3.17 kB
import { l as logger, m as mixin, E as Event, a as assertExists, b as bindParentForModule, C as Component, D as DOMEvent } from './dom-event-DrYYfglv.mjs'; export { G as DefaultMap, x as applyCanvasTransform, c as c2m, w as createCanvasElement, r as createRoundBlock, t as createTitleText, h as definePlugin, f as findRelativeNode, d as findRelativeNodeById, e as flattenModule, g as getNodeDepth, o as hashCode, i as isClickEvent, j as isContextMenuEvent, k as isMouseEvent, F as isScrollWheelOrRightButtonOnMouseupAndDown, n as isWheelEvent, q as noop, p as perferNumeric, u as raf, B as smoothFrame, s as sortChildrenByKey, z as stackMatrixTransform, A as stackMatrixTransformWithGraphAndLayer, y as typedForIn, v as visit } from './dom-event-DrYYfglv.mjs'; function createTreemap(// @ts-expect-error todo fix options) { const { plugins = [], graphic = {} } = options || {}; let root = null; let installed = false; let domEvent = null; let component = null; const exposedEvent = new Event(); if (!Array.isArray(plugins)) { logger.panic('Plugins should be an array'); } const ctx = { init, dispose, resize, setOptions }; function init(el) { component = new Component(graphic, el); domEvent = new DOMEvent(component); root = el; root.style.position = 'relative'; if (!installed) { plugins.forEach((plugin)=>component?.pluginDriver.use(plugin)); installed = true; component.pluginDriver.runHook('onLoad', ctx, domEvent); } domEvent.on('__exposed__', (type, args)=>exposedEvent.emit(type, args)); } function dispose() { if (root && component && domEvent) { domEvent.destory(); component.destory(); root.removeChild(root.firstChild); for(const evt in exposedEvent.eventCollections){ exposedEvent.off(evt); } component.pluginDriver.runHook('onDispose'); root = null; component = null; domEvent = null; } } function resize() { if (!component || !root) { return; } const { width, height } = root.getBoundingClientRect(); component.render.initOptions({ height, width, devicePixelRatio: window.devicePixelRatio }); component.render.canvas.style.position = 'absolute'; if (domEvent) { component.pluginDriver.runHook('onResize', domEvent); } component.cleanup(); component.draw(); } function setOptions(options) { assertExists(component, logger, 'Treemap not initialized. Please call `init()` before setOptions.'); component.data = bindParentForModule(options.data); resize(); } const base = mixin(ctx, [ { name: 'on', fn: ()=>exposedEvent.on.bind(exposedEvent) }, { name: 'off', fn: ()=>exposedEvent.off.bind(exposedEvent) } ]); return base; } export { createTreemap, mixin };