{"version":3,"sources":["jsdelivr-header.js","/npm/canvas-text@0.0.1/index.js"],"names":[],"mappings":"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","file":"/npm/canvas-text@0.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/canvas-text@0.0.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var assign = require('object-assign')\nvar util = require('./lib/util')\nvar renderText = require('./lib/render')\nvar wordWrap = require('word-wrapper')\nvar dprop = require('dprop')\n\nvar baseSettings = {\n  baseline: 'alphabetic',\n  align: 'left',\n  fillStyle: '#000',\n  style: 'normal',\n  variant: 'normal',\n  weight: 'normal',\n  family: 'sans-serif',\n  size: 32\n}\n\nmodule.exports = createStyledText\nfunction createStyledText (context, chunks, opts) {\n  if (!context) {\n    throw new TypeError('must specify a CanvasRenderingContext2D as first parameter')\n  }\n\n  var fullText = ''\n  var maxLineWidth = 0\n  var height = 0\n  var data\n  var lines = []\n  var fonts = []\n  var defaultOpts = assign({}, opts)\n\n  var stlyedText = {\n    render: render,\n    update: update,\n    layout: layout\n  }\n\n  // some read-only values\n  Object.defineProperties(stlyedText, {\n    lines: dprop(function () {\n      return lines\n    }),\n\n    fonts: dprop(function () {\n      return fonts\n    }),\n\n    width: dprop(function () {\n      return maxLineWidth\n    }),\n\n    height: dprop(function () {\n      return height\n    }),\n  })\n\n  update(chunks, opts)\n  return stlyedText\n\n  function update (newChunks, newOpts) {\n    opts = assign({}, baseSettings, defaultOpts, newOpts)\n\n    // accept array or single element for string data\n    if (!Array.isArray(newChunks)) {\n      newChunks = [ newChunks || '' ]\n    }\n\n    chunks = newChunks\n\n    // run an initial layout by default\n    if (opts.layout !== false) layout()\n  }\n\n  function layout () {\n    // copy data to avoid mutating user objects\n    data = chunks.map(function (attrib) {\n      if (typeof attrib === 'string') {\n        attrib = { text: attrib }\n      }\n\n      attrib = assign({}, opts, attrib)\n\n      attrib.text = attrib.text || ''\n      attrib.font = getFontStyle(attrib, opts)\n\n      // approximate line height from pixel size\n      if (typeof attrib.lineHeight === 'undefined') {\n        attrib.lineHeight = getLineHeight(attrib.size)\n      }\n\n      return attrib\n    })\n\n    fonts = data.map(function (attrib) {\n      return attrib.font\n    })\n\n    fullText = util.composeBuffer(data)\n    lines = wordWrap.lines(fullText, {\n      width: opts.width,\n      mode: opts.wordWrap,\n      measure: measure\n    })\n\n    var lineSpacing = opts.lineSpacing || 0\n    for (var i = lines.length - 1; i >= 0; i--) {\n      var line = lines[i]\n      line.height = util.getMaxAttrHeight(data, line.start, line.end)\n      line.height += lineSpacing\n    }\n\n    maxLineWidth = lines.reduce(function (prev, line) {\n      return Math.max(line.width, prev)\n    }, 0)\n\n    height = lines.reduce(function (prev, line) {\n      return prev + line.height\n    }, 0)\n  }\n\n  function render (originX, originY, renderFunc) {\n    var cursorX = 0\n    var cursorY = lines.length > 0 ? lines[0].height : 0\n\n    for (var i = 0; i < lines.length; i++) {\n      var line = lines[i]\n      var start = line.start\n      var end = line.end\n      var lineWidth = line.width\n      var maxAttrHeight = line.height\n\n      while (start < end) {\n        // find next attribute chunk for this string char\n        var attribIdx = util.indexOfAttribute(data, start)\n        if (attribIdx === -1) {\n          break\n        }\n\n        // for each attribute in this range ...\n        var attrib = data[attribIdx]\n        var length = util.getBlockLength(attrib, start, end)\n\n        var text = fullText.substring(start, start + length)\n        var lineHeight = attrib.lineHeight\n\n        var x = originX + cursorX\n        var y = originY + cursorY - lineHeight\n        if (opts.align === 'right') {\n          x += (maxLineWidth - lineWidth)\n        } else if (opts.align === 'center') {\n          x += (maxLineWidth - lineWidth) / 2\n        }\n\n        util.setFontParams(context, attrib)\n        var textWidth = context.measureText(text).width\n        cursorX += textWidth\n\n        if (renderFunc) {\n          renderFunc(context, text, x, y, textWidth, lineHeight, attrib, i)\n        } else {\n          renderText(context, text, x, y, textWidth, lineHeight, attrib, i)\n        }\n\n        // skip to next chunk\n        start += Math.max(1, length)\n      }\n      cursorX = 0\n\n      var next = lines[i + 1]\n      if (next) {\n        cursorY += next.height\n      } else {\n        cursorY += maxAttrHeight\n      }\n    }\n  }\n\n  function measure (text, start, end, width) {\n    var availableGlyphs = 0\n    var first = start\n    var totalWidth = 0\n\n    while (start < end) {\n      // find next attribute chunk for this string char\n      var attribIdx = util.indexOfAttribute(data, start)\n      if (attribIdx === -1) {\n        break\n      }\n\n      // for each attribute in this range ...\n      var attrib = data[attribIdx]\n\n      var result = util.computeAttributeGlyphs(context, fullText, totalWidth, attrib, start, end, width)\n      availableGlyphs += result.available\n      totalWidth += result.width\n\n      // skip to next attribute\n      start = attrib.index + attrib.text.length\n    }\n\n    return {\n      width: totalWidth,\n      start: first,\n      end: first + availableGlyphs\n    }\n  }\n}\n\nfunction getFontStyle (opt, defaults) {\n  var style = opt.style || defaults.style\n  var variant = opt.variant || defaults.variant\n  var weight = String(opt.weight || defaults.weight)\n  var family = opt.family || defaults.family\n  var fontSize = typeof opt.size === 'number' ? opt.size : defaults.size\n  var fontStyle = [ style, variant, weight, fontSize + 'px', family ].join(' ')\n  return fontStyle\n}\n\nfunction getLineHeight (fontSize) {\n  return fontSize + 1\n}\n"]}