{"version":3,"sources":["jsdelivr-header.js","/npm/17dscs@0.0.0-beta4/dist/Dscomponent.js"],"names":[],"mappings":"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","file":"/npm/17dscs@0.0.0-beta4/dist/Dscomponent.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.19.2.\n * Original file: /npm/17dscs@0.0.0-beta4/dist/Dscomponent.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","function randomColor(bigBalls) {\n  // return rc;\n  return \"white\";\n}\n\nfunction randomX(canvas) {\n  let x = Math.floor(Math.random() * canvas.width + canvas.width / 2);\n  if (x < 30) {\n    x = 30;\n  } else if (x + 30 > canvas.width) {\n    x = canvas.width - 30;\n  }\n  return x;\n}\n\nfunction randomY(canvas) {\n  let y = Math.floor(Math.random() * canvas.height);\n  if (y < 30) {\n    y = 30;\n  } else if (y + 30 > canvas.height) {\n    y = canvas.height - 30;\n  }\n  return y;\n}\n\nfunction randomDx() {\n  const dxs = [2, -2];\n  let r = Math.floor(Math.random() * 2);\n  return dxs[r];\n  // let r = Math.floor(Math.random() * 10 - 4);\n  // return r;\n}\n\nfunction randomDy() {\n  const dys = [2, -2];\n  let r = Math.floor(Math.random() * 2);\n  return dys[r];\n  // let r = Math.floor(Math.random() * 10 - 3);\n  // return r;\n}\n\nfunction distance(a, b) {\n  return Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);\n}\n\nclass Ball {\n  constructor(x, y, radius, bigBalls) {\n    this.radius = radius;\n    this.x = x;\n    this.y = y;\n\n    this.dx = randomDx();\n    this.dy = randomDy();\n\n    // mass is that of a sphere as opposed to circle\n    // it *does* make a difference in how realistic it looks\n    this.mass = this.radius * this.radius * this.radius;\n    this.color = randomColor();\n  }\n\n  draw(ctx) {\n    ctx.beginPath();\n    ctx.arc(Math.round(this.x), Math.round(this.y), this.radius, 0, 2 * Math.PI);\n    ctx.fillStyle = this.color;\n    ctx.fill();\n    // ctx.strokeStyle = \"rgba(0, 0, 0, 0.6)\";\n    // ctx.stroke();\n    ctx.closePath();\n  }\n\n  speed() {\n    // magnitude of velocity vector\n    return Math.sqrt(this.dx * this.dx + this.dy * this.dy);\n  }\n  angle() {\n    // velocity's angle with the x axis\n    return Math.atan2(this.dy, this.dx);\n  }\n  onGround() {\n    return this.y + this.radius >= canvas.height;\n  }\n}\n\nconst covidDataChart = [\"1(0216)\", \"2(0301)\", \"3(0316)\", \"4(0401)\", \"5(0503)\", \"6(future)\", \"7(future)\", \"8(last)\"];\n\nlet time = 0;\nlet offset = 2428;\nlet timepass = false;\n\nclass Data {\n  constructor() {\n    this.affectedLearner = 999014;\n    this.pastAffectedLearner = 0;\n    this.totalLearner = this.affectedLearner * 1000;\n    this.isDrawed = false;\n    this.chartInterval = 0;\n    this.covidDataDiff = 0;\n    this.covidData = {\n      \"1(0216)\": 0,\n      \"2(0301)\": 17.1,\n      \"3(0316)\": 44,\n      \"4(0401)\": 91.3,\n      \"5(0503)\": 73.4,\n      \"6(future)\": 72,\n      \"7(future)\": 71,\n      \"8(last)\": 69,\n    };\n\n    const interval = setInterval(() => {\n      time += 200;\n      if (time > 17000) clearInterval(interval);\n      if (time > 0 && time < offset) {\n        this.covidDataDiff += (this.covidData[covidDataChart[1]] - this.covidData[covidDataChart[0]]) / 11.7;\n      }\n      if (time > offset && time < offset * 2) {\n        this.covidDataDiff += (this.covidData[covidDataChart[2]] - this.covidData[covidDataChart[1]]) / 11.7;\n      }\n      if (time > offset * 2 && time < offset * 3) {\n        this.covidDataDiff += (this.covidData[covidDataChart[3]] - this.covidData[covidDataChart[2]]) / 11.7;\n      }\n      if (time > offset * 3 && time < offset * 4) {\n        this.covidDataDiff += (this.covidData[covidDataChart[4]] - this.covidData[covidDataChart[3]]) / 11.7;\n      }\n      if (time > offset * 4 && time < offset * 5) {\n        timepass = true;\n        this.covidDataDiff += (this.covidData[covidDataChart[5]] - this.covidData[covidDataChart[4]]) / 11.7;\n      }\n      if (time > offset * 5 && time < offset * 6) {\n        this.covidDataDiff += (this.covidData[covidDataChart[6]] - this.covidData[covidDataChart[5]]) / 11.7;\n      }\n      if (time > offset * 6 && time < offset * 7) {\n        this.covidDataDiff += (this.covidData[covidDataChart[7]] - this.covidData[covidDataChart[6]]) / 11.7;\n      }\n    }, 200);\n  }\n\n  getSubtractAffectedLearner() {\n    return Math.floor(this.affectedLearner / 10000000) - Math.floor(this.pastAffectedLearner / 10000000);\n  }\n  getAffectedLearner() {\n    return Math.floor(this.affectedLearner / 10000000);\n  }\n  getTotalLearner() {\n    return Math.floor(this.totalLearner / 10000000);\n  }\n  updateFutureData() {\n    if (timepass) {\n      if (time > offset * 4 && time < offset * 5) {\n        this.covidData[covidDataChart[5]] -= 0.8;\n        this.covidData[covidDataChart[6]] -= 0.8;\n        this.covidData[covidDataChart[7]] -= 0.8;\n      }\n      if (time > offset * 5 && time < offset * 6) {\n        this.covidData[covidDataChart[6]] -= 0.8;\n        this.covidData[covidDataChart[7]] -= 0.8;\n      }\n      if (time > offset * 6 && time < offset * 7) {\n        this.covidData[covidDataChart[7]] -= 0.8;\n      }\n    }\n  }\n}\n\nconst data = new Data();\n\nfunction actionCanvas(canvas) {\n  // data.run();\n  let ctx = canvas.getContext(\"2d\");\n\n  let leftBalls = [];\n  let rightBalls = [];\n\n  let mouseon = false;\n  let offsetX = 0;\n  let offsetY = 0;\n  let mousePosition = false;\n\n  let bigBalls = false;\n\n  let lastTime = new Date().getTime();\n  let currentTime = 0;\n  let dt = 0;\n\n  // let numStartingSmallBalls = data.getTotalLearner();\n  // let numStartingBigBalls = 0;\n  let numStartingLeftBalls = 100;\n\n  function clearCanvas() {\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n  }\n\n  function canvasBackground() {\n    if (mousePosition === \"right\") {\n      canvas.style.backgroundColor = \"black\";\n    } else {\n      canvas.style.backgroundColor = \"#136A9F\";\n    }\n    ctx.beginPath();\n    ctx.rect(0, 0, canvas.width / 2, canvas.height);\n    if (mousePosition === \"left\") {\n      ctx.fillStyle = \"black\";\n    } else {\n      ctx.fillStyle = \"#8F1838\";\n    }\n    ctx.fill();\n  }\n\n  function wallCollision(ball) {\n    // console.log(ball);\n    if (ball.x < canvas.width / 2 - ball.radius) {\n      if (ball.x - ball.radius + ball.dx < 0 || ball.x + ball.radius + ball.dx > canvas.width / 2) {\n        ball.dx *= -1;\n      }\n    }\n    if (ball.x > canvas.width / 2 + ball.radius) {\n      if (ball.x - ball.radius + ball.dx < canvas.width / 2 || ball.x + ball.radius + ball.dx > canvas.width) {\n        ball.dx *= -1;\n      }\n    }\n    if (ball.y - ball.radius + ball.dy < 0 || ball.y + ball.radius + ball.dy > canvas.height) {\n      ball.dy *= -1;\n    }\n    if (ball.y + ball.radius > canvas.height) {\n      ball.y = canvas.height - ball.radius;\n    }\n    if (ball.y - ball.radius < 0) {\n      ball.y = ball.radius;\n    }\n    if (ball.x + ball.radius > canvas.width) {\n      ball.x = canvas.width - ball.radius;\n    }\n    if (ball.x - ball.radius < 0) {\n      ball.x = ball.radius;\n    }\n  }\n\n  function ballCollision(balls) {\n    for (let i = 0; i < balls.length - 1; i++) {\n      for (let j = i + 1; j < balls.length; j++) {\n        let obj1 = balls[i];\n        let obj2 = balls[j];\n        let dist = distance(obj1, obj2);\n        if (dist < obj1.radius + obj2.radius) {\n          let vCollision = { x: obj2.x - obj1.x, y: obj2.y - obj1.y };\n          let _distance = Math.sqrt((obj2.x - obj1.x) * (obj2.x - obj1.x) + (obj2.y - obj1.y) * (obj2.y - obj1.y));\n          let vCollisionNorm = { x: vCollision.x / _distance, y: vCollision.y / _distance };\n          let vRelativeVelocity = { x: obj1.dx - obj2.dx, y: obj1.dy - obj2.dy };\n          let speed = vRelativeVelocity.x * vCollisionNorm.x + vRelativeVelocity.y * vCollisionNorm.y;\n\n          obj1.dx -= speed * vCollisionNorm.x;\n          obj1.dy -= speed * vCollisionNorm.y;\n          obj2.dx += speed * vCollisionNorm.x;\n          obj2.dy += speed * vCollisionNorm.y;\n          staticCollision(obj1, obj2);\n        }\n      }\n      wallCollision(balls[i]);\n    }\n\n    if (balls.length > 0) wallCollision(balls[balls.length - 1]);\n  }\n\n  // function ballCollision2() {\n  //   for (let i = 0; i < leftBalls.length - 1; i++) {\n  //     for (let j = i + 1; j < leftBalls.length; j++) {\n  //       let ob1 = leftBalls[i];\n  //       let ob2 = leftBalls[j];\n  //       let dist = distance(ob1, ob2);\n\n  //       if (dist < ob1.radius + ob2.radius) {\n  //         let theta1 = ob1.angle();\n  //         let theta2 = ob2.angle();\n  //         let phi = Math.atan2(ob2.y - ob1.y, ob2.x - ob1.x);\n  //         let m1 = ob1.mass;\n  //         let m2 = ob2.mass;\n  //         let v1 = ob1.speed();\n  //         let v2 = ob2.speed();\n\n  //         let dx1F =\n  //           ((v1 * Math.cos(theta1 - phi) * (m1 - m2) + 2 * m2 * v2 * Math.cos(theta2 - phi)) / (m1 + m2)) * Math.cos(phi) +\n  //           v1 * Math.sin(theta1 - phi) * Math.cos(phi + Math.PI / 2);\n  //         let dy1F =\n  //           ((v1 * Math.cos(theta1 - phi) * (m1 - m2) + 2 * m2 * v2 * Math.cos(theta2 - phi)) / (m1 + m2)) * Math.sin(phi) +\n  //           v1 * Math.sin(theta1 - phi) * Math.sin(phi + Math.PI / 2);\n  //         let dx2F =\n  //           ((v2 * Math.cos(theta2 - phi) * (m2 - m1) + 2 * m1 * v1 * Math.cos(theta1 - phi)) / (m1 + m2)) * Math.cos(phi) +\n  //           v2 * Math.sin(theta2 - phi) * Math.cos(phi + Math.PI / 2);\n  //         let dy2F =\n  //           ((v2 * Math.cos(theta2 - phi) * (m2 - m1) + 2 * m1 * v1 * Math.cos(theta1 - phi)) / (m1 + m2)) * Math.sin(phi) +\n  //           v2 * Math.sin(theta2 - phi) * Math.sin(phi + Math.PI / 2);\n\n  //         ob1.dx = dx1F;\n  //         ob1.dy = dy1F;\n  //         ob2.dx = dx2F;\n  //         ob2.dy = dy2F;\n  //         // ob1.dx *= -1;\n  //         // ob1.dy *= -1;\n  //         // ob2.dx *= -1;\n  //         // ob2.dy *= -1;\n\n  //         staticCollision(ob1, ob2);\n  //       }\n  //     }\n  //     wallCollision(leftBalls[i]);\n  //   }\n\n  //   if (leftBalls.length > 0) wallCollision(leftBalls[leftBalls.length - 1]);\n  // }\n\n  function staticCollision(ob1, ob2, emergency = false) {\n    let overlap = ob1.radius + ob2.radius - distance(ob1, ob2);\n    // let smallerObject = ob1.radius < ob2.radius ? ob1 : ob2;\n    // let biggerObject = ob1.radius > ob2.radius ? ob1 : ob2;\n    let smallerObject = ob1;\n    let biggerObject = ob2;\n\n    // When things go normally, this line does not execute.\n    // \"Emergency\" is when staticCollision has run, but the collision\n    // still hasn't been resolved. Which implies that one of the objects\n    // is likely being jammed against a corner, so we must now move the OTHER one instead.\n    // in other words: this line basically swaps the \"little guy\" role, because\n    // the actual little guy can't be moved away due to being blocked by the wall.\n    if (emergency) [smallerObject, biggerObject] = [biggerObject, smallerObject];\n\n    let theta = Math.atan2(biggerObject.y - smallerObject.y, biggerObject.x - smallerObject.x);\n    smallerObject.x -= overlap * Math.cos(theta);\n    smallerObject.y -= overlap * Math.sin(theta);\n\n    if (distance(ob1, ob2) < ob1.radius + ob2.radius) {\n      // we don't want to be stuck in an infinite emergency.\n      // so if we have already run one emergency round; just ignore the problem.\n      if (!emergency) staticCollision(ob1, ob2, true);\n    }\n  }\n\n  // function keyDownHandler(event) {\n  //   if (event.keyCode == 67) {\n  //     // c\n  //     leftBalls[leftBalls.length] = new Ball(randomX(canvas), randomY(canvas), 5, bigBalls);\n  //   } else if (event.keyCode == 80) {\n  //     // p\n  //     paused = !paused;\n  //   } else if (event.keyCode == 71) {\n  //     // g\n  //     // This feature WAS taken out\n  //     // because of a bug where\n  //     // balls \"merge\" with each other\n  //     // when under a lot of pressure.\n\n  //     // putting back in\n\n  //     gravityOn = !gravityOn;\n  //   } else if (event.keyCode == 65) {\n  //     // A\n  //     leftHeld = true;\n  //   } else if (event.keyCode == 87) {\n  //     // W\n  //     upHeld = true;\n  //   } else if (event.keyCode == 68) {\n  //     // D\n  //     rightHeld = true;\n  //   } else if (event.keyCode == 83) {\n  //     // S\n  //     downHeld = true;\n  //   } else if (event.keyCode == 82) {\n  //     // r\n  //     leftBalls = [];\n  //   } else if (event.keyCode == 75) {\n  //     // k\n  //     clearCanv = !clearCanv;\n  //   } else if (event.keyCode == 88) {\n  //     // x\n  //     bigBalls = !bigBalls;\n  //   }\n  // }\n\n  // function applyGravity() {\n  //   for (let obj in leftBalls) {\n  //     let ob = leftBalls[obj];\n  //     if (ob.onGround() == false) {\n  //       ob.dy += 0.29;\n  //     }\n\n  //     // apply basic drag\n  //     ob.dx *= 0.99;\n  //     ob.dy *= 0.975;\n  //   }\n  // }\n\n  function moveObjects(balls) {\n    for (let i = 0; i < balls.length; i++) {\n      let ob = balls[i];\n      ob.x += ob.dx * dt;\n      ob.y += ob.dy * dt;\n    }\n  }\n\n  function drawObjects(balls) {\n    for (let obj in balls) {\n      balls[obj].draw(ctx);\n    }\n  }\n\n  function draw() {\n    currentTime = new Date().getTime();\n    dt = (currentTime - lastTime) / 1000; // delta time in seconds\n\n    // dirty and lazy solution\n    // instead of scaling up every velocity vector the program\n    // we increase the speed of time\n    dt *= 20;\n\n    clearCanvas();\n    canvasBackground();\n\n    {\n      moveObjects(leftBalls);\n      moveObjects(rightBalls);\n      ballCollision(leftBalls);\n      ballCollision(rightBalls);\n    }\n\n    drawObjects(leftBalls);\n    drawObjects(rightBalls);\n\n    if (mouseon) {\n      // The size of the emoji is set with the font\n      ctx.font = \"16px serif\";\n      // use these alignment properties for \"better\" positioning\n      ctx.textAlign = \"center\";\n      ctx.textBaseline = \"top\";\n      // draw the emoji\n      if (mousePosition === \"left\") {\n        ctx.fillText(\"🌐ONLINE EDU\", offsetX, offsetY);\n      }\n      if (mousePosition === \"right\") {\n        ctx.fillText(\"🏫GOOD FACILITY\", offsetX, offsetY);\n      }\n    }\n\n    //logger();\n\n    lastTime = currentTime;\n    window.requestAnimationFrame(draw);\n  }\n\n  // spawn the initial small thingies.\n  for (i = 0; i < numStartingLeftBalls; i++) {\n    leftBalls[leftBalls.length] = new Ball(randomX(canvas), randomY(canvas), 5, bigBalls);\n  }\n\n  // // manually spawn the few large ones that\n  // // start with no velocity. (lazy code)\n  // bigBalls = true;\n  // for (i = 0; i < numStartingBigBalls; i++) {\n  //   let temp = new Ball(randomX(canvas), randomY(canvas), randomRadius(bigBalls), bigBalls);\n  //   temp.dx = randomDx() / 8;\n  //   temp.dy = randomDy() / 12;\n  //   leftBalls[leftBalls.length] = temp;\n  // }\n\n  let prevData = 0;\n  let currentData = 0;\n  let time = 0;\n  const interval = setInterval(() => {\n    time += 200;\n    if (time > 17000) clearInterval(interval);\n    const covidRate = data.covidDataDiff;\n    currentData = covidRate;\n    let diff = currentData - prevData;\n    if (diff > 0) {\n      for (let i = 0; i < Math.round(diff); i++) {\n        leftBalls.splice(0, 1);\n        rightBalls[rightBalls.length] = new Ball(30, randomY(canvas), 5, bigBalls);\n      }\n    } else {\n      if (mouseon) {\n        for (let i = 0; i < Math.round(Math.abs(diff) + 0.3); i++) {\n          rightBalls.splice(0, 1);\n          leftBalls[leftBalls.length] = new Ball(randomX(canvas), randomY(canvas), 5, bigBalls);\n        }\n      } else {\n        for (let i = 0; i < Math.round(Math.abs(diff)); i++) {\n          rightBalls.splice(0, 1);\n          leftBalls[leftBalls.length] = new Ball(randomX(canvas), randomY(canvas), 5, bigBalls);\n        }\n      }\n    }\n    prevData = currentData;\n  }, 200);\n\n  draw();\n\n  let tempInterval;\n\n  canvas.addEventListener(\"mousemove\", onMouseMove, false);\n  canvas.addEventListener(\"mouseenter\", () => {\n    if (!data.isDrawed) {\n      tempInterval = setInterval(() => {\n        data.updateFutureData();\n      }, 100);\n    }\n  });\n  function onMouseMove(e) {\n    mouseon = true;\n    offsetX = e.offsetX;\n    offsetY = e.offsetY;\n    if (e.offsetX < canvas.width / 2) {\n      mousePosition = \"left\";\n    } else {\n      mousePosition = \"right\";\n    }\n  }\n  canvas.addEventListener(\n    \"mouseleave\",\n    () => {\n      mouseon = false;\n      mousePosition = false;\n      clearInterval(tempInterval);\n    },\n    false,\n  );\n}\n\nclass Canvas4 {\n  $parent;\n  $target;\n  $actionCanvas;\n  constructor(parent) {\n    this.$parent = parent;\n    this.$target = document.createElement(\"div\");\n    this.$actionCanvas = document.createElement(\"canvas\");\n    this.$actionCanvas.id = \"test-canvas\";\n    this.$actionCanvas.width = \"400\";\n    this.$actionCanvas.height = \"200\";\n\n    this.render(this.$parent, this.$target);\n    this.render(this.$target, this.$actionCanvas);\n\n    this.$target.style.height = \"200px\";\n    this.$target.style.display = \"flex\";\n    this.$target.style.justifyContent = \"center\";\n    this.$target.style.alignItems = \"center\";\n    actionCanvas(this.$actionCanvas);\n  }\n\n  render($parent, element) {\n    $parent.append(element);\n  }\n}\n\nfunction chart(canvas) {\n  const covidData = data.covidData;\n  const tempCanvas = document.createElement(\"canvas\");\n  tempCanvas.width = 400;\n  tempCanvas.height = 100;\n  const tempCtx = tempCanvas.getContext(\"2d\");\n  var ctx = canvas.getContext(\"2d\");\n\n  let lastTime = new Date().getTime();\n  let currentTime = 0;\n  let dt = 0;\n\n  let entries;\n\n  // setInterval(() => {\n  //   data.push(11);\n  // }, 1000);\n\n  drawChart();\n\n  // function drawGrid() {\n  //   let xGrid = 10;\n  //   let yGrid = 10;\n  //   let cellSize = 10;\n  //   tempCtx.beginPath();\n  //   while (xGrid < canvas.height) {\n  //     tempCtx.moveTo(0, xGrid);\n  //     tempCtx.lineTo(canvas.width, xGrid);\n  //     xGrid += cellSize;\n  //   }\n  //   while (yGrid < canvas.width) {\n  //     tempCtx.moveTo(yGrid, 0);\n  //     tempCtx.lineTo(yGrid, canvas.height);\n  //     yGrid += cellSize;\n  //   }\n  //   tempCtx.strokeStyle = \"#ccc\";\n  //   tempCtx.stroke();\n  // }\n\n  function drawAxis() {\n    let yPlot = 90;\n    let pop = 0;\n\n    tempCtx.beginPath();\n    tempCtx.strokeStyle = \"black\";\n    tempCtx.fillStyle = \"#136A9F\";\n    tempCtx.moveTo(50, 20);\n    tempCtx.lineTo(50, 80);\n    tempCtx.lineTo(380, 80);\n    tempCtx.lineTo(380, 20);\n    tempCtx.lineTo(50, 20);\n    tempCtx.moveTo(50, 80);\n    tempCtx.fill();\n\n    tempCtx.fillStyle = \"black\";\n\n    for (let i = 0; i < 2; i++) {\n      tempCtx.fillText(pop, 20, yPlot);\n      pop += 100;\n      yPlot -= 70;\n    }\n    tempCtx.stroke();\n  }\n\n  function drawTempChart() {\n    tempCtx.clearRect(0, 0, canvas.width, canvas.height);\n    tempCtx.fillStyle = \"white\";\n    tempCtx.rect(0, 0, canvas.width, canvas.height);\n    tempCtx.fill();\n    drawAxis();\n    tempCtx.beginPath();\n    tempCtx.strokeStyle = \"black\";\n    tempCtx.moveTo(50, 80);\n    tempCtx.font = \"bold normal 10px Verdana\";\n\n    var xPlot = 50;\n\n    entries = Object.entries(covidData);\n\n    for (const [key, value] of entries) {\n      var valueY = (60 * (100 - value)) / 100 + 20;\n      // tempCtx.fillText(\"(\" + key + \")\", xPlot, valueInBlocks - 5);\n      if (key === \"8(last)\") {\n        tempCtx.lineTo(380 - 1, valueY);\n        continue;\n      }\n      if (key !== \"1(0216)\") {\n        tempCtx.fillStyle = \"#8F1838\";\n      }\n      // tempCtx.arc(xPlot, valueY, 2, 0, Math.PI * 2, true);\n      tempCtx.lineTo(xPlot, valueY);\n      xPlot += 50;\n    }\n    tempCtx.lineTo(380, 80);\n    tempCtx.fill();\n  }\n\n  function putImageData(ctx, imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {\n    var data = imageData.data;\n    var height = imageData.height;\n    var width = imageData.width;\n    dirtyX = dirtyX || 0;\n    dirtyY = dirtyY || 0;\n    dirtyWidth = dirtyWidth !== undefined ? dirtyWidth : width;\n    dirtyHeight = dirtyHeight !== undefined ? dirtyHeight : height;\n    var limitBottom = dirtyY + dirtyHeight;\n    var limitRight = dirtyX + dirtyWidth;\n    for (var y = dirtyY; y < limitBottom; y++) {\n      for (var x = dirtyX; x < limitRight; x++) {\n        var pos = y * width + x;\n        ctx.fillStyle =\n          \"rgba(\" + data[pos * 4 + 0] + \",\" + data[pos * 4 + 1] + \",\" + data[pos * 4 + 2] + \",\" + data[pos * 4 + 3] / 255 + \")\";\n        ctx.fillRect(x + dx, y + dy, 1, 1);\n      }\n    }\n  }\n\n  function drawChart() {\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    drawTempChart();\n    currentTime = new Date().getTime();\n    dt = (currentTime - lastTime) / 1000; // delta time in seconds\n    // dirty and lazy solution\n    // instead of scaling up every velocity vector the program\n    // we increase the speed of time\n    dt *= 20;\n    if (currentTime - lastTime < 16500) {\n      const imageData = tempCtx.getImageData(0, 0, canvas.width, canvas.height);\n      ctx.rect(0, 0, canvas.width, canvas.height);\n      ctx.fill();\n      putImageData(ctx, imageData, 0, 0, 0, 0, 50 + dt, canvas.height);\n\n      requestAnimationFrame(drawChart);\n    } else {\n      data.isDrawed = true;\n      const imageData = tempCtx.getImageData(0, 0, canvas.width, canvas.height);\n      putImageData(ctx, imageData, 0, 0, 0, 0, canvas.width, canvas.height);\n    }\n  }\n}\n\nclass Simulation4 {\n  $parent;\n  $target;\n  constructor(parent) {\n    this.$parent = parent;\n    this.$target = document.createElement(\"canvas\");\n    this.$target.id = \"test-canvas2\";\n    this.$target.width = 400;\n    this.$target.height = 100;\n\n    this.render(this.$parent, this.$target);\n\n    chart(this.$target);\n  }\n\n  render($parent, element) {\n    $parent.append(element);\n  }\n}\n\nclass Dsc4 {\n  $parent;\n  $target;\n  $simulationComp;\n  $canvasComp;\n  constructor(parent) {\n    this.$parent = parent;\n    this.$target = document.createElement(\"div\");\n    this.$simulationComp = new Simulation4(this.$target);\n    this.$canvasComp = new Canvas4(this.$target);\n\n    this.render(this.$parent, this.$target);\n\n    this.$target.style.display = \"flex\";\n    this.$target.style.flexDirection = \"column\";\n  }\n\n  render($parent, element) {\n    $parent.append(element);\n  }\n}\n\nclass Dscomponent {\n  $container;\n  $target;\n  constructor(name) {\n    const $container = document.getElementById(`${name}`);\n    this.$container = $container;\n    this.$target = null;\n\n    if ($container) this.$target = new Dsc4(this.$container);\n  }\n}\n\nexport { Dscomponent };\n"]}