@shapeshiftoss/swap-widget 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/Dockerfile +87 -0
  2. package/README.md +519 -0
  3. package/dist/assets/PhArrowCircleDown-B305t-Sh.js +14 -0
  4. package/dist/assets/PhArrowClockwise-CJPxQhr_.js +14 -0
  5. package/dist/assets/PhArrowDown-C4hT9BVu.js +14 -0
  6. package/dist/assets/PhArrowLeft-Way4Cu-r.js +14 -0
  7. package/dist/assets/PhArrowRight-Cp5ZME0F.js +14 -0
  8. package/dist/assets/PhArrowSquareOut-NnrK69c5.js +14 -0
  9. package/dist/assets/PhArrowUp-Dph6j8rm.js +14 -0
  10. package/dist/assets/PhArrowUpRight-BpJjRRRh.js +14 -0
  11. package/dist/assets/PhArrowsClockwise-CFUT8X7R.js +14 -0
  12. package/dist/assets/PhArrowsDownUp-BjBI4ckC.js +14 -0
  13. package/dist/assets/PhArrowsLeftRight-CuLpbKRk.js +14 -0
  14. package/dist/assets/PhBank-Dchr4XQJ.js +14 -0
  15. package/dist/assets/PhBrowser-dUu2TrC1.js +14 -0
  16. package/dist/assets/PhCaretDown-78IuKU3V.js +14 -0
  17. package/dist/assets/PhCaretLeft-_aiyH7n1.js +14 -0
  18. package/dist/assets/PhCaretRight-8zJQEuDX.js +14 -0
  19. package/dist/assets/PhCaretUp-CiCxKWwN.js +14 -0
  20. package/dist/assets/PhCheck-CcADx8br.js +14 -0
  21. package/dist/assets/PhCircleHalf-BYzSzd2h.js +14 -0
  22. package/dist/assets/PhClock-UItiXeJq.js +14 -0
  23. package/dist/assets/PhCompass-CUy3uA7t.js +14 -0
  24. package/dist/assets/PhCopy-C-PDgSlZ.js +14 -0
  25. package/dist/assets/PhCreditCard-CWRaUT6F.js +14 -0
  26. package/dist/assets/PhCurrencyDollar-Cqla3AXT.js +14 -0
  27. package/dist/assets/PhDesktop-BBIPrYLl.js +14 -0
  28. package/dist/assets/PhDeviceMobile-BdsPaATg.js +14 -0
  29. package/dist/assets/PhDotsThree-BMXCQl-0.js +14 -0
  30. package/dist/assets/PhEnvelope-yUsis6yU.js +14 -0
  31. package/dist/assets/PhFunnelSimple-Ba7BbWTp.js +14 -0
  32. package/dist/assets/PhGlobe-DgLxBk5U.js +14 -0
  33. package/dist/assets/PhIdentificationCard-Czjmq9Z3.js +14 -0
  34. package/dist/assets/PhImage-BAJ_erz6.js +14 -0
  35. package/dist/assets/PhInfo-Cr4DhVUE.js +14 -0
  36. package/dist/assets/PhLightbulb-BX_7duTr.js +14 -0
  37. package/dist/assets/PhMagnifyingGlass-Mygfryvz.js +14 -0
  38. package/dist/assets/PhPaperPlaneRight-BeuCA660.js +14 -0
  39. package/dist/assets/PhPlus-BMjcHjsT.js +14 -0
  40. package/dist/assets/PhPower-CGffGmdb.js +14 -0
  41. package/dist/assets/PhPuzzlePiece-wm_GpVSi.js +14 -0
  42. package/dist/assets/PhQrCode-DRwRzXCH.js +14 -0
  43. package/dist/assets/PhQuestion-M09j2U0T.js +14 -0
  44. package/dist/assets/PhQuestionMark-BP9EMB6h.js +14 -0
  45. package/dist/assets/PhSealCheck-BfG80yKn.js +14 -0
  46. package/dist/assets/PhSignOut-C5YOWlPT.js +14 -0
  47. package/dist/assets/PhSpinner-BXooDYzU.js +14 -0
  48. package/dist/assets/PhTrash-Biq6rmmL.js +14 -0
  49. package/dist/assets/PhUser-CAgZSpGe.js +14 -0
  50. package/dist/assets/PhVault-l2PHF38a.js +14 -0
  51. package/dist/assets/PhWallet-w25D16It.js +14 -0
  52. package/dist/assets/PhWarning-DPEydIPw.js +14 -0
  53. package/dist/assets/PhWarningCircle-BqjT745H.js +14 -0
  54. package/dist/assets/PhX-s-SmVExa.js +14 -0
  55. package/dist/assets/SwapController-If0bFrNc.js +1 -0
  56. package/dist/assets/ccip-BBB7uCdL.js +1 -0
  57. package/dist/assets/ccip-CkkdfKKI.js +1 -0
  58. package/dist/assets/data-capture-D4gAy-Yc.js +242 -0
  59. package/dist/assets/email-B1AJehis.js +90 -0
  60. package/dist/assets/embedded-wallet-Q6DQopDk.js +410 -0
  61. package/dist/assets/features-B6JAPAFb.js +5 -0
  62. package/dist/assets/index-5jd8RPN9.js +7428 -0
  63. package/dist/assets/index-B4kNtSTk.js +1080 -0
  64. package/dist/assets/index-B753eAob.js +1 -0
  65. package/dist/assets/index-BZoLTv77.js +3 -0
  66. package/dist/assets/index-Bcw9UURX.js +3 -0
  67. package/dist/assets/index-BkrV-ahK.js +2 -0
  68. package/dist/assets/index-CRQzQ_up.js +9 -0
  69. package/dist/assets/index-CSW0Gt5y.js +132 -0
  70. package/dist/assets/index-CZ4jTIsk.js +138 -0
  71. package/dist/assets/index-Cwa8SB3h.js +61 -0
  72. package/dist/assets/index-DEwQgT4r.js +78 -0
  73. package/dist/assets/index-DVfQiQ1d.js +1 -0
  74. package/dist/assets/index-cV3UdaMs.css +1 -0
  75. package/dist/assets/index-hAmu622O.js +43 -0
  76. package/dist/assets/onramp-XcPNCLRU.js +422 -0
  77. package/dist/assets/pay-with-exchange-BeHt4OF4.js +280 -0
  78. package/dist/assets/property-C9JG5tag.js +27 -0
  79. package/dist/assets/receive-7ff4he2S.js +131 -0
  80. package/dist/assets/send-CkMBIRXT.js +554 -0
  81. package/dist/assets/socials-DmmxuLrP.js +250 -0
  82. package/dist/assets/swaps-IHAYRQ0x.js +1050 -0
  83. package/dist/assets/transactions-9Cxdk7o9.js +16 -0
  84. package/dist/assets/v4-BOvFkHkt.js +1 -0
  85. package/dist/assets/w3m-modal-kJzFnBfB.js +891 -0
  86. package/dist/assets/wallet-standard-Dv8LMoUB.js +1 -0
  87. package/dist/favicon.png +0 -0
  88. package/dist/favicon.svg +11 -0
  89. package/dist/icon-192x192.png +0 -0
  90. package/dist/icon-512x512.png +0 -0
  91. package/dist/index.html +33 -0
  92. package/index.html +32 -0
  93. package/package.json +59 -0
  94. package/public/favicon.png +0 -0
  95. package/public/favicon.svg +11 -0
  96. package/public/icon-192x192.png +0 -0
  97. package/public/icon-512x512.png +0 -0
  98. package/railway.toml +10 -0
  99. package/src/api/client.ts +95 -0
  100. package/src/components/AddressInputModal.css +173 -0
  101. package/src/components/AddressInputModal.tsx +250 -0
  102. package/src/components/ApprovalStep.tsx +92 -0
  103. package/src/components/ExecutionStep.tsx +27 -0
  104. package/src/components/InputStep.tsx +431 -0
  105. package/src/components/QuoteSelector.css +146 -0
  106. package/src/components/QuoteSelector.tsx +137 -0
  107. package/src/components/QuotesModal.css +250 -0
  108. package/src/components/QuotesModal.tsx +182 -0
  109. package/src/components/SettingsModal.css +145 -0
  110. package/src/components/SettingsModal.tsx +180 -0
  111. package/src/components/StatusStep.tsx +139 -0
  112. package/src/components/SwapWidget.css +713 -0
  113. package/src/components/SwapWidget.tsx +607 -0
  114. package/src/components/TokenSelectModal.css +438 -0
  115. package/src/components/TokenSelectModal.tsx +487 -0
  116. package/src/components/WalletProvider.tsx +92 -0
  117. package/src/config/appkit.ts +104 -0
  118. package/src/config/wagmi.ts +27 -0
  119. package/src/constants/chains.ts +72 -0
  120. package/src/constants/defaults.ts +28 -0
  121. package/src/constants/swappers.ts +48 -0
  122. package/src/constants/viemChains.ts +69 -0
  123. package/src/contexts/SwapWalletContext.tsx +25 -0
  124. package/src/demo/App.css +458 -0
  125. package/src/demo/App.tsx +481 -0
  126. package/src/demo/main.tsx +25 -0
  127. package/src/hooks/useAssets.ts +180 -0
  128. package/src/hooks/useBalances.ts +822 -0
  129. package/src/hooks/useBitcoinSigning.ts +276 -0
  130. package/src/hooks/useMarketData.ts +169 -0
  131. package/src/hooks/useSolanaSigning.ts +275 -0
  132. package/src/hooks/useStatusPolling.ts +137 -0
  133. package/src/hooks/useSwapApproval.ts +106 -0
  134. package/src/hooks/useSwapDisplayValues.ts +157 -0
  135. package/src/hooks/useSwapExecution.ts +199 -0
  136. package/src/hooks/useSwapHandlers.ts +119 -0
  137. package/src/hooks/useSwapQuote.ts +71 -0
  138. package/src/hooks/useSwapQuoting.ts +102 -0
  139. package/src/hooks/useSwapRates.ts +61 -0
  140. package/src/index.ts +43 -0
  141. package/src/machines/SwapMachineContext.ts +5 -0
  142. package/src/machines/__tests__/guards.test.ts +228 -0
  143. package/src/machines/__tests__/setup.test.ts +7 -0
  144. package/src/machines/__tests__/swapMachine.test.ts +544 -0
  145. package/src/machines/__tests__/types.test.ts +124 -0
  146. package/src/machines/guards.ts +33 -0
  147. package/src/machines/swapMachine.ts +288 -0
  148. package/src/machines/types.ts +54 -0
  149. package/src/services/transactionStatus.ts +322 -0
  150. package/src/types/index.ts +361 -0
  151. package/src/utils/addressValidation.ts +201 -0
  152. package/src/utils/redirect.ts +45 -0
  153. package/src/vite-env.d.ts +10 -0
  154. package/tsconfig.json +23 -0
  155. package/tsconfig.node.json +10 -0
  156. package/vite.config.ts +101 -0
  157. package/vitest.config.ts +18 -0
@@ -0,0 +1,242 @@
1
+ import{O as y,I as $,J as l,F as S,G as x,af as m,R as p,k as f,S as h,a4 as u,U as _,ag as E,ah as R}from"./index-5jd8RPN9.js";import{W as C}from"./index-CSW0Gt5y.js";import{ReownAuthentication as v}from"./features-B6JAPAFb.js";const I=y`
2
+ .email-sufixes {
3
+ display: flex;
4
+ flex-direction: row;
5
+ gap: var(--wui-spacing-3xs);
6
+ overflow-x: auto;
7
+ max-width: 100%;
8
+ margin-top: var(--wui-spacing-s);
9
+ margin-bottom: calc(-1 * var(--wui-spacing-m));
10
+ padding-bottom: var(--wui-spacing-m);
11
+ margin-left: calc(-1 * var(--wui-spacing-m));
12
+ margin-right: calc(-1 * var(--wui-spacing-m));
13
+ padding-left: var(--wui-spacing-m);
14
+ padding-right: var(--wui-spacing-m);
15
+
16
+ &::-webkit-scrollbar {
17
+ display: none;
18
+ }
19
+ }
20
+ `;var O=function(o,t,i,a){var n=arguments.length,e=n<3?t:a===null?a=Object.getOwnPropertyDescriptor(t,i):a,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")e=Reflect.decorate(o,t,i,a);else for(var s=o.length-1;s>=0;s--)(r=o[s])&&(e=(n<3?r(e):n>3?r(t,i,e):r(t,i))||e);return n>3&&e&&Object.defineProperty(t,i,e),e};const D=["@gmail.com","@outlook.com","@yahoo.com","@hotmail.com","@aol.com","@icloud.com","@zoho.com"];let g=class extends ${constructor(){super(...arguments),this.email=""}render(){const t=D.filter(this.filter.bind(this)).map(this.item.bind(this));return t.length===0?null:l`<div class="email-sufixes">${t}</div>`}filter(t){if(!this.email)return!1;const i=this.email.split("@");if(i.length<2)return!0;const a=i.pop();return t.includes(a)&&t!==`@${a}`}item(t){return l`<wui-button variant="neutral" size="sm" @click=${()=>{const a=this.email.split("@");a.length>1&&a.pop();const n=a[0]+t;this.dispatchEvent(new CustomEvent("change",{detail:n,bubbles:!0,composed:!0}))}}
21
+ >${t}</wui-button
22
+ >`}};g.styles=[I];O([S()],g.prototype,"email",void 0);g=O([x("w3m-email-suffixes-widget")],g);const j=y`
23
+ .recent-emails {
24
+ display: flex;
25
+ flex-direction: column;
26
+ padding: var(--wui-spacing-s) 0;
27
+ border-top: 1px solid var(--wui-color-gray-glass-005);
28
+ border-bottom: 1px solid var(--wui-color-gray-glass-005);
29
+ }
30
+
31
+ .recent-emails-heading {
32
+ margin-bottom: var(--wui-spacing-s);
33
+ }
34
+
35
+ .recent-emails-list-item {
36
+ --wui-color-gray-glass-002: transparent;
37
+ }
38
+ `;var W=function(o,t,i,a){var n=arguments.length,e=n<3?t:a===null?a=Object.getOwnPropertyDescriptor(t,i):a,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")e=Reflect.decorate(o,t,i,a);else for(var s=o.length-1;s>=0;s--)(r=o[s])&&(e=(n<3?r(e):n>3?r(t,i,e):r(t,i))||e);return n>3&&e&&Object.defineProperty(t,i,e),e};let w=class extends ${constructor(){super(...arguments),this.emails=[]}render(){return this.emails.length===0?null:l`<div class="recent-emails">
39
+ <wui-text variant="micro-600" color="fg-200" class="recent-emails-heading"
40
+ >Recently used emails</wui-text
41
+ >
42
+ ${this.emails.map(this.item.bind(this))}
43
+ </div>`}item(t){return l`<wui-list-item
44
+ @click=${()=>{this.dispatchEvent(new CustomEvent("select",{detail:t,bubbles:!0,composed:!0}))}}
45
+ ?chevron=${!0}
46
+ icon="mail"
47
+ iconVariant="overlay"
48
+ class="recent-emails-list-item"
49
+ >
50
+ <wui-text variant="paragraph-500" color="fg-100">${t}</wui-text>
51
+ </wui-list-item>`}};w.styles=[j];W([S()],w.prototype,"emails",void 0);w=W([x("w3m-recent-emails-widget")],w);var A=function(o,t,i,a){var n=arguments.length,e=n<3?t:a===null?a=Object.getOwnPropertyDescriptor(t,i):a,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")e=Reflect.decorate(o,t,i,a);else for(var s=o.length-1;s>=0;s--)(r=o[s])&&(e=(n<3?r(e):n>3?r(t,i,e):r(t,i))||e);return n>3&&e&&Object.defineProperty(t,i,e),e};let b=class extends C{constructor(){super(...arguments),this.siwx=m.state.siwx,this.onOtpSubmit=async t=>{await this.siwx.confirmEmailOtp({code:t}),p.replace("SIWXSignMessage")},this.onOtpResend=async t=>{const i=f.getAccountData();if(!(i!=null&&i.caipAddress))throw new Error("No account data found");await this.siwx.requestEmailOtp({email:t,account:i.caipAddress})}}connectedCallback(){(!this.siwx||!(this.siwx instanceof v))&&h.showError("ReownAuthentication is not initialized."),super.connectedCallback()}shouldSubmitOnOtpChange(){return this.otp.length===C.OTP_LENGTH}};A([u()],b.prototype,"siwx",void 0);b=A([x("w3m-data-capture-otp-confirm-view")],b);const k=y`
52
+ .hero {
53
+ display: flex;
54
+ flex-direction: column;
55
+ align-items: center;
56
+ justify-content: center;
57
+ gap: var(--wui-spacing-3xs);
58
+
59
+ transition-property: margin, height;
60
+ transition-duration: var(--wui-duration-md);
61
+ transition-timing-function: var(--wui-ease-out-power-1);
62
+ margin-top: -100px;
63
+
64
+ &[data-state='loading'] {
65
+ margin-top: 0px;
66
+ }
67
+
68
+ position: relative;
69
+ &:after {
70
+ content: '';
71
+ position: absolute;
72
+ bottom: 0;
73
+ height: 252px;
74
+ width: 360px;
75
+ background: radial-gradient(
76
+ 96.11% 53.95% at 50% 51.28%,
77
+ transparent 0%,
78
+ color-mix(in srgb, var(--wui-color-bg-100) 5%, transparent) 49%,
79
+ color-mix(in srgb, var(--wui-color-bg-100) 65%, transparent) 99.43%
80
+ );
81
+ }
82
+ }
83
+
84
+ .hero-main-icon {
85
+ width: 176px;
86
+ transition-property: background-color;
87
+ transition-duration: var(--wui-duration-lg);
88
+ transition-timing-function: var(--wui-ease-out-power-1);
89
+
90
+ &[data-state='loading'] {
91
+ width: 56px;
92
+ }
93
+ }
94
+
95
+ .hero-row {
96
+ display: flex;
97
+ flex-direction: row;
98
+ align-items: center;
99
+ justify-content: center;
100
+ gap: var(--wui-spacing-3xs);
101
+ flex-wrap: nowrap;
102
+ min-width: fit-content;
103
+
104
+ &:nth-child(1) {
105
+ transform: translateX(-30px);
106
+ }
107
+
108
+ &:nth-child(2) {
109
+ transform: translateX(30px);
110
+ }
111
+
112
+ &:nth-child(4) {
113
+ transform: translateX(40px);
114
+ }
115
+
116
+ transition-property: height;
117
+ transition-duration: var(--wui-duration-md);
118
+ transition-timing-function: var(--wui-ease-out-power-1);
119
+ height: 68px;
120
+
121
+ &[data-state='loading'] {
122
+ height: 0px;
123
+ }
124
+ }
125
+
126
+ .hero-row-icon {
127
+ opacity: 0.1;
128
+ transition-property: opacity;
129
+ transition-duration: var(--wui-duration-md);
130
+ transition-timing-function: var(--wui-ease-out-power-1);
131
+
132
+ &[data-state='loading'] {
133
+ opacity: 0;
134
+ }
135
+ }
136
+ `;var d=function(o,t,i,a){var n=arguments.length,e=n<3?t:a===null?a=Object.getOwnPropertyDescriptor(t,i):a,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")e=Reflect.decorate(o,t,i,a);else for(var s=o.length-1;s>=0;s--)(r=o[s])&&(e=(n<3?r(e):n>3?r(t,i,e):r(t,i))||e);return n>3&&e&&Object.defineProperty(t,i,e),e};let c=class extends ${constructor(){var t,i,a,n,e,r,s;super(...arguments),this.email=((t=p.state.data)==null?void 0:t.email)??((a=(i=f.getAccountData())==null?void 0:i.user)==null?void 0:a.email)??"",this.address=((n=f.getAccountData())==null?void 0:n.address)??"",this.loading=!1,this.appName=((e=m.state.metadata)==null?void 0:e.name)??"AppKit",this.siwx=m.state.siwx,this.isRequired=Array.isArray((r=m.state.remoteFeatures)==null?void 0:r.emailCapture)&&((s=m.state.remoteFeatures)==null?void 0:s.emailCapture.includes("required")),this.recentEmails=this.getRecentEmails()}connectedCallback(){(!this.siwx||!(this.siwx instanceof v))&&h.showError("ReownAuthentication is not initialized. Please contact support."),super.connectedCallback()}firstUpdated(){this.loading=!1,this.recentEmails=this.getRecentEmails(),this.email&&this.onSubmit()}render(){return l`
137
+ <wui-flex flexDirection="column" .padding=${["3xs","m","m","m"]} gap="l">
138
+ ${this.hero()} ${this.paragraph()} ${this.emailInput()} ${this.recentEmailsWidget()}
139
+ ${this.footerActions()}
140
+ </wui-flex>
141
+ `}hero(){return l`
142
+ <div class="hero" data-state=${this.loading?"loading":"default"}>
143
+ ${this.heroRow(["id","mail","wallet","x","solana","qrCode"])}
144
+ ${this.heroRow(["mail","farcaster","wallet","discord","mobile","qrCode"])}
145
+ <div class="hero-row">
146
+ ${this.heroIcon("github")} ${this.heroIcon("bank")}
147
+ <wui-icon-box
148
+ size="xl"
149
+ iconSize="xxl"
150
+ iconColor=${this.loading?"fg-100":"accent-100"}
151
+ backgroundColor=${this.loading?"fg-100":"accent-100"}
152
+ icon=${this.loading?"id":"user"}
153
+ isOpaque
154
+ class="hero-main-icon"
155
+ data-state=${this.loading?"loading":"default"}
156
+ >
157
+ </wui-icon-box>
158
+ ${this.heroIcon("id")} ${this.heroIcon("card")}
159
+ </div>
160
+ ${this.heroRow(["google","id","github","verify","apple","mobile"])}
161
+ </div>
162
+ `}heroRow(t){return l`
163
+ <div class="hero-row" data-state=${this.loading?"loading":"default"}>
164
+ ${t.map(this.heroIcon.bind(this))}
165
+ </div>
166
+ `}heroIcon(t){return l`
167
+ <wui-icon-box
168
+ size="xl"
169
+ iconSize="xxl"
170
+ iconColor="fg-100"
171
+ backgroundColor="fg-100"
172
+ icon=${t}
173
+ data-state=${this.loading?"loading":"default"}
174
+ isOpaque
175
+ class="hero-row-icon"
176
+ >
177
+ </wui-icon-box>
178
+ `}paragraph(){return this.loading?l`
179
+ <wui-text variant="paragraph-400" color="fg-200" align="center"
180
+ >We are verifying your account with email
181
+ <wui-text variant="paragraph-600" color="accent-100">${this.email}</wui-text> and address
182
+ <wui-text variant="paragraph-600" color="fg-100">
183
+ ${_.getTruncateString({string:this.address,charsEnd:4,charsStart:4,truncate:"middle"})} </wui-text
184
+ >, please wait a moment.</wui-text
185
+ >
186
+ `:this.isRequired?l`
187
+ <wui-text variant="paragraph-600" color="fg-100" align="center">
188
+ ${this.appName} requires your email for authentication.
189
+ </wui-text>
190
+ `:l`
191
+ <wui-flex flexDirection="column" gap="xs" alignItems="center">
192
+ <wui-text variant="paragraph-600" color="fg-100" align="center" size>
193
+ ${this.appName} would like to collect your email.
194
+ </wui-text>
195
+
196
+ <wui-text variant="small-400" color="fg-200" align="center">
197
+ Don't worry, it's optional&mdash;you can skip this step.
198
+ </wui-text>
199
+ </wui-flex>
200
+ `}emailInput(){if(this.loading)return null;const t=a=>{a.key==="Enter"&&this.onSubmit()},i=a=>{this.email=a.detail};return l`
201
+ <wui-flex flexDirection="column">
202
+ <wui-email-input
203
+ .value=${this.email}
204
+ .disabled=${this.loading}
205
+ @inputChange=${i}
206
+ @keydown=${t}
207
+ ></wui-email-input>
208
+
209
+ <w3m-email-suffixes-widget
210
+ .email=${this.email}
211
+ @change=${i}
212
+ ></w3m-email-suffixes-widget>
213
+ </wui-flex>
214
+ `}recentEmailsWidget(){if(this.recentEmails.length===0||this.loading)return null;const t=i=>{this.email=i.detail,this.onSubmit()};return l`
215
+ <w3m-recent-emails-widget
216
+ .emails=${this.recentEmails}
217
+ @select=${t}
218
+ ></w3m-recent-emails-widget>
219
+ `}footerActions(){return l`
220
+ <wui-flex flexDirection="row" fullWidth gap="s">
221
+ ${this.isRequired?null:l`<wui-button
222
+ size="lg"
223
+ variant="neutral"
224
+ fullWidth
225
+ .disabled=${this.loading}
226
+ @click=${this.onSkip.bind(this)}
227
+ >Skip this step</wui-button
228
+ >`}
229
+
230
+ <wui-button
231
+ size="lg"
232
+ variant="main"
233
+ type="submit"
234
+ fullWidth
235
+ .disabled=${!this.email||!this.isValidEmail(this.email)}
236
+ .loading=${this.loading}
237
+ @click=${this.onSubmit.bind(this)}
238
+ >
239
+ Continue
240
+ </wui-button>
241
+ </wui-flex>
242
+ `}async onSubmit(){if(!(this.siwx instanceof v)){h.showError("ReownAuthentication is not initialized. Please contact support.");return}const t=f.getActiveCaipAddress();if(!t)throw new Error("Account is not connected.");if(!this.isValidEmail(this.email)){h.showError("Please provide a valid email.");return}try{this.loading=!0;const i=await this.siwx.requestEmailOtp({email:this.email,account:t});this.pushRecentEmail(this.email),i.uuid===null?p.replace("SIWXSignMessage"):p.replace("DataCaptureOtpConfirm",{email:this.email})}catch{h.showError("Failed to send email OTP"),this.loading=!1}}onSkip(){p.replace("SIWXSignMessage")}getRecentEmails(){const t=E.getItem(R.RECENT_EMAILS);return(t?t.split(","):[]).filter(this.isValidEmail.bind(this)).slice(0,3)}pushRecentEmail(t){const i=this.getRecentEmails(),a=Array.from(new Set([t,...i])).slice(0,3);E.setItem(R.RECENT_EMAILS,a.join(","))}isValidEmail(t){return/^\S+@\S+\.\S+$/u.test(t)}};c.styles=[k];d([u()],c.prototype,"email",void 0);d([u()],c.prototype,"address",void 0);d([u()],c.prototype,"loading",void 0);d([u()],c.prototype,"appName",void 0);d([u()],c.prototype,"siwx",void 0);d([u()],c.prototype,"isRequired",void 0);d([u()],c.prototype,"recentEmails",void 0);c=d([x("w3m-data-capture-view")],c);export{b as W3mDataCaptureOtpConfirmView,c as W3mDataCaptureView,g as W3mEmailSuffixesWidget,w as W3mRecentEmailsWidget};
@@ -0,0 +1,90 @@
1
+ import{k as S,C as g,af as p,E as c,as as _,R as s,S as f,n as C,G as d,y as D,I as y,u,J as m,a4 as E,O as $,at as W,au as P,av as N,h as T}from"./index-5jd8RPN9.js";import{W as b}from"./index-CSW0Gt5y.js";var F=function(r,e,t,a){var n=arguments.length,i=n<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,a);else for(var l=r.length-1;l>=0;l--)(o=r[l])&&(i=(n<3?o(i):n>3?o(e,t,i):o(e,t))||i);return n>3&&i&&Object.defineProperty(e,t,i),i};let I=class extends b{constructor(){super(...arguments),this.onOtpSubmit=async e=>{var t,a;try{if(this.authConnector){const n=S.state.activeChain,i=g.getConnections(n),o=(t=p.state.remoteFeatures)==null?void 0:t.multiWallet,l=i.length>0;if(await this.authConnector.provider.connectOtp({otp:e}),c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_PASS"}),n)await g.connectExternal(this.authConnector,n);else throw new Error("Active chain is not set on ChainController");if((a=p.state.remoteFeatures)!=null&&a.emailCapture)return;if(p.state.siwx){_.close();return}if(l&&o){s.replace("ProfileWallets"),f.showSuccess("New Wallet Added");return}_.close()}}catch(n){throw c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_FAIL",properties:{message:C.parseError(n)}}),n}},this.onOtpResend=async e=>{this.authConnector&&(await this.authConnector.provider.connectEmail({email:e}),c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_SENT"}))}}};I=F([d("w3m-email-verify-otp-view")],I);const U=D`
2
+ wui-icon-box {
3
+ height: ${({spacing:r})=>r[16]};
4
+ width: ${({spacing:r})=>r[16]};
5
+ }
6
+ `;var x=function(r,e,t,a){var n=arguments.length,i=n<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,a);else for(var l=r.length-1;l>=0;l--)(o=r[l])&&(i=(n<3?o(i):n>3?o(e,t,i):o(e,t))||i);return n>3&&i&&Object.defineProperty(e,t,i),i};let w=class extends y{constructor(){var e;super(),this.email=(e=s.state.data)==null?void 0:e.email,this.authConnector=u.getAuthConnector(),this.loading=!1,this.listenForDeviceApproval()}render(){if(!this.email)throw new Error("w3m-email-verify-device-view: No email provided");if(!this.authConnector)throw new Error("w3m-email-verify-device-view: No auth connector provided");return m`
7
+ <wui-flex
8
+ flexDirection="column"
9
+ alignItems="center"
10
+ .padding=${["6","3","6","3"]}
11
+ gap="4"
12
+ >
13
+ <wui-icon-box size="xl" color="accent-primary" icon="sealCheck"></wui-icon-box>
14
+
15
+ <wui-flex flexDirection="column" alignItems="center" gap="3">
16
+ <wui-flex flexDirection="column" alignItems="center">
17
+ <wui-text variant="md-regular" color="primary">
18
+ Approve the login link we sent to
19
+ </wui-text>
20
+ <wui-text variant="md-regular" color="primary"><b>${this.email}</b></wui-text>
21
+ </wui-flex>
22
+
23
+ <wui-text variant="sm-regular" color="secondary" align="center">
24
+ The code expires in 20 minutes
25
+ </wui-text>
26
+
27
+ <wui-flex alignItems="center" id="w3m-resend-section" gap="2">
28
+ <wui-text variant="sm-regular" color="primary" align="center">
29
+ Didn't receive it?
30
+ </wui-text>
31
+ <wui-link @click=${this.onResendCode.bind(this)} .disabled=${this.loading}>
32
+ Resend email
33
+ </wui-link>
34
+ </wui-flex>
35
+ </wui-flex>
36
+ </wui-flex>
37
+ `}async listenForDeviceApproval(){if(this.authConnector)try{await this.authConnector.provider.connectDevice(),c.sendEvent({type:"track",event:"DEVICE_REGISTERED_FOR_EMAIL"}),c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_SENT"}),s.replace("EmailVerifyOtp",{email:this.email})}catch{s.goBack()}}async onResendCode(){try{if(!this.loading){if(!this.authConnector||!this.email)throw new Error("w3m-email-login-widget: Unable to resend email");this.loading=!0,await this.authConnector.provider.connectEmail({email:this.email}),this.listenForDeviceApproval(),f.showSuccess("Code email resent")}}catch(e){f.showError(e)}finally{this.loading=!1}}};w.styles=U;x([E()],w.prototype,"loading",void 0);w=x([d("w3m-email-verify-device-view")],w);const j=$`
38
+ wui-email-input {
39
+ width: 100%;
40
+ }
41
+
42
+ form {
43
+ width: 100%;
44
+ display: block;
45
+ position: relative;
46
+ }
47
+ `;var O=function(r,e,t,a){var n=arguments.length,i=n<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,a);else for(var l=r.length-1;l>=0;l--)(o=r[l])&&(i=(n<3?o(i):n>3?o(e,t,i):o(e,t))||i);return n>3&&i&&Object.defineProperty(e,t,i),i};let h=class extends y{constructor(){var e,t;super(...arguments),this.formRef=W(),this.initialEmail=((e=s.state.data)==null?void 0:e.email)??"",this.redirectView=(t=s.state.data)==null?void 0:t.redirectView,this.email="",this.loading=!1}firstUpdated(){var e;(e=this.formRef.value)==null||e.addEventListener("keydown",t=>{t.key==="Enter"&&this.onSubmitEmail(t)})}render(){return m`
48
+ <wui-flex flexDirection="column" padding="4" gap="4">
49
+ <form ${P(this.formRef)} @submit=${this.onSubmitEmail.bind(this)}>
50
+ <wui-email-input
51
+ value=${this.initialEmail}
52
+ .disabled=${this.loading}
53
+ @inputChange=${this.onEmailInputChange.bind(this)}
54
+ >
55
+ </wui-email-input>
56
+ <input type="submit" hidden />
57
+ </form>
58
+ ${this.buttonsTemplate()}
59
+ </wui-flex>
60
+ `}onEmailInputChange(e){this.email=e.detail}async onSubmitEmail(e){try{if(this.loading)return;this.loading=!0,e.preventDefault();const t=u.getAuthConnector();if(!t)throw new Error("w3m-update-email-wallet: Auth connector not found");const a=await t.provider.updateEmail({email:this.email});c.sendEvent({type:"track",event:"EMAIL_EDIT"}),a.action==="VERIFY_SECONDARY_OTP"?s.push("UpdateEmailSecondaryOtp",{email:this.initialEmail,newEmail:this.email,redirectView:this.redirectView}):s.push("UpdateEmailPrimaryOtp",{email:this.initialEmail,newEmail:this.email,redirectView:this.redirectView})}catch(t){f.showError(t),this.loading=!1}}buttonsTemplate(){const e=!this.loading&&this.email.length>3&&this.email!==this.initialEmail;return this.redirectView?m`
61
+ <wui-flex gap="3">
62
+ <wui-button size="md" variant="neutral" fullWidth @click=${s.goBack}>
63
+ Cancel
64
+ </wui-button>
65
+
66
+ <wui-button
67
+ size="md"
68
+ variant="accent-primary"
69
+ fullWidth
70
+ @click=${this.onSubmitEmail.bind(this)}
71
+ .disabled=${!e}
72
+ .loading=${this.loading}
73
+ >
74
+ Save
75
+ </wui-button>
76
+ </wui-flex>
77
+ `:m`
78
+ <wui-button
79
+ size="md"
80
+ variant="accent-primary"
81
+ fullWidth
82
+ @click=${this.onSubmitEmail.bind(this)}
83
+ .disabled=${!e}
84
+ .loading=${this.loading}
85
+ >
86
+ Save
87
+ </wui-button>
88
+ `}};h.styles=j;O([E()],h.prototype,"email",void 0);O([E()],h.prototype,"loading",void 0);h=O([d("w3m-update-email-wallet-view")],h);var L=function(r,e,t,a){var n=arguments.length,i=n<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,a);else for(var l=r.length-1;l>=0;l--)(o=r[l])&&(i=(n<3?o(i):n>3?o(e,t,i):o(e,t))||i);return n>3&&i&&Object.defineProperty(e,t,i),i};let A=class extends b{constructor(){var e;super(),this.email=(e=s.state.data)==null?void 0:e.email,this.onOtpSubmit=async t=>{try{this.authConnector&&(await this.authConnector.provider.updateEmailPrimaryOtp({otp:t}),c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_PASS"}),s.replace("UpdateEmailSecondaryOtp",s.state.data))}catch(a){throw c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_FAIL",properties:{message:C.parseError(a)}}),a}},this.onStartOver=()=>{s.replace("UpdateEmailWallet",s.state.data)}}};A=L([d("w3m-update-email-primary-otp-view")],A);var M=function(r,e,t,a){var n=arguments.length,i=n<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,a);else for(var l=r.length-1;l>=0;l--)(o=r[l])&&(i=(n<3?o(i):n>3?o(e,t,i):o(e,t))||i);return n>3&&i&&Object.defineProperty(e,t,i),i};let R=class extends b{constructor(){var e,t;super(),this.email=(e=s.state.data)==null?void 0:e.newEmail,this.redirectView=(t=s.state.data)==null?void 0:t.redirectView,this.onOtpSubmit=async a=>{try{this.authConnector&&(await this.authConnector.provider.updateEmailSecondaryOtp({otp:a}),c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_PASS"}),this.redirectView&&s.reset(this.redirectView))}catch(n){throw c.sendEvent({type:"track",event:"EMAIL_VERIFICATION_CODE_FAIL",properties:{message:C.parseError(n)}}),n}},this.onStartOver=()=>{s.replace("UpdateEmailWallet",s.state.data)}}};R=M([d("w3m-update-email-secondary-otp-view")],R);var V=function(r,e,t,a){var n=arguments.length,i=n<3?e:a===null?a=Object.getOwnPropertyDescriptor(e,t):a,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,a);else for(var l=r.length-1;l>=0;l--)(o=r[l])&&(i=(n<3?o(i):n>3?o(e,t,i):o(e,t))||i);return n>3&&i&&Object.defineProperty(e,t,i),i};let v=class extends y{constructor(){var e;super(),this.authConnector=u.getAuthConnector(),this.isEmailEnabled=(e=p.state.remoteFeatures)==null?void 0:e.email,this.isAuthEnabled=this.checkIfAuthEnabled(u.state.connectors),this.connectors=u.state.connectors,u.subscribeKey("connectors",t=>{this.connectors=t,this.isAuthEnabled=this.checkIfAuthEnabled(this.connectors)})}render(){if(!this.isEmailEnabled)throw new Error("w3m-email-login-view: Email is not enabled");if(!this.isAuthEnabled)throw new Error("w3m-email-login-view: No auth connector provided");return m`<wui-flex flexDirection="column" .padding=${["1","3","3","3"]} gap="4">
89
+ <w3m-email-login-widget></w3m-email-login-widget>
90
+ </wui-flex> `}checkIfAuthEnabled(e){const t=e.filter(n=>n.type===N.CONNECTOR_TYPE_AUTH).map(n=>n.chain);return T.AUTH_CONNECTOR_SUPPORTED_CHAINS.some(n=>t.includes(n))}};V([E()],v.prototype,"connectors",void 0);v=V([d("w3m-email-login-view")],v);export{v as W3mEmailLoginView,b as W3mEmailOtpWidget,w as W3mEmailVerifyDeviceView,I as W3mEmailVerifyOtpView,A as W3mUpdateEmailPrimaryOtpView,R as W3mUpdateEmailSecondaryOtpView,h as W3mUpdateEmailWalletView};