{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eslint/src/components/d3/d3-component.js"],"names":["Morph","d3","debounce","walkTreeData","d","before","after","children","forEach","ea","Component","initialize","updateViz","options","addEventListener","evt","onExtentChanged","getData","data","setData","dataColor","node","defaultValue","color","undefined","dataTitle","title","label","dataLabel","dataWidth","width","dataHeight","height","dataFontsize","fontsize","onNodeClick","element","onclick","lively","notify","id","Error","config","Object","keys","key","livelyInspect","contentNode","inspector","appendChild","display","livelyMigrate","other"],"mappings":"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","file":"d3-component.js","sourcesContent":["\n/*MD \n# D3 (Abstract)  Component \n![](d3-component.png){height=200}\n\nMD*/\n\nimport Morph from \"src/components/widgets/lively-morph.js\"\nimport d3 from \"src/external/d3.v5.js\"\n\nimport { debounce } from \"utils\";\n\n\nexport function walkTreeData(d, before, after) {\n  if (before) before(d);\n  if (d.children) {\n    d.children.forEach(ea => {\n      walkTreeData(ea, before, after)\n    })\n  } \n  if (after) after(d);\n}\n\n/* Abstract component */\n\nexport default class Component extends Morph {\n\n  initialize() {\n    this.d3 = d3 // for scripting...\n    this.updateViz()\n    this.options = this.options || {}\n    this.addEventListener('extent-changed', ((evt) => {\n      this.onExtentChanged(evt);\n    })::debounce(500));\n  }\n  \n  walkTreeData(d, before, after) {\n    return walkTreeData(d, before, after)\n  }\n  \n  getData() {\n    return this.data\n  }\n\n  setData(data) {\n    this.data = data;\n    this.updateViz()\n  }  \n  \n  dataColor(node, defaultValue=\"gray\") {\n    if (this.options.color !== undefined) return this.options.color(node)\n    return defaultValue\n  }\n  \n  dataTitle(node) {\n    if (this.options.title !== undefined) return this.options.title(node)\n    return node.label\n  }\n\n  dataLabel(node) {\n    if (this.options.label !== undefined) return this.options.label(node)\n    return node.label\n  }\n\n  dataWidth(node, defaultValue=20) {\n    if (this.options.width !== undefined) return this.options.width(node, defaultValue)\n    return defaultValue\n  }\n\n  dataHeight(node, defaultValue=20) {\n    if (this.options.height !== undefined) return this.options.height(node, defaultValue)\n    return defaultValue\n  }\n  \n  dataFontsize(node, defaultValue=10) {\n    if (this.options.fontsize !== undefined) return this.options.fontsize(node, defaultValue)\n    return defaultValue\n  }\n  \n  onNodeClick(node, evt, element) {\n    if (this.options.onclick) return this.options.onclick(node, evt, element)\n    lively.notify(\"clicked on \" + node.id)\n  }\n  \n  updateViz() {\n    throw new Error(\"subclass responsibility\")\n  }\n  \n  config(config) {\n    Object.keys(config).forEach(key => {\n      // lively.notify(\"key \" + key) \n      this.options[key] = config[key] // we could check them here...      \n    })\n  }\n\n  livelyInspect(contentNode, inspector) {\n    if (this.data) {\n      contentNode.appendChild(inspector.display(this.data, false, \"#data\", this));\n    }\n  }\n\n  onExtentChanged() {\n    // lively.notify(\"extent changed\")\n    this.updateViz()\n  }\n\n  livelyMigrate(other) {\n    this.data = other.data\n    this.options = other.options\n  }\n\n}\n"]}