{"version":3,"sources":["../src/elements/icon-lucide.ts","../src/styles/elements/icon-lucide.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { query } from 'lit/decorators/query.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { stylesBase } from '../styles/elements/icon-lucide';\n\n/**\n * @since 4.0.0\n * @status stable\n *\n * @tagname kemet-icon-lucide\n * @summary A versatile button that can be used either to submit a form, trigger an action, or link to content.\n *\n * @prop {string} icon - The name of the icon to display\n * @prop {string} version - The version of Lucide to use\n * @prop {number} size - The size of the icon\n *\n */\n\n@customElement('kemet-icon-lucide')\nexport default class KemetIconLucide extends LitElement {\n  static styles = [stylesBase];\n\n  @property() icon: string = 'code';\n  @property() version: string = 'latest';\n  @property() size: number = 24;\n  @query('svg[data-lucide]') svg!: SVGElement | null;\n\n  render() {\n    // Use repeat() with icon as the key to force node replacement when it changes.\n    return repeat([this.icon], i => i, i => html`<i data-lucide=${i}></i>`);\n  }\n\n  async firstUpdated() {\n    await this._initLucide();\n    window.lucide?.createIcons({ root: this.renderRoot });\n  }\n\n  willUpdate(changed: Map<string, unknown>) {\n    // Runs BEFORE render. Remove any prior Lucide SVG so Lit won’t try to diff into it.\n    if (changed.has('icon') && this.svg) {\n      this.svg.remove();\n    }\n  }\n\n  updated(changed: Map<string, unknown>) {\n    if (changed.has('icon')) {\n      window.lucide?.createIcons({ root: this.renderRoot })\n    }\n\n    // setTimeout is the only way to get the svg after lucide has created it\n    setTimeout(() => {\n      const svg = this.shadowRoot.querySelector('svg');\n      if (svg) {\n        svg.style.width = `${this.size.toString()}px`;\n        svg.style.height = `${this.size.toString()}px`;\n      }\n    }, 500);\n  }\n\n  private _initLucide(): Promise<void> {\n    if (window.lucide) return Promise.resolve();\n    const existing = Array.from(document.scripts).find(s => s.src.includes('unpkg.com/lucide@')) as HTMLScriptElement | undefined;\n    if (existing) {\n      return new Promise<void>(resolve => {\n        if (window.lucide) return resolve();\n        existing.addEventListener('load', () => resolve(), { once: true });\n      });\n    }\n    return new Promise<void>((resolve, reject) => {\n      const s = document.createElement('script');\n      s.src = `https://unpkg.com/lucide@${this.version}`;\n      s.async = true;\n      s.onload = () => resolve();\n      s.onerror = () => reject(new Error('Failed to load Lucide'));\n      document.head.appendChild(s);\n    });\n  }\n}\n","import { css } from \"lit\";\n\nexport const stylesBase = css`\n  :host {\n    display: inline-flex;\n  }\n`;\n"],"mappings":";;;;;AAAA,SAAS,YAAY,YAAY;AACjC,SAAS,eAAe,gBAAgB;AACxC,SAAS,aAAa;AACtB,SAAS,cAAc;;;ACHvB,SAAS,WAAW;AAEb,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;;;ADkB1B,IAAqB,kBAArB,cAA6C,WAAW;AAAA,EAAxD;AAAA;AAGc,gBAAe;AACf,mBAAkB;AAClB,gBAAe;AAAA;AAAA,EAG3B,SAAS;AAEP,WAAO,OAAO,CAAC,KAAK,IAAI,GAAG,OAAK,GAAG,OAAK,sBAAsB,CAAC,OAAO;AAAA,EACxE;AAAA,EAEA,MAAM,eAAe;AACnB,UAAM,KAAK,YAAY;AACvB,WAAO,QAAQ,YAAY,EAAE,MAAM,KAAK,WAAW,CAAC;AAAA,EACtD;AAAA,EAEA,WAAW,SAA+B;AAExC,QAAI,QAAQ,IAAI,MAAM,KAAK,KAAK,KAAK;AACnC,WAAK,IAAI,OAAO;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,QAAQ,SAA+B;AACrC,QAAI,QAAQ,IAAI,MAAM,GAAG;AACvB,aAAO,QAAQ,YAAY,EAAE,MAAM,KAAK,WAAW,CAAC;AAAA,IACtD;AAGA,eAAW,MAAM;AACf,YAAM,MAAM,KAAK,WAAW,cAAc,KAAK;AAC/C,UAAI,KAAK;AACP,YAAI,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC;AACzC,YAAI,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF,GAAG,GAAG;AAAA,EACR;AAAA,EAEQ,cAA6B;AACnC,QAAI,OAAO,OAAQ,QAAO,QAAQ,QAAQ;AAC1C,UAAM,WAAW,MAAM,KAAK,SAAS,OAAO,EAAE,KAAK,OAAK,EAAE,IAAI,SAAS,mBAAmB,CAAC;AAC3F,QAAI,UAAU;AACZ,aAAO,IAAI,QAAc,aAAW;AAClC,YAAI,OAAO,OAAQ,QAAO,QAAQ;AAClC,iBAAS,iBAAiB,QAAQ,MAAM,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,MACnE,CAAC;AAAA,IACH;AACA,WAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,YAAM,IAAI,SAAS,cAAc,QAAQ;AACzC,QAAE,MAAM,4BAA4B,KAAK,OAAO;AAChD,QAAE,QAAQ;AACV,QAAE,SAAS,MAAM,QAAQ;AACzB,QAAE,UAAU,MAAM,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAC3D,eAAS,KAAK,YAAY,CAAC;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;AA1DqB,gBACZ,SAAS,CAAC,UAAU;AAEf;AAAA,EAAX,SAAS;AAAA,GAHS,gBAGP;AACA;AAAA,EAAX,SAAS;AAAA,GAJS,gBAIP;AACA;AAAA,EAAX,SAAS;AAAA,GALS,gBAKP;AACe;AAAA,EAA1B,MAAM,kBAAkB;AAAA,GANN,gBAMQ;AANR,kBAArB;AAAA,EADC,cAAc,mBAAmB;AAAA,GACb;","names":[]}