@markee_team/sdk 0.1.0-alpha.2 → 0.1.0-alpha.21
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/README.md +189 -45
- package/dist/checkout.d.ts +7 -0
- package/dist/client.d.ts +6 -3
- package/dist/index.d.ts +3 -0
- package/dist/index.js +55 -4
- package/dist/logo-data.d.ts +2 -0
- package/dist/modal.d.ts +7 -0
- package/dist/react.d.ts +13 -1
- package/dist/react.js +55 -4
- package/dist/sign.d.ts +23 -0
- package/dist/styles.d.ts +1 -1
- package/dist/types.d.ts +36 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var H="https://markee-git-feature-markee-sdk-1hive.vercel.app/api/sdk/v1",p=class extends Error{constructor(t,a="MARKEE_ERROR",i){super(t);this.code=a;this.status=i;this.name="MarkeeError"}};async function E(){if(typeof window>"u")return[];let s=new Map,e=a=>{let i=a.detail;i?.provider?.request&&typeof i.info?.uuid=="string"&&s.set(i.info.uuid,{uuid:i.info.uuid,name:String(i.info.name).slice(0,80),provider:i.provider})};window.addEventListener("eip6963:announceProvider",e),window.dispatchEvent(new Event("eip6963:requestProvider")),await new Promise(a=>setTimeout(a,150)),window.removeEventListener("eip6963:announceProvider",e);let t=window.ethereum;return!s.size&&t?.request&&s.set("injected",{uuid:"injected",name:"Browser wallet",provider:t}),[...s.values()]}var x=s=>typeof s=="string"&&/^0x[\da-f]{40}$/i.test(s),T=s=>typeof s=="string"&&/^0x[\da-f]{64}$/i.test(s),k=class{constructor(e={}){this.options=e;let t=new URL(e.apiUrl??H);if(t.protocol!=="https:"&&!(t.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(t.hostname)))throw new p("Use an HTTPS Markee API URL (HTTP is allowed on localhost).");this.apiUrl=t.href.replace(/\/$/,""),this.fetcher=e.fetch||globalThis.fetch.bind(globalThis)}apiUrl;fetcher;injected=null;sending=!1;inMemoryPending=[];adminMemory=null;communityReceipts={};async request(e,t,a){let i=await this.fetcher(`${this.apiUrl}/${e}`,{method:t===void 0?"GET":"POST",body:t===void 0?void 0:JSON.stringify(t),headers:t===void 0?void 0:{"Content-Type":"application/json"},credentials:"omit",signal:a||AbortSignal.timeout(55e3)}),r=await i.json().catch(()=>null);if(!i.ok)throw new p(r?.error||`Markee returned HTTP ${i.status}.`,r?.code,i.status);return r}async provider(){return this.options.wallet?this.options.wallet.getProvider():this.injected}async account(){let e=await this.provider();if(!e)return null;let t=await e.request({method:"eth_accounts"});return Array.isArray(t)&&x(t[0])?t[0]:null}async connect(e){let t=await this.provider();if(this.options.wallet)t||(t=await this.options.wallet.connect?.()||null);else{if(t=e||t,!t){let i=await E();if(i.length>1)throw new p("Select a browser wallet.","SELECT_WALLET");t=i[0]?.provider||null}this.injected=t}if(!t)throw new p("Connect a wallet in the app or install a browser wallet to continue.","NO_WALLET");let a=await t.request({method:"eth_requestAccounts"});if(!Array.isArray(a)||!x(a[0]))throw new p("The wallet did not return an account.");return a[0]}async snapshot(e,t,a,i){let r=new URLSearchParams({placement:JSON.stringify(e)});return t&&r.set("account",t),a!==void 0&&r.set("offset",String(a)),this.request(`snapshot?${r}`,void 0,i)}async prepare(e,t){let a=await this.account();if(!a)throw new p("Connect your wallet first.","NOT_CONNECTED");return this.request("prepare",{placement:e,account:a,action:t})}async ensureWallet(e,t){let a=await this.provider();if(!a||(await this.account())?.toLowerCase()!==e.toLowerCase())throw new p("Your wallet account changed. Review this action again.","ACCOUNT_CHANGED");let i=Number(await a.request({method:"eth_chainId"}));if(i!==t&&await a.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${t.toString(16)}`}]}),i=Number(await a.request({method:"eth_chainId"})),i!==t||(await this.account())?.toLowerCase()!==e.toLowerCase())throw new p("The wallet account or network changed. Review again.","WALLET_CHANGED");return a}async send(e){if(this.sending)throw new p("A wallet request is already in progress.");if(e.expiresAt<=Date.now())throw new p("This review expired. Prepare the action again.","REVIEW_EXPIRED");if(this.pending(e.placement,e.transaction.from))throw new p("A transaction is still pending for this wallet and placement. Check it before submitting again.","PENDING_TRANSACTION");this.sending=!0;try{let a=await this.ensureWallet(e.transaction.from,e.transaction.chainId);if(e.expiresAt<=Date.now())throw new p("This review expired. Prepare the action again.","REVIEW_EXPIRED");let{chainId:i,...r}=e.transaction,n=await a.request({method:"eth_sendTransaction",params:[r]});if(!T(n))throw new p("The wallet returned an unexpected transaction identifier. Check your wallet before retrying.");return this.persist([...this.records(),{preparation:e,hash:n}]),this.options.onEvent?.({type:"submitted",hash:n}),n}catch(a){throw this.options.onEvent?.({type:"error",message:a instanceof Error?a.message:String(a)}),a}finally{this.sending=!1}}async verify(e){let t=await this.request("verify",{id:e.preparation.id,hash:e.hash});return t.status!=="pending"&&(this.persist(this.records().filter(a=>a.hash!==e.hash)),t.status==="confirmed"&&this.options.onEvent?.({type:"confirmed",hash:t.hash})),t}async reconcile(e,t){if(!T(t))throw new p("Enter a valid replacement transaction hash.");let a=await this.request("verify",{id:e.preparation.id,hash:t});return a.status!=="pending"&&this.persist(this.records().filter(i=>i.hash!==e.hash)),a}storageKey(){return`markee:sdk:v1:pending:${this.apiUrl}`}records(){try{if(typeof localStorage>"u")return this.inMemoryPending;let e=JSON.parse(localStorage.getItem(this.storageKey())||"[]");return Array.isArray(e)?e.filter(t=>T(t?.hash)&&typeof t.preparation?.id=="string"&&x(t.preparation?.transaction?.from)&&t.preparation?.placement):[]}catch{return this.inMemoryPending}}persist(e){this.inMemoryPending=e;try{typeof localStorage<"u"&&localStorage.setItem(this.storageKey(),JSON.stringify(e))}catch{}}pending(e,t){return this.records().find(a=>JSON.stringify(a.preparation.placement).toLowerCase()===JSON.stringify(e).toLowerCase()&&a.preparation.transaction.from.toLowerCase()===t.toLowerCase())}async quote(e){return this.request(`community/quote?${new URLSearchParams({chainId:String(e.chainId),community:e.community})}`)}async authorize(e,t){let a=await this.account();if(!a)throw new p("Connect your community council wallet first.");return this.request(`community/${t}`,{action:"challenge",chainId:e.chainId,community:e.community,account:a})}async executeAuthorization(e,t,a){if(this.pendingAuthorization())throw new p("An earlier community authorization is still processing. Check its status first.");let i=t.typedData,n=await(await this.ensureWallet(a,i.domain.chainId)).request({method:"eth_signTypedData_v4",params:[a,JSON.stringify({...i,types:{...i.types,EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]}})]});if(typeof n!="string"||!/^0x[\da-f]+$/i.test(n))throw new p("Wallet did not return a typed-data signature.");return this.saveAuthorization({kind:e,nonce:t.nonce,signature:n,account:a,community:i.domain.verifyingContract,chainId:i.domain.chainId}),this.resumeAuthorization()}pendingAuthorization(){try{let e=typeof localStorage>"u"?this.adminMemory:JSON.parse(localStorage.getItem(`${this.storageKey()}:admin`)||"null");return e&&["activate","claim"].includes(e.kind)&&x(e.account)&&x(e.community)&&typeof e.nonce=="string"&&typeof e.signature=="string"?e:null}catch{return this.adminMemory}}saveAuthorization(e){this.adminMemory=e;try{typeof localStorage<"u"&&localStorage.setItem(`${this.storageKey()}:admin`,JSON.stringify(e))}catch{}}async resumeAuthorization(){let e=this.pendingAuthorization();if(!e)throw new p("There is no pending community authorization.");let t=await this.request(`community/${e.kind}`,{action:"verify",nonce:e.nonce,signature:e.signature});if(t.status==="complete"&&t.result){let a=`${e.chainId}:${e.community.toLowerCase()}`;this.communityReceipts[a]=t.result;try{typeof localStorage<"u"&&localStorage.setItem(`${this.storageKey()}:community:${a}`,JSON.stringify(t.result))}catch{}}return(t.status==="complete"||t.status==="failed")&&this.saveAuthorization(null),t}communityReceipt(e){let t=`${e.chainId}:${e.community.toLowerCase()}`;try{let a=typeof localStorage>"u"?this.communityReceipts[t]:JSON.parse(localStorage.getItem(`${this.storageKey()}:community:${t}`)||"null");return a&&T(a.transactionHash)?a:null}catch{return this.communityReceipts[t]||null}}bridgeStatus(e,t,a,i){return this.request(`community/status?${new URLSearchParams({protocol:e,transactionHash:t,fromChainId:String(a),toChainId:String(i)})}`)}recordView(e,t,a){return this.request("views",{address:e,message:t,url:a})}};function g(s,e=!1){let t=s.trim();if(!/^\d+(\.\d{0,18})?$/.test(t))throw new Error("Enter an ETH amount with up to 18 decimal places.");let[a,i=""]=t.split("."),r=BigInt(a)*10n**18n+BigInt(i.padEnd(18,"0"));if(!e&&r===0n||r>=2n**256n)throw new Error("Enter a positive amount.");return r.toString()}function m(s,e=6){let t=BigInt(s),a=t<0n?"-":"",i=t<0n?-t:t,r=(i%10n**18n).toString().padStart(18,"0").slice(0,e).replace(/0+$/,"");return i>0n&&i<10n**BigInt(18-e)?`${a}<0.${"0".repeat(e-1)}1`:`${a}${i/10n**18n}${r?`.${r}`:""}`}function C(s){return`${s.slice(0,6)}\u2026${s.slice(-4)}`}function l(s){return String(s).replace(/[&<>"']/g,e=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[e])}var R=`
|
|
1
|
+
var U="https://staging.markee.xyz/api/sdk/v1",p=class extends Error{constructor(t,n="MARKEE_ERROR",a){super(t);this.code=n;this.status=a;this.name="MarkeeError"}};async function J(){if(typeof window>"u")return[];let r=new Map,e=n=>{let a=n.detail;a?.provider?.request&&typeof a.info?.uuid=="string"&&r.set(a.info.uuid,{uuid:a.info.uuid,name:String(a.info.name).slice(0,80),provider:a.provider})};window.addEventListener("eip6963:announceProvider",e),window.dispatchEvent(new Event("eip6963:requestProvider")),await new Promise(n=>setTimeout(n,150)),window.removeEventListener("eip6963:announceProvider",e);let t=window.ethereum;return!r.size&&t?.request&&r.set("injected",{uuid:"injected",name:"Browser wallet",provider:t}),[...r.values()]}var x=r=>typeof r=="string"&&/^0x[\da-f]{40}$/i.test(r),z=r=>typeof r=="string"&&/^0x[\da-f]{64}$/i.test(r),T=class{constructor(e={}){this.options=e;let t=new URL(e.apiUrl??U);if(t.protocol!=="https:"&&!(t.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(t.hostname)))throw new p("Use an HTTPS Markee API URL (HTTP is allowed on localhost).");this.apiUrl=t.href.replace(/\/$/,""),this.fetcher=e.fetch||globalThis.fetch.bind(globalThis)}apiUrl;fetcher;injected=null;sending=!1;inMemoryPending=[];adminMemory=null;communityReceipts={};async request(e,t,n){let a=await this.fetcher(`${this.apiUrl}/${e}`,{method:t===void 0?"GET":"POST",body:t===void 0?void 0:JSON.stringify(t),headers:t===void 0?void 0:{"Content-Type":"application/json"},credentials:"omit",signal:n||AbortSignal.timeout(55e3)}),i=await a.json().catch(()=>null);if(!a.ok)throw new p(i?.error||`Markee returned HTTP ${a.status}.`,i?.code,a.status);return i}async provider(){return this.options.wallet?this.options.wallet.getProvider():this.injected}async account(){let e=await this.provider();if(!e)return null;let t=await e.request({method:"eth_accounts"});return Array.isArray(t)&&x(t[0])?t[0]:null}async connect(e){let t=await this.provider();if(this.options.wallet)t||(t=await this.options.wallet.connect?.()||null);else{if(t=e||t,!t){let a=await J();if(a.length>1)throw new p("Select a browser wallet.","SELECT_WALLET");t=a[0]?.provider||null}this.injected=t}if(!t)throw new p("Connect a wallet in the app or install a browser wallet to continue.","NO_WALLET");let n=await t.request({method:"eth_requestAccounts"});if(!Array.isArray(n)||!x(n[0]))throw new p("The wallet did not return an account.");return n[0]}verifySite(e,t){return this.request("sites/verify",{placement:e,siteUrl:t})}siteRequests=new Map;registerSite(e){if(!this.options.siteUrl)return;let t=JSON.stringify([e,this.options.siteUrl]);if(this.siteRequests.has(t))return;let n=this.verifySite(e,this.options.siteUrl);this.siteRequests.set(t,n),n.then(a=>this.options.onSiteVerification?.(a),a=>this.options.onSiteVerification?.({verified:!1,url:this.options.siteUrl,message:a instanceof Error?a.message:"Site verification failed."})).catch(()=>{})}async snapshot(e,t,n,a){let i=new URLSearchParams({placement:JSON.stringify(e)});return t&&i.set("account",t),n!==void 0&&i.set("offset",String(n)),this.request(`snapshot?${i}`,void 0,a)}async prepare(e,t){let n=await this.account();if(!n)throw new p("Connect your wallet first.","NOT_CONNECTED");return this.request("prepare",{placement:e,account:n,action:t})}async ensureWallet(e,t){let n=await this.provider();if(!n||(await this.account())?.toLowerCase()!==e.toLowerCase())throw new p("Your wallet account changed. Review this action again.","ACCOUNT_CHANGED");let a=Number(await n.request({method:"eth_chainId"}));if(a!==t&&await n.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${t.toString(16)}`}]}),a=Number(await n.request({method:"eth_chainId"})),a!==t||(await this.account())?.toLowerCase()!==e.toLowerCase())throw new p("The wallet account or network changed. Review again.","WALLET_CHANGED");return n}async send(e){if(this.sending)throw new p("A wallet request is already in progress.");if(e.expiresAt<=Date.now())throw new p("This review expired. Prepare the action again.","REVIEW_EXPIRED");if(this.pending(e.placement,e.transaction.from))throw new p("A transaction is still pending for this wallet and placement. Check it before submitting again.","PENDING_TRANSACTION");this.sending=!0;try{let n=await this.ensureWallet(e.transaction.from,e.transaction.chainId);if(e.expiresAt<=Date.now())throw new p("This review expired. Prepare the action again.","REVIEW_EXPIRED");let{chainId:a,...i}=e.transaction,s=await n.request({method:"eth_sendTransaction",params:[i]});if(!z(s))throw new p("The wallet returned an unexpected transaction identifier. Check your wallet before retrying.");return this.persist([...this.records(),{preparation:e,hash:s}]),this.options.onEvent?.({type:"submitted",hash:s}),s}catch(n){throw this.options.onEvent?.({type:"error",message:n instanceof Error?n.message:String(n)}),n}finally{this.sending=!1}}async verify(e){let t=await this.request("verify",{id:e.preparation.id,hash:e.hash});return t.status!=="pending"&&(this.persist(this.records().filter(n=>n.hash!==e.hash)),t.status==="confirmed"&&this.options.onEvent?.({type:"confirmed",hash:t.hash})),t}async reconcile(e,t){if(!z(t))throw new p("Enter a valid replacement transaction hash.");let n=await this.request("verify",{id:e.preparation.id,hash:t});return n.status!=="pending"&&this.persist(this.records().filter(a=>a.hash!==e.hash)),n}storageKey(){return`markee:sdk:v1:pending:${this.apiUrl}`}records(){try{if(typeof localStorage>"u")return this.inMemoryPending;let e=JSON.parse(localStorage.getItem(this.storageKey())||"[]");return Array.isArray(e)?e.filter(t=>z(t?.hash)&&typeof t.preparation?.id=="string"&&x(t.preparation?.transaction?.from)&&t.preparation?.placement):[]}catch{return this.inMemoryPending}}persist(e){this.inMemoryPending=e;try{typeof localStorage<"u"&&localStorage.setItem(this.storageKey(),JSON.stringify(e))}catch{}}pending(e,t){return this.records().find(n=>JSON.stringify(n.preparation.placement).toLowerCase()===JSON.stringify(e).toLowerCase()&&n.preparation.transaction.from.toLowerCase()===t.toLowerCase())}async quote(e){return this.request(`community/quote?${new URLSearchParams({chainId:String(e.chainId),community:e.community})}`)}async authorize(e,t){let n=await this.account();if(!n)throw new p("Connect your community council wallet first.");return this.request(`community/${t}`,{action:"challenge",chainId:e.chainId,community:e.community,account:n})}async executeAuthorization(e,t,n){if(this.pendingAuthorization())throw new p("An earlier community authorization is still processing. Check its status first.");let a=t.typedData,s=await(await this.ensureWallet(n,a.domain.chainId)).request({method:"eth_signTypedData_v4",params:[n,JSON.stringify({...a,types:{...a.types,EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]}})]});if(typeof s!="string"||!/^0x[\da-f]+$/i.test(s))throw new p("Wallet did not return a typed-data signature.");return this.saveAuthorization({kind:e,nonce:t.nonce,signature:s,account:n,community:a.domain.verifyingContract,chainId:a.domain.chainId}),this.resumeAuthorization()}pendingAuthorization(){try{let e=typeof localStorage>"u"?this.adminMemory:JSON.parse(localStorage.getItem(`${this.storageKey()}:admin`)||"null");return e&&["activate","claim"].includes(e.kind)&&x(e.account)&&x(e.community)&&typeof e.nonce=="string"&&typeof e.signature=="string"?e:null}catch{return this.adminMemory}}saveAuthorization(e){this.adminMemory=e;try{typeof localStorage<"u"&&localStorage.setItem(`${this.storageKey()}:admin`,JSON.stringify(e))}catch{}}async resumeAuthorization(){let e=this.pendingAuthorization();if(!e)throw new p("There is no pending community authorization.");let t=await this.request(`community/${e.kind}`,{action:"verify",nonce:e.nonce,signature:e.signature});if(t.status==="complete"&&t.result){let n=`${e.chainId}:${e.community.toLowerCase()}`;this.communityReceipts[n]=t.result;try{typeof localStorage<"u"&&localStorage.setItem(`${this.storageKey()}:community:${n}`,JSON.stringify(t.result))}catch{}}return(t.status==="complete"||t.status==="failed")&&this.saveAuthorization(null),t}communityReceipt(e){let t=`${e.chainId}:${e.community.toLowerCase()}`;try{let n=typeof localStorage>"u"?this.communityReceipts[t]:JSON.parse(localStorage.getItem(`${this.storageKey()}:community:${t}`)||"null");return n&&z(n.transactionHash)?n:null}catch{return this.communityReceipts[t]||null}}bridgeStatus(e,t,n,a){return this.request(`community/status?${new URLSearchParams({protocol:e,transactionHash:t,fromChainId:String(n),toChainId:String(a)})}`)}recordView(e,t,n){return this.request("views",{address:e,message:t,url:n})}};var Q=(r,e)=>`markee:checkout:v1:${r.apiUrl}:${JSON.stringify(e)}`;function R(r,e){try{let t=JSON.parse(localStorage.getItem(Q(r,e))||"null");return t&&typeof t.id=="string"&&/^[a-f0-9]{48}$/.test(t.id)&&/^[a-f0-9]{64}$/.test(t.readToken)&&/^[a-f0-9]{64}$/.test(t.writeToken)&&Number.isFinite(t.expiresAt)?t:null}catch{return null}}async function N(r,e){return r.request("checkout/status",{id:e.id,token:e.readToken})}function C(r,e){try{localStorage.removeItem(Q(r,e))}catch{}}async function Z(r,e,t){let n=r.options.checkoutWindow==="redirect"?null:window.open("about:blank","_blank");n&&(n.opener=null);let a=R(r,e);try{if(a){let s=await N(r,a).catch(o=>{if(o instanceof p&&o.status===404)return C(r,e),a=null,null;throw o});if(s?.result?.status==="confirmed"||s?.result?.status==="reverted")return C(r,e),n?.close(),s.result;a&&s&&a.expiresAt<Date.now()&&["created","ready"].includes(s.status)&&(C(r,e),a=null)}if(!a){a=await r.request("checkout/create",{placement:e,action:t,origin:window.location.origin});try{localStorage.setItem(Q(r,e),JSON.stringify(a))}catch{}}let i=new URL(`/checkout/${a.id}`,a.checkoutOrigin||r.apiUrl);if(i.protocol!=="https:"&&!(i.protocol==="http:"&&["localhost","127.0.0.1"].includes(i.hostname)))throw new Error("Invalid Markee checkout destination.");if(i.hash=new URLSearchParams({token:a.writeToken}).toString(),n)n.location.replace(i.href);else throw window.location.assign(i.href),new Error("Continuing payment on Markee.");for(let s=0;s<1800;s++){let o=await N(r,a);if(o.result&&o.status==="confirmed")return C(r,e),n.close(),o.result;if(o.status==="reverted")throw C(r,e),new Error("Payment reverted. Any unspent funds remain in your Markee wallet.");if(n.closed)throw new Error("Markee checkout closed. Choose Pay again to resume; funding alone does not complete payment.");await new Promise(A=>setTimeout(A,3e3))}throw new Error("Checkout is still pending. Reopen it to check the payment; do not pay again.")}catch(i){throw a||n?.close(),i}}function y(r,e=!1){let t=r.trim();if(!/^\d+(\.\d{0,18})?$/.test(t))throw new Error("Enter an ETH amount with up to 18 decimal places.");let[n,a=""]=t.split("."),i=BigInt(n)*10n**18n+BigInt(a.padEnd(18,"0"));if(!e&&i===0n||i>=2n**256n)throw new Error("Enter a positive amount.");return i.toString()}function l(r,e=6){let t=BigInt(r),n=t<0n?"-":"",a=t<0n?-t:t,i=(a%10n**18n).toString().padStart(18,"0").slice(0,e).replace(/0+$/,"");return a>0n&&a<10n**BigInt(18-e)?`${n}<0.${"0".repeat(e-1)}1`:`${n}${a/10n**18n}${i?`.${i}`:""}`}function E(r){return`${r.slice(0,6)}\u2026${r.slice(-4)}`}function d(r){return String(r).replace(/[&<>"']/g,e=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[e])}var F=`
|
|
2
2
|
:host{all:initial;font-family:var(--markee-font-family);color:var(--markee-text);font-size:14px;line-height:1.5;color-scheme:var(--markee-color-scheme)}
|
|
3
3
|
|
|
4
4
|
*{box-sizing:border-box}
|
|
@@ -32,6 +32,11 @@ p{margin:8px 0 14px}
|
|
|
32
32
|
.btn{border:1px solid var(--markee-border);border-radius:var(--markee-control-radius);background:var(--markee-surface);color:var(--markee-text);padding:10px 15px;font-weight:600;font-size:13px}
|
|
33
33
|
.primary{background:var(--markee-primary);border-color:var(--markee-primary);color:var(--markee-primary-text)}
|
|
34
34
|
.accent{background:var(--markee-accent);border-color:var(--markee-accent);color:var(--markee-accent-text)}
|
|
35
|
+
.review-action{position:relative;display:inline-flex;margin-left:auto}.review-action>button{width:100%}
|
|
36
|
+
.review-action.insufficient,.review-action.insufficient button{cursor:not-allowed}
|
|
37
|
+
.balance-tooltip{position:absolute;bottom:calc(100% + 8px);right:0;width:max-content;max-width:min(280px,75vw);padding:8px 12px;border:1px solid var(--markee-border);border-radius:8px;background:var(--markee-background);color:var(--markee-text);font-size:12px;line-height:1.5;z-index:2;visibility:hidden}
|
|
38
|
+
.balance-tooltip[hidden]{display:none}
|
|
39
|
+
.review-action:hover .balance-tooltip,.review-action:focus .balance-tooltip{visibility:visible}
|
|
35
40
|
.danger{color:var(--markee-error-text)}
|
|
36
41
|
.full{width:100%}
|
|
37
42
|
.card{border:1px solid var(--markee-border);border-radius:var(--markee-card-radius);background:var(--markee-surface);padding:17px 18px}
|
|
@@ -56,7 +61,6 @@ form{display:grid;gap:16px}
|
|
|
56
61
|
.divider{height:1px;background:var(--markee-border);margin:20px 0}
|
|
57
62
|
a{color:var(--markee-link);text-decoration:none;overflow-wrap:anywhere}
|
|
58
63
|
ul{padding-left:20px;font-size:14px}
|
|
59
|
-
.review li{margin-bottom:9px;overflow-wrap:anywhere}
|
|
60
64
|
.loading{padding:40px;text-align:center;color:var(--markee-muted)}
|
|
61
65
|
.empty{padding:24px 8px;text-align:center}
|
|
62
66
|
.spinner{display:inline-block;width:14px;height:14px;border-radius:100%;border:2px solid var(--markee-border);border-top-color:var(--markee-muted);animation:spin 1s linear infinite;margin-right:8px}
|
|
@@ -64,7 +68,26 @@ ul{padding-left:20px;font-size:14px}
|
|
|
64
68
|
}
|
|
65
69
|
footer{flex-shrink:0;padding:14px 20px;border-top:1px solid var(--markee-border);background:var(--markee-background);color:var(--markee-muted);font-size:11px}
|
|
66
70
|
.mono{font-family:ui-monospace,monospace}
|
|
67
|
-
.
|
|
71
|
+
.payment-review{display:grid;gap:16px}
|
|
72
|
+
.review-message{border:1px solid var(--markee-border);border-radius:var(--markee-card-radius);background:var(--markee-input-background);padding:16px 18px;min-width:0}
|
|
73
|
+
.review-message .message{font-size:14px;margin:0}
|
|
74
|
+
.review-summary{padding:0 4px}
|
|
75
|
+
.review-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 0;border-bottom:1px solid var(--markee-border);font-size:13px}
|
|
76
|
+
.review-row:last-child{border-bottom:0}
|
|
77
|
+
.review-row>span{color:var(--markee-muted)}
|
|
78
|
+
.review-row strong{text-align:right;font-family:ui-monospace,monospace;font-size:13px;overflow-wrap:anywhere}
|
|
79
|
+
.review-callout{padding:16px;border:1px solid var(--markee-accent-border);border-radius:var(--markee-control-radius);background:var(--markee-accent-surface);color:var(--markee-accent-surface-text)}
|
|
80
|
+
.review-callout strong{display:block;font-family:ui-monospace,monospace;font-size:13px;line-height:1.45}
|
|
81
|
+
.review-callout p{margin:6px 0 0;font-size:12px;line-height:1.5}
|
|
82
|
+
.review-details{font-size:11px;color:var(--markee-muted)}
|
|
83
|
+
.review-details summary{cursor:pointer;color:var(--markee-link);font-size:12px}
|
|
84
|
+
.review-details .review-row{font-size:11px;padding:7px 0}
|
|
85
|
+
.review-details .review-row strong{font-size:11px;color:var(--markee-text)}
|
|
86
|
+
.review-address{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0}
|
|
87
|
+
.review-copy{padding:3px 7px;font-size:10px;line-height:1.3;color:var(--markee-link);white-space:nowrap}
|
|
88
|
+
.review-details p{margin:8px 0}
|
|
89
|
+
.review-footer .footer-actions{justify-content:flex-end}
|
|
90
|
+
.review-footer .footer-actions>.primary:last-child{margin-left:0}
|
|
68
91
|
.wallets{display:grid;gap:10px}
|
|
69
92
|
|
|
70
93
|
|
|
@@ -81,6 +104,7 @@ footer{flex-shrink:0;padding:14px 20px;border-top:1px solid var(--markee-border)
|
|
|
81
104
|
.message-card{padding:16px;border:1px solid var(--markee-border);border-radius:var(--markee-card-radius);background:var(--markee-surface);min-width:0}
|
|
82
105
|
.message-card.winner{background:var(--markee-accent-surface);border-color:var(--markee-accent-border)}
|
|
83
106
|
.message-card>.message{font-size:17px;margin:12px 0 6px}.message-card .eyebrow{font-size:10px}.message-card>.name{margin:4px 0}
|
|
107
|
+
.leaderboard-entry .message.moderation-placeholder,.message-card>.message.moderation-placeholder{font-family:var(--markee-font-family);font-size:12px;font-weight:500;line-height:1.45;color:var(--markee-muted);background:var(--markee-background);border:1px dashed var(--markee-border);border-radius:var(--markee-small-radius);padding:8px 10px}
|
|
84
108
|
.message-tools{margin-top:12px;gap:10px 16px}.message-tools .text-button{font-size:11px}.editor-card{display:grid;gap:16px}
|
|
85
109
|
.field label{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.field-count{font-size:10px;font-weight:400;color:var(--markee-muted)}.field small{font-size:10px}
|
|
86
110
|
.message-stats{border-top:1px solid var(--markee-border);margin-top:16px;padding-top:12px}.message-stats>.meta{font-size:11px}.stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:8px}.stats-grid>div{min-width:0}.stats-grid strong{display:block;font-family:ui-monospace,monospace;font-size:12px;overflow-wrap:anywhere}.stat-label{display:block;font-size:9px;letter-spacing:.6px;text-transform:uppercase;color:var(--markee-muted);margin-bottom:4px}
|
|
@@ -88,6 +112,7 @@ footer{flex-shrink:0;padding:14px 20px;border-top:1px solid var(--markee-border)
|
|
|
88
112
|
.funding-card>label{font-size:11px;color:var(--markee-muted);font-weight:500;margin-bottom:8px}.amount-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.amount-value{display:flex;gap:6px;align-items:baseline;min-width:0;flex:1 1 140px}.amount-value input{background:transparent;border:0;border-radius:2px;box-shadow:none;font-family:ui-monospace,monospace;font-size:23px;font-weight:600;min-width:0;width:100%;padding:3px 0;color:var(--markee-text)}.amount-value>span{font-size:11px;color:var(--markee-muted);white-space:nowrap}.amount-presets{display:flex;gap:6px;margin-left:auto}.amount-presets button{color:var(--markee-link)}.amount-presets button[aria-pressed=true]{border-color:var(--markee-link);background:var(--markee-selected);color:var(--markee-selected-text)}
|
|
89
113
|
.funding-caption{display:flex;justify-content:space-between;flex-wrap:wrap;gap:4px 10px;margin-top:9px;color:var(--markee-muted);font-size:10px}.funding-tools{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;border-top:1px solid var(--markee-border);margin-top:13px;padding-top:12px}.funding-tools .meta{font-size:10px}.funding-hint{font-size:11px;margin:0}.funding-hint+.note{margin:0;font-size:11px}
|
|
90
114
|
.footer-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.footer-actions>.primary:last-child{margin-left:auto}.footer-actions:empty{display:none}.footer-meta{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px;margin-top:10px;font-size:10px}.footer-meta .text-button{font-size:10px}
|
|
115
|
+
.payment-choice-footer .footer-actions{justify-content:flex-end}.payment-choice-footer .footer-actions>.primary:last-child{margin-left:0}
|
|
91
116
|
|
|
92
117
|
@media(max-width:560px){.overlay{padding:8px;align-items:flex-end}
|
|
93
118
|
.panel{border-radius:var(--markee-radius) var(--markee-radius) var(--markee-control-radius) var(--markee-control-radius);max-height:94dvh}
|
|
@@ -99,9 +124,35 @@ header{padding:20px 18px}
|
|
|
99
124
|
footer{padding:12px 18px}
|
|
100
125
|
.btn{padding:10px 12px}
|
|
101
126
|
.compact{padding:5px 9px}.text-button{padding:0}.footer-actions>.btn{flex:1;white-space:normal}.footer-actions>.primary:last-child{margin-left:0}
|
|
127
|
+
.review-footer .footer-actions>.btn{flex:0 1 auto}
|
|
128
|
+
.payment-choice-footer .footer-actions>.btn{flex:0 1 auto}
|
|
102
129
|
}
|
|
103
130
|
|
|
104
131
|
@media(prefers-reduced-motion:reduce){*{animation:none!important;scroll-behavior:auto!important}
|
|
105
132
|
}
|
|
106
133
|
|
|
107
|
-
`;var O={background:"#fbfcff",surface:"#ffffff",text:"#181b21",muted:"#687080",border:"#dce1ea",inputBackground:"#ffffff",inputText:"#202737",primary:"#282e3e",primaryText:"#ffffff",accent:"#c9f1a7",accentText:"#2b3c20",accentSurface:"#f1f7ea",accentSurfaceText:"#4e6535",accentBorder:"#cde3b5",selected:"#e9edf7",selectedText:"#242c47",info:"#edf1f9",infoText:"#52617b",error:"#fff0f0",errorText:"#9c3540",success:"#edf7e6",successText:"#40602f",link:"#4762a5",focusRing:"#5871c8",overlay:"#17203888"},F={background:"#151923",surface:"#202633",text:"#f0f3f8",muted:"#a6b1c3",border:"#434f63",inputBackground:"#10151e",inputText:"#f0f3f8",primary:"#dde6fa",primaryText:"#182238",accent:"#c9f1a7",accentText:"#24361a",accentSurface:"#243221",accentSurfaceText:"#c4e5ad",accentBorder:"#526b40",selected:"#313d53",selectedText:"#edf3ff",info:"#243149",infoText:"#bdcff1",error:"#44262e",errorText:"#ffbdc5",success:"#233b2b",successText:"#b5e4bf",link:"#adc5ff",focusRing:"#a1b4ff",overlay:"#030711b8"},N='Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',D=s=>`--markee-${s.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}`;function B(s,e){let t,a=(i={})=>{t?.(),t=void 0;let r=i.mode==="system"?window.matchMedia("(prefers-color-scheme: dark)"):void 0,n=()=>{let d=i.mode==="dark"||r?.matches?"dark":"light",c=d==="dark"?F:O;s.dataset.markeeTheme=d,s.style.setProperty("--markee-color-scheme",d);for(let u of Object.keys(c)){let w=i.colors?.[u];s.style.setProperty(D(u),w&&CSS.supports("color",w)?w:c[u])}s.style.setProperty("--markee-font-family",i.fontFamily&&CSS.supports("font-family",i.fontFamily)?i.fontFamily:N);let f=typeof i.radius=="number"&&Number.isFinite(i.radius)?Math.max(0,Math.min(48,i.radius)):22;s.style.setProperty("--markee-radius",`${f}px`),s.style.setProperty("--markee-card-radius",`${f*.64}px`),s.style.setProperty("--markee-control-radius",`${f*.45}px`),s.style.setProperty("--markee-small-radius",`${f*.32}px`)};n(),r&&(r.addEventListener("change",n),t=()=>r.removeEventListener("change",n))};return a(e),{set:a,destroy(){t?.(),t=void 0}}}var v=2628000n,$=10n**15n,S=(...s)=>s.reduce((e,t)=>e>t?e:t,0n);function A(s,e){let t=s.strategy==="rent",a=t?(BigInt(s.minimum)+$-1n)/$*$:e?1n:BigInt(s.minimum),i=s.entries.filter(u=>u.address.toLowerCase()!==e?.address.toLowerCase()),r=S(...i.map(u=>BigInt(u.score))),n=!!e&&e.address.toLowerCase()===s.top?.toLowerCase();if(!t){let u=BigInt(e?.totalFunds??"0");return{minimum:a,boost:S(a,r+$-u,n?u:0n),double:n&&u>0n}}let c=!!e&&s.wallet?.backedMarkee?.toLowerCase()===e.address.toLowerCase()?BigInt(s.wallet.flowRate):0n,f=S(BigInt(e?.aggregateRate??"0")-c);return{minimum:a,boost:S(a,(r-f)*v+$,n?c*v*2n:0n),double:n&&c>0n}}var M=s=>{let e=BigInt(s);return`${e/10n**18n}.${(e%10n**18n).toString().padStart(18,"0")}`.replace(/\.?0+$/,"")||"0"},o=(s,e,t="",a="")=>`<button type="button" class="btn ${t}" data-cmd="${s}" ${a}>${e}</button>`,z=(s,e)=>/^https:\/\//.test(s)?`<a href="${l(s)}" target="_blank" rel="noopener noreferrer">${l(e)} \u2197</a>`:"",L=class{constructor(e,t){this.client=e;this.options=t;if(typeof document>"u")throw new Error("Open the Markee modal in a browser.");this.previousFocus=document.activeElement,this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden",this.host=document.createElement("div"),this.host.setAttribute("data-markee-modal",""),this.root=this.host.attachShadow({mode:"open"}),this.theme=B(this.host,t.theme??e.options.theme),document.body.appendChild(this.host),this.root.addEventListener("click",this.onClick),this.root.addEventListener("submit",this.onSubmit),this.root.addEventListener("keydown",this.onKey),this.root.addEventListener("input",()=>{this.captureDraft(),this.updateFields()}),this.render(),this.root.querySelector('[data-cmd="close"]')?.focus(),this.reload(),this.watchAccount()}host;root;theme;snapshot;account=null;tab="main";leaderboardOpen=!1;initialSelection=!1;renderedView="";form;review;authorization;adminResult;adminProcessing=!1;result;pending;wallets;busy=!1;error="";closed=!1;epoch=0;timer;accountTimer;watched;previousFocus;previousOverflow;abort=new AbortController;drafts=new Map;viewObserver;viewed=new Set;walletChanged=()=>{this.initialSelection=!1,this.review=void 0,this.authorization=void 0,this.form=void 0,this.result=void 0,this.error="Wallet changed. Refreshing this placement\u2026",this.reload()};close(){this.closed||(this.closed=!0,this.abort.abort(),clearTimeout(this.timer),clearTimeout(this.accountTimer),this.viewObserver?.disconnect(),this.theme.destroy(),this.watched?.removeListener?.("accountsChanged",this.walletChanged),this.watched?.removeListener?.("chainChanged",this.walletChanged),this.host.remove(),document.body.style.overflow=this.previousOverflow,this.previousFocus?.focus(),this.options.onClose?.())}setTheme(e){this.closed||this.theme.set(e)}async watchAccount(){try{let e=await this.client.provider();e!==this.watched&&(this.watched?.removeListener?.("accountsChanged",this.walletChanged),this.watched?.removeListener?.("chainChanged",this.walletChanged),this.watched=e||void 0,e?.on?.("accountsChanged",this.walletChanged),e?.on?.("chainChanged",this.walletChanged)),(await this.client.account())?.toLowerCase()!==this.account?.toLowerCase()&&!this.busy&&this.walletChanged()}catch{}this.closed||(this.accountTimer=setTimeout(()=>void this.watchAccount(),2e3))}async reload(e){let t=++this.epoch;try{let a=await this.client.account(),i=await this.client.snapshot(this.options.placement,a,e,this.abort.signal);if(this.closed||t!==this.epoch)return;if(this.account=a,this.snapshot=i,this.error="",this.form&&(this.form.entry=i.entries.find(n=>n.address.toLowerCase()===this.form.entry.address.toLowerCase())??this.form.entry),!this.initialSelection&&a){this.initialSelection=!0;let n=i.entries.find(d=>d.address.toLowerCase()===i.wallet?.backedMarkee?.toLowerCase())??i.entries.find(d=>d.owner.toLowerCase()===a.toLowerCase());n&&!this.form&&!this.drafts.get("create")?.message&&(this.form={kind:i.strategy==="rent"?"stream":"fund",entry:n})}this.options.placement.kind==="gardens-community"&&(this.adminResult=this.client.communityReceipt(this.options.placement)||void 0),this.pending=a?this.client.pending(this.options.placement,a):void 0;let r=this.client.pendingAuthorization();this.adminProcessing=!!r&&this.options.placement.kind==="gardens-community"&&r.account.toLowerCase()===a?.toLowerCase()&&r.community.toLowerCase()===this.options.placement.community.toLowerCase()&&r.chainId===this.options.placement.chainId,this.render(),this.pending&&this.poll()}catch(a){!this.closed&&t===this.epoch&&this.fail(a)}}fail(e){this.error=e instanceof Error?e.message:String(e),this.render()}async task(e){if(!this.busy){this.busy=!0,this.error="",this.render();try{await e()}catch(t){this.fail(t)}finally{this.busy=!1,this.render()}}}async connect(){if(!this.client.options.wallet){let e=await E();if(e.length>1){this.wallets=e,this.render();return}}this.host.style.visibility="hidden";try{await this.client.connect()}finally{this.host.style.visibility=""}await this.reload()}async prepare(e){if(this.pending)throw new Error("Check your pending transaction before preparing another action.");if(!this.account){await this.connect();return}this.review=await this.client.prepare(this.options.placement,e),this.authorization=void 0}async poll(){if(clearTimeout(this.timer),!(!this.pending||this.closed)){try{let e=this.pending,t=await this.client.verify(e);if(this.closed||this.pending?.hash!==e.hash)return;if(t.status!=="pending"){if(this.pending=void 0,this.result=t,this.error="",await this.reload(),t.createdMarkee&&this.snapshot?.strategy==="rent"){let a=this.snapshot.entries.find(r=>r.address.toLowerCase()===t.createdMarkee.toLowerCase()),i=e.preparation.action;if(i.kind==="create"){this.form={kind:"stream",entry:a||{address:t.createdMarkee,owner:e.preparation.transaction.from,message:i.message,name:i.name,score:"0",totalFunds:"0",aggregateRate:"0",legacyFloor:"0",moderated:!1,views:0}};let r=this.drafts.get("create")?.amount;r&&this.drafts.set(this.draftKey(),{amount:r})}}this.render();return}}catch(e){this.closed||this.fail(e)}!this.closed&&this.pending&&(this.timer=setTimeout(()=>void this.poll(),5e3))}}async applyAdmin(e){if(this.authorization=void 0,this.adminProcessing=e.status==="working"||e.status==="submitted",e.status==="complete"&&(this.adminResult=e.result,await this.reload()),e.status==="failed")throw new Error(e.error||"Community action failed.")}onClick=e=>{let t=e.target.closest("[data-cmd]");if(!t)return;let a=t.dataset.cmd;if(a==="close"){this.close();return}if(!this.busy){if(this.captureDraft(),a==="leaderboard"){this.leaderboardOpen=!this.leaderboardOpen,this.render();return}if(a==="create"){this.tab="main",this.form=void 0,this.review=void 0,this.render();return}if(a.startsWith("tab:")){this.tab=a.slice(4),this.review=void 0,this.authorization=void 0,this.render();return}if(a==="back"){this.review||this.authorization||this.wallets?(this.review=void 0,this.authorization=void 0,this.wallets=void 0):this.tab!=="main"?this.tab="main":this.form?.kind.startsWith("edit")?this.form={kind:this.snapshot.strategy==="rent"?"stream":"fund",entry:this.form.entry}:this.form=void 0,this.render();return}if(a.startsWith("preset:")&&this.snapshot){let i=this.root.querySelector("#amount");if(i){let r=A(this.snapshot,this.form?.entry);i.value=M((a==="preset:min"?r.minimum:r.boost).toString()),this.captureDraft(),this.updateFields()}return}if(a.startsWith("form:")){let[,i,r]=a.split(":"),n=this.snapshot?.entries.find(d=>d.address===r);n&&(this.form={kind:i,entry:n},this.tab="main"),this.render();return}this.task(async()=>{if(a==="connect")await this.connect();else if(a.startsWith("wallet:"))await this.client.connect(this.wallets[Number(a.slice(7))].provider),this.wallets=void 0,await this.reload();else if(a==="refresh")await this.reload();else if(a==="more")await this.reload(this.snapshot?.nextOffset??void 0);else if(a==="send"&&this.review){let i=this.review,r=await this.client.send(i);this.pending={preparation:i,hash:r},this.review=void 0,this.form=void 0,this.result=void 0,this.poll()}else if(a==="check")await this.poll();else if(["stop","withdraw-buffer","settle"].includes(a))await this.prepare({kind:a});else if(a.startsWith("claim-refund:")||a.startsWith("connect-refund:")||a.startsWith("claim-top:")){let[i,r]=a.split(":");await this.prepare({kind:i,markee:r})}else if(a==="activate"||a==="claim"){let i=this.options.placement;if(i.kind!=="gardens-community"||!this.account)return;let r=this.account;this.authorization={kind:a,account:r,value:await this.client.authorize(i,a)},this.review=void 0}else if(a==="sign"&&this.authorization){let i=this.authorization;try{await this.applyAdmin(await this.client.executeAuthorization(i.kind,i.value,i.account))}finally{this.client.pendingAuthorization()&&(this.authorization=void 0,this.adminProcessing=!0)}}else if(a==="admin-check")await this.applyAdmin(await this.client.resumeAuthorization());else if(a==="bridge"&&this.adminResult){let i=await this.client.bridgeStatus(this.adminResult.bridgeProtocol||"none",this.adminResult.transactionHash,this.snapshot.chainId,this.options.placement.chainId);this.error=`Treasury transfer status: ${i.status.replace(/_/g," ")}.`}})}};onSubmit=e=>{if(e.preventDefault(),this.busy)return;this.captureDraft();let t=e.target,a=new FormData(t),i=r=>String(a.get(r)||"");this.task(async()=>{if(t.dataset.form==="create")this.snapshot?.strategy==="rent"&&g(i("amount")),await this.prepare({kind:"create",message:i("message"),name:i("name"),...this.snapshot?.strategy==="sale"?{amount:g(i("amount"),!0)}:{}});else if(t.dataset.form==="balance")await this.prepare({kind:i("kind"),amount:g(i("amount"))});else if(this.form){let{kind:r,entry:n}=this.form;r==="fund"?await this.prepare({kind:r,markee:n.address,amount:g(i("amount"))}):r==="stream"?await this.prepare({kind:r,markee:n.address,monthlyAmount:g(i("amount"))}):r==="edit-message"?await this.prepare({kind:r,markee:n.address,message:i("message")}):await this.prepare({kind:r,markee:n.address,name:i("name")})}})};draftKey(){return this.tab!=="main"?this.tab:this.form?`${this.form.kind}:${this.form.entry.address}`:"create"}captureDraft(){let e=this.root.querySelector("form");e&&this.drafts.set(this.draftKey(),Object.fromEntries([...new FormData(e)].map(([t,a])=>[t,String(a)])))}onKey=e=>{let t=e;if(t.key==="Escape"&&(t.preventDefault(),this.close()),t.key!=="Tab"||this.host.style.visibility==="hidden")return;let a=[...this.root.querySelectorAll("button:not(:disabled),a[href],input,textarea,select")],i=a[0],r=a[a.length-1];t.shiftKey&&this.root.activeElement===i?(t.preventDefault(),r?.focus()):!t.shiftKey&&this.root.activeElement===r&&(t.preventDefault(),i?.focus())};field(e,t,a="",i="",r=!1){let n=e==="message"?this.snapshot?.maxMessageBytes:e==="name"?this.snapshot?.maxNameBytes:void 0,d=`${e==="name"?"":"required"} ${n===void 0?"":`data-byte-limit="${n}"`} aria-describedby="${e}-hint"`;return`<div class="field"><label for="${e}">${t}${n===void 0?"":`<span class="field-count" aria-hidden="true" data-count-for="${e}"></span>`}</label>${r?`<textarea id="${e}" name="${e}" ${d} placeholder="Your message on the sign">${l(a)}</textarea>`:`<input id="${e}" name="${e}" ${e==="amount"?'inputmode="decimal"':""} value="${l(a)}" ${d}>`}${i?`<small id="${e}-hint">${i}</small>`:""}</div>`}reviewHtml(){let e=this.review,t=e.action,a=t.kind==="create"||t.kind==="edit-message"?t.message:this.form?this.entryMessage(this.form.entry):void 0,i=e.review.lines.filter(r=>!r.startsWith("Message: "));return`<h2 class="review-title">${l(e.review.title)}</h2>${a?`<section class="message-card"><p class="message">${l(a)}</p></section>`:""}<section class="review"><ul>${i.map(r=>`<li>${l(r)}</li>`).join("")}</ul><div class="stat"><span>Estimated network fee</span><strong>${m(e.review.estimatedGasCost)} ETH</strong></div><div class="stat"><span>Wallet</span><strong class="mono">${C(e.transaction.from)}</strong></div></section><p class="note">${l(e.review.reward)}</p><p class="meta">This review expires in 5 minutes. Your wallet shows the final network fee.</p>`}authorizationHtml(){let e=this.authorization,t=e.value.typedData.message;return`<div class="eyebrow">Community authorization</div><h2>${e.kind==="activate"?"Activate this community\u2019s Markee":"Claim community revenue"}</h2><p>A signed authorization lets Markee\u2019s keeper execute this action. The server rechecks your current council role before submitting it.</p><div class="card stack">${["registryCommunity","recipient","leaderboardFactory"].filter(a=>t[a]).map(a=>`<div class="meta">${l(a)}<br><strong class="mono">${l(t[a])}</strong></div>`).join("")}${["claimAmount","gasCost","maxFeeAmount"].filter(a=>t[a]!==void 0).map(a=>`<div class="stat"><span>${a==="claimAmount"?"Revenue":a==="gasCost"?"Keeper network fee":"Maximum bridge fee"}</span><strong>${m(String(t[a]))} ETH</strong></div>`).join("")}</div><p class="note">${e.kind==="claim"?"Revenue is sent to the community council treasury. Bridged claims remain pending until destination delivery is confirmed.":"This creates the community board and its revenue vault on the Markee chain."}</p>`}entryMessage(e){return e.moderated===!1?e.message:e.moderated?"This message is hidden by moderation.":"Message unavailable while moderation loads."}entriesHtml(){let e=this.snapshot,t=[...e.entries].sort((r,n)=>BigInt(r.score)>BigInt(n.score)?-1:BigInt(r.score)<BigInt(n.score)?1:0),a=[...t.filter(r=>r.owner.toLowerCase()===this.account?.toLowerCase()),...t.filter(r=>r.owner.toLowerCase()!==this.account?.toLowerCase())],i=e.board&&[8453,11155111].includes(e.chainId)?`https://${e.chainId===8453?"www":"2staging"}.markee.xyz/markee/${e.board}`:"";return`<section class="leaderboard" aria-label="Markee leaderboard"><div class="row between">${o("leaderboard",`<span class="chevron" aria-hidden="true">${this.leaderboardOpen?"\u2303":"\u2304"}</span> Leaderboard`,"text-button",`aria-expanded="${this.leaderboardOpen}" aria-controls="markee-leaderboard"`)}${z(i,"Open in Markee")}</div>${this.leaderboardOpen?`<div class="leaderboard-list" id="markee-leaderboard">${a.map(r=>{let n=r.owner.toLowerCase()===this.account?.toLowerCase(),d=r.address.toLowerCase()===e.top?.toLowerCase(),c=r.address.toLowerCase()===this.form?.entry.address.toLowerCase();return`<article class="leaderboard-entry ${d?"winner":""} ${c?"selected-entry":""}"><div class="grow"><p class="message">${l(this.entryMessage(r))}</p><div class="row entry-caption">${d?'<span class="pill">Winner</span>':""}${n?'<span class="meta">Yours</span>':""}${r.moderated===!1&&r.name?`<span class="name">${l(r.name)}</span>`:""}</div></div><div class="entry-funding"><div class="meta mono">${e.strategy==="rent"?`${m((BigInt(r.score)*v).toString())} ETH/mo`:`${m(r.totalFunds)} ETH`}</div><span class="meta">${r.views===null?"Views unavailable":`${r.views.toLocaleString()} views`}</span>${o(`form:${e.strategy==="sale"?"fund":"stream"}:${r.address}`,c?"Selected":"Fund",`compact ${c?"primary":""}`,`aria-pressed="${c}" aria-label="${c?"Selected":"Fund"} message ${C(r.address)}"`)}</div></article>`}).join("")||'<p class="empty">No Markees yet. Create the first one.</p>'}${e.strategy==="rent"&&e.rankedTop&&e.rankedTop.toLowerCase()!==e.top?.toLowerCase()?`<p class="note">The ranking has changed. ${o(`claim-top:${e.rankedTop}`,"Refresh winner","compact")}</p>`:""}${e.nextOffset!==null?o("more","Browse more messages","full"):""}</div>`:""}</section>`}selectedMessageHtml(e){let t=this.snapshot,a=t.wallet,i=e.owner.toLowerCase()===this.account?.toLowerCase(),r=t.entries.find(c=>c.owner.toLowerCase()===this.account?.toLowerCase()),n=e.address.toLowerCase()===t.top?.toLowerCase(),d=e.address.toLowerCase()===a?.backedMarkee?.toLowerCase()&&BigInt(a?.flowRate??"0")>0n;return`<section class="message-card ${n?"winner":""}"><div class="row between"><span class="eyebrow">${i?"Your Markee":"Markee you\u2019re funding"}</span>${n?'<span class="pill">Winner</span>':""}</div><p class="message">${l(this.entryMessage(e))}</p>${e.moderated===!1&&e.name?`<p class="name">${l(e.name)}</p>`:""}<div class="row message-tools">${i?o(`form:edit-message:${e.address}`,"Edit message","text-button")+o(`form:edit-name:${e.address}`,"Edit name","text-button"):""}${!i&&r?o(`form:${t.strategy==="rent"?"stream":"fund"}:${r.address}`,"Back to your Markee","text-button"):""}${o("create","Create your own Markee","text-button")}${t.strategy==="rent"&&this.account?o(`claim-refund:${e.address}`,"Collect refund","text-button"):""}</div><div class="message-stats">${t.strategy==="rent"?`<span class="meta">${d?n?"\u25CF Active stream":a?.poolConnected?"\u25CF Stream refunded while not the winner":"\u25CF Connect your refund pool in Deposit manager":"No active stream from your wallet to this message"}</span><div class="stats-grid"><div><span class="stat-label">Ranking rate</span><strong>${m((BigInt(e.score)*v).toString())} ETH/mo</strong></div><div><span class="stat-label">Your rate</span><strong>${m((d?BigInt(a.flowRate)*v:0n).toString())} ETH/mo</strong></div>${a?`<div><span class="stat-label">ETHx balance</span><strong>${m(a.ethx)} ETHx</strong></div><div><span class="stat-label">Funds remaining</span><strong title="Across all of your ETHx flows">${a.runwaySeconds===null?"No net outflow":`${(Number(a.runwaySeconds)/86400).toFixed(1)} days`}</strong></div>`:""}</div>${BigInt(e.legacyFloor)>0n?`<p class="meta">Ranking includes a decaying legacy floor of ${m((BigInt(e.legacyFloor)*v).toString())} ETH/mo.</p>`:""}`:`<div class="stats-grid"><div><span class="stat-label">Total funded</span><strong>${m(e.totalFunds)} ETH</strong></div><div><span class="stat-label">Views</span><strong>${e.views===null?"Unavailable":e.views.toLocaleString()}</strong></div></div>`}</div></section>`}fundingHtml(e){let t=this.snapshot,a=t.wallet,i=t.strategy==="rent",r=A(t,e),n=!!e&&e.address.toLowerCase()===a?.backedMarkee?.toLowerCase(),d=i&&n?BigInt(a.flowRate)*v:0n,c=BigInt(t.minimum)>r.minimum?BigInt(t.minimum):r.minimum,f=d>c?d:c,u=!i&&e?1n:BigInt(t.minimum);return`<section class="funding-card"><label for="amount">${i?"Monthly streaming rate":"Payment amount"}</label><div class="amount-row"><div class="amount-value"><input id="amount" name="amount" inputmode="decimal" value="${l(M(f.toString()))}" required aria-describedby="amount-hint"><span class="mono">${i?"ETHx/mo":"ETH"}</span></div><div class="amount-presets">${o("preset:min","MIN","compact mono",'title="Use the minimum amount"')}${o("preset:boost",r.double?"2\xD7":"WIN","compact mono",'title="Suggest an amount using the loaded ranking"')}</div></div><div class="funding-caption"><span id="amount-hint">Minimum ${M(u.toString())} ${i?"ETH/mo":"ETH"}</span><span>${a?`Balance ${m(a.eth)} ETH`:"Connect to see your balance"}</span></div><div class="funding-tools">${o("tab:wallet",i?"Deposit manager \u2192":"Wallet & rewards \u2192","text-button")}<span class="meta">${i?a?.runwaySeconds!=null?`${(Number(a.runwaySeconds)/86400).toFixed(1)} days remaining`:a?`${m(a.ethx)} ETHx available`:"ETH funds your ETHx balance":"One-time payment"}</span></div></section><p class="meta funding-hint">${i?"Unspent rent is refunded while your message is not the winner. You can stop streaming at any time.":e?"Adding funds keeps the current message owner.":"Your connected wallet will own this message."} Shortcuts use the loaded ranking; positions can change.</p>`}formHtml(){let e=this.snapshot,t=this.form;return t?.kind.startsWith("edit")?`<form id="markee-action" data-form="entry"><section class="message-card"><div class="eyebrow">Your Markee</div>${t.kind==="edit-message"?this.field("message","Markee message",t.entry.message,`${e.maxMessageBytes} UTF-8 bytes maximum.`,!0):this.field("name","Your name (optional)",t.entry.name,`${e.maxNameBytes} UTF-8 bytes maximum.`)}</section></form>`:`<form id="markee-action" data-form="${t?"entry":"create"}">${t?this.selectedMessageHtml(t.entry):`<section class="message-card editor-card">${this.field("message","Markee message","",`${e.maxMessageBytes} UTF-8 bytes maximum.`,!0)}${this.field("name","Your name (optional)","",`${e.maxNameBytes} UTF-8 bytes maximum.`)}</section>`}${this.fundingHtml(t?.entry)}${!t&&e.strategy==="rent"?'<p class="note">First create your message, then review and confirm its stream. Your chosen rate is kept for the next step.</p>':""}</form>`}updateFields(){for(let t of this.root.querySelectorAll("[data-byte-limit]")){let a=Number(t.dataset.byteLimit),i=new TextEncoder().encode(t.value).length;t.setCustomValidity(i>a?`Use at most ${a} UTF-8 bytes.`:"");let r=this.root.querySelector(`[data-count-for="${t.name}"]`);r&&(r.textContent=`${i}/${a}`)}let e=this.root.querySelector("#markee-action #amount");if(e&&this.snapshot){let t=A(this.snapshot,this.form?.entry),a;try{a=BigInt(g(e.value,this.snapshot.strategy==="sale"))}catch{}let i=this.snapshot.strategy==="sale"&&this.form?1n:BigInt(this.snapshot.minimum);e.setCustomValidity(a===void 0?"Enter a valid ETH amount.":a<i?`Use at least ${M(i.toString())} ETH${this.snapshot.strategy==="rent"?" per month":""}.`:""),this.root.querySelector('[data-cmd="preset:min"]')?.setAttribute("aria-pressed",String(a===t.minimum)),this.root.querySelector('[data-cmd="preset:boost"]')?.setAttribute("aria-pressed",String(a===t.boost))}}walletHtml(){let e=this.snapshot,t=e.wallet;if(!t)return'<p class="empty">Connect your wallet to see balances and manage your Markee.</p>'+o("connect","Connect app wallet","primary full");let a=`<h2>Your wallet</h2><p class="meta mono">${l(t.address)}</p><div class="grid"><div class="card"><span class="meta">Native ETH</span><div class="metric">${m(t.eth)}</div></div><div class="card"><span class="meta">MARKEE</span><div class="metric">${t.markee===null?"Unavailable":m(t.markee,2)}</div></div></div>`;return e.strategy==="sale"?a+'<p class="note">Payments reward the paying wallet when this board has RevNet enabled. Manage your messages from the leaderboard.</p>':(a+=`<div class="divider"></div><div class="card"><div class="stat"><span>Available ETHx</span><strong>${m(t.ethx)} ETHx</strong></div><div class="stat"><span>This board\u2019s monthly rate</span><strong>${m((BigInt(t.flowRate)*2628000n).toString())} ETH</strong></div><div class="stat"><span>Refund flow / month</span><strong>${m((BigInt(t.refundRate)*2628000n).toString())} ETHx</strong></div><div class="stat"><span>Runway across all ETHx flows</span><strong>${t.runwaySeconds===null?"No net outflow":`${(Number(t.runwaySeconds)/86400).toFixed(1)} days`}</strong></div><p class="meta">Snapshot at ${new Date(t.observedAt*1e3).toLocaleTimeString()}. Balances and rates can change.</p><div class="row">${BigInt(t.flowRate)>0n?o("stop","Stop stream","danger"):""}${t.backedMarkee&&!t.poolConnected?o(`connect-refund:${t.backedMarkee}`,"Connect refund pool","accent"):""}${o("refresh","Refresh balances")}</div></div><div class="divider"></div><h3>Manage ETHx</h3><form data-form="balance"><div class="grid"><div><label for="kind">Action</label><select id="kind" name="kind"><option value="wrap">Deposit ETH \u2192 ETHx</option><option value="unwrap">Withdraw ETHx \u2192 ETH</option></select></div>${this.field("amount","Amount","0.001")}</div><button type="submit" class="btn">Review balance change</button></form><div class="divider"></div><div class="card"><h3>Buffer and rewards</h3><div class="stat"><span>Refundable board buffer</span><strong>${m(t.withdrawableDeposit)} ETHx</strong></div><div class="stat"><span>Accrued rent to settle</span><strong>${m(t.pendingSettlement)} ETH</strong></div><p class="meta">Rewards come from actual rent spent, not the ETH deposited into your wallet.</p><div class="row">${BigInt(t.withdrawableDeposit)>0n?o("withdraw-buffer","Recover buffer"):""}${BigInt(t.pendingSettlement)>0n?o("settle",e.revnetEnabled?"Claim MARKEE":"Settle rent","primary"):""}${t.backedMarkee&&BigInt(t.poolClaimable)>0n?o(`claim-refund:${t.backedMarkee}`,"Collect pool refund"):""}</div></div>`,a)}communityHtml(){let e=this.snapshot.community;return e?`<h2>Community treasury</h2><p class="muted">Community council members can activate Markee and collect community revenue.</p><div class="card"><div class="stat"><span>Integration</span><strong>${e.integration.status==="active"?"Active":"Not activated"}</strong></div><div class="stat"><span>Available revenue</span><strong>${m(e.revenue.claimableAmount)} ETH</strong></div>${e.permissions?.councilSafe?`<p class="meta">Council treasury<br><span class="mono">${l(e.permissions.councilSafe)}</span></p>`:""}<div class="row">${this.adminProcessing?'<p class="note">A signed community action is processing. Check it before authorizing another.</p>'+o("admin-check","Check community action","primary"):this.account?e.integration.status!=="active"&&e.permissions?.canActivate?o("activate","Activate community Markee","primary"):e.permissions?.canClaim&&BigInt(e.revenue.claimableAmount)>0n?o("claim","Review revenue claim","primary"):'<span class="meta">No authorized action is currently available for this wallet.</span>':o("connect","Connect council wallet","primary")}</div></div>${this.adminResult?`<div class="success">Source transaction confirmed. ${z(this.adminResult.transactionUrl||"","View transaction")}${this.adminResult.bridged?"<p>Bridge delivery is tracked separately from the source transaction.</p>":""}${o("bridge","Check transfer status")}</div>`:""}`:""}title(){let e=this.snapshot;return this.wallets?"Connect your wallet":this.review?"Review payment":this.authorization?"Review authorization":this.pending?"Payment in progress":this.tab==="wallet"?e?.strategy==="rent"?"Deposit manager":"Wallet & rewards":this.tab==="community"||e&&!e.board?"Community treasury":this.form?.kind.startsWith("edit")?"Edit your Markee":this.form?this.form.entry.owner.toLowerCase()!==this.account?.toLowerCase()?"Fund a Markee":e?.strategy==="sale"?"Fund your Markee":BigInt(e?.wallet?.flowRate??"0")>0n?"Manage your Markee stream":"Stream to your Markee":"Change the Markee Sign"}footerHtml(){let e=this.snapshot,t="";if(this.wallets)t=o("back","Back");else if(this.review)t=o("back","Back")+o("send","Confirm in wallet","primary");else if(this.authorization)t=o("back","Back")+o("sign","Sign authorization","primary");else if(this.pending)t=o("check","Check transaction","primary");else if(e&&this.tab==="main"&&e.board){let a=this.form?.kind.startsWith("edit");t=(a?o("back","Cancel"):e.strategy==="rent"&&BigInt(e.wallet?.flowRate??"0")>0n?o("stop","Stop streaming","danger"):"")+(this.account?`<button class="btn primary" type="submit" form="markee-action">${a?"Review change":!this.form&&e.strategy==="rent"?"Review creation":"Review payment info"}</button>`:o("connect","Connect wallet","primary"))}else e&&(t=o("tab:main","Back to Markee"));return`<footer><div class="footer-actions">${t}</div><div class="footer-meta"><span>Powered by Markee${this.account?` \xB7 ${C(this.account)}`:""}</span>${e?.community&&e.board&&this.tab!=="community"&&!this.review&&!this.authorization&&!this.pending?o("tab:community","Community treasury","text-button"):""}</div></footer>`}render(){if(this.closed)return;let e=this.root.activeElement,t=e?.dataset.cmd,a=e?.id,i=this.wallets?"wallets":this.review?`review:${this.review.id}`:this.authorization?`authorization:${this.authorization.value.nonce}`:this.pending?`pending:${this.pending.hash}`:`${this.tab}:${this.form?.kind??"create"}:${this.form?.entry.address??""}`,r=i===this.renderedView?this.root.querySelector(".content")?.scrollTop??0:0;this.renderedView=i;let n=!document.activeElement||document.activeElement===document.body||document.activeElement===this.host,d=this.snapshot,c="";this.wallets?c=`<h2>Choose your wallet</h2><div class="wallets">${this.wallets.map((h,b)=>o(`wallet:${b}`,l(h.name))).join("")}</div>`:this.review?c=this.reviewHtml():this.authorization?c=this.authorizationHtml():d?this.pending?c=`<h2>Waiting for confirmation</h2><p>Your transaction was sent. You can close this modal and come back to check it.</p><p class="meta mono">${l(this.pending.hash)}</p><p class="note">Do not send a second payment while this transaction is pending.</p>`:!d.board||this.tab==="community"?c=this.communityHtml():this.tab==="wallet"?c=this.walletHtml():c=`${this.form?.kind.startsWith("edit")?"":this.entriesHtml()}${this.formHtml()}`:c=this.error?o("refresh","Retry","primary"):'<div class="loading"><span class="spinner"></span>Loading Markee\u2026</div>';let f=this.result?`<div class="${this.result.status==="reverted"||this.result.settlement==="deferred"?"error":"success"}">${this.result.status==="reverted"?"Transaction reverted. No action was completed.":this.result.settlement==="deferred"?"The transaction confirmed, but reward settlement was deferred. Your claim remains available.":`Transaction confirmed.${this.result.tokensReceived&&BigInt(this.result.tokensReceived)>0n?` ${m(this.result.tokensReceived,2)} MARKEE delivered to your wallet.`:""}`} ${z(this.result.explorerUrl,"View receipt")}</div>`:"";this.root.innerHTML=`<style>${R}</style><div class="overlay"><section class="panel" role="dialog" aria-modal="true" aria-labelledby="markee-title"><header><div class="grow"><h1 id="markee-title">${l(this.title())}</h1><p class="header-caption">${l(d?.name||"Markee")}${d?` \xB7 ${d.strategy==="rent"?"For rent":"For sale"}${d.chainId===8453?" \xB7 Base":d.chainId===11155111?" \xB7 Sepolia testnet":""}`:""}</p></div><button class="close" data-cmd="close" aria-label="Close Markee">\xD7</button></header><main class="content" aria-busy="${this.busy}"><div role="status" aria-live="polite">${this.busy?'<p class="meta"><span class="spinner"></span>Working\u2026</p>':""}${this.error?`<div class="error">${l(this.error)}</div>`:""}${f}</div>${d?.warnings.map(h=>`<div class="note">${l(h)}</div>`).join("")||""}${c}</main>${this.footerHtml()}</section></div>`,this.busy&&this.root.querySelectorAll('button:not([data-cmd="close"])').forEach(h=>{h.disabled=!0});let u=this.drafts.get(this.draftKey());if(u)for(let h of this.root.querySelectorAll("input,textarea,select"))u[h.name]!==void 0&&(h.value=u[h.name]);this.updateFields();let w=this.root.querySelector(".content");w&&(w.scrollTop=r),this.viewObserver?.disconnect();let I=this.root.querySelector(".winner"),y=d?.entries.find(h=>h.address.toLowerCase()===d.top?.toLowerCase()),P=y?`${y.address}:${y.message}`:"";I&&y?.moderated===!1&&!this.viewed.has(P)&&typeof IntersectionObserver<"u"&&(this.viewObserver=new IntersectionObserver(h=>{h.some(b=>b.isIntersecting)&&(this.viewObserver?.disconnect(),this.viewed.add(P),this.client.recordView(y.address,y.message,window.location.origin).catch(()=>{this.viewed.delete(P)}))},{threshold:.5}),this.viewObserver.observe(I)),n&&((a?this.root.getElementById(a):t?[...this.root.querySelectorAll("[data-cmd]")].find(b=>b.dataset.cmd===t):null)??this.root.querySelector('[data-cmd="close"]'))?.focus({preventScroll:!0})}};function q(s={}){let e=new k(s),t,a=s.theme;return{client:e,open(i){return t?.close(),t=new L(e,{...i,theme:i.theme??a}),t},setTheme(i){a=i??{},t?.setTheme(a)},close(){t?.close(),t=void 0}}}export{H as DEFAULT_MARKEE_API_URL,k as MarkeeClient,p as MarkeeError,L as MarkeeModal,q as createMarkee,E as discoverWallets,m as formatEth,g as parseEth};
|
|
134
|
+
`;var K={background:"#fbfcff",surface:"#ffffff",text:"#181b21",muted:"#687080",border:"#dce1ea",inputBackground:"#ffffff",inputText:"#202737",primary:"#282e3e",primaryText:"#ffffff",accent:"#c9f1a7",accentText:"#2b3c20",accentSurface:"#f1f7ea",accentSurfaceText:"#4e6535",accentBorder:"#cde3b5",selected:"#e9edf7",selectedText:"#242c47",info:"#edf1f9",infoText:"#52617b",error:"#fff0f0",errorText:"#9c3540",success:"#edf7e6",successText:"#40602f",link:"#4762a5",focusRing:"#5871c8",overlay:"#17203888"},$={background:"#151923",surface:"#202633",text:"#f0f3f8",muted:"#a6b1c3",border:"#434f63",inputBackground:"#10151e",inputText:"#f0f3f8",primary:"#dde6fa",primaryText:"#182238",accent:"#c9f1a7",accentText:"#24361a",accentSurface:"#243221",accentSurfaceText:"#c4e5ad",accentBorder:"#526b40",selected:"#313d53",selectedText:"#edf3ff",info:"#243149",infoText:"#bdcff1",error:"#44262e",errorText:"#ffbdc5",success:"#233b2b",successText:"#b5e4bf",link:"#adc5ff",focusRing:"#a1b4ff",overlay:"#030711b8"},_='Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',ee=r=>`--markee-${r.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}`;function B(r,e){let t,n=(a={})=>{t?.(),t=void 0;let i=a.mode==="system"?window.matchMedia("(prefers-color-scheme: dark)"):void 0,s=()=>{let o=a.mode==="dark"||i?.matches?"dark":"light",A=o==="dark"?$:K;r.dataset.markeeTheme=o,r.style.setProperty("--markee-color-scheme",o);for(let m of Object.keys(A)){let v=a.colors?.[m];r.style.setProperty(ee(m),v&&CSS.supports("color",v)?v:A[m])}let u=a.sign?.hoverBackground,h=a.colors?.surface&&CSS.supports("color",a.colors.surface)?a.colors.surface:A.surface;r.style.setProperty("--markee-sign-hover-background",typeof u=="string"&&CSS.supports("color",u)?u:h),r.style.setProperty("--markee-sign-hover-logo-opacity",a.sign?.hoverLogo===!1?"0":"0.16"),r.style.setProperty("--markee-font-family",a.fontFamily&&CSS.supports("font-family",a.fontFamily)?a.fontFamily:_);let w=typeof a.radius=="number"&&Number.isFinite(a.radius)?Math.max(0,Math.min(48,a.radius)):22;r.style.setProperty("--markee-radius",`${w}px`);let b=(m,v)=>typeof m=="number"&&Number.isFinite(m)?Math.max(0,Math.min(48,m)):v;r.style.setProperty("--markee-card-radius",`${b(a.cardRadius,w*.64)}px`),r.style.setProperty("--markee-control-radius",`${b(a.controlRadius,w*.45)}px`),r.style.setProperty("--markee-small-radius",`${w*.32}px`)};s(),i&&(i.addEventListener("change",s),t=()=>i.removeEventListener("change",s))};return n(e),{set:n,destroy(){t?.(),t=void 0}}}var k=2628000n,D=10n**15n,S=(...r)=>r.reduce((e,t)=>e>t?e:t,0n);function M(r,e){let t=r.strategy==="rent",n=t?(BigInt(r.minimum)+D-1n)/D*D:e?1n:BigInt(r.minimum),a=r.entries.filter(h=>h.address.toLowerCase()!==e?.address.toLowerCase()),i=S(...a.map(h=>BigInt(h.score))),s=!!e&&e.address.toLowerCase()===r.top?.toLowerCase();if(!t){let h=BigInt(e?.totalFunds??"0");return{minimum:n,boost:S(n,i+D-h,s?h:0n),double:s&&h>0n}}let A=!!e&&r.wallet?.backedMarkee?.toLowerCase()===e.address.toLowerCase()?BigInt(r.wallet.flowRate):0n,u=S(BigInt(e?.aggregateRate??"0")-A);return{minimum:n,boost:S(n,(i-u)*k+D,s?A*k*2n:0n),double:s&&A>0n}}var H=r=>{let e=BigInt(r);return`${e/10n**18n}.${(e%10n**18n).toString().padStart(18,"0")}`.replace(/\.?0+$/,"")||"0"},c=(r,e,t="",n="")=>`<button type="button" class="btn ${t}" data-cmd="${r}" ${n}>${e}</button>`,L=(r,e)=>/^https:\/\//.test(r)?`<a href="${d(r)}" target="_blank" rel="noopener noreferrer">${d(e)} \u2197</a>`:"",P=class{constructor(e,t){this.client=e;this.options=t;if(typeof document>"u")throw new Error("Open the Markee modal in a browser.");e.registerSite(t.placement),this.previousFocus=document.activeElement,this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden",this.host=document.createElement("div"),this.host.setAttribute("data-markee-modal",""),this.root=this.host.attachShadow({mode:"open"}),this.theme=B(this.host,t.theme??e.options.theme),document.body.appendChild(this.host),this.root.addEventListener("click",this.onClick),this.root.addEventListener("submit",this.onSubmit),this.root.addEventListener("keydown",this.onKey),this.root.addEventListener("input",()=>{this.captureDraft(),this.updateFields()}),e.request("checkout/config").then(n=>{this.cardAvailable=n.enabled===!0}).catch(()=>{}).finally(()=>{this.checkoutChecked=!0,this.render()}),this.render(),this.root.querySelector('[data-cmd="close"]')?.focus(),this.reload(),this.watchAccount()}host;root;theme;snapshot;cardAvailable=!1;checkoutChecked=!1;account=null;observedAccount;tab="main";leaderboardOpen=!1;initialSelection=!1;renderedView="";form;review;authorization;adminResult;adminProcessing=!1;result;pending;wallets;busy=!1;busyMessage="Working\u2026";error="";closed=!1;epoch=0;timer;accountTimer;watched;previousFocus;previousOverflow;abort=new AbortController;drafts=new Map;viewObserver;viewed=new Set;walletChanged=()=>{this.handleWalletChange()};handleWalletChange(){this.busy||this.closed||(this.initialSelection=!1,this.review=void 0,this.authorization=void 0,this.form=void 0,this.tab="main",this.result=void 0,this.error="",this.snapshot=void 0,this.render(),this.reload())}close(){this.closed||(this.closed=!0,this.abort.abort(),clearTimeout(this.timer),clearTimeout(this.accountTimer),this.viewObserver?.disconnect(),this.theme.destroy(),this.watched?.removeListener?.("accountsChanged",this.walletChanged),this.watched?.removeListener?.("chainChanged",this.walletChanged),this.host.remove(),document.body.style.overflow=this.previousOverflow,this.previousFocus?.focus(),this.options.onClose?.())}setTheme(e){this.closed||this.theme.set(e)}async watchAccount(){try{let e=await this.client.provider();e!==this.watched&&(this.watched?.removeListener?.("accountsChanged",this.walletChanged),this.watched?.removeListener?.("chainChanged",this.walletChanged),this.watched=e||void 0,e?.on?.("accountsChanged",this.walletChanged),e?.on?.("chainChanged",this.walletChanged));let t=await this.client.account();if(this.closed)return;this.observedAccount===void 0?this.observedAccount=t:t?.toLowerCase()!==this.observedAccount?.toLowerCase()&&!this.busy&&(this.observedAccount=t,this.walletChanged())}catch{}this.closed||(this.accountTimer=setTimeout(()=>void this.watchAccount(),2e3))}async reload(e){let t=++this.epoch;try{let n=await this.client.account().catch(()=>null),a=await this.client.snapshot(this.options.placement,n,e,this.abort.signal);if(this.closed||t!==this.epoch)return;if(this.account=n,this.snapshot=a,this.error="",this.form&&(this.form.entry=a.entries.find(s=>s.address.toLowerCase()===this.form.entry.address.toLowerCase())??this.form.entry),!this.initialSelection&&n){this.initialSelection=!0;let s=a.entries.find(o=>o.address.toLowerCase()===a.wallet?.backedMarkee?.toLowerCase())??a.entries.find(o=>o.owner.toLowerCase()===n.toLowerCase());s&&!this.form&&!this.drafts.get("create")?.message&&(this.form={kind:a.strategy==="rent"?"stream":"fund",entry:s})}this.options.placement.kind==="gardens-community"&&(this.adminResult=this.client.communityReceipt(this.options.placement)||void 0),this.pending=n?this.client.pending(this.options.placement,n):void 0;let i=this.client.pendingAuthorization();this.adminProcessing=!!i&&this.options.placement.kind==="gardens-community"&&i.account.toLowerCase()===n?.toLowerCase()&&i.community.toLowerCase()===this.options.placement.community.toLowerCase()&&i.chainId===this.options.placement.chainId,this.render(),this.pending&&this.poll()}catch(n){!this.closed&&t===this.epoch&&this.fail(n)}}fail(e){this.error=e instanceof Error?e.message:String(e),this.render()}async task(e){if(!this.busy){this.busy=!0,this.error="",this.render();try{await e()}catch(t){this.fail(t)}finally{this.busy=!1,this.busyMessage="Working\u2026",this.render()}}}async connect(){if(!this.client.options.wallet){let e=await J();if(e.length>1){this.wallets=e,this.render();return}}this.host.style.visibility="hidden";try{await this.client.connect()}finally{this.host.style.visibility=""}await this.reload()}async prepare(e){if(this.pending)throw new Error("Check your pending transaction before preparing another action.");if(!this.account){await this.connect();return}let t=e.kind==="wrap"||this.snapshot?.strategy==="sale"&&(e.kind==="fund"||e.kind==="create")?e.amount:void 0;if(t&&this.snapshot?.wallet&&BigInt(t)>BigInt(this.snapshot.wallet.eth))throw new Error("Not enough ETH for this payment. Lower the amount or add ETH to your wallet.");this.review=await this.client.prepare(this.options.placement,e),this.authorization=void 0}async poll(){if(clearTimeout(this.timer),!(!this.pending||this.closed)){try{let e=this.pending,t=await this.client.verify(e);if(this.closed||this.pending?.hash!==e.hash)return;if(t.status!=="pending"){if(this.pending=void 0,this.result=t,this.error="",await this.reload(),t.createdMarkee&&this.snapshot?.strategy==="rent"){let n=this.snapshot.entries.find(i=>i.address.toLowerCase()===t.createdMarkee.toLowerCase()),a=e.preparation.action;if(a.kind==="create"){this.form={kind:"stream",entry:n||{address:t.createdMarkee,owner:e.preparation.transaction.from,message:a.message,name:a.name,score:"0",totalFunds:"0",aggregateRate:"0",legacyFloor:"0",moderated:!1,views:0}};let i=this.drafts.get("create")?.amount;i&&this.drafts.set(this.draftKey(),{amount:i})}}this.render();return}}catch(e){this.closed||this.fail(e)}!this.closed&&this.pending&&(this.timer=setTimeout(()=>void this.poll(),5e3))}}async applyAdmin(e){if(this.authorization=void 0,this.adminProcessing=e.status==="working"||e.status==="submitted",e.status==="complete"&&(this.adminResult=e.result,await this.reload()),e.status==="failed")throw new Error(e.error||"Community action failed.")}onClick=e=>{let t=e.target.closest("[data-cmd]");if(!t)return;let n=t.dataset.cmd;if(n==="close"){this.close();return}if((n==="copy-recipient"||n==="copy-wallet")&&this.review){let a=n==="copy-recipient"?this.review.transaction.to:this.review.transaction.from,i=navigator.clipboard?.writeText(a);if(!i){t.textContent="Copy unavailable";return}i.then(()=>{t.textContent="Copied",setTimeout(()=>{t.isConnected&&(t.textContent="Copy")},2e3)}).catch(()=>{t.textContent="Copy failed"});return}if(!this.busy){if(this.captureDraft(),n==="leaderboard"){this.leaderboardOpen=!this.leaderboardOpen,this.render();return}if(n==="create"){this.tab="main",this.form=void 0,this.review=void 0,this.render();return}if(n.startsWith("tab:")){this.tab=n.slice(4),this.review=void 0,this.authorization=void 0,this.render();return}if(n==="back"){this.review||this.authorization||this.wallets?(this.review=void 0,this.authorization=void 0,this.wallets=void 0):this.tab!=="main"?this.tab="main":this.form?.kind.startsWith("edit")?this.form={kind:this.snapshot.strategy==="rent"?"stream":"fund",entry:this.form.entry}:this.form=void 0,this.render();return}if(n.startsWith("preset:")&&this.snapshot){let a=this.root.querySelector("#amount");if(a){let i=M(this.snapshot,this.form?.entry);a.value=H((n==="preset:min"?i.minimum:i.boost).toString()),this.captureDraft(),this.updateFields()}return}if(n.startsWith("form:")){let[,a,i]=n.split(":"),s=this.snapshot?.entries.find(o=>o.address===i);s&&(this.form={kind:a,entry:s},this.tab="main"),this.render();return}if(n==="card"&&this.hostedEligible()&&this.cardAvailable){this.captureDraft();let a=this.root.querySelector("#markee-action");if(!a||!a.reportValidity())return;let i=new FormData(a),s;try{let A=y(String(i.get("amount")||""));s=this.form?.kind==="fund"?{kind:"fund",markee:this.form.entry.address,amount:A}:{kind:"create",message:String(i.get("message")||""),name:String(i.get("name")||""),amount:A}}catch(A){this.error=A.message,this.render();return}let o=Z(this.client,this.options.placement,s);this.task(async()=>{let A=await o;if(A.status!=="confirmed")throw new Error("Payment was not confirmed.");this.result=A,this.client.options.onEvent?.({type:"confirmed",hash:A.hash}),await this.reload()});return}this.task(async()=>{if(n==="connect")await this.connect();else if(n.startsWith("wallet:"))await this.client.connect(this.wallets[Number(n.slice(7))].provider),this.wallets=void 0,await this.reload();else if(n==="refresh")await this.reload();else if(n==="more")await this.reload(this.snapshot?.nextOffset??void 0);else if(n==="send"&&this.review){let a=this.review,i;try{i=await this.client.send(a)}catch(s){if(!(s instanceof p)||s.code!=="REVIEW_EXPIRED")throw s;this.busyMessage="Refreshing payment details\u2026",this.render(),await this.prepare(a.action);return}this.pending={preparation:a,hash:i},this.review=void 0,this.form=void 0,this.result=void 0,this.poll()}else if(n==="check")await this.poll();else if(["stop","withdraw-buffer","settle"].includes(n))await this.prepare({kind:n});else if(n.startsWith("claim-refund:")||n.startsWith("connect-refund:")||n.startsWith("claim-top:")){let[a,i]=n.split(":");await this.prepare({kind:a,markee:i})}else if(n==="activate"||n==="claim"){let a=this.options.placement;if(a.kind!=="gardens-community"||!this.account)return;let i=this.account;this.authorization={kind:n,account:i,value:await this.client.authorize(a,n)},this.review=void 0}else if(n==="sign"&&this.authorization){let a=this.authorization;try{await this.applyAdmin(await this.client.executeAuthorization(a.kind,a.value,a.account))}finally{this.client.pendingAuthorization()&&(this.authorization=void 0,this.adminProcessing=!0)}}else if(n==="admin-check")await this.applyAdmin(await this.client.resumeAuthorization());else if(n==="bridge"&&this.adminResult){let a=await this.client.bridgeStatus(this.adminResult.bridgeProtocol||"none",this.adminResult.transactionHash,this.snapshot.chainId,this.options.placement.chainId);this.error=`Treasury transfer status: ${a.status.replace(/_/g," ")}.`}})}};onSubmit=e=>{if(e.preventDefault(),this.busy)return;if(!this.account){this.root.querySelector('[data-cmd="card"]:not(:disabled)')?.click();return}this.captureDraft();let t=e.target,n=new FormData(t),a=i=>String(n.get(i)||"");this.task(async()=>{if(t.dataset.form==="create")this.snapshot?.strategy==="rent"&&y(a("amount")),await this.prepare({kind:"create",message:a("message"),name:a("name"),...this.snapshot?.strategy==="sale"?{amount:y(a("amount"),!0)}:{}});else if(t.dataset.form==="balance")await this.prepare({kind:a("kind"),amount:y(a("amount"))});else if(this.form){let{kind:i,entry:s}=this.form;i==="fund"?await this.prepare({kind:i,markee:s.address,amount:y(a("amount"))}):i==="stream"?await this.prepare({kind:i,markee:s.address,monthlyAmount:y(a("amount"))}):i==="edit-message"?await this.prepare({kind:i,markee:s.address,message:a("message")}):await this.prepare({kind:i,markee:s.address,name:a("name")})}})};draftKey(){return this.tab!=="main"?this.tab:this.form?`${this.form.kind}:${this.form.entry.address}`:"create"}captureDraft(){let e=this.root.querySelector("form");e&&this.drafts.set(this.draftKey(),Object.fromEntries([...new FormData(e)].map(([t,n])=>[t,String(n)])))}onKey=e=>{let t=e;if(t.key==="Escape"&&(t.preventDefault(),this.close()),t.key!=="Tab"||this.host.style.visibility==="hidden")return;let n=[...this.root.querySelectorAll("button:not(:disabled),a[href],input,textarea,select")],a=n[0],i=n[n.length-1];t.shiftKey&&this.root.activeElement===a?(t.preventDefault(),i?.focus()):!t.shiftKey&&this.root.activeElement===i&&(t.preventDefault(),a?.focus())};field(e,t,n="",a="",i=!1){let s=e==="message"?this.snapshot?.maxMessageBytes:e==="name"?this.snapshot?.maxNameBytes:void 0,o=`${e==="name"?"":"required"} ${s===void 0?"":`data-byte-limit="${s}"`} aria-describedby="${e}-hint"`;return`<div class="field"><label for="${e}">${t}${s===void 0?"":`<span class="field-count" aria-hidden="true" data-count-for="${e}"></span>`}</label>${i?`<textarea id="${e}" name="${e}" ${o} placeholder="Your message on the sign">${d(n)}</textarea>`:`<input id="${e}" name="${e}" ${e==="amount"?'inputmode="decimal"':""} value="${d(n)}" ${o}>`}${a?`<small id="${e}-hint">${a}</small>`:""}</div>`}reviewHtml(){let e=this.review,t=e.action,n="markee"in t?this.snapshot?.entries.find(m=>m.address.toLowerCase()===t.markee.toLowerCase()):void 0,a=t.kind==="create"||t.kind==="edit-message"?t.message:this.form?this.entryMessage(this.form.entry):n?this.entryMessage(n):void 0,i=BigInt(e.transaction.value),s=t.kind==="stream"?`${l(t.monthlyAmount)} ETHx/mo`:t.kind==="fund"||t.kind==="create"&&i>0n?`${l(i.toString())} ETH`:null,o=s!==null,A=o?[["Paying",s],...t.kind==="stream"&&i>0n?[["Depositing now",`${l(i.toString())} ETH`]]:[],["Estimated network fee",`${l(e.review.estimatedGasCost)} ETH`],["You'll earn",e.review.estimatedTokens!==void 0?`${l(e.review.estimatedTokens,4)} ${t.kind==="stream"?"MARKEE/month (estimated while winning)":"MARKEE (estimated)"}`:this.snapshot?.revnetEnabled?t.kind==="stream"?"MARKEE while winning":"MARKEE to your wallet":"No MARKEE on this board"]]:[["Action",e.review.title],["Native ETH sent",`${l(i.toString())} ETH`],["Estimated network fee",`${l(e.review.estimatedGasCost)} ETH`]],u=e.review.lines.filter(m=>!/^(Message: |Name: |Native ETH sent: |Network: |Recipient: )/.test(m)),h=A.map(([m,v])=>`<div class="review-row"><span>${d(m)}</span><strong>${d(v)}</strong></div>`).join(""),w=t.kind==="stream"?"Your payment only streams while your message is winning":t.kind==="fund"?"Funding keeps the current message owner":t.kind==="create"&&o?"Your payment gives you this Markee message":"Review this wallet action",b=t.kind==="stream"?"Anyone can overtake your message. The refund pool offsets rent while you are not winning; you can stop the stream at any time.":e.review.reward;return`<div class="payment-review">${a?`<section class="review-message" aria-label="Markee message"><p class="message">${d(a)}</p></section>`:""}<section class="review-summary" aria-label="Payment summary">${h}</section><section class="review-callout"><strong>${d(w)}</strong><p>${d(b)}</p></section><details class="review-details"><summary>Transaction details</summary><div class="review-row"><span>Network</span><strong>${d(this.snapshot?.chainId===8453?"Base":this.snapshot?.chainId===11155111?"Sepolia testnet":String(e.transaction.chainId))}</strong></div><div class="review-row"><span>Recipient</span><div class="review-address"><strong class="mono" title="${d(e.transaction.to)}">${d(E(e.transaction.to))}</strong>${c("copy-recipient","Copy","review-copy",'aria-label="Copy recipient address"')}</div></div><div class="review-row"><span>Wallet</span><div class="review-address"><strong class="mono" title="${d(e.transaction.from)}">${d(E(e.transaction.from))}</strong>${c("copy-wallet","Copy","review-copy",'aria-label="Copy wallet address"')}</div></div>${t.kind==="stream"?"":`${u.map(m=>`<p>${d(m)}</p>`).join("")}<p>This review expires in 5 minutes. Your wallet shows the final network fee.</p>`}</details></div>`}authorizationHtml(){let e=this.authorization,t=e.value.typedData.message;return`<div class="eyebrow">Community authorization</div><h2>${e.kind==="activate"?"Activate this community\u2019s Markee":"Claim community revenue"}</h2><p>A signed authorization lets Markee\u2019s keeper execute this action. The server rechecks your current council role before submitting it.</p><div class="card stack">${["registryCommunity","recipient","leaderboardFactory"].filter(n=>t[n]).map(n=>`<div class="meta">${d(n)}<br><strong class="mono">${d(t[n])}</strong></div>`).join("")}${["claimAmount","gasCost","maxFeeAmount"].filter(n=>t[n]!==void 0).map(n=>`<div class="stat"><span>${n==="claimAmount"?"Revenue":n==="gasCost"?"Keeper network fee":"Maximum bridge fee"}</span><strong>${l(String(t[n]))} ETH</strong></div>`).join("")}</div><p class="note">${e.kind==="claim"?"Revenue is sent to the community council treasury. Bridged claims remain pending until destination delivery is confirmed.":"This creates the community board and its revenue vault on the Markee chain."}</p>`}entryMessage(e){return e.moderated===!1?e.message:e.moderated?"This message is hidden by moderation.":"Message unavailable while moderation loads."}entryMessageHtml(e){return`<p class="message${e.moderated===!1?"":" moderation-placeholder"}">${d(this.entryMessage(e))}</p>`}entriesHtml(){let e=this.snapshot,t=[...e.entries].sort((i,s)=>BigInt(i.score)>BigInt(s.score)?-1:BigInt(i.score)<BigInt(s.score)?1:0),n=[...t.filter(i=>i.owner.toLowerCase()===this.account?.toLowerCase()),...t.filter(i=>i.owner.toLowerCase()!==this.account?.toLowerCase())],a=e.board&&[8453,11155111].includes(e.chainId)?`https://${e.chainId===8453?"www":"2staging"}.markee.xyz/markee/${e.board}`:"";return`<section class="leaderboard" aria-label="Markee leaderboard"><div class="row between">${c("leaderboard",`<span class="chevron" aria-hidden="true">${this.leaderboardOpen?"\u2303":"\u2304"}</span> Leaderboard`,"text-button",`aria-expanded="${this.leaderboardOpen}" aria-controls="markee-leaderboard"`)}${L(a,"Open in Markee")}</div>${this.leaderboardOpen?`<div class="leaderboard-list" id="markee-leaderboard">${n.map(i=>{let s=i.owner.toLowerCase()===this.account?.toLowerCase(),o=i.address.toLowerCase()===e.top?.toLowerCase(),A=i.address.toLowerCase()===this.form?.entry.address.toLowerCase();return`<article class="leaderboard-entry ${o?"winner":""} ${A?"selected-entry":""}"><div class="grow">${this.entryMessageHtml(i)}<div class="row entry-caption">${o?'<span class="pill">Winner</span>':""}${s?'<span class="meta">Yours</span>':""}${i.moderated===!1&&i.name?`<span class="name">${d(i.name)}</span>`:""}</div></div><div class="entry-funding"><div class="meta mono">${e.strategy==="rent"?`${l((BigInt(i.score)*k).toString())} ETH/mo`:`${l(i.totalFunds)} ETH`}</div><span class="meta">${i.views===null?"Views unavailable":`${i.views.toLocaleString()} views`}</span>${c(`form:${e.strategy==="sale"?"fund":"stream"}:${i.address}`,A?"Selected":"Fund",`compact ${A?"primary":""}`,`aria-pressed="${A}" aria-label="${A?"Selected":"Fund"} message ${E(i.address)}"`)}</div></article>`}).join("")||'<p class="empty">No Markees yet. Create the first one.</p>'}${e.strategy==="rent"&&e.rankedTop&&e.rankedTop.toLowerCase()!==e.top?.toLowerCase()?`<p class="note">The ranking has changed. ${c(`claim-top:${e.rankedTop}`,"Refresh winner","compact")}</p>`:""}${e.nextOffset!==null?c("more","Browse more messages","full"):""}</div>`:""}</section>`}selectedMessageHtml(e){let t=this.snapshot,n=t.wallet,a=e.owner.toLowerCase()===this.account?.toLowerCase(),i=t.entries.find(A=>A.owner.toLowerCase()===this.account?.toLowerCase()),s=e.address.toLowerCase()===t.top?.toLowerCase(),o=e.address.toLowerCase()===n?.backedMarkee?.toLowerCase()&&BigInt(n?.flowRate??"0")>0n;return`<section class="message-card ${s?"winner":""}"><div class="row between"><span class="eyebrow">${a?"Your Markee":"Markee you\u2019re funding"}</span>${s?'<span class="pill">Winner</span>':""}</div>${this.entryMessageHtml(e)}${e.moderated===!1&&e.name?`<p class="name">${d(e.name)}</p>`:""}<div class="row message-tools">${a?c(`form:edit-message:${e.address}`,"Edit message","text-button")+c(`form:edit-name:${e.address}`,"Edit name","text-button"):""}${!a&&i?c(`form:${t.strategy==="rent"?"stream":"fund"}:${i.address}`,"Back to your Markee","text-button"):""}${c("create","Create your own Markee","text-button")}${t.strategy==="rent"&&this.account&&e.address.toLowerCase()===n?.backedMarkee?.toLowerCase()&&BigInt(n?.poolClaimable??"0")>0n?c(`claim-refund:${e.address}`,"Collect refund","text-button"):""}</div><div class="message-stats">${t.strategy==="rent"?`<span class="meta">${this.account?o?s?"\u25CF Active stream":n?.poolConnected?"\u25CF Stream refunded while not the winner":"\u25CF Connect your refund pool in Deposit manager":"No active stream from your wallet to this message":"Live message ranking"}</span><div class="stats-grid"><div><span class="stat-label">Ranking rate</span><strong>${l((BigInt(e.score)*k).toString())} ETH/mo</strong></div>${this.account?`<div><span class="stat-label">Your rate</span><strong>${l((o?BigInt(n.flowRate)*k:0n).toString())} ETH/mo</strong></div>`:""}${n?`<div><span class="stat-label">ETHx balance</span><strong>${l(n.ethx)} ETHx</strong></div><div><span class="stat-label">Funds remaining</span><strong title="Across all of your ETHx flows">${n.runwaySeconds===null?"No net outflow":`${(Number(n.runwaySeconds)/86400).toFixed(1)} days`}</strong></div>`:""}</div>${BigInt(e.legacyFloor)>0n?`<p class="meta">Ranking includes a decaying legacy floor of ${l((BigInt(e.legacyFloor)*k).toString())} ETH/mo.</p>`:""}`:`<div class="stats-grid"><div><span class="stat-label">Total funded</span><strong>${l(e.totalFunds)} ETH</strong></div><div><span class="stat-label">Views</span><strong>${e.views===null?"Unavailable":e.views.toLocaleString()}</strong></div></div>`}</div></section>`}fundingHtml(e){let t=this.snapshot,n=t.wallet,a=t.strategy==="rent",i=M(t,e),s=!!e&&e.address.toLowerCase()===n?.backedMarkee?.toLowerCase(),o=a&&s?BigInt(n.flowRate)*k:0n,A=BigInt(t.minimum)>i.minimum?BigInt(t.minimum):i.minimum,u=o>A?o:A,h=!a&&e?1n:BigInt(t.minimum);return`<section class="funding-card"><label for="amount">${a?"Monthly streaming rate":"Payment amount"}</label><div class="amount-row"><div class="amount-value"><input id="amount" name="amount" inputmode="decimal" value="${d(H(u.toString()))}" required aria-describedby="amount-hint"><span class="mono">${a?"ETHx/mo":"ETH"}</span></div><div class="amount-presets">${c("preset:min","MIN","compact mono",'title="Use the minimum amount"')}${c("preset:boost",i.double?"2\xD7":"WIN","compact mono",'title="Suggest an amount using the loaded ranking"')}</div></div><div class="funding-caption"><span id="amount-hint">Minimum ${H(h.toString())} ${a?"ETH/mo":"ETH"}</span>${this.account&&n?`<span data-wallet-balance>Balance ${l(n.eth)} ETH</span>`:""}</div><div class="funding-tools">${this.account?c("tab:wallet",a?"Deposit manager \u2192":"Wallet & rewards \u2192","text-button"):""}<span class="meta">${a?n?.runwaySeconds!=null?`${(Number(n.runwaySeconds)/86400).toFixed(1)} days remaining`:n?`${l(n.ethx)} ETHx available`:"ETH funds your ETHx balance":"One-time payment"}</span></div></section><p class="meta funding-hint">${a?"Unspent rent is refunded while your message is not the winner. You can stop streaming at any time.":e?"Adding funds keeps the current message owner.":"The paying wallet will own this message."} Shortcuts use the loaded ranking; positions can change.</p>`}formHtml(){let e=this.snapshot,t=this.form;return t?.kind.startsWith("edit")?`<form id="markee-action" data-form="entry"><section class="message-card"><div class="eyebrow">Your Markee</div>${t.kind==="edit-message"?this.field("message","Markee message",t.entry.message,`${e.maxMessageBytes} UTF-8 bytes maximum.`,!0):this.field("name","Your name (optional)",t.entry.name,`${e.maxNameBytes} UTF-8 bytes maximum.`)}</section></form>`:`<form id="markee-action" data-form="${t?"entry":"create"}">${t?this.selectedMessageHtml(t.entry):`<section class="message-card editor-card">${this.field("message","Markee message","",`${e.maxMessageBytes} UTF-8 bytes maximum.`,!0)}${this.field("name","Your name (optional)","",`${e.maxNameBytes} UTF-8 bytes maximum.`)}</section>`}${this.fundingHtml(t?.entry)}${!t&&e.strategy==="rent"?'<p class="note">First create your message, then review and confirm its stream. Your chosen rate is kept for the next step.</p>':""}</form>`}updateFields(){for(let t of this.root.querySelectorAll("[data-byte-limit]")){let n=Number(t.dataset.byteLimit),a=new TextEncoder().encode(t.value).length;t.setCustomValidity(a>n?`Use at most ${n} UTF-8 bytes.`:"");let i=this.root.querySelector(`[data-count-for="${t.name}"]`);i&&(i.textContent=`${a}/${n}`)}let e=this.root.querySelector("#markee-action #amount");if(e&&this.snapshot){let t=M(this.snapshot,this.form?.entry),n;try{n=BigInt(y(e.value,this.snapshot.strategy==="sale"))}catch{}let a=!!this.account&&this.snapshot.strategy==="sale"&&!!this.snapshot.wallet&&n!==void 0&&n>BigInt(this.snapshot.wallet.eth);this.root.querySelector("[data-wallet-balance]")?.classList.toggle("danger",a);let i=this.root.querySelector('button[form="markee-action"]'),s=this.root.querySelector("#balance-tooltip"),o=this.root.querySelector(".review-action");i&&(i.disabled=this.busy||a,a?i.setAttribute("aria-describedby","balance-tooltip"):i.removeAttribute("aria-describedby")),s&&(s.hidden=!a),o&&(o.classList.toggle("insufficient",a),a?(o.tabIndex=0,o.setAttribute("aria-label","Review payment unavailable: not enough ETH."),o.setAttribute("aria-describedby","balance-tooltip")):(o.removeAttribute("tabindex"),o.removeAttribute("aria-label"),o.removeAttribute("aria-describedby")));let A=this.snapshot.strategy==="sale"&&this.form?1n:BigInt(this.snapshot.minimum);e.setCustomValidity(n===void 0?"Enter a valid ETH amount.":n<A?`Use at least ${H(A.toString())} ETH${this.snapshot.strategy==="rent"?" per month":""}.`:""),this.root.querySelector('[data-cmd="preset:min"]')?.setAttribute("aria-pressed",String(n===t.minimum)),this.root.querySelector('[data-cmd="preset:boost"]')?.setAttribute("aria-pressed",String(n===t.boost))}}walletHtml(){let e=this.snapshot,t=e.wallet;if(!t)return'<p class="empty">Connect your wallet to see balances and manage your Markee.</p>'+c("connect","Connect app wallet","primary full");let n=`<h2>Your wallet</h2><p class="meta mono">${d(t.address)}</p><div class="grid"><div class="card"><span class="meta">Native ETH</span><div class="metric">${l(t.eth)}</div></div><div class="card"><span class="meta">MARKEE</span><div class="metric">${t.markee===null?"Unavailable":l(t.markee,2)}</div></div></div>`;return e.strategy==="sale"?n+'<p class="note">Payments reward the paying wallet when this board has RevNet enabled. Manage your messages from the leaderboard.</p>':(n+=`<div class="divider"></div><div class="card"><div class="stat"><span>Available ETHx</span><strong>${l(t.ethx)} ETHx</strong></div><div class="stat"><span>This board\u2019s monthly rate</span><strong>${l((BigInt(t.flowRate)*2628000n).toString())} ETH</strong></div><div class="stat"><span>Refund flow / month</span><strong>${l((BigInt(t.refundRate)*2628000n).toString())} ETHx</strong></div><div class="stat"><span>Runway across all ETHx flows</span><strong>${t.runwaySeconds===null?"No net outflow":`${(Number(t.runwaySeconds)/86400).toFixed(1)} days`}</strong></div><p class="meta">Snapshot at ${new Date(t.observedAt*1e3).toLocaleTimeString()}. Balances and rates can change.</p><div class="row">${BigInt(t.flowRate)>0n?c("stop","Stop stream","danger"):""}${t.backedMarkee&&!t.poolConnected?c(`connect-refund:${t.backedMarkee}`,"Connect refund pool","accent"):""}${c("refresh","Refresh balances")}</div></div><div class="divider"></div><h3>Manage ETHx</h3><form data-form="balance"><div class="grid"><div><label for="kind">Action</label><select id="kind" name="kind"><option value="wrap">Deposit ETH \u2192 ETHx</option><option value="unwrap">Withdraw ETHx \u2192 ETH</option></select></div>${this.field("amount","Amount","0.001")}</div><button type="submit" class="btn">Review balance change</button></form><div class="divider"></div><div class="card"><h3>Buffer and rewards</h3><div class="stat"><span>Refundable board buffer</span><strong>${l(t.withdrawableDeposit)} ETHx</strong></div><div class="stat"><span>Accrued rent to settle</span><strong>${l(t.pendingSettlement)} ETH</strong></div><p class="meta">Rewards come from actual rent spent, not the ETH deposited into your wallet.</p><div class="row">${BigInt(t.withdrawableDeposit)>0n?c("withdraw-buffer","Recover buffer"):""}${BigInt(t.pendingSettlement)>0n?c("settle",e.revnetEnabled?"Claim MARKEE":"Settle rent","primary"):""}${t.backedMarkee&&BigInt(t.poolClaimable)>0n?c(`claim-refund:${t.backedMarkee}`,"Collect pool refund"):""}</div></div>`,n)}communityHtml(){let e=this.snapshot.community;return e?`<h2>Community treasury</h2><p class="muted">Community council members can activate Markee and collect community revenue.</p><div class="card"><div class="stat"><span>Integration</span><strong>${e.integration.status==="active"?"Active":"Not activated"}</strong></div><div class="stat"><span>Available revenue</span><strong>${l(e.revenue.claimableAmount)} ETH</strong></div>${e.permissions?.councilSafe?`<p class="meta">Council treasury<br><span class="mono">${d(e.permissions.councilSafe)}</span></p>`:""}<div class="row">${this.adminProcessing?'<p class="note">A signed community action is processing. Check it before authorizing another.</p>'+c("admin-check","Check community action","primary"):this.account?e.integration.status!=="active"&&e.permissions?.canActivate?c("activate","Activate community Markee","primary"):e.permissions?.canClaim&&BigInt(e.revenue.claimableAmount)>0n?c("claim","Review revenue claim","primary"):'<span class="meta">No authorized action is currently available for this wallet.</span>':c("connect","Connect council wallet","primary")}</div></div>${this.adminResult?`<div class="success">Source transaction confirmed. ${L(this.adminResult.transactionUrl||"","View transaction")}${this.adminResult.bridged?"<p>Bridge delivery is tracked separately from the source transaction.</p>":""}${c("bridge","Check transfer status")}</div>`:""}`:""}title(){let e=this.snapshot;return this.wallets?"Connect your wallet":this.review?this.review.action.kind==="create"&&BigInt(this.review.transaction.value)===0n?"Review creation":this.review.action.kind.startsWith("edit-")?"Review change":"Review payment":this.authorization?"Review authorization":this.pending?"Payment in progress":this.tab==="wallet"?e?.strategy==="rent"?"Deposit manager":"Wallet & rewards":this.tab==="community"||e&&!e.board?"Community treasury":this.form?.kind.startsWith("edit")?"Edit your Markee":this.form?this.form.entry.owner.toLowerCase()!==this.account?.toLowerCase()?"Fund a Markee":e?.strategy==="sale"?"Fund your Markee":BigInt(e?.wallet?.flowRate??"0")>0n?"Manage your Markee stream":"Stream to your Markee":"Change the Markee Sign"}hostedEligible(){let e=this.snapshot;return!!e&&e.strategy==="sale"&&e.chainId===8453&&e.placement.kind==="board"&&e.revnetEnabled&&!!e.token}footerHtml(){let e=this.snapshot,t="",n=!1;if(this.wallets)t=c("back","Back");else if(this.review)t=c("back","Back")+c("send",this.review.action.kind==="fund"||this.review.action.kind==="stream"||this.review.action.kind==="create"&&BigInt(this.review.transaction.value)>0n?"Confirm payment":"Confirm in wallet","primary");else if(this.authorization)t=c("back","Back")+c("sign","Sign authorization","primary");else if(this.pending)t=c("check","Check transaction","primary");else if(e&&this.tab==="main"&&e.board){let a=this.form?.kind.startsWith("edit"),i=a?c("back","Cancel"):e.strategy==="rent"&&BigInt(e.wallet?.flowRate??"0")>0n?c("stop","Stop streaming","danger"):"";this.account?(n=this.cardAvailable&&this.hostedEligible()&&!a,t=(n?c("card","Pay by card","primary"):"")+i+`<span class="review-action"><button class="btn primary" type="submit" form="markee-action">${a?"Review change":!this.form&&e.strategy==="rent"?"Review creation":"Review payment info"}</button><span id="balance-tooltip" class="balance-tooltip" role="tooltip" hidden>You don\u2019t have enough ETH for this payment.</span></span>`):t=c("card","Pay","primary",!this.checkoutChecked||!this.cardAvailable||!this.hostedEligible()?"disabled":"")}else e&&(t=c("tab:main","Back to Markee"));return`<footer${this.review?' class="review-footer"':n?' class="payment-choice-footer"':""}><div class="footer-actions">${t}</div>${this.review?"":`<div class="footer-meta"><span>Powered by Markee${this.account?` \xB7 ${E(this.account)}`:""}</span>${this.account&&e?.community&&e.board&&this.tab!=="community"&&!this.authorization&&!this.pending?c("tab:community","Community accumulated revenue","text-button"):""}</div>`}</footer>`}render(){if(this.closed)return;let e=this.root.activeElement,t=e?.dataset.cmd,n=e?.id,a=this.wallets?"wallets":this.review?`review:${this.review.id}`:this.authorization?`authorization:${this.authorization.value.nonce}`:this.pending?`pending:${this.pending.hash}`:`${this.tab}:${this.form?.kind??"create"}:${this.form?.entry.address??""}`,i=a===this.renderedView?this.root.querySelector(".content")?.scrollTop??0:0;this.renderedView=a;let s=!document.activeElement||document.activeElement===document.body||document.activeElement===this.host,o=this.snapshot,A="";this.wallets?A=`<h2>Choose your wallet</h2><div class="wallets">${this.wallets.map((g,f)=>c(`wallet:${f}`,d(g.name))).join("")}</div>`:this.review?A=this.reviewHtml():this.authorization?A=this.authorizationHtml():o?this.pending?A=`<h2>Waiting for confirmation</h2><p>Your transaction was sent. You can close this modal and come back to check it.</p><p class="meta mono">${d(this.pending.hash)}</p><p class="note">Do not send a second payment while this transaction is pending.</p>`:!o.board||this.tab==="community"?A=this.communityHtml():this.tab==="wallet"?A=this.walletHtml():A=`${this.form?.kind.startsWith("edit")?"":this.entriesHtml()}${this.formHtml()}${this.account?"":`<p class="note">${this.checkoutChecked?this.hostedEligible()?this.cardAvailable?"Sign in and pay on Markee. Your payment wallet and rewards are managed there.":"Pay in Markee is temporarily unavailable. Please try again later.":"Pay in Markee is not supported for this board yet.":"Checking Markee checkout availability\u2026"}</p>`}`:A=this.error?c("refresh","Retry","primary"):'<div class="loading" role="status" aria-live="polite"><span class="spinner"></span>Loading Markee\u2026</div>';let u=this.result?`<div class="${this.result.status==="reverted"||this.result.settlement==="deferred"?"error":"success"}">${this.result.status==="reverted"?"Transaction reverted. No action was completed.":this.result.settlement==="deferred"?"The transaction confirmed, but reward settlement was deferred. Your claim remains available.":`Transaction confirmed.${this.result.tokensReceived&&BigInt(this.result.tokensReceived)>0n?` ${l(this.result.tokensReceived,2)} MARKEE delivered to your wallet.`:""}`} ${L(this.result.explorerUrl,"View receipt")}</div>`:"";this.root.innerHTML=`<style>${F}</style><div class="overlay"><section class="panel" role="dialog" aria-modal="true" aria-labelledby="markee-title"><header><div class="grow"><h1 id="markee-title">${d(this.title())}</h1><p class="header-caption">${d(o?.name||"Markee")}${o?` \xB7 ${o.strategy==="rent"?"For rent":"For sale"}${o.chainId===8453?" \xB7 Base":o.chainId===11155111?" \xB7 Sepolia testnet":""}`:""}</p></div><button class="close" data-cmd="close" aria-label="Close Markee">\xD7</button></header><main class="content" aria-busy="${this.busy||!o&&!this.error}"><div role="status" aria-live="polite">${this.busy?`<p class="meta"><span class="spinner"></span>${d(this.busyMessage)}</p>`:""}${this.error?`<div class="error">${d(this.error)}</div>`:""}${u}</div>${o?.warnings.map(g=>`<div class="note">${d(g)}</div>`).join("")||""}${A}</main>${this.footerHtml()}</section></div>`,this.busy&&this.root.querySelectorAll('button:not([data-cmd="close"])').forEach(g=>{g.disabled=!0});let h=this.drafts.get(this.draftKey());if(h)for(let g of this.root.querySelectorAll("input,textarea,select"))h[g.name]!==void 0&&(g.value=h[g.name]);this.updateFields();let w=this.root.querySelector(".content");w&&(w.scrollTop=i),this.viewObserver?.disconnect();let b=this.root.querySelector(".winner"),m=o?.entries.find(g=>g.address.toLowerCase()===o.top?.toLowerCase()),v=m?`${m.address}:${m.message}`:"";b&&m?.moderated===!1&&!this.viewed.has(v)&&typeof IntersectionObserver<"u"&&(this.viewObserver=new IntersectionObserver(g=>{g.some(f=>f.isIntersecting)&&(this.viewObserver?.disconnect(),this.viewed.add(v),this.client.recordView(m.address,m.message,window.location.origin).catch(()=>{this.viewed.delete(v)}))},{threshold:.5}),this.viewObserver.observe(b)),s&&((n?this.root.getElementById(n):t?[...this.root.querySelectorAll("[data-cmd]")].find(f=>f.dataset.cmd===t):null)??this.root.querySelector('[data-cmd="close"]'))?.focus({preventScroll:!0})}};function W(r={}){let e=new T(r),t,n=r.theme;return{client:e,open(a){return t?.close(),t=new P(e,{...a,theme:a.theme??n}),t},setTheme(a){n=a??{},t?.setTheme(n)},close(){t?.close(),t=void 0}}}var j="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5wAAAOcCAYAAAAisr7RAAAACXBIWXMAAC4jAAAuIwF4pT92AAANz2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDMgNzkuOTY5MGE4N2ZjLCAyMDI1LzAzLzA2LTIwOjUwOjE2ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjYuMTAgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDI1LTEwLTIzVDE0OjQ5OjA5LTA3OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNi0wMy0xN1QwODo1OToyOC0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNi0wMy0xN1QwODo1OToyOC0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODI3N2FlN2ItNDMyNy00M2Y2LWJiYzctNGFkYWVlNTU4ZDJhIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTY0NjdiNjQtODkwZS1hZDQ2LWFmODctNzUxYWYyYTViMWY1IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGZjNzVhYzUtN2QxOS00NDM4LTk1YTctYTBlMDcxZjVhNjcxIiB0aWZmOk9yaWVudGF0aW9uPSIxIiB0aWZmOlhSZXNvbHV0aW9uPSIzMDAwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSIzMDAwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iOTc5IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iOTc5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowZmM3NWFjNS03ZDE5LTQ0MzgtOTVhNy1hMGUwNzFmNWE2NzEiIHN0RXZ0OndoZW49IjIwMjUtMTAtMjNUMTQ6NDk6MDktMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMCAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3Njg1MWJlMi1iOWQyLTQ1NWItYTJjNC04ZDBjYTViYTM3YTgiIHN0RXZ0OndoZW49IjIwMjUtMTAtMjNUMTU6MTY6MjgtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Zjk2MDExOTMtNzQxNy00ODQyLWFjZDUtZTM5ZGU3MjM1MjFmIiBzdEV2dDp3aGVuPSIyMDI1LTEwLTIzVDE1OjIwOjI3LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMTAgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplNWVjYjJlYi1iYWZlLTRiYzQtODE2MS0wZTNiZjVlYTVmYzkiIHN0RXZ0OndoZW49IjIwMjUtMTEtMTBUMTU6MTU6NTYtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2QxMzc3Y2EtMjU2Ni00Y2JlLTg0YjAtOTQ5ZWY5NzIzZTBhIiBzdEV2dDp3aGVuPSIyMDI1LTEyLTE2VDIxOjMwOjQ4LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMTEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFkNmY4NjExLTdlYjAtNGRiYS04OTAyLTFiYTNhMDAyOTMxZiIgc3RFdnQ6d2hlbj0iMjAyNS0xMi0xNlQyMTozMDo0OC0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjExIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Mjc3YWU3Yi00MzI3LTQzZjYtYmJjNy00YWRhZWU1NThkMmEiIHN0RXZ0OndoZW49IjIwMjYtMDMtMTdUMDg6NTk6MjgtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N2QxMzc3Y2EtMjU2Ni00Y2JlLTg0YjAtOTQ5ZWY5NzIzZTBhIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzliMzZhMzQtN2RjNC0wZjQ3LWI2ZGEtY2E1ZjNjM2I2NjBmIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGZjNzVhYzUtN2QxOS00NDM4LTk1YTctYTBlMDcxZjVhNjcxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Z50a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",X="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5wAAAOcCAYAAAAisr7RAAAACXBIWXMAAC4jAAAuIwF4pT92AAANz2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDMgNzkuOTY5MGE4N2ZjLCAyMDI1LzAzLzA2LTIwOjUwOjE2ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjYuMTAgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDI1LTEwLTIzVDE0OjQ5OjA5LTA3OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNi0wMy0xN1QwODo1OTo0Ni0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNi0wMy0xN1QwODo1OTo0Ni0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTJmZjhhNTMtYzQyMS00YjlhLTk5MDQtYjQ4ZmMyMjU5ZjJiIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6NGJiM2NlYmUtMzAxNS05MjQ0LTg1OGQtZGU4ZjJmZWQyMGE5IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGZjNzVhYzUtN2QxOS00NDM4LTk1YTctYTBlMDcxZjVhNjcxIiB0aWZmOk9yaWVudGF0aW9uPSIxIiB0aWZmOlhSZXNvbHV0aW9uPSIzMDAwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSIzMDAwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iOTc5IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iOTc5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowZmM3NWFjNS03ZDE5LTQ0MzgtOTVhNy1hMGUwNzFmNWE2NzEiIHN0RXZ0OndoZW49IjIwMjUtMTAtMjNUMTQ6NDk6MDktMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMCAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3Njg1MWJlMi1iOWQyLTQ1NWItYTJjNC04ZDBjYTViYTM3YTgiIHN0RXZ0OndoZW49IjIwMjUtMTAtMjNUMTU6MTY6MjgtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Zjk2MDExOTMtNzQxNy00ODQyLWFjZDUtZTM5ZGU3MjM1MjFmIiBzdEV2dDp3aGVuPSIyMDI1LTEwLTIzVDE1OjIwOjI3LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMTAgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplNWVjYjJlYi1iYWZlLTRiYzQtODE2MS0wZTNiZjVlYTVmYzkiIHN0RXZ0OndoZW49IjIwMjUtMTEtMTBUMTU6MTU6NTYtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2QxMzc3Y2EtMjU2Ni00Y2JlLTg0YjAtOTQ5ZWY5NzIzZTBhIiBzdEV2dDp3aGVuPSIyMDI1LTEyLTE2VDIxOjMwOjQ4LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMTEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFkNmY4NjExLTdlYjAtNGRiYS04OTAyLTFiYTNhMDAyOTMxZiIgc3RFdnQ6d2hlbj0iMjAyNS0xMi0xNlQyMTozMDo0OC0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjExIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMmZmOGE1My1jNDIxLTRiOWEtOTkwNC1iNDhmYzIyNTlmMmIiIHN0RXZ0OndoZW49IjIwMjYtMDMtMTdUMDg6NTk6NDYtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNi4xMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N2QxMzc3Y2EtMjU2Ni00Y2JlLTg0YjAtOTQ5ZWY5NzIzZTBhIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzliMzZhMzQtN2RjNC0wZjQ3LWI2ZGEtY2E1ZjNjM2I2NjBmIiBzdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGZjNzVhYzUtN2QxOS00NDM4LTk1YTctYTBlMDcxZjVhNjcxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+eNwW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";function Y(r){let e=r.entries.find(t=>t.address.toLowerCase()===r.top?.toLowerCase())??null;return{entry:e,visibility:!e||e.moderated===null?"unavailable":e.moderated?"flagged":"visible"}}var te=`
|
|
135
|
+
:host{display:block;color:var(--markee-text);font-family:var(--markee-font-family);color-scheme:var(--markee-color-scheme)}
|
|
136
|
+
*,*::before,*::after{box-sizing:border-box}
|
|
137
|
+
.sign{appearance:none;position:relative;isolation:isolate;display:flex;align-items:center;justify-content:center;width:100%;min-height:104px;padding:28px 20px;border:1px solid var(--markee-border);border-radius:var(--markee-card-radius);background:var(--markee-surface);color:var(--markee-text);font:inherit;text-align:center;overflow:visible}
|
|
138
|
+
button.sign{cursor:pointer}
|
|
139
|
+
button.sign:hover{background:var(--markee-sign-hover-background);border-color:var(--markee-accent-border);box-shadow:0 6px 22px color-mix(in srgb,var(--markee-accent) 16%,transparent)}
|
|
140
|
+
button.sign:focus-visible{outline:3px solid var(--markee-focus-ring);outline-offset:3px}
|
|
141
|
+
.watermark{position:absolute;z-index:0;inset:0;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:inherit;pointer-events:none}
|
|
142
|
+
.watermark img{height:100%;width:auto;max-width:none;opacity:0;transition:opacity 200ms ease}
|
|
143
|
+
.watermark .logo-light{display:none}
|
|
144
|
+
:host([data-markee-theme="dark"]) .watermark .logo-light{display:block}
|
|
145
|
+
:host([data-markee-theme="dark"]) .watermark .logo-dark{display:none}
|
|
146
|
+
button.sign:hover .watermark img,button.sign:focus-visible .watermark img{opacity:var(--markee-sign-hover-logo-opacity)}
|
|
147
|
+
.sign.has-rate{margin-bottom:12px}
|
|
148
|
+
.views{position:absolute;z-index:1;top:9px;right:12px;display:inline-flex;align-items:center;gap:4px;color:var(--markee-muted);font-size:11px;line-height:1}
|
|
149
|
+
.views svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4}
|
|
150
|
+
.message{position:relative;z-index:1;font-family:ui-monospace,monospace;font-size:17px;line-height:1.35;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;max-width:100%}
|
|
151
|
+
.obscured{filter:blur(8px);user-select:none;pointer-events:none}
|
|
152
|
+
.veil{position:absolute;z-index:2;inset:25px 12px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--markee-surface) 75%,transparent);color:var(--markee-muted);font-size:13px;text-align:center;padding:12px}
|
|
153
|
+
.notice{position:relative;z-index:1;color:var(--markee-muted);font-size:13px;margin:0}
|
|
154
|
+
.rate{opacity:0;pointer-events:none;transition:opacity 200ms ease;position:absolute;z-index:3;bottom:-12px;left:50%;transform:translateX(-50%);max-width:calc(100% - 24px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:8px;background:var(--markee-accent);color:var(--markee-accent-text);box-shadow:0 7px 20px color-mix(in srgb,var(--markee-accent) 35%,transparent);padding:4px 13px;font-family:ui-monospace,monospace;font-size:11px;font-weight:700;line-height:1.2}
|
|
155
|
+
button.sign:hover .rate,button.sign:focus-visible .rate{opacity:1}
|
|
156
|
+
@media(hover:none){button.sign .rate{opacity:1}}
|
|
157
|
+
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
|
|
158
|
+
`;function ne(r,e,t=!1){let n=r?.name||"Markee",{entry:a,visibility:i}=r?Y(r):{entry:null,visibility:"unavailable"},s=t?'<span class="notice" role="status">Markee sign is temporarily unavailable.</span>':r?a?i==="unavailable"?'<span class="notice" role="status">Message unavailable while moderation loads.</span>':`<span class="message ${i==="flagged"?"obscured":""}" ${i==="flagged"?'aria-hidden="true"':""}>${d(a.message)}</span>${i==="flagged"?'<span class="veil" role="status">This message has been flagged.</span>':""}`:'<span class="notice">The sign is waiting for its first message.</span>':'<span class="notice" role="status">Loading the Markee sign\u2026</span>',o=a?.views===null||a?.views===void 0?"":`<span class="views" aria-label="${a.views.toLocaleString()} views"><svg aria-hidden="true" viewBox="0 0 16 16"><path d="M1.3 8s2.4-4 6.7-4 6.7 4 6.7 4-2.4 4-6.7 4S1.3 8 1.3 8Z"/><circle cx="8" cy="8" r="2"/></svg>${a.views.toLocaleString()}</span>`,A=r?.strategy==="rent"&&a?`<span class="rate">${l(M(r).boost.toString())} ETH/mo to change</span>`:"",u=e?"button":"div",h=e?`type="button" data-markee-open title="Open ${d(n)} Markee"`:`aria-label="${d(n)} Markee sign"`,w=e?`<span class="watermark" aria-hidden="true"><img class="logo-dark" src="${X}" alt=""><img class="logo-light" src="${j}" alt=""></span>`:"";return`<style>${te}</style><${u} class="sign${A?" has-rate":""}" ${h}>${w}${o}${s}${A}</${u}>`}function ae(r,e){if(typeof document>"u")throw new Error("Mount the Markee sign in a browser.");let t=document.createElement("div");t.setAttribute("data-markee-sign","");let n=t.attachShadow({mode:"open"});r.appendChild(t);let a=B(t,e.theme),i=new T(e),s,o=Number.isFinite(e.refreshIntervalMs)?Math.max(1e4,e.refreshIntervalMs):3e4,A=!0,u,h,w,b=new Set,m=null,v=(f=!1)=>{if(w?.disconnect(),n.innerHTML=ne(m,e.showAction!==!1,f),f||!m||typeof IntersectionObserver>"u")return;let{entry:O,visibility:V}=Y(m);if(!O||V!=="visible")return;let I=`${O.address}:${O.message}`;b.has(I)||(w=new IntersectionObserver(G=>{G.some(q=>q.isIntersecting)&&(w?.disconnect(),b.add(I),i.recordView(O.address,O.message,window.location.origin).catch(()=>{b.delete(I)}))},{threshold:.5}),w.observe(t))},g=async()=>{if(!A)return;clearTimeout(h),u?.abort();let f=new AbortController;u=f;try{let O=await i.snapshot(e.placement,null,void 0,f.signal);A&&u===f&&(m=O,v())}catch{A&&u===f&&!f.signal.aborted&&(m=null,v(!0))}finally{A&&u===f&&(h=setTimeout(()=>void g(),o))}};return n.addEventListener("click",f=>{if(f.target.closest("[data-markee-open]")){if(e.onOpen){e.onOpen();return}s??=W(e),s.open({placement:e.placement})}}),v(),e.siteUrl&&i.registerSite(e.placement),g(),{refresh:g,setTheme:a.set,destroy(){A=!1,u?.abort(),clearTimeout(h),w?.disconnect(),s?.close(),a.destroy(),t.remove()}}}export{U as DEFAULT_MARKEE_API_URL,T as MarkeeClient,p as MarkeeError,P as MarkeeModal,N as checkoutStatus,W as createMarkee,ae as createMarkeeSign,J as discoverWallets,l as formatEth,Z as openHostedCheckout,y as parseEth,R as savedCheckout,Y as signContent};
|
package/dist/modal.d.ts
CHANGED
|
@@ -13,7 +13,10 @@ export declare class MarkeeModal {
|
|
|
13
13
|
private root;
|
|
14
14
|
private theme;
|
|
15
15
|
private snapshot?;
|
|
16
|
+
private cardAvailable;
|
|
17
|
+
private checkoutChecked;
|
|
16
18
|
private account;
|
|
19
|
+
private observedAccount;
|
|
17
20
|
private tab;
|
|
18
21
|
private leaderboardOpen;
|
|
19
22
|
private initialSelection;
|
|
@@ -27,6 +30,7 @@ export declare class MarkeeModal {
|
|
|
27
30
|
private pending?;
|
|
28
31
|
private wallets?;
|
|
29
32
|
private busy;
|
|
33
|
+
private busyMessage;
|
|
30
34
|
private error;
|
|
31
35
|
private closed;
|
|
32
36
|
private epoch;
|
|
@@ -40,6 +44,7 @@ export declare class MarkeeModal {
|
|
|
40
44
|
private viewObserver?;
|
|
41
45
|
private viewed;
|
|
42
46
|
private walletChanged;
|
|
47
|
+
private handleWalletChange;
|
|
43
48
|
constructor(client: MarkeeClient, options: ModalOptions);
|
|
44
49
|
close(): void;
|
|
45
50
|
/** Replace the theme without resetting the active form, wallet, or transaction. */
|
|
@@ -61,6 +66,7 @@ export declare class MarkeeModal {
|
|
|
61
66
|
private reviewHtml;
|
|
62
67
|
private authorizationHtml;
|
|
63
68
|
private entryMessage;
|
|
69
|
+
private entryMessageHtml;
|
|
64
70
|
private entriesHtml;
|
|
65
71
|
private selectedMessageHtml;
|
|
66
72
|
private fundingHtml;
|
|
@@ -69,6 +75,7 @@ export declare class MarkeeModal {
|
|
|
69
75
|
private walletHtml;
|
|
70
76
|
private communityHtml;
|
|
71
77
|
private title;
|
|
78
|
+
private hostedEligible;
|
|
72
79
|
private footerHtml;
|
|
73
80
|
private render;
|
|
74
81
|
}
|