@vechain/vechain-kit 2.4.2 → 3.0.0-rc.1
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.
- package/dist/AccountModal-CK-qcPlQ.js +1 -0
- package/dist/AccountModal-ChuVFqPc.js +20 -0
- package/dist/AccountModal-ChuVFqPc.js.map +1 -0
- package/dist/AccountModal-DNK0IbiE.cjs +1 -0
- package/dist/AccountModal-DjAS4w6z.cjs +20 -0
- package/dist/AccountModal-DjAS4w6z.cjs.map +1 -0
- package/dist/BaseModal-CWAI9-Bi.js +2 -0
- package/dist/BaseModal-CWAI9-Bi.js.map +1 -0
- package/dist/BaseModal-yevRjczw.cjs +2 -0
- package/dist/BaseModal-yevRjczw.cjs.map +1 -0
- package/dist/ConnectModal-BXbiUwnz.js +1 -0
- package/dist/ConnectModal-C50EF9gE.js +2 -0
- package/dist/ConnectModal-C50EF9gE.js.map +1 -0
- package/dist/ConnectModal-CvkkVALe.cjs +1 -0
- package/dist/ConnectModal-DmIkWb1i.cjs +2 -0
- package/dist/ConnectModal-DmIkWb1i.cjs.map +1 -0
- package/dist/DisconnectConfirmContent-B4qahKqQ.cjs +2 -0
- package/dist/DisconnectConfirmContent-B4qahKqQ.cjs.map +1 -0
- package/dist/DisconnectConfirmContent-C9qLnI-m.js +2 -0
- package/dist/DisconnectConfirmContent-C9qLnI-m.js.map +1 -0
- package/dist/LegalDocumentsModal-5sNOrJI9.js +1 -0
- package/dist/LegalDocumentsModal-aWgfKwIL.js +2 -0
- package/dist/LegalDocumentsModal-aWgfKwIL.js.map +1 -0
- package/dist/LegalDocumentsModal-fnhM40y6.cjs +2 -0
- package/dist/LegalDocumentsModal-fnhM40y6.cjs.map +1 -0
- package/dist/LegalDocumentsModal-g54lP0U7.cjs +1 -0
- package/dist/PrivyCrossAppProvider-B6oIXeWL.js +2 -0
- package/dist/PrivyCrossAppProvider-B6oIXeWL.js.map +1 -0
- package/dist/PrivyCrossAppProvider-C6aL4Qor.cjs +1 -0
- package/dist/PrivyCrossAppProvider-Ccu2yH99.js +1 -0
- package/dist/PrivyCrossAppProvider-DSuzrbqs.cjs +2 -0
- package/dist/PrivyCrossAppProvider-DSuzrbqs.cjs.map +1 -0
- package/dist/PrivyWalletProvider-BkqWSj75.cjs +2 -0
- package/dist/PrivyWalletProvider-BkqWSj75.cjs.map +1 -0
- package/dist/PrivyWalletProvider-DToo_u0W.js +2 -0
- package/dist/PrivyWalletProvider-DToo_u0W.js.map +1 -0
- package/dist/ShareButtons-B92JZp47.js +2 -0
- package/dist/ShareButtons-B92JZp47.js.map +1 -0
- package/dist/ShareButtons-CRMNerbz.cjs +2 -0
- package/dist/ShareButtons-CRMNerbz.cjs.map +1 -0
- package/dist/UpgradeSmartAccountModal-BAzmVxeJ.js +2 -0
- package/dist/UpgradeSmartAccountModal-BAzmVxeJ.js.map +1 -0
- package/dist/UpgradeSmartAccountModal-BGjTzYAm.cjs +1 -0
- package/dist/UpgradeSmartAccountModal-CpZo27Uk.js +1 -0
- package/dist/UpgradeSmartAccountModal-IMcihO0d.cjs +2 -0
- package/dist/UpgradeSmartAccountModal-IMcihO0d.cjs.map +1 -0
- package/dist/VechainKitThemeProvider-BM5258oA.cjs +75 -0
- package/dist/VechainKitThemeProvider-BM5258oA.cjs.map +1 -0
- package/dist/VechainKitThemeProvider-Di9a04Es.js +75 -0
- package/dist/VechainKitThemeProvider-Di9a04Es.js.map +1 -0
- package/dist/assets/index.cjs +1 -1
- package/dist/assets/index.d.cts +1 -1
- package/dist/assets/{index.d.mts → index.d.ts} +1 -1
- package/dist/assets/index.js +1 -0
- package/dist/{assets-BL24r-Yp.mjs → assets-CXk1qRDd.js} +5 -5
- package/dist/assets-CXk1qRDd.js.map +1 -0
- package/dist/{assets-DNJsQD7_.cjs → assets-YPd7adzM.cjs} +7 -7
- package/dist/assets-YPd7adzM.cjs.map +1 -0
- package/dist/chunk-DjWAcSYV.cjs +1 -0
- package/dist/components/index.cjs +1 -0
- package/dist/components/index.d.cts +6 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.js +1 -0
- package/dist/components-QKLypcU1.cjs +2 -0
- package/dist/components-QKLypcU1.cjs.map +1 -0
- package/dist/components-k36uDisW.js +2 -0
- package/dist/components-k36uDisW.js.map +1 -0
- package/dist/hooks/index.cjs +1 -0
- package/dist/hooks/index.d.cts +6 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks-C8eXQYIN.cjs +8 -0
- package/dist/hooks-C8eXQYIN.cjs.map +1 -0
- package/dist/hooks-DuTew9oP.js +8 -0
- package/dist/hooks-DuTew9oP.js.map +1 -0
- package/dist/{index-CpRbZET6.d.mts → index-BGQS0a81.d.ts} +564 -1581
- package/dist/index-BGQS0a81.d.ts.map +1 -0
- package/dist/index-Bqw0Cz5n.d.cts +587 -0
- package/dist/index-Bqw0Cz5n.d.cts.map +1 -0
- package/dist/index-BugHmddr.d.ts +587 -0
- package/dist/index-BugHmddr.d.ts.map +1 -0
- package/dist/{index-D4rz985m.d.cts → index-C8wbz8af.d.cts} +561 -1578
- package/dist/index-C8wbz8af.d.cts.map +1 -0
- package/dist/{index-CWViOs1U.d.mts → index-COoeacay.d.ts} +5 -5
- package/dist/index-COoeacay.d.ts.map +1 -0
- package/dist/{index-u3CPquCV.d.cts → index-CmGg4iaS.d.cts} +4 -4
- package/dist/{index-CWViOs1U.d.mts.map → index-CmGg4iaS.d.cts.map} +1 -1
- package/dist/index-DI_IPiLX.d.ts +324 -0
- package/dist/index-DI_IPiLX.d.ts.map +1 -0
- package/dist/index-DVxlUr9t.d.cts +324 -0
- package/dist/index-DVxlUr9t.d.cts.map +1 -0
- package/dist/index.cjs +1 -221
- package/dist/index.d.cts +6 -3
- package/dist/index.d.ts +6 -0
- package/dist/index.js +1 -0
- package/dist/network-Cs9YqDJ1.d.cts +536 -0
- package/dist/network-Cs9YqDJ1.d.cts.map +1 -0
- package/dist/network-yA5VWcPq.d.ts +536 -0
- package/dist/network-yA5VWcPq.d.ts.map +1 -0
- package/dist/providers/index.cjs +1 -0
- package/dist/providers/index.d.cts +3 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers-DImdr6Kk.cjs +124 -0
- package/dist/providers-DImdr6Kk.cjs.map +1 -0
- package/dist/providers-kA0lotaM.js +124 -0
- package/dist/providers-kA0lotaM.js.map +1 -0
- package/dist/ssrUtils-C_5ZY26i.cjs +2 -0
- package/dist/ssrUtils-C_5ZY26i.cjs.map +1 -0
- package/dist/ssrUtils-DSwxhTtm.js +2 -0
- package/dist/ssrUtils-DSwxhTtm.js.map +1 -0
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.d.cts +2 -2
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils-B2Eg9TD3.js +2 -0
- package/dist/utils-B2Eg9TD3.js.map +1 -0
- package/dist/utils-jW13BhAb.cjs +2 -0
- package/dist/utils-jW13BhAb.cjs.map +1 -0
- package/package.json +46 -9
- package/dist/assets/index.mjs +0 -1
- package/dist/assets-BL24r-Yp.mjs.map +0 -1
- package/dist/assets-DNJsQD7_.cjs.map +0 -1
- package/dist/index-CpRbZET6.d.mts.map +0 -1
- package/dist/index-D4rz985m.d.cts.map +0 -1
- package/dist/index-u3CPquCV.d.cts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.mts +0 -3
- package/dist/index.mjs +0 -221
- package/dist/index.mjs.map +0 -1
- package/dist/utils/index.d.mts +0 -3
- package/dist/utils/index.mjs +0 -1
- package/dist/utils-BQ9mZctf.cjs +0 -2
- package/dist/utils-BQ9mZctf.cjs.map +0 -1
- package/dist/utils-BxZj2QIg.mjs +0 -2
- package/dist/utils-BxZj2QIg.mjs.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./VechainKitThemeProvider-BM5258oA.cjs`),n=require(`./utils-jW13BhAb.cjs`),r=require(`./ssrUtils-C_5ZY26i.cjs`),i=require(`./PrivyWalletProvider-BkqWSj75.cjs`);let a=require(`react`);a=e.t(a);let o=require(`react/jsx-runtime`),s=require(`@tanstack/react-query`),c=require(`wagmi/query`);const l=e=>{Object.keys(i.at).forEach(t=>{e.hasResourceBundle(t,`translation`),e.addResourceBundle(t,`translation`,i.at[t].translation,!0,!0)})};function u(e,t){if(!e.includes(`rgba`)&&!e.includes(`hsla`))return e;let n=e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(n){let r=parseInt(n[1],10),i=parseInt(n[2],10),a=parseInt(n[3],10),o=n[4]?parseFloat(n[4]):1;if(o>=.9)return e;let s=t?.9:.91;return`rgba(${r}, ${i}, ${a}, ${Math.min(Math.max(o+.15,s),.91)})`}return e}function d(e,t){let n={"--vdk-modal-z-index":`10000`,"--vdk-modal-width":`22rem`,"--vdk-modal-backdrop-filter":e.effects.backdropFilter.modal,"--vdk-border-dark-source-card":`1px solid ${e.colors.border.default}`,"--vdk-border-light-source-card":`1px solid ${e.colors.border.default}`,"--vdk-font-family":e.fonts.body,"--vdk-font-size-medium":e.fonts.sizes.medium,"--vdk-font-size-large":e.fonts.sizes.large,"--vdk-font-weight-medium":e.fonts.weights.medium.toString()};return t?(n[`--vdk-color-dark-primary`]=`transparent`,n[`--vdk-color-dark-primary-hover`]=`rgba(255, 255, 255, 0.05)`,n[`--vdk-color-dark-primary-active`]=`rgba(255, 255, 255, 0.1)`,n[`--vdk-color-dark-secondary`]=e.colors.background.modal,n[`--vdk-color-dark-tertiary`]=e.colors.text.primary):(n[`--vdk-color-light-primary`]=`#ffffff`,n[`--vdk-color-light-primary-hover`]=`rgba(245, 245, 245, 0.8)`,n[`--vdk-color-light-primary-active`]=`rgba(240, 240, 240, 0.8)`,n[`--vdk-color-light-secondary`]=e.colors.background.modal,n[`--vdk-color-light-tertiary`]=e.colors.text.primary),n}function f(e,t){let n=u(e.colors.background.modal,t),r=t?`transparent`:`#ffffff`,i=t?`transparent`:`#ffffff`,a=t?`transparent`:`#ffffff`;return{"--privy-border-radius-sm":e.borders.radius.small,"--privy-border-radius-md":e.borders.radius.medium,"--privy-border-radius-lg":e.borders.radius.large,"--privy-border-radius-full":e.borders.radius.full,"--privy-color-background":n,"--privy-color-background-2":i,"--privy-color-background-3":a,"--privy-color-foreground":e.colors.text.primary,"--privy-color-foreground-2":e.colors.text.primary,"--privy-color-foreground-3":e.colors.text.secondary,"--privy-color-foreground-4":e.colors.text.tertiary,"--privy-color-foreground-accent":t?`#ffffff`:`#1a1a1a`,"--privy-color-accent":r,"--privy-color-accent-light":i,"--privy-color-accent-lightest":a,"--privy-color-accent-dark":i,"--privy-color-accent-darkest":a,"--privy-color-success":e.colors.success,"--privy-color-error":e.colors.error,"--privy-color-error-light":e.colors.error+`33`}}function p(){if(typeof document>`u`)return;let e=`vechain-kit-dappkit-button-styles`,t=document.getElementById(e);if(t||(t=document.createElement(`style`),t.id=e,document.head.appendChild(t)),t.textContent=`
|
|
2
|
+
/* CRITICAL: Ensure dappkit modal always has pointer-events enabled */
|
|
3
|
+
/* This fixes an issue where the modal becomes unclickable when opened on top of bottom sheet */
|
|
4
|
+
vdk-modal,
|
|
5
|
+
[data-vdk-modal],
|
|
6
|
+
[id*="vdk-modal"] {
|
|
7
|
+
pointer-events: all !important;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* DAppKit wallet source buttons - apply loginIn hover style */
|
|
11
|
+
/* Target all button-like elements within DAppKit containers */
|
|
12
|
+
[class*="vdk"] button,
|
|
13
|
+
[class*="vdk"] [role="button"],
|
|
14
|
+
[class*="vdk"] [tabindex],
|
|
15
|
+
[id*="vdk"] button,
|
|
16
|
+
[id*="vdk"] [role="button"],
|
|
17
|
+
[id*="vdk"] [tabindex],
|
|
18
|
+
[data-vdk-modal] button,
|
|
19
|
+
[data-vdk-modal] [role="button"],
|
|
20
|
+
[data-vdk-modal] [tabindex],
|
|
21
|
+
[data-vdk-source-card],
|
|
22
|
+
[class*="vdk-source-card"],
|
|
23
|
+
[class*="source-card"],
|
|
24
|
+
button[class*="vdk"],
|
|
25
|
+
[data-vdk-button],
|
|
26
|
+
[class*="vdk-button"],
|
|
27
|
+
/* Target elements that are likely buttons based on styling */
|
|
28
|
+
[class*="vdk"] [style*="cursor"][style*="pointer"],
|
|
29
|
+
[id*="vdk"] [style*="cursor"][style*="pointer"],
|
|
30
|
+
[data-vdk-modal] [style*="cursor"][style*="pointer"] {
|
|
31
|
+
transition: opacity 0.2s ease !important;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Hover states */
|
|
35
|
+
[class*="vdk"] button:hover,
|
|
36
|
+
[class*="vdk"] [role="button"]:hover,
|
|
37
|
+
[class*="vdk"] [tabindex]:hover,
|
|
38
|
+
[id*="vdk"] button:hover,
|
|
39
|
+
[id*="vdk"] [role="button"]:hover,
|
|
40
|
+
[id*="vdk"] [tabindex]:hover,
|
|
41
|
+
[data-vdk-modal] button:hover,
|
|
42
|
+
[data-vdk-modal] [role="button"]:hover,
|
|
43
|
+
[data-vdk-modal] [tabindex]:hover,
|
|
44
|
+
[data-vdk-source-card]:hover,
|
|
45
|
+
[class*="vdk-source-card"]:hover,
|
|
46
|
+
[class*="source-card"]:hover,
|
|
47
|
+
button[class*="vdk"]:hover,
|
|
48
|
+
[data-vdk-button]:hover,
|
|
49
|
+
[class*="vdk-button"]:hover,
|
|
50
|
+
[class*="vdk"] [style*="cursor"][style*="pointer"]:hover,
|
|
51
|
+
[id*="vdk"] [style*="cursor"][style*="pointer"]:hover,
|
|
52
|
+
[data-vdk-modal] [style*="cursor"][style*="pointer"]:hover {
|
|
53
|
+
opacity: 0.5 !important;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Active states */
|
|
57
|
+
[class*="vdk"] button:active,
|
|
58
|
+
[class*="vdk"] [role="button"]:active,
|
|
59
|
+
[class*="vdk"] [tabindex]:active,
|
|
60
|
+
[id*="vdk"] button:active,
|
|
61
|
+
[id*="vdk"] [role="button"]:active,
|
|
62
|
+
[id*="vdk"] [tabindex]:active,
|
|
63
|
+
[data-vdk-modal] button:active,
|
|
64
|
+
[data-vdk-modal] [role="button"]:active,
|
|
65
|
+
[data-vdk-modal] [tabindex]:active,
|
|
66
|
+
[data-vdk-source-card]:active,
|
|
67
|
+
[class*="vdk-source-card"]:active,
|
|
68
|
+
[class*="source-card"]:active,
|
|
69
|
+
button[class*="vdk"]:active,
|
|
70
|
+
[data-vdk-button]:active,
|
|
71
|
+
[class*="vdk-button"]:active,
|
|
72
|
+
[class*="vdk"] [style*="cursor"][style*="pointer"]:active,
|
|
73
|
+
[id*="vdk"] [style*="cursor"][style*="pointer"]:active,
|
|
74
|
+
[data-vdk-modal] [style*="cursor"][style*="pointer"]:active {
|
|
75
|
+
opacity: 0.5 !important;
|
|
76
|
+
}
|
|
77
|
+
`,typeof MutationObserver<`u`){let e=new MutationObserver(()=>{let e=document.querySelectorAll(`vdk-modal, [data-vdk-modal], [id*="vdk-modal"]`);for(let t of e)t instanceof HTMLElement&&t.style.setProperty(`pointer-events`,`all`,`important`);let t=document.querySelectorAll(`[data-vdk-source-card], [class*="vdk-source-card"], [class*="source-card"], [data-vdk-modal] button, [data-vdk-modal] [role="button"]`);for(let e of t)e instanceof HTMLElement&&(e.style.setProperty(`opacity`,`1`,`important`),e.style.setProperty(`transition`,`opacity 0.2s ease`,`important`))});e.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{e.disconnect()},6e4)}}function m(e,t,n,r,i,a,o,s){if(typeof document>`u`)return;let c=document.documentElement;Object.entries(e).forEach(([e,t])=>{c.style.setProperty(e,t)});let l=`vechain-kit-privy-styles`,u=document.getElementById(l);u||(u=document.createElement(`style`),u.id=l,document.head.appendChild(u));let d=[];if(t&&d.push(`
|
|
78
|
+
[data-privy-dialog-overlay],
|
|
79
|
+
[data-privy-dialog-content],
|
|
80
|
+
.privy-dialog-overlay,
|
|
81
|
+
.privy-dialog-content {
|
|
82
|
+
backdrop-filter: ${t} !important;
|
|
83
|
+
-webkit-backdrop-filter: ${t} !important;
|
|
84
|
+
}
|
|
85
|
+
`),n&&d.push(`
|
|
86
|
+
[data-privy-card],
|
|
87
|
+
.privy-card,
|
|
88
|
+
[class*="privy-card"],
|
|
89
|
+
[class*="privy-connect-wallet-card"],
|
|
90
|
+
[class*="privy-account-card"] {
|
|
91
|
+
background-color: ${n} !important;
|
|
92
|
+
}
|
|
93
|
+
`),r&&d.push(`
|
|
94
|
+
[data-privy-card][data-elevated],
|
|
95
|
+
.privy-card-elevated,
|
|
96
|
+
[class*="privy-card"][class*="elevated"] {
|
|
97
|
+
background-color: ${r} !important;
|
|
98
|
+
}
|
|
99
|
+
`),i){let e=s||`rgba(0, 0, 0, 0.1)`;d.push(`
|
|
100
|
+
#headlessui-portal-root .login-method-button,
|
|
101
|
+
#headlessui-portal-root [class*="login-method-button"],
|
|
102
|
+
.login-method-button {
|
|
103
|
+
background-color: ${i} !important;
|
|
104
|
+
border: 1px solid ${e} !important;
|
|
105
|
+
}
|
|
106
|
+
`)}a&&d.push(`
|
|
107
|
+
#headlessui-portal-root .login-method-button:hover,
|
|
108
|
+
#headlessui-portal-root [class*="login-method-button"]:hover,
|
|
109
|
+
.login-method-button:hover {
|
|
110
|
+
background-color: ${a} !important;
|
|
111
|
+
opacity: 0.5 !important;
|
|
112
|
+
}
|
|
113
|
+
`),o&&d.push(`
|
|
114
|
+
#headlessui-portal-root .login-method-button:active,
|
|
115
|
+
#headlessui-portal-root [class*="login-method-button"]:active,
|
|
116
|
+
.login-method-button:active {
|
|
117
|
+
background-color: ${o} !important;
|
|
118
|
+
opacity: 0.5 !important;
|
|
119
|
+
}
|
|
120
|
+
`),d.length>0&&(u.textContent=d.join(`
|
|
121
|
+
`))}let h=null;function g(){return h||(h=new s.QueryClient({defaultOptions:{queries:{queryKeyHashFn:c.hashFn,retry:0,staleTime:3e4,refetchOnWindowFocus:!0,refetchOnMount:!0,refetchOnReconnect:!0,refetchInterval:!1,refetchIntervalInBackground:!1}}})),h}const _=({children:e})=>{try{if(a.default.useContext(s.QueryClientContext))return(0,o.jsx)(o.Fragment,{children:e})}catch(e){console.log(e)}return(0,o.jsx)(s.QueryClientProvider,{client:g(),children:e})},v=(0,a.lazy)(()=>Promise.resolve().then(()=>require(`./ConnectModal-CvkkVALe.cjs`)).then(e=>({default:e.ConnectModal}))),y=(0,a.lazy)(()=>Promise.resolve().then(()=>require(`./AccountModal-DNK0IbiE.cjs`)).then(e=>({default:e.AccountModal}))),b=(0,a.lazy)(()=>Promise.resolve().then(()=>require(`./UpgradeSmartAccountModal-BGjTzYAm.cjs`)).then(e=>({default:e.UpgradeSmartAccountModal}))),x=({children:e})=>{let{darkMode:n,theme:s}=t.u(),[c,l]=(0,a.useState)(!1),[u,d]=(0,a.useState)(`main`),[f,p]=(0,a.useState)(!1),{setSource:m,connectV2:h}=i.L(),g=(0,a.useCallback)((e,t)=>{r.o()&&window.vechain&&window.vechain.isInAppBrowser?(m(`veworld`),h(null)):(d(e??`main`),p(t??!1),l(!0))},[]),_=(0,a.useCallback)(()=>{l(!1),d(`main`),p(!1)},[]),[x,S]=(0,a.useState)(!1),[C,w]=(0,a.useState)(!1),[T,E]=(0,a.useState)(`main`),D=(0,a.useCallback)((e,t)=>{E(e??`main`),w(t?.isolatedView??!1),S(!0)},[]),O=(0,a.useCallback)(()=>{S(!1),E(`main`),setTimeout(()=>{w(!1)},300)},[]),[k,A]=(0,a.useState)(!1),j=(0,a.useCallback)(()=>A(!0),[]),M=(0,a.useCallback)(()=>A(!1),[]),[ee,N]=(0,a.useState)(!1),P=(0,a.useCallback)(()=>N(!0),[]),F=(0,a.useCallback)(()=>N(!1),[]),[I,L]=(0,a.useState)(!1),[R,z]=(0,a.useState)(void 0),B=(0,a.useCallback)(e=>{z(e),L(!0)},[]),V=(0,a.useCallback)(()=>L(!1),[]);return(0,o.jsxs)(i.b.Provider,{value:{openConnectModal:g,closeConnectModal:_,isConnectModalOpen:c,connectModalContent:u,setConnectModalContent:d,connectModalPreventAutoClose:f,setConnectModalPreventAutoClose:p,openAccountModal:D,closeAccountModal:O,isAccountModalOpen:x,setAccountModalContent:E,accountModalContent:T,isolatedView:C,openTransactionModal:j,closeTransactionModal:M,isTransactionModalOpen:k,openTransactionToast:P,closeTransactionToast:F,isTransactionToastOpen:ee,openUpgradeSmartAccountModal:B,closeUpgradeSmartAccountModal:V,isUpgradeSmartAccountModalOpen:I},children:[e,(0,o.jsxs)(t.n,{darkMode:n,theme:s,children:[c&&(0,o.jsx)(a.Suspense,{fallback:null,children:(0,o.jsx)(v,{isOpen:c,onClose:_,initialContent:u,preventAutoClose:f})}),x&&(0,o.jsx)(a.Suspense,{fallback:null,children:(0,o.jsx)(y,{isOpen:x,onClose:O,initialContent:T})}),I&&(0,o.jsx)(a.Suspense,{fallback:null,children:(0,o.jsx)(b,{isOpen:I,onClose:V,style:R})})]})]})},S=(0,a.lazy)(()=>Promise.resolve().then(()=>require(`./PrivyCrossAppProvider-C6aL4Qor.cjs`)).then(e=>({default:e.PrivyCrossAppProvider}))),C=process.env.NODE_ENV===`development`?(0,a.lazy)(()=>import(`@tanstack/react-query-devtools`).then(e=>({default:e.ReactQueryDevtools}))):()=>null,w=(0,a.lazy)(()=>import(`@privy-io/react-auth`).then(e=>({default:e.PrivyProvider}))),T=(0,a.lazy)(()=>import(`@vechain/dapp-kit-react`).then(e=>({default:e.DAppKitProvider}))),E=e=>{let t=[],r={...e};if((r.privy!==void 0||r.loginMethods?.some(e=>e.method===`vechain`||e.method===`ecosystem`))&&(r.feeDelegation?!r.feeDelegation.delegatorUrl&&!r.feeDelegation.genericDelegatorUrl&&(r.feeDelegation.genericDelegatorUrl=n.ot()):r.feeDelegation={genericDelegatorUrl:n.ot()}),!r.network||!r.network.type)r.network={type:`main`};else{let e=r.network.type;[`main`,`test`,`solo`].includes(e)||t.push(`network.type must be either "main", "test" or "solo"`)}if(r.loginMethods||(r.loginMethods=[{method:`vechain`,gridColumn:4},{method:`ecosystem`,gridColumn:4},{method:`dappkit`,gridColumn:4}]),r.loginMethods&&!r.privy){let e=r.loginMethods.filter(e=>[`email`,`google`,`passkey`,`more`].includes(e.method));e.length>0&&t.push(`Login methods ${e.map(e=>`"${e.method}"`).join(`, `)} require Privy configuration. Please either remove these methods or configure the privy prop.`)}if(r?.legalDocuments&&(r.legalDocuments.termsAndConditions&&r.legalDocuments.termsAndConditions.forEach(e=>{n.i(e.url)||t.push(`legalDocuments.termsAndConditions.url is invalid: ${e.url}`)}),r.legalDocuments.privacyPolicy&&r.legalDocuments.privacyPolicy.forEach(e=>{n.i(e.url)||t.push(`legalDocuments.privacyPolicy.url is invalid: ${e.url}`)}),r.legalDocuments.cookiePolicy&&r.legalDocuments.cookiePolicy.forEach(e=>{n.i(e.url)||t.push(`legalDocuments.cookiePolicy.url is invalid: ${e.url}`)})),t.length>0)throw Error(`VeChainKit Configuration Error:
|
|
122
|
+
`+t.join(`
|
|
123
|
+
`));return r},D=`vechain_kit_currency`,O=e=>{let{children:s,headless:c=!1,privy:h,feeDelegation:g,dappKit:v,loginModalUI:y,loginMethods:b,darkMode:O=!1,i18n:k,language:A=`en`,network:j,allowCustomTokens:M,legalDocuments:ee,defaultCurrency:N=`usd`,theme:P,onLanguageChange:F,onCurrencyChange:I}=E(e),L=j?.type??`main`,R=j?.nodeUrl??n.ct(L).nodeUrl,z={...j,type:L,nodeUrl:R},B=v,V=!!v,[H,U]=(0,a.useState)(()=>typeof window<`u`&&r.r(`i18nextLng`)||A),[W,G]=(0,a.useState)(()=>{try{return r.r(D)||N}catch{return N}}),K=(0,a.useRef)(!1),q=(0,a.useRef)(!1),J=b,te=(0,a.useMemo)(()=>J?.find(e=>e.method===`ecosystem`)?.allowedApps??n.Y.map(e=>e.id),[J]),ne=!!h,re=(0,a.useMemo)(()=>J?.some(e=>e.method===`ecosystem`||e.method===`vechain`)??!1,[J]);(0,a.useEffect)(()=>{l(i.rt),k&&Object.keys(k).forEach(e=>{i.rt.addResourceBundle(e,`translation`,k[e],!0,!0)});let e=(typeof window<`u`?r.r(`i18nextLng`):null)||H;e&&i.rt.language!==e&&(K.current=!0,i.rt.changeLanguage(e),e!==H&&U(e),K.current=!1)},[]),(0,a.useEffect)(()=>{let e=typeof window<`u`?r.r(`i18nextLng`):null;A&&!e&&A!==H&&(K.current=!0,i.rt.changeLanguage(A),U(A),K.current=!1)},[A,H]),(0,a.useEffect)(()=>{let e=e=>{!K.current&&e!==H&&(U(e),F?.(e))};return i.rt.on(`languageChanged`,e),()=>{i.rt.off(`languageChanged`,e)}},[H,F]),(0,a.useEffect)(()=>{let e=r.r(D);N&&!e&&N!==W&&(q.current=!0,G(N),r.d(D,N),q.current=!1)},[N,W]),(0,a.useEffect)(()=>{let e=()=>{try{let e=r.r(D);if(e&&e!==W&&!q.current){let t=e;G(t),I?.(t)}}catch{}};e();let t=t=>{t.key===D&&t.newValue&&e()};window.addEventListener(`storage`,t);let n=setInterval(e,500);return()=>{window.removeEventListener(`storage`,t),clearInterval(n)}},[W,I]);let ie=e=>{K.current=!0,i.rt.changeLanguage(e),U(e),K.current=!1},ae=e=>{q.current=!0,G(e),r.d(D,e),q.current=!1};(0,a.useEffect)(()=>{r.d(n.nt.NETWORK,L)},[L]);let Y=(0,a.useMemo)(()=>t.c(t.s(O),t.o(P,O)),[P,O]),X=(0,a.useMemo)(()=>d(Y,O),[Y,O]),oe=(0,a.useMemo)(()=>f(Y,O),[Y,O]);(0,a.useEffect)(()=>{let e=u(Y.colors.background.card,O),t=u(Y.colors.background.cardElevated,O),n=O?`transparent`:`#ffffff`,r=O?`transparent`:`#ffffff`,i=O?`transparent`:`#ffffff`;m(oe,Y.effects.backdropFilter.modal,e,t,n,r,i,Y.colors.border.default)},[oe,Y.effects.backdropFilter.modal,Y.colors.background.card,Y.colors.background.cardElevated,Y.colors.border.default,O]),(0,a.useEffect)(()=>{V&&p()},[V]);let Z=ne?(0,o.jsx)(i.t,{nodeUrl:z.nodeUrl,delegatorUrl:g?.delegatorUrl??g?.genericDelegatorUrl,delegateAllTransactions:g?.delegateAllTransactions??!1,genericDelegator:!!(!g?.delegatorUrl&&g?.genericDelegatorUrl),children:c?(0,o.jsx)(i.C,{children:s}):(0,o.jsx)(x,{children:(0,o.jsx)(i.C,{children:s})})}):c?(0,o.jsx)(i.C,{children:s}):(0,o.jsx)(x,{children:(0,o.jsx)(i.C,{children:s})}),Q=V?(0,o.jsx)(a.Suspense,{fallback:(0,o.jsx)(i.$,{nodeUrl:z.nodeUrl,children:Z}),children:(0,o.jsx)(T,{node:z.nodeUrl,alwaysShowConnect:!0,v2Api:{enabled:B?.v2Api?.enabled??!0,external:B?.v2Api?.external??!1},language:H,logLevel:B?.logLevel,modalParent:B?.modalParent,onSourceClick:B?.onSourceClick,usePersistence:B?.usePersistence??!0,allowedWallets:B?.allowedWallets,walletConnectOptions:B?.walletConnectOptions,themeMode:O?`DARK`:`LIGHT`,themeVariables:B?.themeVariables?{...X,...B.themeVariables}:X,children:Z})}):(0,o.jsx)(i.$,{nodeUrl:z.nodeUrl,children:Z}),se=ne?(0,o.jsx)(a.Suspense,{fallback:Q,children:(0,o.jsx)(w,{appId:h.appId,clientId:h.clientId,config:{loginMethodsAndOrder:{primary:h.loginMethods.slice(0,4)??[],overflow:h.loginMethods.slice(4)??[]},externalWallets:{walletConnect:{enabled:!1}},appearance:{theme:O?`dark`:`light`,accentColor:h.appearance.accentColor??(Y.buttons.primaryButton.bg?.startsWith(`#`)?Y.buttons.primaryButton.bg:O?`#3182CE`:`#2B6CB0`),loginMessage:h.appearance.loginMessage,logo:h.appearance.logo},embeddedWallets:{createOnLogin:h.embeddedWallets?.createOnLogin??`all-users`},passkeys:{shouldUnlinkOnUnenrollMfa:!1}},children:Q})}):Q,ce={privy:h,privyEcosystemAppIDS:te,feeDelegation:g,dappKit:B,loginModalUI:y,loginMethods:J,darkMode:O,headless:c,i18n:k,currentLanguage:H,network:z,allowCustomTokens:M,legalDocuments:ee,currentCurrency:W,theme:P,setLanguage:ie,setCurrency:ae},$=(0,o.jsx)(t.l.Provider,{value:ce,children:se}),le=re?(0,o.jsx)(a.Suspense,{fallback:$,children:(0,o.jsx)(S,{privyEcosystemAppIDS:te,children:$})}):$;return(0,o.jsxs)(_,{children:[process.env.NODE_ENV===`development`&&(0,o.jsx)(a.Suspense,{fallback:null,children:(0,o.jsx)(C,{initialIsOpen:!1})}),le]})},k=`vechain_kit_currency`,A=e=>{if(!e||!e.type)return{type:`main`};let t=e.type;if(![`main`,`test`,`solo`].includes(t))throw Error(`VeChainKitCoreProvider: network.type must be "main", "test", or "solo". Got: "${t}"`);return{...e,type:t}},j=({children:e,network:s,language:c=`en`,darkMode:u=!1,defaultCurrency:d=`usd`,onLanguageChange:f,onCurrencyChange:p})=>{let m=A(s),h=m.type,g=s?.nodeUrl??n.ct(h).nodeUrl,v={...m,nodeUrl:g},[y,b]=(0,a.useState)(()=>typeof window<`u`&&r.r(`i18nextLng`)||c),[x,S]=(0,a.useState)(()=>{try{return r.r(k)||d}catch{return d}}),C=(0,a.useRef)(!1),w=(0,a.useRef)(!1);(0,a.useEffect)(()=>{l(i.rt);let e=(typeof window<`u`?r.r(`i18nextLng`):null)||y;e&&i.rt.language!==e&&(C.current=!0,i.rt.changeLanguage(e),e!==y&&b(e),C.current=!1)},[]),(0,a.useEffect)(()=>{let e=typeof window<`u`?r.r(`i18nextLng`):null;c&&!e&&c!==y&&(C.current=!0,i.rt.changeLanguage(c),b(c),C.current=!1)},[c,y]),(0,a.useEffect)(()=>{let e=e=>{!C.current&&e!==y&&(b(e),f?.(e))};return i.rt.on(`languageChanged`,e),()=>{i.rt.off(`languageChanged`,e)}},[y,f]),(0,a.useEffect)(()=>{let e=r.r(k);d&&!e&&d!==x&&(w.current=!0,S(d),r.d(k,d),w.current=!1)},[d,x]),(0,a.useEffect)(()=>{let e=()=>{try{let e=r.r(k);if(e&&e!==x&&!w.current){let t=e;S(t),p?.(t)}}catch{}};e();let t=t=>{t.key===k&&t.newValue&&e()};window.addEventListener(`storage`,t);let n=setInterval(e,500);return()=>{window.removeEventListener(`storage`,t),clearInterval(n)}},[x,p]);let T=e=>{C.current=!0,i.rt.changeLanguage(e),b(e),C.current=!1},E=e=>{w.current=!0,S(e),r.d(k,e),w.current=!1};(0,a.useEffect)(()=>{r.d(n.nt.NETWORK,h)},[h]);let D=(0,a.useMemo)(()=>({privy:void 0,privyEcosystemAppIDS:[],feeDelegation:void 0,dappKit:void 0,loginModalUI:void 0,loginMethods:void 0,darkMode:u,headless:!0,i18n:void 0,network:v,currentLanguage:y,allowCustomTokens:!1,legalDocuments:void 0,currentCurrency:x,theme:void 0,setLanguage:T,setCurrency:E}),[u,v,y,x]);return(0,o.jsx)(_,{children:(0,o.jsx)(t.l.Provider,{value:D,children:(0,o.jsx)(i.$,{nodeUrl:g,children:e})})})};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return j}});
|
|
124
|
+
//# sourceMappingURL=providers-DImdr6Kk.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers-DImdr6Kk.cjs","names":["resources","vars: CustomizedStyle","cssRules: string[]","internalQueryClient: QueryClient | null","QueryClient","hashFn","React","QueryClientContext","QueryClientProvider","useVeChainKitConfig","useOptionalDAppKitWallet","isBrowser","ModalContext","VechainKitThemeProvider","Suspense","errors: string[]","getGenericDelegatorUrl","isValidUrl","CURRENCY_STORAGE_KEY","getConfig","getLocalStorageItem","DEFAULT_PRIVY_ECOSYSTEM_APPS","i18n","VECHAIN_KIT_STORAGE_KEYS","mergeTokens","getDefaultTokens","convertThemeConfigToTokens","PrivyWalletProvider","LegalDocumentsProvider","Suspense","ThorProvider","VeChainKitContext","getConfig","getLocalStorageItem","i18n","VECHAIN_KIT_STORAGE_KEYS","VeChainKitContext","ThorProvider"],"sources":["../src/utils/i18n.ts","../src/utils/cssVariables.ts","../src/providers/EnsureQueryClient.tsx","../src/providers/ModalProvider.tsx","../src/providers/VeChainKitProvider.tsx","../src/providers/VeChainKitCoreProvider.tsx"],"sourcesContent":["import { resources } from '../../i18n';\n\nexport const initializeI18n = (i18nInstance: any) => {\n // Get all languages from VeChainKit resources\n const languages = Object.keys(resources);\n\n // Add each language's translations to the existing i18n instance\n languages.forEach((lang) => {\n // Check if the namespace exists to avoid duplicates\n const hasNamespace = i18nInstance.hasResourceBundle(\n lang,\n 'translation',\n );\n\n if (!hasNamespace) {\n i18nInstance.addResourceBundle(\n lang,\n 'translation',\n resources[lang as keyof typeof resources].translation,\n true,\n true,\n );\n } else {\n // Merge with existing translations if namespace exists\n i18nInstance.addResourceBundle(\n lang,\n 'translation',\n resources[lang as keyof typeof resources].translation,\n true,\n true,\n );\n }\n });\n};\n","/**\n * CSS variable generators for DAppKit and Privy\n * Converts ThemeTokens to CSS variable objects\n */\n\nimport { ThemeTokens } from '../theme/tokens';\nimport { CustomizedStyle } from '@vechain/dapp-kit-ui';\n\n/**\n * Slightly increase opacity for Privy modals to improve readability\n * while maintaining the glass effect appearance\n */\nexport function improvePrivyReadability(\n color: string,\n darkMode: boolean,\n): string {\n // If it's already a solid color (hex or rgb without alpha), return as-is\n if (!color.includes('rgba') && !color.includes('hsla')) {\n return color;\n }\n\n // Extract rgba values\n const rgbaMatch = color.match(\n /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/,\n );\n if (rgbaMatch) {\n const r = parseInt(rgbaMatch[1], 10);\n const g = parseInt(rgbaMatch[2], 10);\n const b = parseInt(rgbaMatch[3], 10);\n const alpha = rgbaMatch[4] ? parseFloat(rgbaMatch[4]) : 1;\n\n // If alpha is already high, return as-is to maintain glass effect\n if (alpha >= 0.9) {\n return color;\n }\n\n // Only slightly increase opacity (by ~0.15-0.2) to improve readability\n // while maintaining the glass effect look\n const minAlpha = darkMode ? 0.9 : 0.91;\n const targetAlpha = Math.min(Math.max(alpha + 0.15, minAlpha), 0.91);\n return `rgba(${r}, ${g}, ${b}, ${targetAlpha})`;\n }\n\n // If we can't parse it, return the original color\n return color;\n}\n\n/**\n * Generate DAppKit CSS variables from ThemeTokens\n */\nexport function generateDAppKitCSSVariables(\n tokens: ThemeTokens,\n darkMode: boolean,\n): CustomizedStyle {\n const vars: CustomizedStyle = {\n '--vdk-modal-z-index': '10000',\n '--vdk-modal-width': '22rem',\n '--vdk-modal-backdrop-filter': tokens.effects.backdropFilter.modal,\n '--vdk-border-dark-source-card': `1px solid ${tokens.colors.border.default}`,\n '--vdk-border-light-source-card': `1px solid ${tokens.colors.border.default}`,\n '--vdk-font-family': tokens.fonts.body,\n '--vdk-font-size-medium': tokens.fonts.sizes.medium,\n '--vdk-font-size-large': tokens.fonts.sizes.large,\n '--vdk-font-weight-medium': tokens.fonts.weights.medium.toString(),\n };\n\n // Use loginIn variant style: white (light) / transparent (dark) background\n // For hover/active, derive colors that simulate the opacity: 0.5 effect\n // DAppKit uses these CSS variables for background colors\n if (darkMode) {\n vars['--vdk-color-dark-primary'] = 'transparent'; // loginIn dark mode bg\n // For transparent base, use a subtle white overlay to simulate dimming\n // This creates a visual effect similar to opacity: 0.5\n vars['--vdk-color-dark-primary-hover'] = 'rgba(255, 255, 255, 0.05)'; // Subtle white overlay\n vars['--vdk-color-dark-primary-active'] = 'rgba(255, 255, 255, 0.1)'; // Slightly more visible\n // DAppKit uses secondary color for modal background\n vars['--vdk-color-dark-secondary'] = tokens.colors.background.modal;\n // DAppKit uses tertiary color for text\n vars['--vdk-color-dark-tertiary'] = tokens.colors.text.primary;\n } else {\n vars['--vdk-color-light-primary'] = '#ffffff'; // loginIn light mode bg\n // For white base, use a slightly grayed white to simulate opacity: 0.5\n // This makes the button appear dimmed on hover\n vars['--vdk-color-light-primary-hover'] = 'rgba(245, 245, 245, 0.8)'; // Slightly grayed white\n vars['--vdk-color-light-primary-active'] = 'rgba(240, 240, 240, 0.8)'; // Slightly darker for active\n // DAppKit uses secondary color for modal background\n vars['--vdk-color-light-secondary'] = tokens.colors.background.modal;\n // DAppKit uses tertiary color for text\n vars['--vdk-color-light-tertiary'] = tokens.colors.text.primary;\n }\n\n return vars;\n}\n\n/**\n * Generate Privy CSS variables from ThemeTokens\n * Note: Privy modals don't support backdrop filters natively, so we:\n * 1. Slightly increase opacity for readability while maintaining glass effect\n * 2. Inject CSS to apply backdrop filters to Privy modals\n * 3. Map primary hover/active colors to Privy button states (background-2/background-3)\n * 4. Inject CSS to apply card colors to Privy card elements directly\n */\nexport function generatePrivyCSSVariables(\n tokens: ThemeTokens,\n darkMode: boolean,\n): Record<string, string> {\n // Slightly improve readability while maintaining glass effect\n const privyModalBg = improvePrivyReadability(\n tokens.colors.background.modal,\n darkMode,\n );\n\n // Use loginIn variant style: white (light) / transparent (dark) background\n // For hover/active, we'll apply opacity: 0.5 via CSS injection\n const privyButtonBaseBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonHoverBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonActiveBg = darkMode ? 'transparent' : '#ffffff';\n\n const variables: Record<string, string> = {\n '--privy-border-radius-sm': tokens.borders.radius.small,\n '--privy-border-radius-md': tokens.borders.radius.medium,\n '--privy-border-radius-lg': tokens.borders.radius.large,\n '--privy-border-radius-full': tokens.borders.radius.full,\n '--privy-color-background': privyModalBg,\n // Use loginIn variant style: white (light) / transparent (dark) background\n // Hover/active will use opacity: 0.5 via CSS injection\n '--privy-color-background-2': privyButtonHoverBg,\n '--privy-color-background-3': privyButtonActiveBg,\n '--privy-color-foreground': tokens.colors.text.primary,\n '--privy-color-foreground-2': tokens.colors.text.primary, // Privy uses this for primary text\n '--privy-color-foreground-3': tokens.colors.text.secondary, // Privy uses this for secondary text\n '--privy-color-foreground-4': tokens.colors.text.tertiary, // Privy uses this for tertiary text\n // Use loginIn text colors: #1a1a1a (light) / white (dark)\n '--privy-color-foreground-accent': darkMode ? '#ffffff' : '#1a1a1a',\n '--privy-color-accent': privyButtonBaseBg, // loginIn background color\n '--privy-color-accent-light': privyButtonHoverBg,\n '--privy-color-accent-lightest': privyButtonActiveBg,\n '--privy-color-accent-dark': privyButtonHoverBg,\n '--privy-color-accent-darkest': privyButtonActiveBg,\n '--privy-color-success': tokens.colors.success,\n '--privy-color-error': tokens.colors.error,\n '--privy-color-error-light': tokens.colors.error + '33',\n };\n\n return variables;\n}\n\n/**\n * Apply DAppKit button styles (hover opacity matching loginIn variant)\n */\nexport function applyDAppKitButtonStyles(): void {\n if (typeof document === 'undefined') return;\n\n const styleId = 'vechain-kit-dappkit-button-styles';\n let styleElement = document.getElementById(styleId);\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n\n // Target DAppKit wallet source buttons/cards\n // Apply hover/active opacity to match loginIn variant style\n // Target all button-like elements (buttons, clickable divs, elements with cursor pointer)\n const cssRules = `\n /* CRITICAL: Ensure dappkit modal always has pointer-events enabled */\n /* This fixes an issue where the modal becomes unclickable when opened on top of bottom sheet */\n vdk-modal,\n [data-vdk-modal],\n [id*=\"vdk-modal\"] {\n pointer-events: all !important;\n }\n \n /* DAppKit wallet source buttons - apply loginIn hover style */\n /* Target all button-like elements within DAppKit containers */\n [class*=\"vdk\"] button,\n [class*=\"vdk\"] [role=\"button\"],\n [class*=\"vdk\"] [tabindex],\n [id*=\"vdk\"] button,\n [id*=\"vdk\"] [role=\"button\"],\n [id*=\"vdk\"] [tabindex],\n [data-vdk-modal] button,\n [data-vdk-modal] [role=\"button\"],\n [data-vdk-modal] [tabindex],\n [data-vdk-source-card],\n [class*=\"vdk-source-card\"],\n [class*=\"source-card\"],\n button[class*=\"vdk\"],\n [data-vdk-button],\n [class*=\"vdk-button\"],\n /* Target elements that are likely buttons based on styling */\n [class*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"],\n [id*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"],\n [data-vdk-modal] [style*=\"cursor\"][style*=\"pointer\"] {\n transition: opacity 0.2s ease !important;\n }\n \n /* Hover states */\n [class*=\"vdk\"] button:hover,\n [class*=\"vdk\"] [role=\"button\"]:hover,\n [class*=\"vdk\"] [tabindex]:hover,\n [id*=\"vdk\"] button:hover,\n [id*=\"vdk\"] [role=\"button\"]:hover,\n [id*=\"vdk\"] [tabindex]:hover,\n [data-vdk-modal] button:hover,\n [data-vdk-modal] [role=\"button\"]:hover,\n [data-vdk-modal] [tabindex]:hover,\n [data-vdk-source-card]:hover,\n [class*=\"vdk-source-card\"]:hover,\n [class*=\"source-card\"]:hover,\n button[class*=\"vdk\"]:hover,\n [data-vdk-button]:hover,\n [class*=\"vdk-button\"]:hover,\n [class*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:hover,\n [id*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:hover,\n [data-vdk-modal] [style*=\"cursor\"][style*=\"pointer\"]:hover {\n opacity: 0.5 !important;\n }\n \n /* Active states */\n [class*=\"vdk\"] button:active,\n [class*=\"vdk\"] [role=\"button\"]:active,\n [class*=\"vdk\"] [tabindex]:active,\n [id*=\"vdk\"] button:active,\n [id*=\"vdk\"] [role=\"button\"]:active,\n [id*=\"vdk\"] [tabindex]:active,\n [data-vdk-modal] button:active,\n [data-vdk-modal] [role=\"button\"]:active,\n [data-vdk-modal] [tabindex]:active,\n [data-vdk-source-card]:active,\n [class*=\"vdk-source-card\"]:active,\n [class*=\"source-card\"]:active,\n button[class*=\"vdk\"]:active,\n [data-vdk-button]:active,\n [class*=\"vdk-button\"]:active,\n [class*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:active,\n [id*=\"vdk\"] [style*=\"cursor\"][style*=\"pointer\"]:active,\n [data-vdk-modal] [style*=\"cursor\"][style*=\"pointer\"]:active {\n opacity: 0.5 !important;\n }\n `;\n\n styleElement.textContent = cssRules;\n\n // Use MutationObserver to apply styles to dynamically added DAppKit elements\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver(() => {\n // Ensure dappkit modal always has pointer-events enabled\n const dappKitModals = document.querySelectorAll(\n 'vdk-modal, [data-vdk-modal], [id*=\"vdk-modal\"]',\n );\n for (const element of dappKitModals) {\n if (!(element instanceof HTMLElement)) continue;\n element.style.setProperty('pointer-events', 'all', 'important');\n }\n\n // Re-apply styles when DAppKit adds new elements\n const dappKitElements = document.querySelectorAll(\n '[data-vdk-source-card], [class*=\"vdk-source-card\"], [class*=\"source-card\"], [data-vdk-modal] button, [data-vdk-modal] [role=\"button\"]',\n );\n for (const element of dappKitElements) {\n if (!(element instanceof HTMLElement)) continue;\n element.style.setProperty('opacity', '1', 'important');\n element.style.setProperty(\n 'transition',\n 'opacity 0.2s ease',\n 'important',\n );\n }\n });\n\n // Observe the document body for DAppKit modal additions\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Cleanup observer after a delay (DAppKit modals are typically short-lived)\n setTimeout(() => {\n observer.disconnect();\n }, 60000); // Disconnect after 60 seconds\n }\n}\n\n/**\n * Apply Privy CSS variables to document body and inject backdrop filter + card styles\n */\nexport function applyPrivyCSSVariables(\n variables: Record<string, string>,\n backdropFilter?: string,\n cardBg?: string,\n cardElevatedBg?: string,\n buttonBaseColor?: string,\n buttonHoverColor?: string,\n buttonActiveColor?: string,\n borderColor?: string,\n): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n Object.entries(variables).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n\n // Inject CSS for backdrop filters, card backgrounds, and button colors\n const styleId = 'vechain-kit-privy-styles';\n let styleElement = document.getElementById(styleId);\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n\n const cssRules: string[] = [];\n\n // Apply backdrop filter to Privy modal containers\n if (backdropFilter) {\n cssRules.push(`\n [data-privy-dialog-overlay],\n [data-privy-dialog-content],\n .privy-dialog-overlay,\n .privy-dialog-content {\n backdrop-filter: ${backdropFilter} !important;\n -webkit-backdrop-filter: ${backdropFilter} !important;\n }\n `);\n }\n\n // Apply card backgrounds to Privy card/container elements\n // Target common Privy card selectors without affecting button hover states\n if (cardBg) {\n cssRules.push(`\n [data-privy-card],\n .privy-card,\n [class*=\"privy-card\"],\n [class*=\"privy-connect-wallet-card\"],\n [class*=\"privy-account-card\"] {\n background-color: ${cardBg} !important;\n }\n `);\n }\n\n if (cardElevatedBg) {\n cssRules.push(`\n [data-privy-card][data-elevated],\n .privy-card-elevated,\n [class*=\"privy-card\"][class*=\"elevated\"] {\n background-color: ${cardElevatedBg} !important;\n }\n `);\n }\n\n // Apply loginIn variant style to Privy login method buttons\n // Base: white (light) / transparent (dark)\n // Hover/Active: opacity: 0.5 (matching loginIn variant)\n if (buttonBaseColor) {\n const borderColorValue = borderColor || 'rgba(0, 0, 0, 0.1)';\n cssRules.push(`\n #headlessui-portal-root .login-method-button,\n #headlessui-portal-root [class*=\"login-method-button\"],\n .login-method-button {\n background-color: ${buttonBaseColor} !important;\n border: 1px solid ${borderColorValue} !important;\n }\n `);\n }\n\n // Apply hover state with opacity: 0.5 (matching loginIn variant)\n if (buttonHoverColor) {\n cssRules.push(`\n #headlessui-portal-root .login-method-button:hover,\n #headlessui-portal-root [class*=\"login-method-button\"]:hover,\n .login-method-button:hover {\n background-color: ${buttonHoverColor} !important;\n opacity: 0.5 !important;\n }\n `);\n }\n\n // Apply active state with opacity: 0.5 (matching loginIn variant)\n if (buttonActiveColor) {\n cssRules.push(`\n #headlessui-portal-root .login-method-button:active,\n #headlessui-portal-root [class*=\"login-method-button\"]:active,\n .login-method-button:active {\n background-color: ${buttonActiveColor} !important;\n opacity: 0.5 !important;\n }\n `);\n }\n\n if (cssRules.length > 0) {\n styleElement.textContent = cssRules.join('\\n');\n }\n}\n","import React, { ReactNode } from 'react';\nimport {\n QueryClient,\n QueryClientProvider,\n QueryClientContext,\n} from '@tanstack/react-query';\nimport { hashFn } from 'wagmi/query';\n\n// Singleton instance for internal QueryClient\nlet internalQueryClient: QueryClient | null = null;\n\n// Function to safely get the QueryClient\nexport function getOrCreateQueryClient(): QueryClient {\n if (!internalQueryClient) {\n internalQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryKeyHashFn: hashFn,\n retry: 0,\n staleTime: 30000,\n refetchOnWindowFocus: true,\n refetchOnMount: true,\n refetchOnReconnect: true,\n refetchInterval: false,\n refetchIntervalInBackground: false,\n },\n },\n });\n }\n return internalQueryClient;\n}\n\n// A wrapper component to ensure a QueryClientProvider exists\ninterface EnsureQueryClientProps {\n children: ReactNode;\n}\n\nexport const EnsureQueryClient = ({ children }: EnsureQueryClientProps) => {\n try {\n // Attempt to use the existing QueryClient context\n const existingQueryClient = React.useContext(QueryClientContext);\n\n if (existingQueryClient) {\n return <>{children}</>;\n }\n } catch (e) {\n // Handle any potential errors\n // eslint-disable-next-line no-console\n console.log(e);\n }\n\n // If no QueryClient exists or there was an error, provide one\n const queryClient = getOrCreateQueryClient();\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n );\n};\n","import { ReactNode, useCallback, useState, lazy, Suspense } from 'react';\n// Import context and types from ModalContext to avoid circular dependencies\n// Note: ModalContext exports are made available through providers/index.ts\nimport { ModalContext, type AccountModalOptions } from './ModalContext';\n// Use local type alias to avoid conflict with components/AccountModal/Types\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AccountModalContentTypes = any;\n// Import modal types from types/modal.ts to avoid circular dependency with components\nimport type {\n ConnectModalContentsTypes,\n UpgradeSmartAccountModalStyle,\n} from '../types/modal';\n// Use optional hook to handle missing DAppKitProvider during Suspense loading\nimport { useOptionalDAppKitWallet } from '../hooks/api/dappkit/useOptionalDAppKitWallet';\nimport { isBrowser } from '../utils/ssrUtils';\nimport { VechainKitThemeProvider } from './VechainKitThemeProvider';\n// Import from VeChainKitContext to avoid circular dependency with VeChainKitProvider\nimport { useVeChainKitConfig } from './VeChainKitContext';\n\n// Lazy load modal components to reduce initial bundle size (~500KB total)\n// Modals are only loaded when they are actually opened\nconst LazyConnectModal = lazy(() =>\n import('../components/ConnectModal').then((mod) => ({\n default: mod.ConnectModal,\n })),\n);\n\nconst LazyAccountModal = lazy(() =>\n import('../components/AccountModal').then((mod) => ({\n default: mod.AccountModal,\n })),\n);\n\nconst LazyUpgradeSmartAccountModal = lazy(() =>\n import('../components/UpgradeSmartAccountModal').then((mod) => ({\n default: mod.UpgradeSmartAccountModal,\n })),\n);\n\nexport const ModalProvider = ({ children }: { children: ReactNode }) => {\n const { darkMode, theme } = useVeChainKitConfig();\n const [isConnectModalOpen, setIsConnectModalOpen] = useState(false);\n const [connectModalContent, setConnectModalContent] =\n useState<ConnectModalContentsTypes>('main');\n const [connectModalPreventAutoClose, setConnectModalPreventAutoClose] =\n useState(false);\n const { setSource, connectV2 } = useOptionalDAppKitWallet();\n const openConnectModal = useCallback(\n (\n initialContent?: ConnectModalContentsTypes,\n preventAutoClose?: boolean,\n ) => {\n // If the user is in the veworld app, connect to the wallet\n if (\n isBrowser() &&\n window.vechain &&\n window.vechain.isInAppBrowser\n ) {\n setSource('veworld');\n connectV2(null);\n } else {\n // Always set the content - default to 'main' if not provided\n setConnectModalContent(initialContent ?? 'main');\n setConnectModalPreventAutoClose(preventAutoClose ?? false);\n setIsConnectModalOpen(true);\n }\n },\n [],\n );\n const closeConnectModal = useCallback(() => {\n setIsConnectModalOpen(false);\n // Reset content to main when modal closes\n setConnectModalContent('main');\n setConnectModalPreventAutoClose(false);\n }, []);\n\n const [isAccountModalOpen, setIsAccountModalOpen] = useState(false);\n const [isolatedView, setIsolatedView] = useState(false);\n const [accountModalContent, setAccountModalContent] =\n useState<AccountModalContentTypes>('main');\n\n const openAccountModal = useCallback(\n (content?: AccountModalContentTypes, options?: AccountModalOptions) => {\n setAccountModalContent(content ?? 'main');\n setIsolatedView(options?.isolatedView ?? false);\n setIsAccountModalOpen(true);\n },\n [],\n );\n const closeAccountModal = useCallback(() => {\n setIsAccountModalOpen(false);\n // Reset content to main when modal closes\n setAccountModalContent('main');\n // Reset isolatedView after modal close animation completes\n setTimeout(() => {\n setIsolatedView(false);\n }, 300);\n }, []);\n\n const [isTransactionModalOpen, setIsTransactionModalOpen] = useState(false);\n const openTransactionModal = useCallback(\n () => setIsTransactionModalOpen(true),\n [],\n );\n const closeTransactionModal = useCallback(\n () => setIsTransactionModalOpen(false),\n [],\n );\n\n const [isTransactionToastOpen, setIsTransactionToastOpen] = useState(false);\n const openTransactionToast = useCallback(\n () => setIsTransactionToastOpen(true),\n [],\n );\n const closeTransactionToast = useCallback(\n () => setIsTransactionToastOpen(false),\n [],\n );\n\n const [isUpgradeSmartAccountModalOpen, setIsUpgradeSmartAccountModalOpen] =\n useState(false);\n const [upgradeSmartAccountModalStyle, setUpgradeSmartAccountModalStyle] =\n useState<UpgradeSmartAccountModalStyle | undefined>(undefined);\n const openUpgradeSmartAccountModal = useCallback(\n (style?: UpgradeSmartAccountModalStyle) => {\n setUpgradeSmartAccountModalStyle(style);\n setIsUpgradeSmartAccountModalOpen(true);\n },\n [],\n );\n const closeUpgradeSmartAccountModal = useCallback(\n () => setIsUpgradeSmartAccountModalOpen(false),\n [],\n );\n\n return (\n <ModalContext.Provider\n value={{\n openConnectModal,\n closeConnectModal,\n isConnectModalOpen,\n connectModalContent,\n setConnectModalContent,\n connectModalPreventAutoClose,\n setConnectModalPreventAutoClose,\n openAccountModal,\n closeAccountModal,\n isAccountModalOpen,\n setAccountModalContent,\n accountModalContent,\n isolatedView,\n openTransactionModal,\n closeTransactionModal,\n isTransactionModalOpen,\n openTransactionToast,\n closeTransactionToast,\n isTransactionToastOpen,\n openUpgradeSmartAccountModal,\n closeUpgradeSmartAccountModal,\n isUpgradeSmartAccountModalOpen,\n }}\n >\n {children}\n <VechainKitThemeProvider darkMode={darkMode} theme={theme}>\n {/* Lazy-load modals only when they are opened to reduce initial bundle size */}\n {isConnectModalOpen && (\n <Suspense fallback={null}>\n <LazyConnectModal\n isOpen={isConnectModalOpen}\n onClose={closeConnectModal}\n initialContent={connectModalContent}\n preventAutoClose={connectModalPreventAutoClose}\n />\n </Suspense>\n )}\n {isAccountModalOpen && (\n <Suspense fallback={null}>\n <LazyAccountModal\n isOpen={isAccountModalOpen}\n onClose={closeAccountModal}\n initialContent={accountModalContent}\n />\n </Suspense>\n )}\n {isUpgradeSmartAccountModalOpen && (\n <Suspense fallback={null}>\n <LazyUpgradeSmartAccountModal\n isOpen={isUpgradeSmartAccountModalOpen}\n onClose={closeUpgradeSmartAccountModal}\n style={upgradeSmartAccountModalStyle}\n />\n </Suspense>\n )}\n </VechainKitThemeProvider>\n </ModalContext.Provider>\n );\n};\n","import { getConfig } from '../config';\nimport { NETWORK_TYPE } from '../config/network';\nimport type { CURRENCY } from '../types';\nimport { isValidUrl } from '../utils';\nimport { getLocalStorageItem, setLocalStorageItem } from '../utils/ssrUtils';\nimport { initializeI18n } from '../utils/i18n';\nimport type {\n LoginMethodOrderOption,\n NonEmptyArray,\n} from '@privy-io/react-auth';\nimport {\n useEffect,\n useMemo,\n useState,\n useRef,\n lazy,\n Suspense,\n} from 'react';\n// Import context and types from dedicated context file to break circular dependencies\n// Hooks should import useVeChainKitConfig from VeChainKitContext.tsx, not from this file\nimport { VeChainKitContext, type VechainKitProviderProps } from './VeChainKitContext';\nimport {\n getDefaultTokens,\n convertThemeConfigToTokens,\n mergeTokens,\n} from '../theme/tokens';\n\n// Re-export context, hook and types from VeChainKitContext for backward compatibility\n// NOTE: Hooks should prefer importing from './VeChainKitContext' to avoid circular dependencies\nexport {\n VeChainKitContext,\n useVeChainKitConfig,\n type VeChainKitConfig,\n type VechainKitProviderProps,\n type LoginMethodOrder,\n} from './VeChainKitContext';\nimport {\n generateDAppKitCSSVariables,\n generatePrivyCSSVariables,\n applyPrivyCSSVariables,\n applyDAppKitButtonStyles,\n improvePrivyReadability,\n} from '../utils/cssVariables';\n\nimport i18n from '../../i18n';\nimport { EnsureQueryClient } from './EnsureQueryClient';\nimport { LegalDocumentsProvider } from './LegalDocumentsProvider';\nimport { ModalProvider } from './ModalProvider';\nimport {\n VECHAIN_KIT_STORAGE_KEYS,\n DEFAULT_PRIVY_ECOSYSTEM_APPS,\n getGenericDelegatorUrl,\n} from '../utils/constants';\nimport { PrivyWalletProvider } from './PrivyWalletProvider';\nimport { ThorProvider } from './ThorProvider';\n\n// Lazy load PrivyCrossAppProvider only when ecosystem login is enabled to reduce bundle size (~150KB wagmi)\nconst LazyPrivyCrossAppProvider = lazy(() =>\n import('./PrivyCrossAppProvider').then((mod) => ({\n default: mod.PrivyCrossAppProvider,\n })),\n);\n\n// Lazy load ReactQueryDevtools only in development to reduce production bundle size (~100KB)\nconst ReactQueryDevtools =\n process.env.NODE_ENV === 'development'\n ? lazy(() =>\n import('@tanstack/react-query-devtools').then((mod) => ({\n default: mod.ReactQueryDevtools,\n })),\n )\n : () => null;\n\n// Lazy load PrivyProvider only when privy is configured to reduce bundle size (~500KB)\nconst LazyPrivyProvider = lazy(() =>\n import('@privy-io/react-auth').then((mod) => ({\n default: mod.PrivyProvider,\n })),\n);\n\n// Lazy load DAppKitProvider only when dappKit is configured to reduce bundle size (~200KB)\nconst LazyDAppKitProvider = lazy(() =>\n import('@vechain/dapp-kit-react').then((mod) => ({\n default: mod.DAppKitProvider,\n })),\n);\n\n// Re-export types from ../types for backward compatibility\n// These types are now defined in types/types.ts to avoid circular dependencies\nexport type { LegalDocument, LegalDocumentOptions } from '../types';\n\nconst validateConfig = (\n props: Omit<VechainKitProviderProps, 'queryClient'>,\n) => {\n const errors: string[] = [];\n\n const validatedProps = { ...props };\n\n // NOTE: dappKit is now optional - if not provided, DAppKitProvider will not be loaded\n // This allows apps that only use Privy to avoid bundling @vechain/dapp-kit-react\n // For backward compatibility, apps that explicitly pass dappKit: {} will get default wallet config\n\n // Check if fee delegation is required based on conditions\n const requiresFeeDelegation =\n validatedProps.privy !== undefined ||\n validatedProps.loginMethods?.some(\n (method) =>\n method.method === 'vechain' || method.method === 'ecosystem',\n );\n\n // Validate fee delegation\n if (requiresFeeDelegation) {\n if (!validatedProps.feeDelegation) {\n validatedProps.feeDelegation = {\n genericDelegatorUrl: getGenericDelegatorUrl(),\n };\n } else {\n if (\n !validatedProps.feeDelegation.delegatorUrl &&\n !validatedProps.feeDelegation.genericDelegatorUrl\n ) {\n validatedProps.feeDelegation.genericDelegatorUrl =\n getGenericDelegatorUrl();\n }\n }\n }\n\n // Validate network - always ensure we have a valid network configuration\n if (!validatedProps.network || !validatedProps.network.type) {\n validatedProps.network = {\n type: 'main',\n };\n } else {\n const networkType = validatedProps.network.type;\n // Validate and narrow the network type\n if (!['main', 'test', 'solo'].includes(networkType)) {\n // Provide helpful error with the invalid value\n errors.push('network.type must be either \"main\", \"test\" or \"solo\"');\n }\n }\n\n // Set default login methods if not provided\n if (!validatedProps.loginMethods) {\n validatedProps.loginMethods = [\n { method: 'vechain', gridColumn: 4 },\n { method: 'ecosystem', gridColumn: 4 },\n { method: 'dappkit', gridColumn: 4 },\n ];\n }\n\n // Validate login methods if Privy is not configured\n if (validatedProps.loginMethods) {\n if (!validatedProps.privy) {\n const invalidMethods = validatedProps.loginMethods.filter(\n (method) =>\n ['email', 'google', 'passkey', 'more'].includes(\n method.method,\n ),\n );\n\n if (invalidMethods.length > 0) {\n errors.push(\n `Login methods ${invalidMethods\n .map((m) => `\"${m.method}\"`)\n .join(', ')} require Privy configuration. ` +\n `Please either remove these methods or configure the privy prop.`,\n );\n }\n }\n }\n\n if (validatedProps?.legalDocuments) {\n if (validatedProps.legalDocuments.termsAndConditions) {\n validatedProps.legalDocuments.termsAndConditions.forEach((term) => {\n if (!isValidUrl(term.url)) {\n errors.push(\n `legalDocuments.termsAndConditions.url is invalid: ${term.url}`,\n );\n }\n });\n }\n if (validatedProps.legalDocuments.privacyPolicy) {\n validatedProps.legalDocuments.privacyPolicy.forEach((term) => {\n if (!isValidUrl(term.url)) {\n errors.push(\n `legalDocuments.privacyPolicy.url is invalid: ${term.url}`,\n );\n }\n });\n }\n if (validatedProps.legalDocuments.cookiePolicy) {\n validatedProps.legalDocuments.cookiePolicy.forEach((term) => {\n if (!isValidUrl(term.url)) {\n errors.push(\n `legalDocuments.cookiePolicy.url is invalid: ${term.url}`,\n );\n }\n });\n }\n }\n\n if (errors.length > 0) {\n throw new Error(\n 'VeChainKit Configuration Error:\\n' + errors.join('\\n'),\n );\n }\n\n return validatedProps;\n};\n\n/**\n * Provider to wrap the application with Privy and DAppKit\n */\nconst CURRENCY_STORAGE_KEY = 'vechain_kit_currency';\n\nexport const VeChainKitProvider = (\n props: Omit<VechainKitProviderProps, 'queryClient'>,\n) => {\n // Validate all configurations at the start\n const validatedProps = validateConfig(props);\n const {\n children,\n headless = false,\n privy,\n feeDelegation,\n dappKit: _dappKit,\n loginModalUI,\n loginMethods,\n darkMode = false,\n i18n: i18nConfig,\n language = 'en',\n network: _network,\n allowCustomTokens,\n legalDocuments,\n defaultCurrency = 'usd',\n theme: customTheme,\n onLanguageChange,\n onCurrencyChange,\n } = validatedProps;\n\n // After validation, network and dappKit are guaranteed to be defined\n // Cast the network type to NETWORK_TYPE since validation ensures it's valid\n const networkType = (_network?.type ?? 'main') as NETWORK_TYPE;\n\n //To avoid this fallback across the codebase, do it globally in the provider\n const nodeUrl = _network?.nodeUrl ?? getConfig(networkType).nodeUrl;\n\n const network = {\n ..._network,\n type: networkType,\n nodeUrl,\n };\n\n // DAppKit config - now optional; if not provided, DAppKitProvider won't be rendered\n // Apps using only Privy can omit this to reduce bundle size\n const dappKit = _dappKit;\n const isDAppKitConfigured = !!_dappKit;\n\n // Initialize current language from i18n or prop\n const [currentLanguage, setCurrentLanguageState] = useState<string>(() => {\n if (typeof window !== 'undefined') {\n const stored = getLocalStorageItem('i18nextLng');\n return stored || language;\n }\n return language;\n });\n\n // Initialize current currency from localStorage or prop\n const [currentCurrency, setCurrentCurrencyState] = useState<CURRENCY>(\n () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n return (stored as CURRENCY) || defaultCurrency;\n } catch {\n return defaultCurrency;\n }\n },\n );\n\n // Track if we're updating from prop to avoid loops\n const isUpdatingFromPropRef = useRef(false);\n const isUpdatingCurrencyFromPropRef = useRef(false);\n\n // Remove the validateLoginMethods call since it's now handled in validateConfig\n const validatedLoginMethods = loginMethods;\n\n const allowedEcosystemApps = useMemo(() => {\n const userEcosystemMethods = validatedLoginMethods?.find(\n (method) => method.method === 'ecosystem',\n );\n return (\n userEcosystemMethods?.allowedApps ??\n DEFAULT_PRIVY_ECOSYSTEM_APPS.map((app) => app.id)\n );\n }, [validatedLoginMethods]);\n\n // Check if Privy is configured\n const isPrivyConfigured = !!privy;\n\n // Check if ecosystem login is enabled in loginMethods\n // This determines whether we need to load PrivyCrossAppProvider/wagmi\n const isEcosystemLoginEnabled = useMemo(() => {\n return validatedLoginMethods?.some(\n (method) => method.method === 'ecosystem' || method.method === 'vechain',\n ) ?? false;\n }, [validatedLoginMethods]);\n\n // Initialize i18n with stored language or prop, and merge translations\n useEffect(() => {\n // Initialize translations from VeChainKit\n initializeI18n(i18n);\n\n if (i18nConfig) {\n // Add custom translations from the app if provided\n Object.keys(i18nConfig).forEach((lang) => {\n i18n.addResourceBundle(\n lang,\n 'translation',\n i18nConfig[lang],\n true,\n true,\n );\n });\n }\n\n // Initialize i18n with stored language or currentLanguage state\n // This ensures stored preferences are respected on page refresh\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n const initialLanguage = storedLanguage || currentLanguage;\n\n if (initialLanguage && i18n.language !== initialLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(initialLanguage);\n if (initialLanguage !== currentLanguage) {\n setCurrentLanguageState(initialLanguage);\n }\n isUpdatingFromPropRef.current = false;\n }\n }, []); // Only run once on mount\n\n // Sync language prop changes to i18n and state (but only if no stored value exists)\n useEffect(() => {\n // Skip on initial mount - let the initialization effect handle it\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n\n // Only sync prop if there's no stored preference and prop differs from current\n if (language && !storedLanguage && language !== currentLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(language);\n setCurrentLanguageState(language);\n isUpdatingFromPropRef.current = false;\n }\n }, [language, currentLanguage]);\n\n // Listen to i18n language changes (from kit settings)\n useEffect(() => {\n const handleLanguageChanged = (lng: string) => {\n if (!isUpdatingFromPropRef.current && lng !== currentLanguage) {\n setCurrentLanguageState(lng);\n onLanguageChange?.(lng);\n }\n };\n\n i18n.on('languageChanged', handleLanguageChanged);\n\n return () => {\n i18n.off('languageChanged', handleLanguageChanged);\n };\n }, [currentLanguage, onLanguageChange]);\n\n // Sync currency prop changes to state (but only if no stored value exists)\n useEffect(() => {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n\n // Only sync prop if there's no stored preference and prop differs from current\n if (defaultCurrency && !stored && defaultCurrency !== currentCurrency) {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(defaultCurrency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, defaultCurrency);\n isUpdatingCurrencyFromPropRef.current = false;\n }\n }, [defaultCurrency, currentCurrency]);\n\n // Listen to currency localStorage changes (from kit settings)\n useEffect(() => {\n const checkCurrencyChange = () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n if (\n stored &&\n stored !== currentCurrency &&\n !isUpdatingCurrencyFromPropRef.current\n ) {\n const newCurrency = stored as CURRENCY;\n setCurrentCurrencyState(newCurrency);\n onCurrencyChange?.(newCurrency);\n }\n } catch {\n // Ignore errors\n }\n };\n\n // Check on mount\n checkCurrencyChange();\n\n // Listen to storage events (for cross-tab sync)\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === CURRENCY_STORAGE_KEY && e.newValue) {\n checkCurrencyChange();\n }\n };\n\n window.addEventListener('storage', handleStorageChange);\n\n // Poll for changes (in case storage event doesn't fire)\n const interval = setInterval(checkCurrencyChange, 500);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n clearInterval(interval);\n };\n }, [currentCurrency, onCurrencyChange]);\n\n // Functions to set language/currency from host app\n const setLanguage = (lang: string) => {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(lang);\n setCurrentLanguageState(lang);\n isUpdatingFromPropRef.current = false;\n };\n\n const setCurrency = (currency: CURRENCY) => {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(currency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, currency);\n isUpdatingCurrencyFromPropRef.current = false;\n };\n\n useEffect(() => {\n setLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK, networkType);\n }, [networkType]);\n\n // Generate tokens from custom theme config\n const tokens = useMemo(() => {\n const defaultTokens = getDefaultTokens(darkMode);\n const customTokens = convertThemeConfigToTokens(customTheme, darkMode);\n return mergeTokens(defaultTokens, customTokens);\n }, [customTheme, darkMode]);\n\n // Generate CSS variables for DAppKit and Privy\n const dappKitThemeVariables = useMemo(\n () => generateDAppKitCSSVariables(tokens, darkMode),\n [tokens, darkMode],\n );\n\n const privyCSSVariables = useMemo(\n () => generatePrivyCSSVariables(tokens, darkMode),\n [tokens, darkMode],\n );\n\n // Apply Privy CSS variables to document and inject backdrop filter + card styles\n useEffect(() => {\n // Prepare card backgrounds with readability improvements\n const privyCardBg = improvePrivyReadability(\n tokens.colors.background.card,\n darkMode,\n );\n const privyCardElevatedBg = improvePrivyReadability(\n tokens.colors.background.cardElevated,\n darkMode,\n );\n // Use loginIn variant style: white (light) / transparent (dark) background\n const privyButtonBaseBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonHoverBg = darkMode ? 'transparent' : '#ffffff';\n const privyButtonActiveBg = darkMode ? 'transparent' : '#ffffff';\n\n applyPrivyCSSVariables(\n privyCSSVariables,\n tokens.effects.backdropFilter.modal,\n privyCardBg,\n privyCardElevatedBg,\n privyButtonBaseBg,\n privyButtonHoverBg,\n privyButtonActiveBg,\n tokens.colors.border.default,\n );\n }, [\n privyCSSVariables,\n tokens.effects.backdropFilter.modal,\n tokens.colors.background.card,\n tokens.colors.background.cardElevated,\n tokens.colors.border.default,\n darkMode,\n ]);\n\n // Apply DAppKit button styles (hover opacity matching loginIn variant)\n useEffect(() => {\n if (isDAppKitConfigured) {\n applyDAppKitButtonStyles();\n }\n }, [isDAppKitConfigured]);\n\n // Core content that contains modals and legal documents\n // In headless mode, skip ModalProvider to avoid loading Chakra UI (~300KB)\n const coreContent = isPrivyConfigured ? (\n <PrivyWalletProvider\n nodeUrl={network.nodeUrl}\n delegatorUrl={\n feeDelegation?.delegatorUrl ??\n feeDelegation?.genericDelegatorUrl\n }\n delegateAllTransactions={\n feeDelegation?.delegateAllTransactions ?? false\n }\n genericDelegator={\n !feeDelegation?.delegatorUrl &&\n feeDelegation?.genericDelegatorUrl\n ? true\n : false\n }\n >\n {headless ? (\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n ) : (\n <ModalProvider>\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n </ModalProvider>\n )}\n </PrivyWalletProvider>\n ) : headless ? (\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n ) : (\n <ModalProvider>\n <LegalDocumentsProvider>{children}</LegalDocumentsProvider>\n </ModalProvider>\n );\n\n // Inner content wrapped by DAppKitProvider or ThorProvider (fallback)\n const innerContent = isDAppKitConfigured ? (\n <Suspense fallback={<ThorProvider nodeUrl={network.nodeUrl}>{coreContent}</ThorProvider>}>\n <LazyDAppKitProvider\n node={network.nodeUrl}\n alwaysShowConnect={true}\n v2Api={{\n enabled: dappKit?.v2Api?.enabled ?? true, //defaults to true\n external: dappKit?.v2Api?.external ?? false, //defaults to false\n }}\n language={currentLanguage}\n logLevel={dappKit?.logLevel}\n modalParent={dappKit?.modalParent}\n onSourceClick={dappKit?.onSourceClick}\n usePersistence={dappKit?.usePersistence ?? true}\n allowedWallets={dappKit?.allowedWallets}\n walletConnectOptions={dappKit?.walletConnectOptions}\n themeMode={darkMode ? 'DARK' : 'LIGHT'}\n themeVariables={\n dappKit?.themeVariables\n ? {\n ...dappKitThemeVariables,\n ...dappKit.themeVariables,\n }\n : dappKitThemeVariables\n }\n >\n {coreContent}\n </LazyDAppKitProvider>\n </Suspense>\n ) : (\n // When DAppKit is not configured, use ThorProvider for Thor client access\n <ThorProvider nodeUrl={network.nodeUrl}>{coreContent}</ThorProvider>\n );\n\n // Conditionally wrap with PrivyProvider only when privy is configured\n const privyWrappedContent = isPrivyConfigured ? (\n <Suspense fallback={innerContent}>\n <LazyPrivyProvider\n appId={privy.appId}\n clientId={privy.clientId}\n config={{\n loginMethodsAndOrder: {\n primary: (privy.loginMethods.slice(0, 4) ??\n []) as NonEmptyArray<LoginMethodOrderOption>,\n overflow: (privy.loginMethods.slice(4) ??\n []) as Array<LoginMethodOrderOption>,\n },\n externalWallets: {\n walletConnect: {\n enabled: false,\n },\n },\n appearance: {\n theme: darkMode ? 'dark' : 'light',\n accentColor:\n privy.appearance.accentColor ??\n (tokens.buttons.primaryButton.bg?.startsWith('#')\n ? (tokens.buttons.primaryButton\n .bg as `#${string}`)\n : darkMode\n ? '#3182CE'\n : '#2B6CB0'),\n loginMessage: privy.appearance.loginMessage,\n logo: privy.appearance.logo,\n },\n embeddedWallets: {\n createOnLogin:\n privy.embeddedWallets?.createOnLogin ?? 'all-users',\n },\n passkeys: {\n shouldUnlinkOnUnenrollMfa: false,\n },\n }}\n >\n {innerContent}\n </LazyPrivyProvider>\n </Suspense>\n ) : (\n innerContent\n );\n\n // Context value for the provider\n const contextValue = {\n privy,\n privyEcosystemAppIDS: allowedEcosystemApps,\n feeDelegation,\n dappKit,\n loginModalUI,\n loginMethods: validatedLoginMethods,\n darkMode,\n headless,\n i18n: i18nConfig,\n currentLanguage,\n network,\n allowCustomTokens,\n legalDocuments,\n currentCurrency,\n theme: customTheme,\n setLanguage,\n setCurrency,\n };\n\n // Core content without ecosystem provider\n const coreProviderContent = (\n <VeChainKitContext.Provider value={contextValue}>\n {privyWrappedContent}\n </VeChainKitContext.Provider>\n );\n\n // Conditionally wrap with PrivyCrossAppProvider only when ecosystem login is enabled\n // This avoids bundling wagmi (~150KB) for apps that don't use ecosystem login\n const ecosystemWrappedContent = isEcosystemLoginEnabled ? (\n <Suspense fallback={coreProviderContent}>\n <LazyPrivyCrossAppProvider privyEcosystemAppIDS={allowedEcosystemApps}>\n {coreProviderContent}\n </LazyPrivyCrossAppProvider>\n </Suspense>\n ) : (\n coreProviderContent\n );\n\n return (\n <EnsureQueryClient>\n {process.env.NODE_ENV === 'development' && (\n <Suspense fallback={null}>\n <ReactQueryDevtools initialIsOpen={false} />\n </Suspense>\n )}\n {ecosystemWrappedContent}\n </EnsureQueryClient>\n );\n};\n","/**\n * VeChainKitCoreProvider - Minimal provider for advanced users\n *\n * This provider provides only the essential context + React Query setup,\n * without bundling any heavy dependencies like:\n * - Privy (~500KB)\n * - DAppKit (~200KB)\n * - Wagmi (~150KB)\n * - Chakra UI (~300KB)\n *\n * Use this provider when you want maximum control and are building:\n * - Custom authentication flows\n * - Headless applications\n * - Server-side applications\n * - Custom UI with your own components\n *\n * Bundle size: ~60KB (compared to ~1.7MB for full provider)\n *\n * @example\n * ```tsx\n * import { VeChainKitCoreProvider } from '@vechain/vechain-kit/providers';\n *\n * function App() {\n * return (\n * <VeChainKitCoreProvider network={{ type: 'main' }}>\n * <CustomAuthProvider>\n * <MyApp />\n * </CustomAuthProvider>\n * </VeChainKitCoreProvider>\n * );\n * }\n * ```\n */\n\nimport React, { ReactNode, useMemo, useState, useEffect, useRef } from 'react';\nimport { getConfig } from '../config';\nimport { NETWORK_TYPE } from '../config/network';\nimport type { CURRENCY } from '../types';\nimport { getLocalStorageItem, setLocalStorageItem } from '../utils/ssrUtils';\nimport { initializeI18n } from '../utils/i18n';\nimport {\n VeChainKitContext,\n type VeChainKitConfig,\n} from './VeChainKitContext';\nimport { EnsureQueryClient } from './EnsureQueryClient';\nimport { ThorProvider } from './ThorProvider';\nimport { VECHAIN_KIT_STORAGE_KEYS } from '../utils/constants';\nimport type { Certificate, CertificateData } from '@vechain/sdk-core';\nimport i18n from '../../i18n';\n\n/**\n * Props for VeChainKitCoreProvider\n * Simplified compared to VeChainKitProvider - no Privy, DAppKit, Chakra UI options\n */\nexport interface VeChainKitCoreProviderProps {\n children: ReactNode;\n /**\n * Network configuration\n * @default { type: 'main' }\n */\n network?: {\n type?: string; // Accepts any string, validated internally to 'main' | 'test' | 'solo'\n nodeUrl?: string;\n requireCertificate?: boolean;\n connectionCertificate?: {\n message?: Certificate;\n options?: CertificateData;\n };\n };\n /**\n * Initial language for i18n\n * @default 'en'\n */\n language?: string;\n /**\n * Enable dark mode for theming context (even without Chakra UI)\n * @default false\n */\n darkMode?: boolean;\n /**\n * Default currency\n * @default 'usd'\n */\n defaultCurrency?: CURRENCY;\n /**\n * Callback when language changes\n */\n onLanguageChange?: (language: string) => void;\n /**\n * Callback when currency changes\n */\n onCurrencyChange?: (currency: CURRENCY) => void;\n}\n\nconst CURRENCY_STORAGE_KEY = 'vechain_kit_currency';\n\n/**\n * Validates the network configuration\n */\nconst validateNetwork = (network?: VeChainKitCoreProviderProps['network']) => {\n if (!network || !network.type) {\n return { type: 'main' as NETWORK_TYPE };\n }\n\n const networkType = network.type;\n if (!['main', 'test', 'solo'].includes(networkType)) {\n throw new Error(\n `VeChainKitCoreProvider: network.type must be \"main\", \"test\", or \"solo\". Got: \"${networkType}\"`,\n );\n }\n\n return { ...network, type: networkType as NETWORK_TYPE };\n};\n\n/**\n * Minimal provider for VeChain Kit - includes only:\n * - VeChainKitContext (configuration)\n * - React Query (QueryClientProvider)\n * - ThorProvider (Thor client for blockchain operations)\n *\n * Does NOT include:\n * - Privy (social login, embedded wallets)\n * - DAppKit (VeWorld, Sync2, WalletConnect)\n * - Wagmi (ecosystem cross-app connections)\n * - Chakra UI (styling, modals)\n * - ModalProvider (connect/account modals)\n * - LegalDocumentsProvider (terms & privacy)\n *\n * Hooks that require these missing providers will:\n * - Return null/undefined for data\n * - Throw helpful errors when actions are attempted\n * - Work gracefully in read-only scenarios (e.g., balance queries)\n */\nexport const VeChainKitCoreProvider = ({\n children,\n network: _network,\n language = 'en',\n darkMode = false,\n defaultCurrency = 'usd',\n onLanguageChange,\n onCurrencyChange,\n}: VeChainKitCoreProviderProps) => {\n // Validate network configuration\n const validatedNetwork = validateNetwork(_network);\n const networkType = validatedNetwork.type;\n\n // Get node URL from config if not provided\n const nodeUrl = _network?.nodeUrl ?? getConfig(networkType).nodeUrl;\n\n const network = {\n ...validatedNetwork,\n nodeUrl,\n };\n\n // Initialize current language from i18n or prop\n const [currentLanguage, setCurrentLanguageState] = useState<string>(() => {\n if (typeof window !== 'undefined') {\n const stored = getLocalStorageItem('i18nextLng');\n return stored || language;\n }\n return language;\n });\n\n // Initialize current currency from localStorage or prop\n const [currentCurrency, setCurrentCurrencyState] = useState<CURRENCY>(\n () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n return (stored as CURRENCY) || defaultCurrency;\n } catch {\n return defaultCurrency;\n }\n },\n );\n\n // Track if we're updating from prop to avoid loops\n const isUpdatingFromPropRef = useRef(false);\n const isUpdatingCurrencyFromPropRef = useRef(false);\n\n // Initialize i18n\n useEffect(() => {\n initializeI18n(i18n);\n\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n const initialLanguage = storedLanguage || currentLanguage;\n\n if (initialLanguage && i18n.language !== initialLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(initialLanguage);\n if (initialLanguage !== currentLanguage) {\n setCurrentLanguageState(initialLanguage);\n }\n isUpdatingFromPropRef.current = false;\n }\n }, []);\n\n // Sync language prop changes\n useEffect(() => {\n const storedLanguage =\n typeof window !== 'undefined'\n ? getLocalStorageItem('i18nextLng')\n : null;\n\n if (language && !storedLanguage && language !== currentLanguage) {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(language);\n setCurrentLanguageState(language);\n isUpdatingFromPropRef.current = false;\n }\n }, [language, currentLanguage]);\n\n // Listen to i18n language changes\n useEffect(() => {\n const handleLanguageChanged = (lng: string) => {\n if (!isUpdatingFromPropRef.current && lng !== currentLanguage) {\n setCurrentLanguageState(lng);\n onLanguageChange?.(lng);\n }\n };\n\n i18n.on('languageChanged', handleLanguageChanged);\n\n return () => {\n i18n.off('languageChanged', handleLanguageChanged);\n };\n }, [currentLanguage, onLanguageChange]);\n\n // Sync currency prop changes\n useEffect(() => {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n\n if (defaultCurrency && !stored && defaultCurrency !== currentCurrency) {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(defaultCurrency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, defaultCurrency);\n isUpdatingCurrencyFromPropRef.current = false;\n }\n }, [defaultCurrency, currentCurrency]);\n\n // Listen to currency localStorage changes\n useEffect(() => {\n const checkCurrencyChange = () => {\n try {\n const stored = getLocalStorageItem(CURRENCY_STORAGE_KEY);\n if (\n stored &&\n stored !== currentCurrency &&\n !isUpdatingCurrencyFromPropRef.current\n ) {\n const newCurrency = stored as CURRENCY;\n setCurrentCurrencyState(newCurrency);\n onCurrencyChange?.(newCurrency);\n }\n } catch {\n // Ignore errors\n }\n };\n\n checkCurrencyChange();\n\n const handleStorageChange = (e: StorageEvent) => {\n if (e.key === CURRENCY_STORAGE_KEY && e.newValue) {\n checkCurrencyChange();\n }\n };\n\n window.addEventListener('storage', handleStorageChange);\n const interval = setInterval(checkCurrencyChange, 500);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n clearInterval(interval);\n };\n }, [currentCurrency, onCurrencyChange]);\n\n // Functions to set language/currency\n const setLanguage = (lang: string) => {\n isUpdatingFromPropRef.current = true;\n i18n.changeLanguage(lang);\n setCurrentLanguageState(lang);\n isUpdatingFromPropRef.current = false;\n };\n\n const setCurrency = (currency: CURRENCY) => {\n isUpdatingCurrencyFromPropRef.current = true;\n setCurrentCurrencyState(currency);\n setLocalStorageItem(CURRENCY_STORAGE_KEY, currency);\n isUpdatingCurrencyFromPropRef.current = false;\n };\n\n // Store network type\n useEffect(() => {\n setLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK, networkType);\n }, [networkType]);\n\n // Context value - minimal configuration\n const contextValue = useMemo<VeChainKitConfig>(\n () => ({\n // No Privy configuration\n privy: undefined,\n privyEcosystemAppIDS: [],\n // No fee delegation (requires Privy for smart accounts)\n feeDelegation: undefined,\n // No DAppKit configuration\n dappKit: undefined,\n // No login modal UI\n loginModalUI: undefined,\n // No login methods (manual auth only)\n loginMethods: undefined,\n // Theme settings\n darkMode,\n // Always headless in core provider (no Chakra UI)\n headless: true,\n // No i18n config overrides\n i18n: undefined,\n // Network configuration\n network,\n // Current language\n currentLanguage,\n // No custom tokens (requires DAppKit)\n allowCustomTokens: false,\n // No legal documents (requires LegalDocumentsProvider)\n legalDocuments: undefined,\n // Currency settings\n currentCurrency,\n // No custom theme\n theme: undefined,\n // Language/currency setters\n setLanguage,\n setCurrency,\n }),\n [darkMode, network, currentLanguage, currentCurrency],\n );\n\n return (\n <EnsureQueryClient>\n <VeChainKitContext.Provider value={contextValue}>\n <ThorProvider nodeUrl={nodeUrl}>{children}</ThorProvider>\n </VeChainKitContext.Provider>\n </EnsureQueryClient>\n );\n};\n\n/**\n * Re-export useVeChainKitConfig for convenience\n */\nexport { useVeChainKitConfig } from './VeChainKitContext';\n"],"mappings":"kVAEA,MAAa,EAAkB,GAAsB,CAE/B,OAAO,KAAKA,EAAAA,GAAU,CAG9B,QAAS,GAAS,CAEH,EAAa,kBAC9B,EACA,cACH,CAYG,EAAa,kBACT,EACA,cACAA,EAAAA,GAAU,GAAgC,YAC1C,GACA,GACH,EAEP,ECpBN,SAAgB,EACZ,EACA,EACM,CAEN,GAAI,CAAC,EAAM,SAAS,OAAO,EAAI,CAAC,EAAM,SAAS,OAAO,CAClD,OAAO,EAIX,IAAM,EAAY,EAAM,MACpB,oDACH,CACD,GAAI,EAAW,CACX,IAAM,EAAI,SAAS,EAAU,GAAI,GAAG,CAC9B,EAAI,SAAS,EAAU,GAAI,GAAG,CAC9B,EAAI,SAAS,EAAU,GAAI,GAAG,CAC9B,EAAQ,EAAU,GAAK,WAAW,EAAU,GAAG,CAAG,EAGxD,GAAI,GAAS,GACT,OAAO,EAKX,IAAM,EAAW,EAAW,GAAM,IAElC,MAAO,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IADT,KAAK,IAAI,KAAK,IAAI,EAAQ,IAAM,EAAS,CAAE,IAAK,CACvB,GAIjD,OAAO,EAMX,SAAgB,EACZ,EACA,EACe,CACf,IAAMC,EAAwB,CAC1B,sBAAuB,QACvB,oBAAqB,QACrB,8BAA+B,EAAO,QAAQ,eAAe,MAC7D,gCAAiC,aAAa,EAAO,OAAO,OAAO,UACnE,iCAAkC,aAAa,EAAO,OAAO,OAAO,UACpE,oBAAqB,EAAO,MAAM,KAClC,yBAA0B,EAAO,MAAM,MAAM,OAC7C,wBAAyB,EAAO,MAAM,MAAM,MAC5C,2BAA4B,EAAO,MAAM,QAAQ,OAAO,UAAU,CACrE,CA2BD,OAtBI,GACA,EAAK,4BAA8B,cAGnC,EAAK,kCAAoC,4BACzC,EAAK,mCAAqC,2BAE1C,EAAK,8BAAgC,EAAO,OAAO,WAAW,MAE9D,EAAK,6BAA+B,EAAO,OAAO,KAAK,UAEvD,EAAK,6BAA+B,UAGpC,EAAK,mCAAqC,2BAC1C,EAAK,oCAAsC,2BAE3C,EAAK,+BAAiC,EAAO,OAAO,WAAW,MAE/D,EAAK,8BAAgC,EAAO,OAAO,KAAK,SAGrD,EAWX,SAAgB,EACZ,EACA,EACsB,CAEtB,IAAM,EAAe,EACjB,EAAO,OAAO,WAAW,MACzB,EACH,CAIK,EAAoB,EAAW,cAAgB,UAC/C,EAAqB,EAAW,cAAgB,UAChD,EAAsB,EAAW,cAAgB,UA4BvD,MA1B0C,CACtC,2BAA4B,EAAO,QAAQ,OAAO,MAClD,2BAA4B,EAAO,QAAQ,OAAO,OAClD,2BAA4B,EAAO,QAAQ,OAAO,MAClD,6BAA8B,EAAO,QAAQ,OAAO,KACpD,2BAA4B,EAG5B,6BAA8B,EAC9B,6BAA8B,EAC9B,2BAA4B,EAAO,OAAO,KAAK,QAC/C,6BAA8B,EAAO,OAAO,KAAK,QACjD,6BAA8B,EAAO,OAAO,KAAK,UACjD,6BAA8B,EAAO,OAAO,KAAK,SAEjD,kCAAmC,EAAW,UAAY,UAC1D,uBAAwB,EACxB,6BAA8B,EAC9B,gCAAiC,EACjC,4BAA6B,EAC7B,+BAAgC,EAChC,wBAAyB,EAAO,OAAO,QACvC,sBAAuB,EAAO,OAAO,MACrC,4BAA6B,EAAO,OAAO,MAAQ,KACtD,CAQL,SAAgB,GAAiC,CAC7C,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,EAAU,oCACZ,EAAe,SAAS,eAAe,EAAQ,CA4FnD,GA1FK,IACD,EAAe,SAAS,cAAc,QAAQ,CAC9C,EAAa,GAAK,EAClB,SAAS,KAAK,YAAY,EAAa,EAoF3C,EAAa,YA9EI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiFb,OAAO,iBAAqB,IAAa,CACzC,IAAM,EAAW,IAAI,qBAAuB,CAExC,IAAM,EAAgB,SAAS,iBAC3B,iDACH,CACD,IAAK,IAAM,KAAW,EACZ,aAAmB,aACzB,EAAQ,MAAM,YAAY,iBAAkB,MAAO,YAAY,CAInE,IAAM,EAAkB,SAAS,iBAC7B,wIACH,CACD,IAAK,IAAM,KAAW,EACZ,aAAmB,cACzB,EAAQ,MAAM,YAAY,UAAW,IAAK,YAAY,CACtD,EAAQ,MAAM,YACV,aACA,oBACA,YACH,GAEP,CAGF,EAAS,QAAQ,SAAS,KAAM,CAC5B,UAAW,GACX,QAAS,GACZ,CAAC,CAGF,eAAiB,CACb,EAAS,YAAY,EACtB,IAAM,EAOjB,SAAgB,EACZ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACI,CACJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,EAAO,SAAS,gBACtB,OAAO,QAAQ,EAAU,CAAC,SAAS,CAAC,EAAK,KAAW,CAChD,EAAK,MAAM,YAAY,EAAK,EAAM,EACpC,CAGF,IAAM,EAAU,2BACZ,EAAe,SAAS,eAAe,EAAQ,CAE9C,IACD,EAAe,SAAS,cAAc,QAAQ,CAC9C,EAAa,GAAK,EAClB,SAAS,KAAK,YAAY,EAAa,EAG3C,IAAMC,EAAqB,EAAE,CA0C7B,GAvCI,GACA,EAAS,KAAK;;;;;mCAKa,EAAe;2CACP,EAAe;;UAEhD,CAKF,GACA,EAAS,KAAK;;;;;;oCAMc,EAAO;;UAEjC,CAGF,GACA,EAAS,KAAK;;;;oCAIc,EAAe;;UAEzC,CAMF,EAAiB,CACjB,IAAM,EAAmB,GAAe,qBACxC,EAAS,KAAK;;;;oCAIc,EAAgB;oCAChB,EAAiB;;UAE3C,CAIF,GACA,EAAS,KAAK;;;;oCAIc,EAAiB;;;UAG3C,CAIF,GACA,EAAS,KAAK;;;;oCAIc,EAAkB;;;UAG5C,CAGF,EAAS,OAAS,IAClB,EAAa,YAAc,EAAS,KAAK;EAAK,ECjYtD,IAAIC,EAA0C,KAG9C,SAAgB,GAAsC,CAiBlD,OAhBK,IACD,EAAsB,IAAIC,EAAAA,YAAY,CAClC,eAAgB,CACZ,QAAS,CACL,eAAgBC,EAAAA,OAChB,MAAO,EACP,UAAW,IACX,qBAAsB,GACtB,eAAgB,GAChB,mBAAoB,GACpB,gBAAiB,GACjB,4BAA6B,GAChC,CACJ,CACJ,CAAC,EAEC,EAQX,MAAa,GAAqB,CAAE,cAAuC,CACvE,GAAI,CAIA,GAF4BC,EAAAA,QAAM,WAAWC,EAAAA,mBAAmB,CAG5D,OAAO,EAAA,EAAA,KAAA,EAAA,SAAA,CAAG,WAAA,CAAY,OAErB,EAAG,CAGR,QAAQ,IAAI,EAAE,CAKlB,OACI,EAAA,EAAA,KAACC,EAAAA,oBAAAA,CAAoB,OAFL,GAAwB,CAGnC,YACiB,ECnCxB,GAAA,EAAA,EAAA,UAAA,QAAA,SAAA,CAAA,SAAA,QACF,8BAAA,CAAA,CAAqC,KAAM,IAAS,CAChD,QAAS,EAAI,aAChB,EAAE,CACN,CAEK,GAAA,EAAA,EAAA,UAAA,QAAA,SAAA,CAAA,SAAA,QACF,8BAAA,CAAA,CAAqC,KAAM,IAAS,CAChD,QAAS,EAAI,aAChB,EAAE,CACN,CAEK,GAAA,EAAA,EAAA,UAAA,QAAA,SAAA,CAAA,SAAA,QACF,0CAAA,CAAA,CAAiD,KAAM,IAAS,CAC5D,QAAS,EAAI,yBAChB,EAAE,CACN,CAEY,GAAiB,CAAE,cAAwC,CACpE,GAAM,CAAE,WAAU,SAAUC,EAAAA,GAAqB,CAC3C,CAAC,EAAoB,IAAA,EAAA,EAAA,UAAkC,GAAM,CAC7D,CAAC,EAAqB,IAAA,EAAA,EAAA,UACY,OAAO,CACzC,CAAC,EAA8B,IAAA,EAAA,EAAA,UACxB,GAAM,CACb,CAAE,YAAW,aAAcC,EAAAA,GAA0B,CACrD,GAAA,EAAA,EAAA,cAEE,EACA,IACC,CAGGC,EAAAA,GAAW,EACX,OAAO,SACP,OAAO,QAAQ,gBAEf,EAAU,UAAU,CACpB,EAAU,KAAK,GAGf,EAAuB,GAAkB,OAAO,CAChD,EAAgC,GAAoB,GAAM,CAC1D,EAAsB,GAAK,GAGnC,EAAE,CACL,CACK,GAAA,EAAA,EAAA,iBAAsC,CACxC,EAAsB,GAAM,CAE5B,EAAuB,OAAO,CAC9B,EAAgC,GAAM,EACvC,EAAE,CAAC,CAEA,CAAC,EAAoB,IAAA,EAAA,EAAA,UAAkC,GAAM,CAC7D,CAAC,EAAc,IAAA,EAAA,EAAA,UAA4B,GAAM,CACjD,CAAC,EAAqB,IAAA,EAAA,EAAA,UACW,OAAO,CAExC,GAAA,EAAA,EAAA,cACD,EAAoC,IAAkC,CACnE,EAAuB,GAAW,OAAO,CACzC,EAAgB,GAAS,cAAgB,GAAM,CAC/C,EAAsB,GAAK,EAE/B,EAAE,CACL,CACK,GAAA,EAAA,EAAA,iBAAsC,CACxC,EAAsB,GAAM,CAE5B,EAAuB,OAAO,CAE9B,eAAiB,CACb,EAAgB,GAAM,EACvB,IAAI,EACR,EAAE,CAAC,CAEA,CAAC,EAAwB,IAAA,EAAA,EAAA,UAAsC,GAAM,CACrE,GAAA,EAAA,EAAA,iBACI,EAA0B,GAAK,CACrC,EAAE,CACL,CACK,GAAA,EAAA,EAAA,iBACI,EAA0B,GAAM,CACtC,EAAE,CACL,CAEK,CAAC,GAAwB,IAAA,EAAA,EAAA,UAAsC,GAAM,CACrE,GAAA,EAAA,EAAA,iBACI,EAA0B,GAAK,CACrC,EAAE,CACL,CACK,GAAA,EAAA,EAAA,iBACI,EAA0B,GAAM,CACtC,EAAE,CACL,CAEK,CAAC,EAAgC,IAAA,EAAA,EAAA,UAC1B,GAAM,CACb,CAAC,EAA+B,IAAA,EAAA,EAAA,UACkB,IAAA,GAAU,CAC5D,GAAA,EAAA,EAAA,aACD,GAA0C,CACvC,EAAiC,EAAM,CACvC,EAAkC,GAAK,EAE3C,EAAE,CACL,CACK,GAAA,EAAA,EAAA,iBACI,EAAkC,GAAM,CAC9C,EAAE,CACL,CAED,OACI,EAAA,EAAA,MAACC,EAAAA,EAAa,SAAA,CACV,MAAO,CACH,mBACA,oBACA,qBACA,sBACA,yBACA,+BACA,kCACA,mBACA,oBACA,qBACA,yBACA,sBACA,eACA,uBACA,wBACA,yBACA,uBACA,wBACA,0BACA,+BACA,gCACA,iCACH,WAEA,GACD,EAAA,EAAA,MAACC,EAAAA,EAAAA,CAAkC,WAAiB,kBAE/C,IACG,EAAA,EAAA,KAACC,EAAAA,SAAAA,CAAS,SAAU,eAChB,EAAA,EAAA,KAAC,EAAA,CACG,OAAQ,EACR,QAAS,EACT,eAAgB,EAChB,iBAAkB,GACpB,EACK,CAEd,IACG,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,SAAU,eAChB,EAAA,EAAA,KAAC,EAAA,CACG,OAAQ,EACR,QAAS,EACT,eAAgB,GAClB,EACK,CAEd,IACG,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,SAAU,eAChB,EAAA,EAAA,KAAC,EAAA,CACG,OAAQ,EACR,QAAS,EACT,MAAO,GACT,EACK,GAEO,CAAA,EACN,ECzI1B,GAAA,EAAA,EAAA,UAAA,QAAA,SAAA,CAAA,SAAA,QACF,uCAAA,CAAA,CAAkC,KAAM,IAAS,CAC7C,QAAS,EAAI,sBAChB,EAAE,CACN,CAGK,EACF,QAAQ,IAAI,WAAa,eAAA,EAAA,EAAA,UAEf,OAAO,kCAAkC,KAAM,IAAS,CACpD,QAAS,EAAI,mBAChB,EAAE,CACN,KACK,KAGV,GAAA,EAAA,EAAA,UACF,OAAO,wBAAwB,KAAM,IAAS,CAC1C,QAAS,EAAI,cAChB,EAAE,CACN,CAGK,GAAA,EAAA,EAAA,UACF,OAAO,2BAA2B,KAAM,IAAS,CAC7C,QAAS,EAAI,gBAChB,EAAE,CACN,CAMK,EACF,GACC,CACD,IAAMC,EAAmB,EAAE,CAErB,EAAiB,CAAE,GAAG,EAAO,CAgCnC,IAxBI,EAAe,QAAU,IAAA,IACzB,EAAe,cAAc,KACxB,GACG,EAAO,SAAW,WAAa,EAAO,SAAW,YACxD,IAII,EAAe,cAMZ,CAAC,EAAe,cAAc,cAC9B,CAAC,EAAe,cAAc,sBAE9B,EAAe,cAAc,oBACzBC,EAAAA,IAAwB,EAThC,EAAe,cAAgB,CAC3B,oBAAqBA,EAAAA,IAAwB,CAChD,EAaL,CAAC,EAAe,SAAW,CAAC,EAAe,QAAQ,KACnD,EAAe,QAAU,CACrB,KAAM,OACT,KACE,CACH,IAAM,EAAc,EAAe,QAAQ,KAEtC,CAAC,OAAQ,OAAQ,OAAO,CAAC,SAAS,EAAY,EAE/C,EAAO,KAAK,uDAAuD,CAc3E,GATK,EAAe,eAChB,EAAe,aAAe,CAC1B,CAAE,OAAQ,UAAW,WAAY,EAAG,CACpC,CAAE,OAAQ,YAAa,WAAY,EAAG,CACtC,CAAE,OAAQ,UAAW,WAAY,EAAG,CACvC,EAID,EAAe,cACX,CAAC,EAAe,MAAO,CACvB,IAAM,EAAiB,EAAe,aAAa,OAC9C,GACG,CAAC,QAAS,SAAU,UAAW,OAAO,CAAC,SACnC,EAAO,OACV,CACR,CAEG,EAAe,OAAS,GACxB,EAAO,KACH,iBAAiB,EACZ,IAAK,GAAM,IAAI,EAAE,OAAO,GAAG,CAC3B,KAAK,KAAK,CAAC,+FAEnB,CAmCb,GA9BI,GAAgB,iBACZ,EAAe,eAAe,oBAC9B,EAAe,eAAe,mBAAmB,QAAS,GAAS,CAC1DC,EAAAA,EAAW,EAAK,IAAI,EACrB,EAAO,KACH,qDAAqD,EAAK,MAC7D,EAEP,CAEF,EAAe,eAAe,eAC9B,EAAe,eAAe,cAAc,QAAS,GAAS,CACrDA,EAAAA,EAAW,EAAK,IAAI,EACrB,EAAO,KACH,gDAAgD,EAAK,MACxD,EAEP,CAEF,EAAe,eAAe,cAC9B,EAAe,eAAe,aAAa,QAAS,GAAS,CACpDA,EAAAA,EAAW,EAAK,IAAI,EACrB,EAAO,KACH,+CAA+C,EAAK,MACvD,EAEP,EAIN,EAAO,OAAS,EAChB,MAAU,MACN;EAAsC,EAAO,KAAK;EAAK,CAC1D,CAGL,OAAO,GAMLC,EAAuB,uBAEhB,EACT,GACC,CAGD,GAAM,CACF,WACA,WAAW,GACX,QACA,gBACA,QAAS,EACT,eACA,eACA,WAAW,GACX,KAAM,EACN,WAAW,KACX,QAAS,EACT,oBACA,kBACA,kBAAkB,MAClB,MAAO,EACP,mBACA,oBAlBmB,EAAe,EAAM,CAuBtC,EAAe,GAAU,MAAQ,OAGjC,EAAU,GAAU,SAAWC,EAAAA,GAAU,EAAY,CAAC,QAEtD,EAAU,CACZ,GAAG,EACH,KAAM,EACN,UACH,CAIK,EAAU,EACV,EAAsB,CAAC,CAAC,EAGxB,CAAC,EAAiB,IAAA,EAAA,EAAA,cAChB,OAAO,OAAW,KACHC,EAAAA,EAAoB,aAAa,EAG7C,EACT,CAGI,CAAC,EAAiB,IAAA,EAAA,EAAA,cACd,CACF,GAAI,CAEA,OADeA,EAAAA,EAAoBF,EAAqB,EACzB,OAC3B,CACJ,OAAO,IAGlB,CAGK,GAAA,EAAA,EAAA,QAA+B,GAAM,CACrC,GAAA,EAAA,EAAA,QAAuC,GAAM,CAG7C,EAAwB,EAExB,IAAA,EAAA,EAAA,aAC2B,GAAuB,KAC/C,GAAW,EAAO,SAAW,YACjC,EAEyB,aACtBG,EAAAA,EAA6B,IAAK,GAAQ,EAAI,GAAG,CAEtD,CAAC,EAAsB,CAAC,CAGrB,GAAoB,CAAC,CAAC,EAItB,IAAA,EAAA,EAAA,aACK,GAAuB,KACzB,GAAW,EAAO,SAAW,aAAe,EAAO,SAAW,UAClE,EAAI,GACN,CAAC,EAAsB,CAAC,EAG3B,EAAA,EAAA,eAAgB,CAEZ,EAAeC,EAAAA,GAAK,CAEhB,GAEA,OAAO,KAAK,EAAW,CAAC,QAAS,GAAS,CACtC,EAAA,GAAK,kBACD,EACA,cACA,EAAW,GACX,GACA,GACH,EACH,CASN,IAAM,GAHF,OAAO,OAAW,IACZF,EAAAA,EAAoB,aAAa,CACjC,OACgC,EAEtC,GAAmBE,EAAAA,GAAK,WAAa,IACrC,EAAsB,QAAU,GAChC,EAAA,GAAK,eAAe,EAAgB,CAChC,IAAoB,GACpB,EAAwB,EAAgB,CAE5C,EAAsB,QAAU,KAErC,EAAE,CAAC,EAGN,EAAA,EAAA,eAAgB,CAEZ,IAAM,EACF,OAAO,OAAW,IACZF,EAAAA,EAAoB,aAAa,CACjC,KAGN,GAAY,CAAC,GAAkB,IAAa,IAC5C,EAAsB,QAAU,GAChC,EAAA,GAAK,eAAe,EAAS,CAC7B,EAAwB,EAAS,CACjC,EAAsB,QAAU,KAErC,CAAC,EAAU,EAAgB,CAAC,EAG/B,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAyB,GAAgB,CACvC,CAAC,EAAsB,SAAW,IAAQ,IAC1C,EAAwB,EAAI,CAC5B,IAAmB,EAAI,GAM/B,OAFA,EAAA,GAAK,GAAG,kBAAmB,EAAsB,KAEpC,CACT,EAAA,GAAK,IAAI,kBAAmB,EAAsB,GAEvD,CAAC,EAAiB,EAAiB,CAAC,EAGvC,EAAA,EAAA,eAAgB,CACZ,IAAM,EAASA,EAAAA,EAAoBF,EAAqB,CAGpD,GAAmB,CAAC,GAAU,IAAoB,IAClD,EAA8B,QAAU,GACxC,EAAwB,EAAgB,CACxC,EAAA,EAAoBA,EAAsB,EAAgB,CAC1D,EAA8B,QAAU,KAE7C,CAAC,EAAiB,EAAgB,CAAC,EAGtC,EAAA,EAAA,eAAgB,CACZ,IAAM,MAA4B,CAC9B,GAAI,CACA,IAAM,EAASE,EAAAA,EAAoBF,EAAqB,CACxD,GACI,GACA,IAAW,GACX,CAAC,EAA8B,QACjC,CACE,IAAM,EAAc,EACpB,EAAwB,EAAY,CACpC,IAAmB,EAAY,OAE/B,IAMZ,GAAqB,CAGrB,IAAM,EAAuB,GAAoB,CACzC,EAAE,MAAQA,GAAwB,EAAE,UACpC,GAAqB,EAI7B,OAAO,iBAAiB,UAAW,EAAoB,CAGvD,IAAM,EAAW,YAAY,EAAqB,IAAI,CAEtD,UAAa,CACT,OAAO,oBAAoB,UAAW,EAAoB,CAC1D,cAAc,EAAS,GAE5B,CAAC,EAAiB,EAAiB,CAAC,CAGvC,IAAM,GAAe,GAAiB,CAClC,EAAsB,QAAU,GAChC,EAAA,GAAK,eAAe,EAAK,CACzB,EAAwB,EAAK,CAC7B,EAAsB,QAAU,IAG9B,GAAe,GAAuB,CACxC,EAA8B,QAAU,GACxC,EAAwB,EAAS,CACjC,EAAA,EAAoBA,EAAsB,EAAS,CACnD,EAA8B,QAAU,KAG5C,EAAA,EAAA,eAAgB,CACZ,EAAA,EAAoBK,EAAAA,GAAyB,QAAS,EAAY,EACnE,CAAC,EAAY,CAAC,CAGjB,IAAM,GAAA,EAAA,EAAA,aAGKC,EAAAA,EAFeC,EAAAA,EAAiB,EAAS,CAC3BC,EAAAA,EAA2B,EAAa,EAAS,CACvB,CAChD,CAAC,EAAa,EAAS,CAAC,CAGrB,GAAA,EAAA,EAAA,aACI,EAA4B,EAAQ,EAAS,CACnD,CAAC,EAAQ,EAAS,CACrB,CAEK,IAAA,EAAA,EAAA,aACI,EAA0B,EAAQ,EAAS,CACjD,CAAC,EAAQ,EAAS,CACrB,EAGD,EAAA,EAAA,eAAgB,CAEZ,IAAM,EAAc,EAChB,EAAO,OAAO,WAAW,KACzB,EACH,CACK,EAAsB,EACxB,EAAO,OAAO,WAAW,aACzB,EACH,CAEK,EAAoB,EAAW,cAAgB,UAC/C,EAAqB,EAAW,cAAgB,UAChD,EAAsB,EAAW,cAAgB,UAEvD,EACI,GACA,EAAO,QAAQ,eAAe,MAC9B,EACA,EACA,EACA,EACA,EACA,EAAO,OAAO,OAAO,QACxB,EACF,CACC,GACA,EAAO,QAAQ,eAAe,MAC9B,EAAO,OAAO,WAAW,KACzB,EAAO,OAAO,WAAW,aACzB,EAAO,OAAO,OAAO,QACrB,EACH,CAAC,EAGF,EAAA,EAAA,eAAgB,CACR,GACA,GAA0B,EAE/B,CAAC,EAAoB,CAAC,CAIzB,IAAM,EAAc,IAChB,EAAA,EAAA,KAACC,EAAAA,EAAAA,CACG,QAAS,EAAQ,QACjB,aACI,GAAe,cACf,GAAe,oBAEnB,wBACI,GAAe,yBAA2B,GAE9C,iBACI,IAAC,GAAe,cAChB,GAAe,8BAKlB,GACG,EAAA,EAAA,KAACC,EAAAA,EAAAA,CAAwB,WAAA,CAAkC,EAE3D,EAAA,EAAA,KAAC,EAAA,CAAA,UACG,EAAA,EAAA,KAACA,EAAAA,EAAAA,CAAwB,WAAA,CAAkC,CAAA,CAC/C,EAEF,CACtB,GACA,EAAA,EAAA,KAACA,EAAAA,EAAAA,CAAwB,WAAA,CAAkC,EAE3D,EAAA,EAAA,KAAC,EAAA,CAAA,UACG,EAAA,EAAA,KAACA,EAAAA,EAAAA,CAAwB,WAAA,CAAkC,CAAA,CAC/C,CAId,EAAe,GACjB,EAAA,EAAA,KAACC,EAAAA,SAAAA,CAAS,UAAU,EAAA,EAAA,KAACC,EAAAA,EAAAA,CAAa,QAAS,EAAQ,iBAAU,GAA2B,WACpF,EAAA,EAAA,KAAC,EAAA,CACG,KAAM,EAAQ,QACd,kBAAmB,GACnB,MAAO,CACH,QAAS,GAAS,OAAO,SAAW,GACpC,SAAU,GAAS,OAAO,UAAY,GACzC,CACD,SAAU,EACV,SAAU,GAAS,SACnB,YAAa,GAAS,YACtB,cAAe,GAAS,cACxB,eAAgB,GAAS,gBAAkB,GAC3C,eAAgB,GAAS,eACzB,qBAAsB,GAAS,qBAC/B,UAAW,EAAW,OAAS,QAC/B,eACI,GAAS,eACH,CACI,GAAG,EACH,GAAG,EAAQ,eACd,CACD,WAGT,GACiB,EACf,EAGX,EAAA,EAAA,KAACA,EAAAA,EAAAA,CAAa,QAAS,EAAQ,iBAAU,GAA2B,CAIlE,GAAsB,IACxB,EAAA,EAAA,KAACD,EAAAA,SAAAA,CAAS,SAAU,YAChB,EAAA,EAAA,KAAC,EAAA,CACG,MAAO,EAAM,MACb,SAAU,EAAM,SAChB,OAAQ,CACJ,qBAAsB,CAClB,QAAU,EAAM,aAAa,MAAM,EAAG,EAAE,EACpC,EAAE,CACN,SAAW,EAAM,aAAa,MAAM,EAAE,EAClC,EAAE,CACT,CACD,gBAAiB,CACb,cAAe,CACX,QAAS,GACZ,CACJ,CACD,WAAY,CACR,MAAO,EAAW,OAAS,QAC3B,YACI,EAAM,WAAW,cAChB,EAAO,QAAQ,cAAc,IAAI,WAAW,IAAI,CAC1C,EAAO,QAAQ,cACX,GACL,EACA,UACA,WACV,aAAc,EAAM,WAAW,aAC/B,KAAM,EAAM,WAAW,KAC1B,CACD,gBAAiB,CACb,cACI,EAAM,iBAAiB,eAAiB,YAC/C,CACD,SAAU,CACN,0BAA2B,GAC9B,CACJ,UAEA,GACe,EACb,CAEX,EAIE,GAAe,CACjB,QACA,qBAAsB,GACtB,gBACA,UACA,eACA,aAAc,EACd,WACA,WACA,KAAM,EACN,kBACA,UACA,oBACA,kBACA,kBACA,MAAO,EACP,eACA,eACH,CAGK,GACF,EAAA,EAAA,KAACE,EAAAA,EAAkB,SAAA,CAAS,MAAO,YAC9B,IACwB,CAK3B,GAA0B,IAC5B,EAAA,EAAA,KAACF,EAAAA,SAAAA,CAAS,SAAU,YAChB,EAAA,EAAA,KAAC,EAAA,CAA0B,qBAAsB,YAC5C,GACuB,EACrB,CAEX,EAGJ,OACI,EAAA,EAAA,MAAC,EAAA,CAAA,SAAA,CACI,QAAQ,IAAI,WAAa,gBACtB,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,SAAU,eAChB,EAAA,EAAA,KAAC,EAAA,CAAmB,cAAe,GAAA,CAAS,EACrC,CAEd,GAAA,CAAA,CACe,ECnkBtB,EAAuB,uBAKvB,EAAmB,GAAqD,CAC1E,GAAI,CAAC,GAAW,CAAC,EAAQ,KACrB,MAAO,CAAE,KAAM,OAAwB,CAG3C,IAAM,EAAc,EAAQ,KAC5B,GAAI,CAAC,CAAC,OAAQ,OAAQ,OAAO,CAAC,SAAS,EAAY,CAC/C,MAAU,MACN,iFAAiF,EAAY,GAChG,CAGL,MAAO,CAAE,GAAG,EAAS,KAAM,EAA6B,EAsB/C,GAA0B,CACnC,WACA,QAAS,EACT,WAAW,KACX,WAAW,GACX,kBAAkB,MAClB,mBACA,sBAC+B,CAE/B,IAAM,EAAmB,EAAgB,EAAS,CAC5C,EAAc,EAAiB,KAG/B,EAAU,GAAU,SAAWG,EAAAA,GAAU,EAAY,CAAC,QAEtD,EAAU,CACZ,GAAG,EACH,UACH,CAGK,CAAC,EAAiB,IAAA,EAAA,EAAA,cAChB,OAAO,OAAW,KACHC,EAAAA,EAAoB,aAAa,EAG7C,EACT,CAGI,CAAC,EAAiB,IAAA,EAAA,EAAA,cACd,CACF,GAAI,CAEA,OADeA,EAAAA,EAAoB,EAAqB,EACzB,OAC3B,CACJ,OAAO,IAGlB,CAGK,GAAA,EAAA,EAAA,QAA+B,GAAM,CACrC,GAAA,EAAA,EAAA,QAAuC,GAAM,EAGnD,EAAA,EAAA,eAAgB,CACZ,EAAeC,EAAAA,GAAK,CAMpB,IAAM,GAHF,OAAO,OAAW,IACZD,EAAAA,EAAoB,aAAa,CACjC,OACgC,EAEtC,GAAmBC,EAAAA,GAAK,WAAa,IACrC,EAAsB,QAAU,GAChC,EAAA,GAAK,eAAe,EAAgB,CAChC,IAAoB,GACpB,EAAwB,EAAgB,CAE5C,EAAsB,QAAU,KAErC,EAAE,CAAC,EAGN,EAAA,EAAA,eAAgB,CACZ,IAAM,EACF,OAAO,OAAW,IACZD,EAAAA,EAAoB,aAAa,CACjC,KAEN,GAAY,CAAC,GAAkB,IAAa,IAC5C,EAAsB,QAAU,GAChC,EAAA,GAAK,eAAe,EAAS,CAC7B,EAAwB,EAAS,CACjC,EAAsB,QAAU,KAErC,CAAC,EAAU,EAAgB,CAAC,EAG/B,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAyB,GAAgB,CACvC,CAAC,EAAsB,SAAW,IAAQ,IAC1C,EAAwB,EAAI,CAC5B,IAAmB,EAAI,GAM/B,OAFA,EAAA,GAAK,GAAG,kBAAmB,EAAsB,KAEpC,CACT,EAAA,GAAK,IAAI,kBAAmB,EAAsB,GAEvD,CAAC,EAAiB,EAAiB,CAAC,EAGvC,EAAA,EAAA,eAAgB,CACZ,IAAM,EAASA,EAAAA,EAAoB,EAAqB,CAEpD,GAAmB,CAAC,GAAU,IAAoB,IAClD,EAA8B,QAAU,GACxC,EAAwB,EAAgB,CACxC,EAAA,EAAoB,EAAsB,EAAgB,CAC1D,EAA8B,QAAU,KAE7C,CAAC,EAAiB,EAAgB,CAAC,EAGtC,EAAA,EAAA,eAAgB,CACZ,IAAM,MAA4B,CAC9B,GAAI,CACA,IAAM,EAASA,EAAAA,EAAoB,EAAqB,CACxD,GACI,GACA,IAAW,GACX,CAAC,EAA8B,QACjC,CACE,IAAM,EAAc,EACpB,EAAwB,EAAY,CACpC,IAAmB,EAAY,OAE/B,IAKZ,GAAqB,CAErB,IAAM,EAAuB,GAAoB,CACzC,EAAE,MAAQ,GAAwB,EAAE,UACpC,GAAqB,EAI7B,OAAO,iBAAiB,UAAW,EAAoB,CACvD,IAAM,EAAW,YAAY,EAAqB,IAAI,CAEtD,UAAa,CACT,OAAO,oBAAoB,UAAW,EAAoB,CAC1D,cAAc,EAAS,GAE5B,CAAC,EAAiB,EAAiB,CAAC,CAGvC,IAAM,EAAe,GAAiB,CAClC,EAAsB,QAAU,GAChC,EAAA,GAAK,eAAe,EAAK,CACzB,EAAwB,EAAK,CAC7B,EAAsB,QAAU,IAG9B,EAAe,GAAuB,CACxC,EAA8B,QAAU,GACxC,EAAwB,EAAS,CACjC,EAAA,EAAoB,EAAsB,EAAS,CACnD,EAA8B,QAAU,KAI5C,EAAA,EAAA,eAAgB,CACZ,EAAA,EAAoBE,EAAAA,GAAyB,QAAS,EAAY,EACnE,CAAC,EAAY,CAAC,CAGjB,IAAM,GAAA,EAAA,EAAA,cACK,CAEH,MAAO,IAAA,GACP,qBAAsB,EAAE,CAExB,cAAe,IAAA,GAEf,QAAS,IAAA,GAET,aAAc,IAAA,GAEd,aAAc,IAAA,GAEd,WAEA,SAAU,GAEV,KAAM,IAAA,GAEN,UAEA,kBAEA,kBAAmB,GAEnB,eAAgB,IAAA,GAEhB,kBAEA,MAAO,IAAA,GAEP,cACA,cACH,EACD,CAAC,EAAU,EAAS,EAAiB,EAAgB,CACxD,CAED,OACI,EAAA,EAAA,KAAC,EAAA,CAAA,UACG,EAAA,EAAA,KAACC,EAAAA,EAAkB,SAAA,CAAS,MAAO,YAC/B,EAAA,EAAA,KAACC,EAAAA,EAAAA,CAAsB,UAAU,YAAwB,EAChC,CAAA,CACb"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import{c as e,l as t,n,o as r,s as i,u as a}from"./VechainKitThemeProvider-Di9a04Es.js";import{Y as o,ct as s,i as c,nt as l,ot as u}from"./utils-B2Eg9TD3.js";import{d,o as f,r as p}from"./ssrUtils-DSwxhTtm.js";import{$ as m,C as h,L as g,at as _,b as v,rt as y,t as b}from"./PrivyWalletProvider-DToo_u0W.js";import x,{Suspense as S,lazy as C,useCallback as w,useEffect as T,useMemo as E,useRef as D,useState as O}from"react";import{Fragment as k,jsx as A,jsxs as j}from"react/jsx-runtime";import{QueryClient as M,QueryClientContext as ee,QueryClientProvider as N}from"@tanstack/react-query";import{hashFn as P}from"wagmi/query";const F=e=>{Object.keys(_).forEach(t=>{e.hasResourceBundle(t,`translation`),e.addResourceBundle(t,`translation`,_[t].translation,!0,!0)})};function I(e,t){if(!e.includes(`rgba`)&&!e.includes(`hsla`))return e;let n=e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(n){let r=parseInt(n[1],10),i=parseInt(n[2],10),a=parseInt(n[3],10),o=n[4]?parseFloat(n[4]):1;if(o>=.9)return e;let s=t?.9:.91;return`rgba(${r}, ${i}, ${a}, ${Math.min(Math.max(o+.15,s),.91)})`}return e}function te(e,t){let n={"--vdk-modal-z-index":`10000`,"--vdk-modal-width":`22rem`,"--vdk-modal-backdrop-filter":e.effects.backdropFilter.modal,"--vdk-border-dark-source-card":`1px solid ${e.colors.border.default}`,"--vdk-border-light-source-card":`1px solid ${e.colors.border.default}`,"--vdk-font-family":e.fonts.body,"--vdk-font-size-medium":e.fonts.sizes.medium,"--vdk-font-size-large":e.fonts.sizes.large,"--vdk-font-weight-medium":e.fonts.weights.medium.toString()};return t?(n[`--vdk-color-dark-primary`]=`transparent`,n[`--vdk-color-dark-primary-hover`]=`rgba(255, 255, 255, 0.05)`,n[`--vdk-color-dark-primary-active`]=`rgba(255, 255, 255, 0.1)`,n[`--vdk-color-dark-secondary`]=e.colors.background.modal,n[`--vdk-color-dark-tertiary`]=e.colors.text.primary):(n[`--vdk-color-light-primary`]=`#ffffff`,n[`--vdk-color-light-primary-hover`]=`rgba(245, 245, 245, 0.8)`,n[`--vdk-color-light-primary-active`]=`rgba(240, 240, 240, 0.8)`,n[`--vdk-color-light-secondary`]=e.colors.background.modal,n[`--vdk-color-light-tertiary`]=e.colors.text.primary),n}function L(e,t){let n=I(e.colors.background.modal,t),r=t?`transparent`:`#ffffff`,i=t?`transparent`:`#ffffff`,a=t?`transparent`:`#ffffff`;return{"--privy-border-radius-sm":e.borders.radius.small,"--privy-border-radius-md":e.borders.radius.medium,"--privy-border-radius-lg":e.borders.radius.large,"--privy-border-radius-full":e.borders.radius.full,"--privy-color-background":n,"--privy-color-background-2":i,"--privy-color-background-3":a,"--privy-color-foreground":e.colors.text.primary,"--privy-color-foreground-2":e.colors.text.primary,"--privy-color-foreground-3":e.colors.text.secondary,"--privy-color-foreground-4":e.colors.text.tertiary,"--privy-color-foreground-accent":t?`#ffffff`:`#1a1a1a`,"--privy-color-accent":r,"--privy-color-accent-light":i,"--privy-color-accent-lightest":a,"--privy-color-accent-dark":i,"--privy-color-accent-darkest":a,"--privy-color-success":e.colors.success,"--privy-color-error":e.colors.error,"--privy-color-error-light":e.colors.error+`33`}}function ne(){if(typeof document>`u`)return;let e=`vechain-kit-dappkit-button-styles`,t=document.getElementById(e);if(t||(t=document.createElement(`style`),t.id=e,document.head.appendChild(t)),t.textContent=`
|
|
2
|
+
/* CRITICAL: Ensure dappkit modal always has pointer-events enabled */
|
|
3
|
+
/* This fixes an issue where the modal becomes unclickable when opened on top of bottom sheet */
|
|
4
|
+
vdk-modal,
|
|
5
|
+
[data-vdk-modal],
|
|
6
|
+
[id*="vdk-modal"] {
|
|
7
|
+
pointer-events: all !important;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* DAppKit wallet source buttons - apply loginIn hover style */
|
|
11
|
+
/* Target all button-like elements within DAppKit containers */
|
|
12
|
+
[class*="vdk"] button,
|
|
13
|
+
[class*="vdk"] [role="button"],
|
|
14
|
+
[class*="vdk"] [tabindex],
|
|
15
|
+
[id*="vdk"] button,
|
|
16
|
+
[id*="vdk"] [role="button"],
|
|
17
|
+
[id*="vdk"] [tabindex],
|
|
18
|
+
[data-vdk-modal] button,
|
|
19
|
+
[data-vdk-modal] [role="button"],
|
|
20
|
+
[data-vdk-modal] [tabindex],
|
|
21
|
+
[data-vdk-source-card],
|
|
22
|
+
[class*="vdk-source-card"],
|
|
23
|
+
[class*="source-card"],
|
|
24
|
+
button[class*="vdk"],
|
|
25
|
+
[data-vdk-button],
|
|
26
|
+
[class*="vdk-button"],
|
|
27
|
+
/* Target elements that are likely buttons based on styling */
|
|
28
|
+
[class*="vdk"] [style*="cursor"][style*="pointer"],
|
|
29
|
+
[id*="vdk"] [style*="cursor"][style*="pointer"],
|
|
30
|
+
[data-vdk-modal] [style*="cursor"][style*="pointer"] {
|
|
31
|
+
transition: opacity 0.2s ease !important;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Hover states */
|
|
35
|
+
[class*="vdk"] button:hover,
|
|
36
|
+
[class*="vdk"] [role="button"]:hover,
|
|
37
|
+
[class*="vdk"] [tabindex]:hover,
|
|
38
|
+
[id*="vdk"] button:hover,
|
|
39
|
+
[id*="vdk"] [role="button"]:hover,
|
|
40
|
+
[id*="vdk"] [tabindex]:hover,
|
|
41
|
+
[data-vdk-modal] button:hover,
|
|
42
|
+
[data-vdk-modal] [role="button"]:hover,
|
|
43
|
+
[data-vdk-modal] [tabindex]:hover,
|
|
44
|
+
[data-vdk-source-card]:hover,
|
|
45
|
+
[class*="vdk-source-card"]:hover,
|
|
46
|
+
[class*="source-card"]:hover,
|
|
47
|
+
button[class*="vdk"]:hover,
|
|
48
|
+
[data-vdk-button]:hover,
|
|
49
|
+
[class*="vdk-button"]:hover,
|
|
50
|
+
[class*="vdk"] [style*="cursor"][style*="pointer"]:hover,
|
|
51
|
+
[id*="vdk"] [style*="cursor"][style*="pointer"]:hover,
|
|
52
|
+
[data-vdk-modal] [style*="cursor"][style*="pointer"]:hover {
|
|
53
|
+
opacity: 0.5 !important;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Active states */
|
|
57
|
+
[class*="vdk"] button:active,
|
|
58
|
+
[class*="vdk"] [role="button"]:active,
|
|
59
|
+
[class*="vdk"] [tabindex]:active,
|
|
60
|
+
[id*="vdk"] button:active,
|
|
61
|
+
[id*="vdk"] [role="button"]:active,
|
|
62
|
+
[id*="vdk"] [tabindex]:active,
|
|
63
|
+
[data-vdk-modal] button:active,
|
|
64
|
+
[data-vdk-modal] [role="button"]:active,
|
|
65
|
+
[data-vdk-modal] [tabindex]:active,
|
|
66
|
+
[data-vdk-source-card]:active,
|
|
67
|
+
[class*="vdk-source-card"]:active,
|
|
68
|
+
[class*="source-card"]:active,
|
|
69
|
+
button[class*="vdk"]:active,
|
|
70
|
+
[data-vdk-button]:active,
|
|
71
|
+
[class*="vdk-button"]:active,
|
|
72
|
+
[class*="vdk"] [style*="cursor"][style*="pointer"]:active,
|
|
73
|
+
[id*="vdk"] [style*="cursor"][style*="pointer"]:active,
|
|
74
|
+
[data-vdk-modal] [style*="cursor"][style*="pointer"]:active {
|
|
75
|
+
opacity: 0.5 !important;
|
|
76
|
+
}
|
|
77
|
+
`,typeof MutationObserver<`u`){let e=new MutationObserver(()=>{let e=document.querySelectorAll(`vdk-modal, [data-vdk-modal], [id*="vdk-modal"]`);for(let t of e)t instanceof HTMLElement&&t.style.setProperty(`pointer-events`,`all`,`important`);let t=document.querySelectorAll(`[data-vdk-source-card], [class*="vdk-source-card"], [class*="source-card"], [data-vdk-modal] button, [data-vdk-modal] [role="button"]`);for(let e of t)e instanceof HTMLElement&&(e.style.setProperty(`opacity`,`1`,`important`),e.style.setProperty(`transition`,`opacity 0.2s ease`,`important`))});e.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{e.disconnect()},6e4)}}function re(e,t,n,r,i,a,o,s){if(typeof document>`u`)return;let c=document.documentElement;Object.entries(e).forEach(([e,t])=>{c.style.setProperty(e,t)});let l=`vechain-kit-privy-styles`,u=document.getElementById(l);u||(u=document.createElement(`style`),u.id=l,document.head.appendChild(u));let d=[];if(t&&d.push(`
|
|
78
|
+
[data-privy-dialog-overlay],
|
|
79
|
+
[data-privy-dialog-content],
|
|
80
|
+
.privy-dialog-overlay,
|
|
81
|
+
.privy-dialog-content {
|
|
82
|
+
backdrop-filter: ${t} !important;
|
|
83
|
+
-webkit-backdrop-filter: ${t} !important;
|
|
84
|
+
}
|
|
85
|
+
`),n&&d.push(`
|
|
86
|
+
[data-privy-card],
|
|
87
|
+
.privy-card,
|
|
88
|
+
[class*="privy-card"],
|
|
89
|
+
[class*="privy-connect-wallet-card"],
|
|
90
|
+
[class*="privy-account-card"] {
|
|
91
|
+
background-color: ${n} !important;
|
|
92
|
+
}
|
|
93
|
+
`),r&&d.push(`
|
|
94
|
+
[data-privy-card][data-elevated],
|
|
95
|
+
.privy-card-elevated,
|
|
96
|
+
[class*="privy-card"][class*="elevated"] {
|
|
97
|
+
background-color: ${r} !important;
|
|
98
|
+
}
|
|
99
|
+
`),i){let e=s||`rgba(0, 0, 0, 0.1)`;d.push(`
|
|
100
|
+
#headlessui-portal-root .login-method-button,
|
|
101
|
+
#headlessui-portal-root [class*="login-method-button"],
|
|
102
|
+
.login-method-button {
|
|
103
|
+
background-color: ${i} !important;
|
|
104
|
+
border: 1px solid ${e} !important;
|
|
105
|
+
}
|
|
106
|
+
`)}a&&d.push(`
|
|
107
|
+
#headlessui-portal-root .login-method-button:hover,
|
|
108
|
+
#headlessui-portal-root [class*="login-method-button"]:hover,
|
|
109
|
+
.login-method-button:hover {
|
|
110
|
+
background-color: ${a} !important;
|
|
111
|
+
opacity: 0.5 !important;
|
|
112
|
+
}
|
|
113
|
+
`),o&&d.push(`
|
|
114
|
+
#headlessui-portal-root .login-method-button:active,
|
|
115
|
+
#headlessui-portal-root [class*="login-method-button"]:active,
|
|
116
|
+
.login-method-button:active {
|
|
117
|
+
background-color: ${o} !important;
|
|
118
|
+
opacity: 0.5 !important;
|
|
119
|
+
}
|
|
120
|
+
`),d.length>0&&(u.textContent=d.join(`
|
|
121
|
+
`))}let R=null;function z(){return R||(R=new M({defaultOptions:{queries:{queryKeyHashFn:P,retry:0,staleTime:3e4,refetchOnWindowFocus:!0,refetchOnMount:!0,refetchOnReconnect:!0,refetchInterval:!1,refetchIntervalInBackground:!1}}})),R}const B=({children:e})=>{try{if(x.useContext(ee))return A(k,{children:e})}catch(e){console.log(e)}return A(N,{client:z(),children:e})},V=C(()=>import(`./ConnectModal-BXbiUwnz.js`).then(e=>({default:e.ConnectModal}))),ie=C(()=>import(`./AccountModal-CK-qcPlQ.js`).then(e=>({default:e.AccountModal}))),H=C(()=>import(`./UpgradeSmartAccountModal-CpZo27Uk.js`).then(e=>({default:e.UpgradeSmartAccountModal}))),U=({children:e})=>{let{darkMode:t,theme:r}=a(),[i,o]=O(!1),[s,c]=O(`main`),[l,u]=O(!1),{setSource:d,connectV2:p}=g(),m=w((e,t)=>{f()&&window.vechain&&window.vechain.isInAppBrowser?(d(`veworld`),p(null)):(c(e??`main`),u(t??!1),o(!0))},[]),h=w(()=>{o(!1),c(`main`),u(!1)},[]),[_,y]=O(!1),[b,x]=O(!1),[C,T]=O(`main`),E=w((e,t)=>{T(e??`main`),x(t?.isolatedView??!1),y(!0)},[]),D=w(()=>{y(!1),T(`main`),setTimeout(()=>{x(!1)},300)},[]),[k,M]=O(!1),ee=w(()=>M(!0),[]),N=w(()=>M(!1),[]),[P,F]=O(!1),I=w(()=>F(!0),[]),te=w(()=>F(!1),[]),[L,ne]=O(!1),[re,R]=O(void 0),z=w(e=>{R(e),ne(!0)},[]),B=w(()=>ne(!1),[]);return j(v.Provider,{value:{openConnectModal:m,closeConnectModal:h,isConnectModalOpen:i,connectModalContent:s,setConnectModalContent:c,connectModalPreventAutoClose:l,setConnectModalPreventAutoClose:u,openAccountModal:E,closeAccountModal:D,isAccountModalOpen:_,setAccountModalContent:T,accountModalContent:C,isolatedView:b,openTransactionModal:ee,closeTransactionModal:N,isTransactionModalOpen:k,openTransactionToast:I,closeTransactionToast:te,isTransactionToastOpen:P,openUpgradeSmartAccountModal:z,closeUpgradeSmartAccountModal:B,isUpgradeSmartAccountModalOpen:L},children:[e,j(n,{darkMode:t,theme:r,children:[i&&A(S,{fallback:null,children:A(V,{isOpen:i,onClose:h,initialContent:s,preventAutoClose:l})}),_&&A(S,{fallback:null,children:A(ie,{isOpen:_,onClose:D,initialContent:C})}),L&&A(S,{fallback:null,children:A(H,{isOpen:L,onClose:B,style:re})})]})]})},ae=C(()=>import(`./PrivyCrossAppProvider-Ccu2yH99.js`).then(e=>({default:e.PrivyCrossAppProvider}))),oe=C(()=>import(`@privy-io/react-auth`).then(e=>({default:e.PrivyProvider}))),se=C(()=>import(`@vechain/dapp-kit-react`).then(e=>({default:e.DAppKitProvider}))),ce=e=>{let t=[],n={...e};if((n.privy!==void 0||n.loginMethods?.some(e=>e.method===`vechain`||e.method===`ecosystem`))&&(n.feeDelegation?!n.feeDelegation.delegatorUrl&&!n.feeDelegation.genericDelegatorUrl&&(n.feeDelegation.genericDelegatorUrl=u()):n.feeDelegation={genericDelegatorUrl:u()}),!n.network||!n.network.type)n.network={type:`main`};else{let e=n.network.type;[`main`,`test`,`solo`].includes(e)||t.push(`network.type must be either "main", "test" or "solo"`)}if(n.loginMethods||(n.loginMethods=[{method:`vechain`,gridColumn:4},{method:`ecosystem`,gridColumn:4},{method:`dappkit`,gridColumn:4}]),n.loginMethods&&!n.privy){let e=n.loginMethods.filter(e=>[`email`,`google`,`passkey`,`more`].includes(e.method));e.length>0&&t.push(`Login methods ${e.map(e=>`"${e.method}"`).join(`, `)} require Privy configuration. Please either remove these methods or configure the privy prop.`)}if(n?.legalDocuments&&(n.legalDocuments.termsAndConditions&&n.legalDocuments.termsAndConditions.forEach(e=>{c(e.url)||t.push(`legalDocuments.termsAndConditions.url is invalid: ${e.url}`)}),n.legalDocuments.privacyPolicy&&n.legalDocuments.privacyPolicy.forEach(e=>{c(e.url)||t.push(`legalDocuments.privacyPolicy.url is invalid: ${e.url}`)}),n.legalDocuments.cookiePolicy&&n.legalDocuments.cookiePolicy.forEach(e=>{c(e.url)||t.push(`legalDocuments.cookiePolicy.url is invalid: ${e.url}`)})),t.length>0)throw Error(`VeChainKit Configuration Error:
|
|
122
|
+
`+t.join(`
|
|
123
|
+
`));return n},W=`vechain_kit_currency`,G=n=>{let{children:a,headless:c=!1,privy:u,feeDelegation:f,dappKit:g,loginModalUI:_,loginMethods:v,darkMode:x=!1,i18n:C,language:w=`en`,network:k,allowCustomTokens:M,legalDocuments:ee,defaultCurrency:N=`usd`,theme:P,onLanguageChange:R,onCurrencyChange:z}=ce(n),V=k?.type??`main`,ie=k?.nodeUrl??s(V).nodeUrl,H={...k,type:V,nodeUrl:ie},G=g,K=!!g,[q,J]=O(()=>typeof window<`u`&&p(`i18nextLng`)||w),[Y,le]=O(()=>{try{return p(W)||N}catch{return N}}),X=D(!1),Z=D(!1),Q=v,ue=E(()=>Q?.find(e=>e.method===`ecosystem`)?.allowedApps??o.map(e=>e.id),[Q]),de=!!u,fe=E(()=>Q?.some(e=>e.method===`ecosystem`||e.method===`vechain`)??!1,[Q]);T(()=>{F(y),C&&Object.keys(C).forEach(e=>{y.addResourceBundle(e,`translation`,C[e],!0,!0)});let e=(typeof window<`u`?p(`i18nextLng`):null)||q;e&&y.language!==e&&(X.current=!0,y.changeLanguage(e),e!==q&&J(e),X.current=!1)},[]),T(()=>{let e=typeof window<`u`?p(`i18nextLng`):null;w&&!e&&w!==q&&(X.current=!0,y.changeLanguage(w),J(w),X.current=!1)},[w,q]),T(()=>{let e=e=>{!X.current&&e!==q&&(J(e),R?.(e))};return y.on(`languageChanged`,e),()=>{y.off(`languageChanged`,e)}},[q,R]),T(()=>{let e=p(W);N&&!e&&N!==Y&&(Z.current=!0,le(N),d(W,N),Z.current=!1)},[N,Y]),T(()=>{let e=()=>{try{let e=p(W);if(e&&e!==Y&&!Z.current){let t=e;le(t),z?.(t)}}catch{}};e();let t=t=>{t.key===W&&t.newValue&&e()};window.addEventListener(`storage`,t);let n=setInterval(e,500);return()=>{window.removeEventListener(`storage`,t),clearInterval(n)}},[Y,z]);let pe=e=>{X.current=!0,y.changeLanguage(e),J(e),X.current=!1},me=e=>{Z.current=!0,le(e),d(W,e),Z.current=!1};T(()=>{d(l.NETWORK,V)},[V]);let $=E(()=>e(i(x),r(P,x)),[P,x]),he=E(()=>te($,x),[$,x]),ge=E(()=>L($,x),[$,x]);T(()=>{let e=I($.colors.background.card,x),t=I($.colors.background.cardElevated,x),n=x?`transparent`:`#ffffff`,r=x?`transparent`:`#ffffff`,i=x?`transparent`:`#ffffff`;re(ge,$.effects.backdropFilter.modal,e,t,n,r,i,$.colors.border.default)},[ge,$.effects.backdropFilter.modal,$.colors.background.card,$.colors.background.cardElevated,$.colors.border.default,x]),T(()=>{K&&ne()},[K]);let _e=de?A(b,{nodeUrl:H.nodeUrl,delegatorUrl:f?.delegatorUrl??f?.genericDelegatorUrl,delegateAllTransactions:f?.delegateAllTransactions??!1,genericDelegator:!!(!f?.delegatorUrl&&f?.genericDelegatorUrl),children:c?A(h,{children:a}):A(U,{children:A(h,{children:a})})}):c?A(h,{children:a}):A(U,{children:A(h,{children:a})}),ve=K?A(S,{fallback:A(m,{nodeUrl:H.nodeUrl,children:_e}),children:A(se,{node:H.nodeUrl,alwaysShowConnect:!0,v2Api:{enabled:G?.v2Api?.enabled??!0,external:G?.v2Api?.external??!1},language:q,logLevel:G?.logLevel,modalParent:G?.modalParent,onSourceClick:G?.onSourceClick,usePersistence:G?.usePersistence??!0,allowedWallets:G?.allowedWallets,walletConnectOptions:G?.walletConnectOptions,themeMode:x?`DARK`:`LIGHT`,themeVariables:G?.themeVariables?{...he,...G.themeVariables}:he,children:_e})}):A(m,{nodeUrl:H.nodeUrl,children:_e}),ye=de?A(S,{fallback:ve,children:A(oe,{appId:u.appId,clientId:u.clientId,config:{loginMethodsAndOrder:{primary:u.loginMethods.slice(0,4)??[],overflow:u.loginMethods.slice(4)??[]},externalWallets:{walletConnect:{enabled:!1}},appearance:{theme:x?`dark`:`light`,accentColor:u.appearance.accentColor??($.buttons.primaryButton.bg?.startsWith(`#`)?$.buttons.primaryButton.bg:x?`#3182CE`:`#2B6CB0`),loginMessage:u.appearance.loginMessage,logo:u.appearance.logo},embeddedWallets:{createOnLogin:u.embeddedWallets?.createOnLogin??`all-users`},passkeys:{shouldUnlinkOnUnenrollMfa:!1}},children:ve})}):ve,be={privy:u,privyEcosystemAppIDS:ue,feeDelegation:f,dappKit:G,loginModalUI:_,loginMethods:Q,darkMode:x,headless:c,i18n:C,currentLanguage:q,network:H,allowCustomTokens:M,legalDocuments:ee,currentCurrency:Y,theme:P,setLanguage:pe,setCurrency:me},xe=A(t.Provider,{value:be,children:ye});return j(B,{children:[!1,fe?A(S,{fallback:xe,children:A(ae,{privyEcosystemAppIDS:ue,children:xe})}):xe]})},K=`vechain_kit_currency`,q=e=>{if(!e||!e.type)return{type:`main`};let t=e.type;if(![`main`,`test`,`solo`].includes(t))throw Error(`VeChainKitCoreProvider: network.type must be "main", "test", or "solo". Got: "${t}"`);return{...e,type:t}},J=({children:e,network:n,language:r=`en`,darkMode:i=!1,defaultCurrency:a=`usd`,onLanguageChange:o,onCurrencyChange:c})=>{let u=q(n),f=u.type,h=n?.nodeUrl??s(f).nodeUrl,g={...u,nodeUrl:h},[_,v]=O(()=>typeof window<`u`&&p(`i18nextLng`)||r),[b,x]=O(()=>{try{return p(K)||a}catch{return a}}),S=D(!1),C=D(!1);T(()=>{F(y);let e=(typeof window<`u`?p(`i18nextLng`):null)||_;e&&y.language!==e&&(S.current=!0,y.changeLanguage(e),e!==_&&v(e),S.current=!1)},[]),T(()=>{let e=typeof window<`u`?p(`i18nextLng`):null;r&&!e&&r!==_&&(S.current=!0,y.changeLanguage(r),v(r),S.current=!1)},[r,_]),T(()=>{let e=e=>{!S.current&&e!==_&&(v(e),o?.(e))};return y.on(`languageChanged`,e),()=>{y.off(`languageChanged`,e)}},[_,o]),T(()=>{let e=p(K);a&&!e&&a!==b&&(C.current=!0,x(a),d(K,a),C.current=!1)},[a,b]),T(()=>{let e=()=>{try{let e=p(K);if(e&&e!==b&&!C.current){let t=e;x(t),c?.(t)}}catch{}};e();let t=t=>{t.key===K&&t.newValue&&e()};window.addEventListener(`storage`,t);let n=setInterval(e,500);return()=>{window.removeEventListener(`storage`,t),clearInterval(n)}},[b,c]);let w=e=>{S.current=!0,y.changeLanguage(e),v(e),S.current=!1},k=e=>{C.current=!0,x(e),d(K,e),C.current=!1};T(()=>{d(l.NETWORK,f)},[f]);let j=E(()=>({privy:void 0,privyEcosystemAppIDS:[],feeDelegation:void 0,dappKit:void 0,loginModalUI:void 0,loginMethods:void 0,darkMode:i,headless:!0,i18n:void 0,network:g,currentLanguage:_,allowCustomTokens:!1,legalDocuments:void 0,currentCurrency:b,theme:void 0,setLanguage:w,setCurrency:k}),[i,g,_,b]);return A(B,{children:A(t.Provider,{value:j,children:A(m,{nodeUrl:h,children:e})})})};export{G as n,U as r,J as t};
|
|
124
|
+
//# sourceMappingURL=providers-kA0lotaM.js.map
|