{"version":3,"file":"stellar-wallets-modal.mjs","sources":["../../../src/components/modal/stellar-wallets-modal.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ReactiveState } from '../../state/reactive-state';\nimport { allowedWallets$, modalTheme$ } from '../../state/store';\n\nimport { ISupportedWallet, IModalTheme } from '../../types';\nimport {\n  backdropStyles,\n  modalWalletsSection,\n  modalDialogBodyStyles,\n  modalDialogStyles,\n  modalHelpSection,\n  modalAnimations,\n} from './styles';\n\nexport enum ModalThemeType {\n  DARK = 'DARK',\n  LIGHT = 'LIGHT',\n}\n\nexport const ModalThemes: { [key in ModalThemeType]: IModalTheme } = {\n  DARK: {\n    bgColor: '#161616',\n    textColor: '#a0a0a0',\n    solidTextColor: '#ededed',\n    headerButtonColor: '#707070',\n    dividerColor: 'rgba(255, 255, 255, 0.15)',\n    helpBgColor: '#1c1c1c',\n    notAvailableTextColor: '#a0a0a0',\n    notAvailableBgColor: '#232323',\n    notAvailableBorderColor: '#343434',\n  },\n  LIGHT: {\n    bgColor: '#fcfcfc',\n    textColor: '#181818',\n    solidTextColor: '#000000',\n    headerButtonColor: '#8f8f8f',\n    dividerColor: 'rgba(0, 0, 0, 0.15)',\n    helpBgColor: '#f8f8f8',\n    notAvailableTextColor: '#6f6f6f',\n    notAvailableBgColor: '#f3f3f3',\n    notAvailableBorderColor: '#e2e2e2',\n  },\n};\n\n@customElement('stellar-wallets-modal')\nexport class StellarWalletsModal extends LitElement {\n  static override styles = [\n    css`\n      :host * {\n        box-sizing: border-box;\n      }\n\n      .mb-0 {\n        margin-bottom: 0 !important;\n      }\n    `,\n    modalDialogStyles,\n    modalDialogBodyStyles,\n    modalHelpSection,\n    backdropStyles,\n    modalAnimations,\n    modalWalletsSection,\n  ];\n\n  /**\n   * This value is used to tell the modal that it should not update the value\n   * `showModal` at any moment, this comes handy when the state wants to be handled by another source\n   */\n  @property({ type: Boolean, reflect: true })\n  ignoreShowStatus: boolean = false;\n\n  @property({ type: Boolean, reflect: true })\n  showModal: boolean = false;\n\n  @state()\n  closingModal: boolean = false;\n\n  @property({ type: String, reflect: true })\n  modalTitle: string = 'Connect a Wallet';\n\n  @property({ type: String, reflect: true })\n  notAvailableText: string = 'Not available';\n\n  allowedWallets: ReactiveState<ISupportedWallet[]> = new ReactiveState(this, allowedWallets$);\n\n  theme: ReactiveState<IModalTheme | undefined> = new ReactiveState(this, modalTheme$);\n\n  override connectedCallback() {\n    super.connectedCallback();\n  }\n\n  async closeModal(): Promise<void> {\n    this.closingModal = true;\n\n    await new Promise(r => setTimeout(r, 280));\n\n    if (!this.ignoreShowStatus) {\n      this.showModal = false;\n    }\n\n    this.dispatchEvent(\n      new CustomEvent('modal-closed', {\n        detail: new Error('Modal closed'),\n        bubbles: true,\n        composed: true,\n      })\n    );\n\n    this.closingModal = false;\n  }\n\n  async pickWalletOption(option: ISupportedWallet): Promise<void> {\n    if (!option.isAvailable) {\n      window.open(option.url, '_blank');\n      return;\n    }\n\n    this.closingModal = true;\n\n    await new Promise(r => setTimeout(r, 280));\n\n    try {\n      const record: string | null = window.localStorage.getItem('@StellarWalletsKit/usedWalletsIds');\n      let usedWalletsIds: Array<ISupportedWallet['id']> = record ? JSON.parse(record) : [];\n      usedWalletsIds = [option.id, ...usedWalletsIds.filter((id: string): boolean => id !== option.id)];\n      window.localStorage.setItem('@StellarWalletsKit/usedWalletsIds', JSON.stringify(usedWalletsIds));\n    } catch (e) {\n      console.error(e);\n    }\n\n    this.dispatchEvent(\n      new CustomEvent('wallet-selected', {\n        detail: option,\n        bubbles: true,\n        composed: true,\n      })\n    );\n\n    this.closingModal = false;\n  }\n\n  /**\n   * This function gets the list of the wallets following the logic from this task https://github.com/Creit-Tech/Stellar-Wallets-Kit/issues/28\n   * It follows this order:\n   * 1- Wallet last used by wallet selector\n   * 2- If not wallet last use, wallets detected in the browser\n   * 3- Wallet ordering as defined by the developer\n   *\n   */\n  private getSortedList(): ISupportedWallet[] {\n    const sortedWallets: { available: ISupportedWallet[]; unavailable: ISupportedWallet[] } =\n      this.allowedWallets.value!.reduce(\n        (all: { available: ISupportedWallet[]; unavailable: ISupportedWallet[] }, current: ISupportedWallet) => {\n          return {\n            available: current.isAvailable ? [...all.available, current] : all.available,\n            unavailable: !current.isAvailable ? [...all.unavailable, current] : all.unavailable,\n          };\n        },\n        { available: [], unavailable: [] }\n      );\n\n    let usedWalletsIds: Array<ISupportedWallet['id']>;\n    try {\n      const record: string | null = window.localStorage.getItem('@StellarWalletsKit/usedWalletsIds');\n      usedWalletsIds = record ? JSON.parse(record) : [];\n    } catch (e) {\n      console.error(e);\n      usedWalletsIds = [];\n    }\n\n    if (usedWalletsIds.length === 0) {\n      return [...sortedWallets.available, ...sortedWallets.unavailable];\n    }\n\n    const usedWallets: ISupportedWallet[] = [];\n    const nonUsedWallets: ISupportedWallet[] = [];\n    for (const availableWallet of sortedWallets.available) {\n      if (usedWalletsIds.find((id: string): boolean => id === availableWallet.id)) {\n        usedWallets.push(availableWallet);\n      } else {\n        nonUsedWallets.push(availableWallet);\n      }\n    }\n\n    return [\n      ...usedWallets.sort((a: ISupportedWallet, b: ISupportedWallet) => {\n        return usedWalletsIds.indexOf(a.id) - usedWalletsIds.indexOf(b.id);\n      }),\n      ...nonUsedWallets,\n      ...sortedWallets.unavailable,\n    ];\n  }\n\n  private getThemeStyles() {\n    if (!this.theme.value) return {};\n\n    return {\n      '--modal-bg-color': this.theme.value.bgColor,\n      '--modal-text-color': this.theme.value.textColor,\n      '--modal-solid-text-color': this.theme.value.solidTextColor,\n      '--modal-header-button-color': this.theme.value.headerButtonColor,\n      '--modal-divider-color': this.theme.value.dividerColor,\n      '--modal-help-bg-color': this.theme.value.helpBgColor,\n      '--modal-not-available-text-color': this.theme.value.notAvailableTextColor,\n      '--modal-not-available-bg-color': this.theme.value.notAvailableBgColor,\n      '--modal-not-available-border-color': this.theme.value.notAvailableBorderColor,\n    };\n  }\n\n  override render() {\n    const helpSection = html`\n      <section class=\"help-container\">\n        <header class=\"help-header\">\n          <h2 class=\"help-header__modal-title dialog-text-solid\">Learn more</h2>\n        </header>\n\n        <div class=\"help__whats_a_wallet\">\n          <h2 class=\"dialog-text-solid help__title\">What is a wallet?</h2>\n          <p class=\"dialog-text help__text\">\n            Wallets are used to send, receive, and store the keys you use to sign blockchain transactions.\n          </p>\n        </div>\n\n        <div class=\"help__whats_stellar\">\n          <h2 class=\"dialog-text-solid help__title\">What is Stellar?</h2>\n          <p class=\"dialog-text help__text\">\n            Stellar is a decentralized, public blockchain that gives developers the tools to create experiences that are\n            more like cash than crypto\n          </p>\n        </div>\n      </section>\n    `;\n\n    const walletsSection = html`\n      <section class=\"wallets-container\">\n        <header class=\"wallets-header\">\n          <h2 class=\"wallets-header__modal-title dialog-text-solid\">${this.modalTitle}</h2>\n\n          <button @click=${() => this.closeModal()} class=\"wallets-header__button\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#000000\" height=\"20px\" width=\"20px\" viewBox=\"0 0 490 490\">\n              <polygon\n                points=\"456.851,0 245,212.564 33.149,0 0.708,32.337 212.669,245.004 0.708,457.678 33.149,490 245,277.443 456.851,490   489.292,457.678 277.331,245.004 489.292,32.337 \" />\n            </svg>\n          </button>\n        </header>\n\n        <ul class=\"wallets-body\">\n          ${this.getSortedList().map(\n            (item: ISupportedWallet, i: number) =>\n              html`\n                <li\n                  @click=${() => this.pickWalletOption(item)}\n                  class=\" wallets-body__item ${!item.isAvailable ? 'not-available' : ''} ${i ===\n                  this.allowedWallets.value!.length - 1\n                    ? 'mb-0'\n                    : ''}\">\n                  <img src=${item.icon} alt=${item.name} />\n                  <span class=\"dialog-text-solid\">${item.name}</span>\n                  ${!item.isAvailable ? html`<small class=\"not-available\">${this.notAvailableText}</small>` : ''}\n                </li>\n              `\n          )}\n        </ul>\n      </section>\n    `;\n\n    return html`\n      <dialog\n        style=${styleMap(this.getThemeStyles())}\n        class=\"dialog-modal ${this.closingModal ? 'closing' : ''}\"\n        .open=${this.showModal}>\n        <section class=\"dialog-modal-body\">\n          <div class=\"dialog-modal-body__help\">${helpSection}</div>\n          <div class=\"dialog-modal-body__wallets\">${walletsSection}</div>\n        </section>\n      </dialog>\n\n      <div\n        style=\"position: fixed; z-index: 950\"\n        class=\"backdrop ${this.closingModal ? 'closing' : ''}\"\n        @click=${() => this.closeModal()}></div>\n    `;\n  }\n}\n"],"names":[],"mappings":"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"}