{"version":3,"file":"pfe-avatar.min.js","sources":["../_temp/hslrgb.js","../_temp/pfe-avatar.js","../_temp/djb-hash.js"],"sourcesContent":["function h2rgb(v1, v2, vH) {\n  if (vH < 0) vH += 1;\n  if (vH > 1) vH -= 1;\n  if (6 * vH < 1) return v1 + (v2 - v1) * 6 * vH;\n  if (2 * vH < 1) return v2;\n  if (3 * vH < 2) return v1 + (v2 - v1) * (2 / 3 - vH) * 6;\n  return v1;\n}\n\n/**\n * Convert an HSL color to RGB.\n *\n * @param {Number} H the hue component\n * @param {Number} S the saturation component\n * @param {Number} L the luminance component\n * @return {Array} [R, G, B]\n *\n * @see https://www.easyrgb.com/en/math.php\n */\nexport function hsl2rgb(_H, _S, _L) {\n  let R, G, B;\n\n  const H = Math.max(0, Math.min(1, _H));\n  const S = Math.max(0, Math.min(1, _S));\n  const L = Math.max(0, Math.min(1, _L));\n\n  if (S == 0) {\n    R = L * 255;\n    G = L * 255;\n    B = L * 255;\n  } else {\n    let a, b;\n\n    if (L < 0.5) {\n      b = L * (1 + S);\n    } else {\n      b = L + S - S * L;\n    }\n\n    a = 2 * L - b;\n\n    R = Math.floor(255 * h2rgb(a, b, H + 1 / 3));\n    G = Math.floor(255 * h2rgb(a, b, H));\n    B = Math.floor(255 * h2rgb(a, b, H - 1 / 3));\n  }\n\n  return [R, G, B];\n}\n\n/**\n * Convert an RGBcolor to HSL.\n *\n * @param {Number} R the red component\n * @param {Number} G the green component\n * @param {Number} B the blue component\n * @return {Array} [H, S, L]\n *\n * @see https://www.easyrgb.com/en/math.php\n */\nexport function rgb2hsl(_R, _G, _B) {\n  let H, S, L;\n\n  const R = Math.max(0, Math.min(255, _R));\n  const G = Math.max(0, Math.min(255, _G));\n  const B = Math.max(0, Math.min(255, _B));\n\n  const r = R / 255;\n  const g = G / 255;\n  const b = B / 255;\n\n  const var_min = Math.min(Math.min(r, g), b);\n  const var_max = Math.max(Math.max(r, g), b);\n  const del_max = var_max - var_min;\n\n  L = (var_max + var_min) / 2;\n\n  if (del_max === 0) {\n    H = 0;\n    S = 0;\n  } else {\n    if (L < 0.5) {\n      S = del_max / (var_max + var_min);\n    } else {\n      S = del_max / (2 - var_max - var_min);\n    }\n\n    const del_r = ((var_max - r) / 6 + del_max / 2) / del_max;\n    const del_g = ((var_max - g) / 6 + del_max / 2) / del_max;\n    const del_b = ((var_max - b) / 6 + del_max / 2) / del_max;\n\n    if (r == var_max) {\n      H = del_b - del_g;\n    } else if (g == var_max) {\n      H = 1 / 3 + del_r - del_b;\n    } else if (b == var_max) {\n      H = 2 / 3 + del_g - del_r;\n    }\n\n    if (H < 0) {\n      H += 1;\n    } else if (H > 1) {\n      H -= 1;\n    }\n  }\n\n  return [H, S, L];\n}\n","/*!\n * PatternFly Elements: PfeAvatar 1.12.2\n * @license\n * Copyright 2021 Red Hat, Inc.\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n*/\n\nimport PFElement from \"../../pfelement/dist/pfelement.js\";\nimport { hash } from \"./djb-hash.js\";\nimport { hsl2rgb, rgb2hsl } from \"./hslrgb.js\";\n\nclass PfeAvatar extends PFElement {\n\n  // Injected at build-time\n  static get version() {\n    return \"1.12.2\";\n  }\n\n  // Injected at build-time\n  get html() {\n    return `\n<style>:host{display:block;position:relative;width:128px;width:var(--pfe-avatar--size,var(--pfe-avatar--width,128px));height:128px;height:var(--pfe-avatar--size,var(--pfe-avatar--width,128px))}:host canvas{width:100%;height:100%;image-rendering:optimizeSpeed;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:-o-crisp-edges;image-rendering:-o-pixelated;image-rendering:pixelated;-ms-interpolation-mode:nearest-neighbor}:host([shape=rounded]) canvas,:host([shape=rounded]) img{border-radius:calc(128px / 8 + 1px);border-radius:calc(var(--pfe-avatar--size,var(--pfe-avatar--width,128px))/ 8 + 1px)}:host([shape=circle]) canvas,:host([shape=circle]) img{border-radius:50%}:host([src]) canvas{display:none}:host([src]) img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}:host(:not([src])) img{display:none}:host([hidden]){display:none} /*# sourceMappingURL=pfe-avatar.min.css.map */</style>\n<canvas></canvas>\n<img>`;\n  }\n\n  static get tag() {\n    return \"pfe-avatar\";\n  }\n\n  static get properties() {\n    return {\n      name: {\n        title: \"Username\",\n        type: String,\n        default: \"\",\n        observer: \"_updateWhenConnected\",\n      },\n      src: {\n        title: \"Avatar image URL\",\n        type: String,\n        observer: \"_updateWhenConnected\",\n      },\n      pattern: {\n        title: \"Shape pattern\",\n        type: String,\n        default: PfeAvatar.patterns.squares,\n        observer: \"_updateWhenConnected\",\n      },\n      // @TODO Deprecated pfe-name in 1.0\n      oldName: {\n        alias: \"name\",\n        attr: \"pfe-name\",\n      },\n      // @TODO Deprecated pfe-src in 1.0\n      oldSrc: {\n        alias: \"src\",\n        attr: \"pfe-src\",\n      },\n      // @TODO Deprecated pfe-pattern in 1.0\n      oldPattern: {\n        alias: \"pattern\",\n        attr: \"pfe-pattern\",\n      },\n    };\n  }\n\n  get templateUrl() {\n    return \"pfe-avatar.html\";\n  }\n\n  get styleUrl() {\n    return \"pfe-avatar.scss\";\n  }\n\n  static get events() {\n    return {\n      connected: `${this.tag}:connected`,\n    };\n  }\n\n  static get patterns() {\n    return {\n      triangles: \"triangles\",\n      squares: \"squares\",\n    };\n  }\n\n  static get defaultSize() {\n    return 128;\n  }\n\n  static get defaultColors() {\n    return \"#67accf #448087 #709c6b #a35252 #826cbb\";\n  }\n\n  get customColors() {\n    return this.cssVariable(\"pfe-avatar--colors\");\n  }\n\n  constructor() {\n    super(PfeAvatar);\n\n    this._initCanvas = this._initCanvas.bind(this);\n  }\n\n  connectedCallback() {\n    // initCanvas comes before parent's connectedCallback because the\n    // connectedCallback sets attribute values, triggering, the observer\n    // functions, which require the canvas to already be initialized.\n    this._initCanvas();\n\n    super.connectedCallback();\n\n    this.emitEvent(PfeAvatar.events.connected, {\n      bubbles: false,\n    });\n  }\n\n  _initCanvas() {\n    this._canvas = this.shadowRoot.querySelector(\"canvas\");\n    const cssVarWidth = this.cssVariable(\"pfe-avatar--width\");\n    const size = (cssVarWidth && cssVarWidth.replace(/px$/, \"\")) || PfeAvatar.defaultSize;\n    this._canvas.width = size;\n    this._canvas.height = size;\n\n    this._squareSize = this._canvas.width / 8;\n    this._triangleSize = this._canvas.width / 4;\n\n    this._ctx = this._canvas.getContext(\"2d\");\n  }\n\n  static _registerColors() {\n    this.colors = [];\n    const contextColors = this.customColors || this.defaultColors;\n\n    contextColors.split(/\\s+/).forEach((colorCode) => {\n      let pattern;\n      switch (colorCode.length) {\n        case 4: // ex: \"#0fc\"\n          pattern = /^#([A-f0-9])([A-f0-9])([A-f0-9])$/.exec(colorCode);\n          if (pattern) {\n            pattern.shift();\n            const color = pattern.map((c) => parseInt(c + c, 16));\n            this._registerColor(color);\n          } else {\n            this.log(`[pfe-avatar] invalid color ${colorCode}`);\n          }\n          break;\n        case 7: // ex: \"#00ffcc\"\n          pattern = /^#([A-f0-9]{2})([A-f0-9]{2})([A-f0-9]{2})$/.exec(colorCode);\n          if (pattern) {\n            pattern.shift();\n            const color = pattern.map((c) => parseInt(c, 16));\n            this._registerColor(color);\n          } else {\n            this.log(`[pfe-avatar] invalid color ${colorCode}`);\n          }\n      }\n    });\n\n    return this.colors;\n  }\n\n  static _registerColor(color) {\n    PfeAvatar.colors.push({\n      color1: `rgb(${color.join(\",\")})`,\n      color2: `rgb(${this._adjustColor(color).join(\",\")})`,\n    });\n  }\n\n  static _adjustColor(color) {\n    const dark = 0.1;\n    const l_adj = 0.1; // luminance adjustment\n    const hsl = rgb2hsl(...color);\n\n    // if luminance is too dark already, then lighten the alternate color\n    // instead of darkening it.\n    hsl[2] += hsl[2] > dark ? -l_adj : l_adj;\n\n    return hsl2rgb(...hsl);\n  }\n\n  _updateWhenConnected() {\n    if (this.hasAttribute(\"pfelement\")) {\n      this.update();\n    } else {\n      this.addEventListener(PfeAvatar.events.connected, () => this.update());\n    }\n  }\n\n  update() {\n    // if we have a src element, update the img, otherwise update the random pattern\n    if (this.src) {\n      this.shadowRoot.querySelector(\"img\").src = this.src;\n    } else {\n      const bitPattern = hash(this.name).toString(2);\n      const arrPattern = bitPattern.split(\"\").map((n) => Number(n));\n      this._colorIndex = Math.floor((PfeAvatar.colors.length * parseInt(bitPattern, 2)) / Math.pow(2, 32));\n      this.color1 = PfeAvatar.colors[this._colorIndex].color1;\n      this.color2 = PfeAvatar.colors[this._colorIndex].color2;\n\n      this._clear();\n      this._drawBackground();\n      if (this.pattern === PfeAvatar.patterns.squares) {\n        this._drawSquarePattern(arrPattern);\n      } else if (this.pattern === PfeAvatar.patterns.triangles) {\n        this._drawTrianglePattern(arrPattern);\n      }\n      // this._drawGradient();\n    }\n  }\n\n  _clear() {\n    this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n  }\n\n  _drawBackground() {\n    this._ctx.fillStyle = this.color1;\n    this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n  }\n\n  _drawSquarePattern(pattern) {\n    this._ctx.fillStyle = this.color2;\n    if (this._ctx) {\n      let i = pattern.length;\n      while (i--) {\n        if (pattern[i]) {\n          this._drawMirroredSquare(i % 4, Math.floor(i / 4));\n        }\n      }\n    }\n  }\n\n  /**\n   * Draw a square at the given position, mirrored onto both the left and right half of the canvas.\n   */\n  _drawMirroredSquare(x, y) {\n    if (this._ctx) {\n      this._drawSquare(x, y);\n      this._drawSquare(7 - x, y);\n    }\n  }\n\n  _drawSquare(x, y) {\n    this._ctx.fillRect(this._squareSize * x, this._squareSize * y, this._squareSize, this._squareSize);\n  }\n\n  _drawTrianglePattern(pattern) {\n    this._ctx.fillStyle = this.color2;\n    if (this._ctx) {\n      let i = pattern.length;\n      while (i--) {\n        if (pattern[i]) {\n          const x = Math.floor(i / 2) % 2;\n          const y = Math.floor(i / 4);\n          const alt = i % 4;\n\n          const p1 = [x, y];\n          const p2 = [x, y];\n          const p3 = [x, y];\n\n          switch (alt) {\n            case 0:\n              p2[1]++;\n              p3[0]++;\n              p3[1]++;\n              break;\n            case 1:\n              p2[0]++;\n              p3[0]++;\n              p3[1]++;\n              break;\n            case 2:\n              p2[0]++;\n              p3[1]++;\n              break;\n            case 3:\n              p1[0]++;\n              p2[0]++;\n              p2[1]++;\n              p3[1]++;\n              break;\n          }\n\n          this._drawMirroredTriangle(p1, p2, p3);\n        }\n      }\n    }\n  }\n\n  /**\n   * Draw a square at the given position in the top-left quadrant of the\n   * canvas, and mirrored to the other three quadrants.\n   */\n  _drawMirroredTriangle(p1, p2, p3) {\n    if (this._ctx) {\n      this._drawTriangle(p1, p2, p3);\n      this._drawTriangle([4 - p1[0], p1[1]], [4 - p2[0], p2[1]], [4 - p3[0], p3[1]]);\n    }\n  }\n\n  _drawTriangle(p1, p2, p3) {\n    this._ctx.beginPath();\n    this._ctx.moveTo(...p1.map((c) => c * this._triangleSize));\n    this._ctx.lineTo(...p2.map((c) => c * this._triangleSize));\n    this._ctx.lineTo(...p3.map((c) => c * this._triangleSize));\n    this._ctx.closePath();\n    this._ctx.fill();\n    this._ctx.fill();\n  }\n\n  _drawGradient() {\n    const gradient = this._ctx.createLinearGradient(0, this._canvas.height, this._canvas.width, 0);\n    const color = this.color2;\n    let gradientColor1 = color;\n    let gradientColor2 = color;\n    if (/^#[A-f0-9]{3}$/.test(color)) {\n      // color is of the form \"#fff\"\n      gradientColor1 += \"c\";\n      gradientColor2 += \"0\";\n    } else if (/^#[A-f0-9]{6}$/.test(color)) {\n      // color is of the form \"#ffffff\"\n      gradientColor1 += \"cc\";\n      gradientColor2 += \"00\";\n    }\n    gradient.addColorStop(0, gradientColor1);\n    gradient.addColorStop(1, gradientColor2);\n    gradient.addColorStop(1, gradientColor1);\n    this._ctx.fillStyle = gradient;\n    this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n  }\n}\n\nPfeAvatar._registerColors();\n\nPFElement.create(PfeAvatar);\n\nexport default PfeAvatar;\n","/**\n * djb2 string hashing function.\n *\n * @see http://www.cse.yorku.ca/~oz/hash.html\n * @param {String} str the string to hash.\n * @return {Number} a positive integer\n */\n\nfunction hash(str) {\n  let hash = 5381;\n  let i = str.length;\n\n  while (i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n\n  return hash >>> 0;\n}\n\nexport { hash };\n"],"names":["h2rgb","v1","v2","vH","PfeAvatar","PFElement","version","html","tag","properties","name","title","type","String","default","observer","src","pattern","patterns","squares","oldName","alias","attr","oldSrc","oldPattern","templateUrl","styleUrl","events","connected","this","triangles","defaultSize","defaultColors","customColors","cssVariable","[object Object]","super","_initCanvas","bind","connectedCallback","emitEvent","bubbles","_canvas","shadowRoot","querySelector","cssVarWidth","size","replace","width","height","_squareSize","_triangleSize","_ctx","getContext","colors","split","forEach","colorCode","length","exec","shift","color","map","c","parseInt","_registerColor","log","push","color1","join","color2","_adjustColor","hsl","_R","_G","_B","H","S","L","r","Math","max","min","g","b","var_min","var_max","del_max","del_r","del_g","del_b","rgb2hsl","_H","_S","_L","R","G","B","a","floor","hsl2rgb","hasAttribute","update","addEventListener","bitPattern","str","hash","i","charCodeAt","toString","arrPattern","n","Number","_colorIndex","pow","_clear","_drawBackground","_drawSquarePattern","_drawTrianglePattern","clearRect","fillStyle","fillRect","_drawMirroredSquare","x","y","_drawSquare","p1","p2","p3","_drawMirroredTriangle","_drawTriangle","beginPath","moveTo","lineTo","closePath","fill","gradient","createLinearGradient","gradientColor1","gradientColor2","test","addColorStop","_registerColors","create"],"mappings":"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"}