@creit.tech/stellar-wallets-kit
Version:
A kit to handle all Stellar Wallets at once
1 lines • 16.6 kB
Source Map (JSON)
{"version":3,"file":"stellar-wallets-modal.cjs","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":["ModalThemeType","StellarWalletsModal","LitElement","ReactiveState","allowedWallets$","modalTheme$","css","modalDialogStyles","modalDialogBodyStyles","modalHelpSection","backdropStyles","modalAnimations","modalWalletsSection","html","styleMap","__decorate","property","state","customElement"],"mappings":"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"}