{"version":3,"file":"index.cjs","sources":["../../../src/containers/single-container/index.tsx"],"sourcesContent":["import { SingleContainer } from '@unovis/ts'\nimport type {\n  Annotations,\n  Tooltip,\n  SingleContainerConfigInterface,\n  ComponentCore,\n} from '@unovis/ts'\nimport type { JSX, ParentProps } from 'solid-js'\nimport { createEffect, createSignal, on, onCleanup, splitProps } from 'solid-js'\nimport { createStore, produce } from 'solid-js/store'\nimport type { VisContainerContextProps } from '../../utils/context'\nimport { VisContainerContext } from '../../utils/context'\nimport { createTrigger } from '../../utils/trigger'\nimport { combineStyle } from '../../utils/combine-style'\n\nexport type VisSingleContainerProps<Datum> = ParentProps<\n  SingleContainerConfigInterface<Datum> & {\n    data?: Datum\n    class?: string\n    style?: JSX.CSSProperties\n  }\n>\n\nexport function VisSingleContainer<Datum>(\n  props: VisSingleContainerProps<Datum>\n) {\n  const [div, style, data, rest] = splitProps(\n    props,\n    ['children', 'class'],\n    ['style'],\n    ['data']\n  )\n  const [ref, setRef] = createSignal<HTMLDivElement>()\n  const [chart, setChart] = createSignal<SingleContainer<Datum>>()\n  const [config, setConfig] = createStore<\n    SingleContainerConfigInterface<Datum>\n  >({\n    component: undefined,\n    annotations: undefined,\n    tooltip: undefined,\n  })\n  const [track, dirty] = createTrigger()\n\n  const init = () => {\n    const c = chart()\n    const r = ref()\n\n    if (c) return\n    if (r && config.component)\n      setChart(new SingleContainer(r, config, data.data))\n  }\n\n  onCleanup(() => chart()?.destroy())\n\n  createEffect(\n    on(\n      () => data.data,\n      (data) => {\n        if (data) chart()?.setData(data)\n      }\n    )\n  )\n\n  createEffect(() => {\n    init()\n    // track the changes\n    track()\n    chart()?.updateContainer({ ...config, ...rest })\n  })\n\n  const update: VisContainerContextProps['update'] = (key, value) => {\n    setConfig(\n      produce((c) => {\n        switch (key) {\n          case 'component':\n            c.component = value() as ComponentCore<Datum>\n            break\n          case 'annotations':\n            c.annotations = value() as Annotations\n            break\n          case 'tooltip':\n            c.tooltip = value() as Tooltip\n        }\n      })\n    )\n  }\n\n  const destroy: VisContainerContextProps['destroy'] = (key) => {\n    setConfig(\n      produce((c) => {\n        switch (key) {\n          case 'component':\n            c.component = undefined\n            break\n          case 'annotations':\n            c.annotations = undefined\n            break\n          case 'tooltip':\n            c.tooltip = undefined\n        }\n      })\n    )\n  }\n\n  return (\n    <VisContainerContext.Provider value={{ update, destroy, dirty }}>\n      <div\n        data-vis-single-container\n        ref={setRef}\n        style={combineStyle(\n          {\n            display: 'block',\n            position: 'relative',\n            width: '100%',\n          },\n          style.style\n        )}\n        {...div}\n      />\n    </VisContainerContext.Provider>\n  )\n}\n"],"names":["VisSingleContainer","props","div","style","data","rest","splitProps","ref","setRef","createSignal","chart","setChart","config","setConfig","createStore","component","undefined","annotations","tooltip","track","dirty","createTrigger","init","c","r","SingleContainer","onCleanup","destroy","createEffect","on","setData","updateContainer","update","key","value","produce","_$createComponent","VisContainerContext","Provider","children","_el$","_tmpl$","_$use","_$spread","_$mergeProps","combineStyle","display","position","width"],"mappings":"mWAuBO,SAASA,EACdC,EACA,CACA,KAAM,CAACC,EAAKC,EAAOC,EAAMC,CAAI,EAAIC,EAAAA,WAC/BL,EACA,CAAC,WAAY,OAAO,EACpB,CAAC,OAAO,EACR,CAAC,MAAM,CACT,EACM,CAACM,EAAKC,CAAM,EAAIC,eAAAA,EAChB,CAACC,EAAOC,CAAQ,EAAIF,eAAAA,EACpB,CAACG,EAAQC,CAAS,EAAIC,cAE1B,CACAC,UAAWC,OACXC,YAAaD,OACbE,QAASF,MAAAA,CACV,EACK,CAACG,EAAOC,CAAK,EAAIC,gBAAAA,EAEjBC,EAAOA,IAAM,CACjB,MAAMC,EAAIb,EAAAA,EACJc,EAAIjB,EAAAA,EAENgB,GACAC,GAAKZ,EAAOG,WACdJ,EAAS,IAAIc,kBAAgBD,EAAGZ,EAAQR,EAAKA,IAAI,CAAC,CACtD,EAEAsB,EAAAA,UAAU,IAAMhB,KAASiB,SAAS,EAElCC,EAAAA,aACEC,EAAAA,GACE,IAAMzB,EAAKA,KACVA,GAAS,CACJA,GAAMM,KAASoB,QAAQ1B,CAAI,CACjC,CACF,CACF,EAEAwB,EAAAA,aAAa,IAAM,CACjBN,EAAAA,EAEAH,EAAAA,EACAT,EAAAA,GAASqB,gBAAgB,CAAE,GAAGnB,EAAQ,GAAGP,CAAAA,CAAM,CACjD,CAAC,EAED,MAAM2B,EAA6CA,CAACC,EAAKC,IAAU,CACjErB,EACEsB,EAAAA,QAASZ,GAAM,CACb,OAAQU,EAAAA,CACN,IAAK,YACHV,EAAER,UAAYmB,EAAAA,EACd,MACF,IAAK,cACHX,EAAEN,YAAciB,EAAAA,EAChB,MACF,IAAK,UACHX,EAAEL,QAAUgB,EAAAA,CAAM,CAExB,CAAC,CACH,CACF,EAEMP,EAAgDM,GAAQ,CAC5DpB,EACEsB,EAAAA,QAASZ,GAAM,CACb,OAAQU,EAAAA,CACN,IAAK,YACHV,EAAER,UAAYC,OACd,MACF,IAAK,cACHO,EAAEN,YAAcD,OAChB,MACF,IAAK,UACHO,EAAEL,QAAUF,MAAAA,CAElB,CAAC,CACH,CACF,EAEA,OAAAoB,EAAAA,gBACGC,EAAAA,oBAAoBC,SAAQ,CAACJ,MAAO,CAAEF,OAAAA,EAAQL,QAAAA,EAASP,MAAAA,CAAAA,EAAO,IAAAmB,UAAA,CAAA,IAAAC,EAAAC,EAAAA,EAAAC,OAAAA,EAAAA,IAGtDlC,EAAMgC,CAAA,EAAAG,EAAAA,OAAAH,EAAAI,aAAA,CAAA,IACXzC,OAAK,CAAA,OAAE0C,eACL,CACEC,QAAS,QACTC,SAAU,WACVC,MAAO,MAAA,EAET7C,EAAMA,KACR,CAAC,CAAA,EACGD,CAAG,EAAA,GAAA,EAAA,EAAAsC,CAAA,CAAA,CAAA,CAIf"}