{"version":3,"sources":["../../src/elements/typewriter.ts"],"sourcesContent":["import { html, LitElement, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport Typewriter from 'typewriter-effect/dist/core';\nimport { emitEvent } from '../utilities/events';\n\n/**\n * @since 4.1.0\n * @status stable\n *\n * @tagname kemet-typewriter\n * @summary An element that types out content.\n *\n * @prop {string} content - The content to be typed.\n * @prop {number} delay - The delay between each character.\n * @prop {string} cursor - The cursor to be displayed.\n * @prop {boolean} loop - Whether to loop the content.\n * @prop {number} restartDelay - The delay before restarting the typewriter.\n *\n * @event kemet-completed - Fires when typewriter is completed\n *\n */\n\n@customElement('kemet-typewriter')\nexport default class KemetTypewriter extends LitElement {\n  @property({ type: String })\n  content: string = '';\n\n  @property({ type: Number })\n  delay: number = 10;\n\n  @property({ type: String })\n  cursor: string = '';\n\n  @property({ type: Boolean })\n  loop: boolean = false;\n\n  @property({ type: Number, attribute: 'restart-delay' })\n  restartDelay: number = 1000;\n\n  private typewriter!: Typewriter;\n  private timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n  createRenderRoot() {\n    return this;\n  }\n\n  firstUpdated() {\n    const target = this.querySelector('kemet-typewriter-target') as HTMLElement;\n\n    this.typewriter = new Typewriter(target, {\n      cursor: this.cursor,\n      loop: this.loop,\n      delay: this.delay,\n    });\n\n    this.restartTypewriter();\n  }\n\n  updated(changedProperties: PropertyValues<this>) {\n    if (\n      changedProperties.has('content') ||\n      changedProperties.has('delay') ||\n      changedProperties.has('cursor') ||\n      changedProperties.has('loop')\n    ) {\n      const target = this.querySelector('kemet-typewriter-target') as HTMLElement;\n\n      if (this.typewriter) {\n        this.typewriter.stop();\n      }\n\n      this.typewriter = new Typewriter(target, {\n        cursor: this.cursor,\n        loop: this.loop,\n        delay: this.delay,\n      });\n\n      this.restartTypewriter();\n    }\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    if (this.timeoutId) {\n      clearTimeout(this.timeoutId);\n      this.timeoutId = null;\n    }\n\n    if (this.typewriter) {\n      this.typewriter.stop();\n    }\n  }\n\n  render() {\n    return html`\n      <kemet-typewriter-target></kemet-typewriter-target>\n    `;\n  }\n\n  restartTypewriter() {\n    if (!this.typewriter) return;\n\n    if (this.timeoutId) {\n      clearTimeout(this.timeoutId);\n    }\n\n    this.timeoutId = setTimeout(() => {\n      this.typewriter\n        .deleteAll(1)\n        .typeString(this.content)\n        .callFunction(() => {\n          emitEvent(this, 'kemet-completed', { element: this });\n        })\n        .start();\n    }, this.restartDelay);\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'kemet-typewriter': KemetTypewriter;\n  }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,MAAM,kBAAkC;AACjD,SAAS,eAAe,gBAAgB;AACxC,OAAO,gBAAgB;AAqBvB,IAAqB,kBAArB,cAA6C,WAAW;AAAA,EAAxD;AAAA;AAEE,mBAAkB;AAGlB,iBAAgB;AAGhB,kBAAiB;AAGjB,gBAAgB;AAGhB,wBAAuB;AAGvB,SAAQ,YAAkD;AAAA;AAAA,EAE1D,mBAAmB;AACjB,WAAO;AAAA,EACT;AAAA,EAEA,eAAe;AACb,UAAM,SAAS,KAAK,cAAc,yBAAyB;AAE3D,SAAK,aAAa,IAAI,WAAW,QAAQ;AAAA,MACvC,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,IACd,CAAC;AAED,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,QAAQ,mBAAyC;AAC/C,QACE,kBAAkB,IAAI,SAAS,KAC/B,kBAAkB,IAAI,OAAO,KAC7B,kBAAkB,IAAI,QAAQ,KAC9B,kBAAkB,IAAI,MAAM,GAC5B;AACA,YAAM,SAAS,KAAK,cAAc,yBAAyB;AAE3D,UAAI,KAAK,YAAY;AACnB,aAAK,WAAW,KAAK;AAAA,MACvB;AAEA,WAAK,aAAa,IAAI,WAAW,QAAQ;AAAA,QACvC,QAAQ,KAAK;AAAA,QACb,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,MACd,CAAC;AAED,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,uBAAuB;AACrB,UAAM,qBAAqB;AAE3B,QAAI,KAAK,WAAW;AAClB,mBAAa,KAAK,SAAS;AAC3B,WAAK,YAAY;AAAA,IACnB;AAEA,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA;AAAA;AAAA,EAGT;AAAA,EAEA,oBAAoB;AAClB,QAAI,CAAC,KAAK,WAAY;AAEtB,QAAI,KAAK,WAAW;AAClB,mBAAa,KAAK,SAAS;AAAA,IAC7B;AAEA,SAAK,YAAY,WAAW,MAAM;AAChC,WAAK,WACF,UAAU,CAAC,EACX,WAAW,KAAK,OAAO,EACvB,aAAa,MAAM;AAClB,kBAAU,MAAM,mBAAmB,EAAE,SAAS,KAAK,CAAC;AAAA,MACtD,CAAC,EACA,MAAM;AAAA,IACX,GAAG,KAAK,YAAY;AAAA,EACtB;AACF;AA5FE;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GADP,gBAEnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJP,gBAKnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAPP,gBAQnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAVR,gBAWnB;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,gBAAgB,CAAC;AAAA,GAbnC,gBAcnB;AAdmB,kBAArB;AAAA,EADC,cAAc,kBAAkB;AAAA,GACZ;","names":[]}