UNPKG

@safe-stars/components

Version:

React component library for buying Telegram Stars in Telegram Mini Apps via Safe Stars.

1,040 lines (1,007 loc) 34 kB
import { i as f, a as w, d as I, e as x, k as H, s as l, x as u, r as z, h as W, R as g, N as L, t as q, S as B, f as F, A as M, W as Y } from "./index-C8heSj_E.js"; import { n as d, r as c, c as m, U as b, o as K } from "./if-defined-H9lOPnQM.js"; import "./index-CAt_KQrZ.js"; import "./index-BFHNWrl6.js"; import { e as O, n as D } from "./ref-D-t5jI4K.js"; import { n as G, s as J } from "./ConstantsUtil-B-_-u8aQ.js"; import "./index-DhezNdHd.js"; import { S as Q } from "./index-B9KDWTWr.js"; import "./index-CEwkyLIl.js"; import "./index-CO-88GIl.js"; import "./index-fxn4Z26P.js"; import "./index-CEoQHHbR.js"; const X = f` :host { width: 100%; height: 100px; border-radius: var(--wui-border-radius-s); border: 1px solid var(--wui-color-gray-glass-002); background-color: var(--wui-color-gray-glass-002); transition: background-color var(--wui-ease-out-power-1) var(--wui-duration-lg); will-change: background-color; position: relative; } :host(:hover) { background-color: var(--wui-color-gray-glass-005); } wui-flex { width: 100%; height: fit-content; } wui-button { display: ruby; color: var(--wui-color-fg-100); margin: 0 var(--wui-spacing-xs); } .instruction { position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; } .paste { display: inline-flex; } textarea { background: transparent; width: 100%; font-family: var(--w3m-font-family); font-size: var(--wui-font-size-medium); font-style: normal; font-weight: var(--wui-font-weight-light); line-height: 130%; letter-spacing: var(--wui-letter-spacing-medium); color: var(--wui-color-fg-100); caret-color: var(--wui-color-accent-100); box-sizing: border-box; -webkit-appearance: none; -moz-appearance: textfield; padding: 0px; border: none; outline: none; appearance: none; resize: none; overflow: hidden; } `; var E = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let A = class extends w { constructor() { super(...arguments), this.inputElementRef = O(), this.instructionElementRef = O(), this.instructionHidden = !!this.value, this.pasting = !1, this.onDebouncedSearch = I.debounce(async (e) => { if (!e.length) { this.setReceiverAddress(""); return; } const i = x.state.activeChain; if (I.isAddress(e, i)) { this.setReceiverAddress(e); return; } try { const r = await H.getEnsAddress(e); if (r) { l.setReceiverProfileName(e), l.setReceiverAddress(r); const t = await H.getEnsAvatar(e); l.setReceiverProfileImageUrl(t || void 0); } } catch { this.setReceiverAddress(e); } finally { l.setLoading(!1); } }); } firstUpdated() { this.value && (this.instructionHidden = !0), this.checkHidden(); } render() { return u` <wui-flex @click=${this.onBoxClick.bind(this)} flexDirection="column" justifyContent="center" gap="4xs" .padding=${["2xl", "l", "xl", "l"]} > <wui-text ${D(this.instructionElementRef)} class="instruction" color="fg-300" variant="medium-400" > Type or <wui-button class="paste" size="md" variant="neutral" iconLeft="copy" @click=${this.onPasteClick.bind(this)} > <wui-icon size="sm" color="inherit" slot="iconLeft" name="copy"></wui-icon> Paste </wui-button> address </wui-text> <textarea spellcheck="false" ?disabled=${!this.instructionHidden} ${D(this.inputElementRef)} @input=${this.onInputChange.bind(this)} @blur=${this.onBlur.bind(this)} .value=${this.value ?? ""} autocomplete="off" > ${this.value ?? ""}</textarea > </wui-flex>`; } async focusInput() { var e; this.instructionElementRef.value && (this.instructionHidden = !0, await this.toggleInstructionFocus(!1), this.instructionElementRef.value.style.pointerEvents = "none", (e = this.inputElementRef.value) == null || e.focus(), this.inputElementRef.value && (this.inputElementRef.value.selectionStart = this.inputElementRef.value.selectionEnd = this.inputElementRef.value.value.length)); } async focusInstruction() { var e; this.instructionElementRef.value && (this.instructionHidden = !1, await this.toggleInstructionFocus(!0), this.instructionElementRef.value.style.pointerEvents = "auto", (e = this.inputElementRef.value) == null || e.blur()); } async toggleInstructionFocus(e) { this.instructionElementRef.value && await this.instructionElementRef.value.animate([{ opacity: e ? 0 : 1 }, { opacity: e ? 1 : 0 }], { duration: 100, easing: "ease", fill: "forwards" }).finished; } onBoxClick() { !this.value && !this.instructionHidden && this.focusInput(); } onBlur() { !this.value && this.instructionHidden && !this.pasting && this.focusInstruction(); } checkHidden() { this.instructionHidden && this.focusInput(); } async onPasteClick() { this.pasting = !0; const e = await navigator.clipboard.readText(); l.setReceiverAddress(e), this.focusInput(); } onInputChange(e) { var n; const i = e.target; this.pasting = !1, this.value = (n = e.target) == null ? void 0 : n.value, i.value && !this.instructionHidden && this.focusInput(), l.setLoading(!0), this.onDebouncedSearch(i.value); } setReceiverAddress(e) { l.setReceiverAddress(e), l.setReceiverProfileName(void 0), l.setReceiverProfileImageUrl(void 0), l.setLoading(!1); } }; A.styles = X; E([ d() ], A.prototype, "value", void 0); E([ c() ], A.prototype, "instructionHidden", void 0); E([ c() ], A.prototype, "pasting", void 0); A = E([ m("w3m-input-address") ], A); const Z = f` :host { position: relative; display: inline-block; } input { background: transparent; width: 100%; height: auto; font-family: var(--wui-font-family); color: var(--wui-color-fg-100); font-feature-settings: 'case' on; font-size: 32px; font-weight: var(--wui-font-weight-light); caret-color: var(--wui-color-accent-100); line-height: 130%; letter-spacing: -1.28px; box-sizing: border-box; -webkit-appearance: none; -moz-appearance: textfield; padding: 0px; } input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } input::placeholder { color: var(--wui-color-fg-275); } `; var j = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let C = class extends w { constructor() { super(...arguments), this.inputElementRef = O(), this.disabled = !1, this.value = "", this.placeholder = "0"; } render() { var e; return (e = this.inputElementRef) != null && e.value && this.value && (this.inputElementRef.value.value = this.value), u`<input ${D(this.inputElementRef)} type="text" inputmode="decimal" pattern="[0-9,.]*" placeholder=${this.placeholder} ?disabled=${this.disabled} autofocus value=${this.value ?? ""} @input=${this.dispatchInputChangeEvent.bind(this)} /> `; } dispatchInputChangeEvent(e) { var n, r; const i = e.data; if (i && ((n = this.inputElementRef) != null && n.value)) if (i === ",") { const t = this.inputElementRef.value.value.replace(",", "."); this.inputElementRef.value.value = t, this.value = `${this.value}${t}`; } else G.test(i) || (this.inputElementRef.value.value = this.value.replace(new RegExp(i.replace(J, "\\$&"), "gu"), "")); this.dispatchEvent(new CustomEvent("inputChange", { detail: (r = this.inputElementRef.value) == null ? void 0 : r.value, bubbles: !0, composed: !0 })); } }; C.styles = [z, W, Z]; j([ d({ type: Boolean }) ], C.prototype, "disabled", void 0); j([ d({ type: String }) ], C.prototype, "value", void 0); j([ d({ type: String }) ], C.prototype, "placeholder", void 0); C = j([ m("wui-input-amount") ], C); const ee = f` :host { width: 100%; height: 100px; border-radius: var(--wui-border-radius-s); border: 1px solid var(--wui-color-gray-glass-002); background-color: var(--wui-color-gray-glass-002); transition: background-color var(--wui-ease-out-power-1) var(--wui-duration-lg); will-change: background-color; } :host(:hover) { background-color: var(--wui-color-gray-glass-005); } wui-flex { width: 100%; height: fit-content; } wui-button { width: 100%; display: flex; justify-content: flex-end; } wui-input-amount { mask-image: linear-gradient( 270deg, transparent 0px, transparent 8px, black 24px, black 25px, black 32px, black 100% ); } .totalValue { width: 100%; } `; var V = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let R = class extends w { render() { return u` <wui-flex flexDirection="column" gap="4xs" .padding=${["xl", "s", "l", "l"]} > <wui-flex alignItems="center"> <wui-input-amount @inputChange=${this.onInputChange.bind(this)} ?disabled=${!this.token && !0} .value=${this.sendTokenAmount ? String(this.sendTokenAmount) : ""} ></wui-input-amount> ${this.buttonTemplate()} </wui-flex> <wui-flex alignItems="center" justifyContent="space-between"> ${this.sendValueTemplate()} <wui-flex alignItems="center" gap="4xs" justifyContent="flex-end"> ${this.maxAmountTemplate()} ${this.actionTemplate()} </wui-flex> </wui-flex> </wui-flex>`; } buttonTemplate() { return this.token ? u`<wui-token-button text=${this.token.symbol} imageSrc=${this.token.iconUrl} @click=${this.handleSelectButtonClick.bind(this)} > </wui-token-button>` : u`<wui-button size="md" variant="accent" @click=${this.handleSelectButtonClick.bind(this)} >Select token</wui-button >`; } handleSelectButtonClick() { g.push("WalletSendSelectToken"); } sendValueTemplate() { if (this.token && this.sendTokenAmount) { const i = this.token.price * this.sendTokenAmount; return u`<wui-text class="totalValue" variant="small-400" color="fg-200" >${i ? `$${b.formatNumberToLocalString(i, 2)}` : "Incorrect value"}</wui-text >`; } return null; } maxAmountTemplate() { return this.token ? this.sendTokenAmount && this.sendTokenAmount > Number(this.token.quantity.numeric) ? u` <wui-text variant="small-400" color="error-100"> ${b.roundNumber(Number(this.token.quantity.numeric), 6, 5)} </wui-text>` : u` <wui-text variant="small-400" color="fg-200"> ${b.roundNumber(Number(this.token.quantity.numeric), 6, 5)} </wui-text>` : null; } actionTemplate() { return this.token ? this.sendTokenAmount && this.sendTokenAmount > Number(this.token.quantity.numeric) ? u`<wui-link @click=${this.onBuyClick.bind(this)}>Buy</wui-link>` : u`<wui-link @click=${this.onMaxClick.bind(this)}>Max</wui-link>` : null; } onInputChange(e) { l.setTokenAmount(e.detail); } onMaxClick() { if (this.token) { const e = L.bigNumber(this.token.quantity.numeric); l.setTokenAmount(Number(e.toFixed(20))); } } onBuyClick() { g.push("OnRampProviders"); } }; R.styles = ee; V([ d({ type: Object }) ], R.prototype, "token", void 0); V([ d({ type: Number }) ], R.prototype, "sendTokenAmount", void 0); R = V([ m("w3m-input-token") ], R); const te = f` :host { display: block; } wui-flex { position: relative; } wui-icon-box { width: 40px; height: 40px; border-radius: var(--wui-border-radius-xs) !important; border: 5px solid var(--wui-color-bg-125); background: var(--wui-color-bg-175); position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 3; } wui-button { --local-border-radius: var(--wui-border-radius-xs) !important; } .inputContainer { height: fit-content; } `; var $ = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let h = class extends w { constructor() { super(), this.unsubscribe = [], this.token = l.state.token, this.sendTokenAmount = l.state.sendTokenAmount, this.receiverAddress = l.state.receiverAddress, this.receiverProfileName = l.state.receiverProfileName, this.loading = l.state.loading, this.message = "Preview Send", this.fetchNetworkPrice(), this.fetchBalances(), this.unsubscribe.push(l.subscribe((e) => { this.token = e.token, this.sendTokenAmount = e.sendTokenAmount, this.receiverAddress = e.receiverAddress, this.receiverProfileName = e.receiverProfileName, this.loading = e.loading; })); } disconnectedCallback() { this.unsubscribe.forEach((e) => e()); } render() { return this.getMessage(), u` <wui-flex flexDirection="column" .padding=${["0", "l", "l", "l"]}> <wui-flex class="inputContainer" gap="xs" flexDirection="column"> <w3m-input-token .token=${this.token} .sendTokenAmount=${this.sendTokenAmount} ></w3m-input-token> <wui-icon-box size="inherit" backgroundColor="fg-300" iconSize="lg" iconColor="fg-250" background="opaque" icon="arrowBottom" ></wui-icon-box> <w3m-input-address .value=${this.receiverProfileName ? this.receiverProfileName : this.receiverAddress} ></w3m-input-address> </wui-flex> <wui-flex .margin=${["l", "0", "0", "0"]}> <wui-button @click=${this.onButtonClick.bind(this)} ?disabled=${!this.message.startsWith("Preview Send")} size="lg" variant="main" ?loading=${this.loading} fullWidth > ${this.message} </wui-button> </wui-flex> </wui-flex>`; } async fetchBalances() { await l.fetchTokenBalance(), l.fetchNetworkBalance(); } async fetchNetworkPrice() { await Q.getNetworkTokenPrice(); } onButtonClick() { g.push("WalletSendPreview"); } getMessage() { var e; this.message = "Preview Send", this.receiverAddress && !I.isAddress(this.receiverAddress, x.state.activeChain) && (this.message = "Invalid Address"), this.receiverAddress || (this.message = "Add Address"), this.sendTokenAmount && this.token && this.sendTokenAmount > Number(this.token.quantity.numeric) && (this.message = "Insufficient Funds"), this.sendTokenAmount || (this.message = "Add Amount"), this.sendTokenAmount && ((e = this.token) != null && e.price) && (this.sendTokenAmount * this.token.price || (this.message = "Incorrect Value")), this.token || (this.message = "Select Token"); } }; h.styles = te; $([ c() ], h.prototype, "token", void 0); $([ c() ], h.prototype, "sendTokenAmount", void 0); $([ c() ], h.prototype, "receiverAddress", void 0); $([ c() ], h.prototype, "receiverProfileName", void 0); $([ c() ], h.prototype, "loading", void 0); $([ c() ], h.prototype, "message", void 0); h = $([ m("w3m-wallet-send-view") ], h); const ie = f` .contentContainer { height: 440px; overflow: scroll; scrollbar-width: none; } .contentContainer::-webkit-scrollbar { display: none; } wui-icon-box { width: 40px; height: 40px; border-radius: var(--wui-border-radius-xxs); } `; var P = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let k = class extends w { constructor() { super(), this.unsubscribe = [], this.tokenBalances = l.state.tokenBalances, this.search = "", this.onDebouncedSearch = I.debounce((e) => { this.search = e; }), this.unsubscribe.push(l.subscribe((e) => { this.tokenBalances = e.tokenBalances; })); } disconnectedCallback() { this.unsubscribe.forEach((e) => e()); } render() { return u` <wui-flex flexDirection="column"> ${this.templateSearchInput()} <wui-separator></wui-separator> ${this.templateTokens()} </wui-flex> `; } templateSearchInput() { return u` <wui-flex gap="xs" padding="s"> <wui-input-text @inputChange=${this.onInputChange.bind(this)} class="network-search-input" size="sm" placeholder="Search token" icon="search" ></wui-input-text> </wui-flex> `; } templateTokens() { var e, i; return this.tokens = (e = this.tokenBalances) == null ? void 0 : e.filter((n) => { var r; return n.chainId === ((r = x.state.activeCaipNetwork) == null ? void 0 : r.caipNetworkId); }), this.search ? this.filteredTokens = (i = this.tokenBalances) == null ? void 0 : i.filter((n) => n.name.toLowerCase().includes(this.search.toLowerCase())) : this.filteredTokens = this.tokens, u` <wui-flex class="contentContainer" flexDirection="column" .padding=${["0", "s", "0", "s"]} > <wui-flex justifyContent="flex-start" .padding=${["m", "s", "s", "s"]}> <wui-text variant="paragraph-500" color="fg-200">Your tokens</wui-text> </wui-flex> <wui-flex flexDirection="column" gap="xs"> ${this.filteredTokens && this.filteredTokens.length > 0 ? this.filteredTokens.map((n) => u`<wui-list-token @click=${this.handleTokenClick.bind(this, n)} ?clickable=${!0} tokenName=${n.name} tokenImageUrl=${n.iconUrl} tokenAmount=${n.quantity.numeric} tokenValue=${n.value} tokenCurrency=${n.symbol} ></wui-list-token>`) : u`<wui-flex .padding=${["4xl", "0", "0", "0"]} alignItems="center" flexDirection="column" gap="l" > <wui-icon-box icon="coinPlaceholder" size="inherit" iconColor="fg-200" backgroundColor="fg-200" iconSize="lg" ></wui-icon-box> <wui-flex class="textContent" gap="xs" flexDirection="column" justifyContent="center" flexDirection="column" > <wui-text variant="paragraph-500" align="center" color="fg-100" >No tokens found</wui-text > <wui-text variant="small-400" align="center" color="fg-200" >Your tokens will appear here</wui-text > </wui-flex> <wui-link @click=${this.onBuyClick.bind(this)}>Buy</wui-link> </wui-flex>`} </wui-flex> </wui-flex> `; } onBuyClick() { g.push("OnRampProviders"); } onInputChange(e) { this.onDebouncedSearch(e.detail); } handleTokenClick(e) { l.setToken(e), l.setTokenAmount(void 0), g.goBack(); } }; k.styles = ie; P([ c() ], k.prototype, "tokenBalances", void 0); P([ c() ], k.prototype, "tokens", void 0); P([ c() ], k.prototype, "filteredTokens", void 0); P([ c() ], k.prototype, "search", void 0); k = P([ m("w3m-wallet-send-select-token-view") ], k); const ne = f` :host { display: flex; gap: var(--wui-spacing-xs); border-radius: var(--wui-border-radius-3xl); border: 1px solid var(--wui-color-gray-glass-002); background: var(--wui-color-gray-glass-002); padding: var(--wui-spacing-2xs) var(--wui-spacing-xs) var(--wui-spacing-2xs) var(--wui-spacing-s); align-items: center; } wui-avatar, wui-icon, wui-image { width: 32px; height: 32px; border: 1px solid var(--wui-color-gray-glass-002); border-radius: var(--wui-border-radius-3xl); box-shadow: 0 0 0 2px var(--wui-color-gray-glass-002); } `; var N = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let y = class extends w { constructor() { super(...arguments), this.text = "", this.address = "", this.isAddress = !1; } render() { return u`<wui-text variant="large-500" color="fg-100">${this.text}</wui-text> ${this.imageTemplate()}`; } imageTemplate() { return this.isAddress ? u`<wui-avatar address=${this.address} .imageSrc=${this.imageSrc}></wui-avatar>` : this.imageSrc ? u`<wui-image src=${this.imageSrc}></wui-image>` : u`<wui-icon size="inherit" color="fg-200" name="networkPlaceholder"></wui-icon>`; } }; y.styles = [z, W, ne]; N([ d() ], y.prototype, "text", void 0); N([ d() ], y.prototype, "address", void 0); N([ d() ], y.prototype, "imageSrc", void 0); N([ d({ type: Boolean }) ], y.prototype, "isAddress", void 0); y = N([ m("wui-preview-item") ], y); const re = f` :host { display: flex; column-gap: var(--wui-spacing-s); padding: 17px 18px 17px var(--wui-spacing-m); width: 100%; background-color: var(--wui-color-gray-glass-002); border-radius: var(--wui-border-radius-xs); color: var(--wui-color-fg-250); } wui-image { width: var(--wui-icon-size-lg); height: var(--wui-icon-size-lg); border-radius: var(--wui-border-radius-3xl); } wui-icon { width: var(--wui-icon-size-lg); height: var(--wui-icon-size-lg); } `; var _ = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let T = class extends w { constructor() { super(...arguments), this.imageSrc = void 0, this.textTitle = "", this.textValue = void 0; } render() { return u` <wui-flex justifyContent="space-between" alignItems="center"> <wui-text variant="paragraph-500" color=${this.textValue ? "fg-200" : "fg-100"}> ${this.textTitle} </wui-text> ${this.templateContent()} </wui-flex> `; } templateContent() { return this.imageSrc ? u`<wui-image src=${this.imageSrc} alt=${this.textTitle}></wui-image>` : this.textValue ? u` <wui-text variant="paragraph-400" color="fg-100"> ${this.textValue} </wui-text>` : u`<wui-icon size="inherit" color="fg-200" name="networkPlaceholder"></wui-icon>`; } }; T.styles = [z, W, re]; _([ d() ], T.prototype, "imageSrc", void 0); _([ d() ], T.prototype, "textTitle", void 0); _([ d() ], T.prototype, "textValue", void 0); T = _([ m("wui-list-content") ], T); const oe = f` :host { display: flex; width: auto; flex-direction: column; gap: var(--wui-border-radius-1xs); border-radius: var(--wui-border-radius-s); background: var(--wui-color-gray-glass-002); padding: var(--wui-spacing-s) var(--wui-spacing-1xs) var(--wui-spacing-1xs) var(--wui-spacing-1xs); } wui-text { padding: 0 var(--wui-spacing-1xs); } wui-flex { margin-top: var(--wui-spacing-1xs); } .network { cursor: pointer; transition: background-color var(--wui-ease-out-power-1) var(--wui-duration-lg); will-change: background-color; } .network:focus-visible { border: 1px solid var(--wui-color-accent-100); background-color: var(--wui-color-gray-glass-005); -webkit-box-shadow: 0px 0px 0px 4px var(--wui-box-shadow-blue); -moz-box-shadow: 0px 0px 0px 4px var(--wui-box-shadow-blue); box-shadow: 0px 0px 0px 4px var(--wui-box-shadow-blue); } .network:hover { background-color: var(--wui-color-gray-glass-005); } .network:active { background-color: var(--wui-color-gray-glass-010); } `; var U = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let S = class extends w { render() { return u` <wui-text variant="small-400" color="fg-200">Details</wui-text> <wui-flex flexDirection="column" gap="xxs"> <wui-list-content textTitle="Address" textValue=${b.getTruncateString({ string: this.receiverAddress ?? "", charsStart: 4, charsEnd: 4, truncate: "middle" })} > </wui-list-content> ${this.networkTemplate()} </wui-flex>`; } networkTemplate() { var e; return (e = this.caipNetwork) != null && e.name ? u` <wui-list-content @click=${() => this.onNetworkClick(this.caipNetwork)} class="network" textTitle="Network" imageSrc=${K(q.getNetworkImage(this.caipNetwork))} ></wui-list-content>` : null; } onNetworkClick(e) { e && g.push("Networks", { network: e }); } }; S.styles = oe; U([ d() ], S.prototype, "receiverAddress", void 0); U([ d({ type: Object }) ], S.prototype, "caipNetwork", void 0); S = U([ m("w3m-wallet-send-details") ], S); const se = f` wui-avatar, wui-image { display: ruby; width: 32px; height: 32px; border-radius: var(--wui-border-radius-3xl); } .sendButton { width: 70%; --local-width: 100% !important; --local-border-radius: var(--wui-border-radius-xs) !important; } .cancelButton { width: 30%; --local-width: 100% !important; --local-border-radius: var(--wui-border-radius-xs) !important; } `; var v = function(s, e, i, n) { var r = arguments.length, t = r < 3 ? e : n === null ? n = Object.getOwnPropertyDescriptor(e, i) : n, o; if (typeof Reflect == "object" && typeof Reflect.decorate == "function") t = Reflect.decorate(s, e, i, n); else for (var a = s.length - 1; a >= 0; a--) (o = s[a]) && (t = (r < 3 ? o(t) : r > 3 ? o(e, i, t) : o(e, i)) || t); return r > 3 && t && Object.defineProperty(e, i, t), t; }; let p = class extends w { constructor() { super(), this.unsubscribe = [], this.token = l.state.token, this.sendTokenAmount = l.state.sendTokenAmount, this.receiverAddress = l.state.receiverAddress, this.receiverProfileName = l.state.receiverProfileName, this.receiverProfileImageUrl = l.state.receiverProfileImageUrl, this.caipNetwork = x.state.activeCaipNetwork, this.loading = l.state.loading, this.unsubscribe.push(l.subscribe((e) => { this.token = e.token, this.sendTokenAmount = e.sendTokenAmount, this.receiverAddress = e.receiverAddress, this.receiverProfileName = e.receiverProfileName, this.receiverProfileImageUrl = e.receiverProfileImageUrl, this.loading = e.loading; }), x.subscribeKey("activeCaipNetwork", (e) => this.caipNetwork = e)); } disconnectedCallback() { this.unsubscribe.forEach((e) => e()); } render() { var e, i; return u` <wui-flex flexDirection="column" .padding=${["0", "l", "l", "l"]}> <wui-flex gap="xs" flexDirection="column" .padding=${["0", "xs", "0", "xs"]}> <wui-flex alignItems="center" justifyContent="space-between"> <wui-flex flexDirection="column" gap="4xs"> <wui-text variant="small-400" color="fg-150">Send</wui-text> ${this.sendValueTemplate()} </wui-flex> <wui-preview-item text="${this.sendTokenAmount ? b.roundNumber(this.sendTokenAmount, 6, 5) : "unknown"} ${(e = this.token) == null ? void 0 : e.symbol}" .imageSrc=${(i = this.token) == null ? void 0 : i.iconUrl} ></wui-preview-item> </wui-flex> <wui-flex> <wui-icon color="fg-200" size="md" name="arrowBottom"></wui-icon> </wui-flex> <wui-flex alignItems="center" justifyContent="space-between"> <wui-text variant="small-400" color="fg-150">To</wui-text> <wui-preview-item text="${this.receiverProfileName ? b.getTruncateString({ string: this.receiverProfileName, charsStart: 20, charsEnd: 0, truncate: "end" }) : b.getTruncateString({ string: this.receiverAddress ? this.receiverAddress : "", charsStart: 4, charsEnd: 4, truncate: "middle" })}" address=${this.receiverAddress ?? ""} .imageSrc=${this.receiverProfileImageUrl ?? void 0} .isAddress=${!0} ></wui-preview-item> </wui-flex> </wui-flex> <wui-flex flexDirection="column" .padding=${["xxl", "0", "0", "0"]}> <w3m-wallet-send-details .caipNetwork=${this.caipNetwork} .receiverAddress=${this.receiverAddress} ></w3m-wallet-send-details> <wui-flex justifyContent="center" gap="xxs" .padding=${["s", "0", "0", "0"]}> <wui-icon size="sm" color="fg-200" name="warningCircle"></wui-icon> <wui-text variant="small-400" color="fg-200">Review transaction carefully</wui-text> </wui-flex> <wui-flex justifyContent="center" gap="s" .padding=${["l", "0", "0", "0"]}> <wui-button class="cancelButton" @click=${this.onCancelClick.bind(this)} size="lg" variant="neutral" > Cancel </wui-button> <wui-button class="sendButton" @click=${this.onSendClick.bind(this)} size="lg" variant="main" .loading=${this.loading} > Send </wui-button> </wui-flex> </wui-flex></wui-flex >`; } sendValueTemplate() { if (this.token && this.sendTokenAmount) { const i = this.token.price * this.sendTokenAmount; return u`<wui-text variant="paragraph-400" color="fg-100" >$${i.toFixed(2)}</wui-text >`; } return null; } async onSendClick() { var e, i, n; if (!this.sendTokenAmount || !this.receiverAddress) { B.showError("Please enter a valid amount and receiver address"); return; } try { await l.sendToken(), B.showSuccess("Transaction started"), g.replace("Account"); } catch (r) { B.showError("Failed to send transaction. Please try again."), console.error("SendController:sendToken - failed to send transaction", r); const t = x.state.activeChain, o = r instanceof Error ? r.message : "Unknown error"; F.sendEvent({ type: "track", event: "SEND_ERROR", properties: { message: o, isSmartAccount: ((e = M.state.preferredAccountTypes) == null ? void 0 : e[t]) === Y.ACCOUNT_TYPES.SMART_ACCOUNT, token: ((i = this.token) == null ? void 0 : i.symbol) || "", amount: this.sendTokenAmount, network: ((n = x.state.activeCaipNetwork) == null ? void 0 : n.caipNetworkId) || "" } }); } } onCancelClick() { g.goBack(); } }; p.styles = se; v([ c() ], p.prototype, "token", void 0); v([ c() ], p.prototype, "sendTokenAmount", void 0); v([ c() ], p.prototype, "receiverAddress", void 0); v([ c() ], p.prototype, "receiverProfileName", void 0); v([ c() ], p.prototype, "receiverProfileImageUrl", void 0); v([ c() ], p.prototype, "caipNetwork", void 0); v([ c() ], p.prototype, "loading", void 0); p = v([ m("w3m-wallet-send-preview-view") ], p); export { k as W3mSendSelectTokenView, p as W3mWalletSendPreviewView, h as W3mWalletSendView }; //# sourceMappingURL=send-CBB4mKaz.js.map