@popgrids/embed 0.0.5 → 0.0.6
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/AGENTS.md +11 -30
- package/README.md +3 -0
- package/dist/components/pop-comment-thread.d.ts.map +1 -1
- package/dist/components/pop-comment.d.ts.map +1 -1
- package/dist/components/pop-feed.d.ts.map +1 -1
- package/dist/components/pop-grid.d.ts +12 -0
- package/dist/components/pop-grid.d.ts.map +1 -1
- package/dist/components/pop-widget.d.ts.map +1 -1
- package/dist/embed.js +477 -443
- package/dist/embed.js.map +1 -1
- package/dist/index.cjs +56 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -91
- package/dist/index.js.map +1 -1
- package/dist/lib/position-feed.d.ts +9 -0
- package/dist/lib/position-feed.d.ts.map +1 -0
- package/dist/store/embed-auth-store.d.ts +3 -0
- package/dist/store/embed-auth-store.d.ts.map +1 -1
- package/dist/store/grid-store.d.ts +12 -0
- package/dist/store/grid-store.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e){return e?e.split(` `).map(e=>e[0]??``).join(``).toUpperCase().slice(0,2):`?`}function r(e,t,n){let r=Math.min(t*2**e,n);return Math.floor(Math.random()*r)}var i=`/embed/auth/login`,a=`popgrids-auth`,o=`popup,width=480,height=640`,s=300*1e3,c=250,l=class extends Error{constructor(e){super(e),this.name=`PopupAuthError`}},u=class extends l{constructor(e=`Sign-in was cancelled`){super(e),this.name=`PopupAuthCancelledError`}},d=(e,t,n)=>{let r=new URL(i,e);return r.searchParams.set(`publicKey`,t),r.searchParams.set(`returnOrigin`,n),r.toString()},f=(e,t)=>{let n=window.open(d(e,t,window.location.origin),a,o);if(!n)throw new l(`Popup blocked. Allow popups for this site and try again.`);return n},p=(e,t)=>typeof e==`object`&&!!e&&`type`in e&&`source`in e&&e.type===t&&e.source===`popgrids-embed`,ee=e=>{if(typeof e!=`object`||!e||!(`user`in e))return null;let t=e,n=t.user;if(typeof n!=`object`||!n||!(`id`in n))return null;let r=n;return typeof r.id!=`string`||typeof t.token!=`string`||typeof t.expiresAt!=`number`?null:{user:{id:r.id,name:typeof r.name==`string`?r.name:``,email:typeof r.email==`string`?r.email:``,image:typeof r.image==`string`?r.image:null},token:t.token,expiresAt:t.expiresAt}},m=(e,t,n)=>new Promise((r,i)=>{let a=new URL(e).origin,o=!1,d=(e,t)=>{if(!o){if(o=!0,te(),e===`resolve`){r();return}i(t??new l(`Sign-in failed`))}},f=e=>{if(e.origin===a){if(p(e.data,`popgrids:auth:success`)){let t=ee(e.data);if(!t){d(`reject`,new l(`Sign-in failed`));return}n?.onAuthSuccess?.(t),d(`resolve`);return}if(p(e.data,`popgrids:auth:error`)){let t=typeof e.data==`object`&&e.data!==null&&`error`in e.data&&typeof e.data.error==`string`?e.data.error:`Sign-in failed`;d(`reject`,new l(t))}}},m=window.setInterval(()=>{!t.closed||o||(clearInterval(m),window.setTimeout(()=>{o||d(`reject`,new u)},c))},300),h=window.setTimeout(()=>{try{t.close()}catch{}d(`reject`,new l(`Sign-in timed out`))},s),te=()=>{window.removeEventListener(`message`,f),clearInterval(m),clearTimeout(h)};window.addEventListener(`message`,f)}),h=async(e,t,n)=>{await m(e,f(e,t),n)},te=`X-PopGrids-Embed-Token`,ne=300*1e3,re=`OTP_EXPIRED`,ie=`TOO_MANY_ATTEMPTS`,ae=`INVALID_OTP`,g=`Dismiss`,oe=60,_=`Can’t reach PopGrids. Check your connection and try again.`,se=3e4,v=e=>`popgrids:embed-session:${e}`,y=e=>typeof e==`object`&&!!e&&typeof e.token==`string`&&typeof e.expiresAt==`number`&&!!e.user,b=class e{static{this.instances=new Set}static{this.syncing=!1}applyExternalChange(e){if(e===null){this.currentUser.value&&this.handleSignedOut();return}try{let t=JSON.parse(e);y(t)&&t.expiresAt>Date.now()&&this.writeStoredSession(t)}catch{}}notifySiblings(t){if(!e.syncing){e.syncing=!0;try{for(let n of e.instances)n!==this&&n.publicKey===this.publicKey&&n.applyExternalChange(t)}finally{e.syncing=!1}}}constructor(n){this.currentUser=(0,t.signal)(null),this.authError=(0,t.signal)(null),this.authErrorAction=(0,t.signal)(g),this.authNoticeDismissals=(0,t.signal)(0),this.authErrorRetryAt=(0,t.signal)(null),this.authPending=(0,t.signal)(!1),this.organizations=(0,t.signal)([]),this.organizationsLoading=(0,t.signal)(!1),this.authView=(0,t.signal)(`idle`),this.otpEmail=(0,t.signal)(``),this.otpPending=(0,t.signal)(!1),this.otpError=(0,t.signal)(null),this.otpExpiresAt=(0,t.signal)(null),this.authSocket=null,this.authReconnectAttempt=0,this.authReconnectTimer=null,this.destroyed=!1,this.onStorageEvent=e=>{e.storageArea!==window.localStorage||e.key!==v(this.publicKey)||this.applyExternalChange(e.newValue)},this.resolveInlineSignIn=null,this.inlineSignInPromise=null,this.apiUrl=n.apiUrl,this.publicKey=n.publicKey,this.session=this.readStoredSession(),this.currentUser.value=this.session?.user??null,window.addEventListener(`storage`,this.onStorageEvent),e.instances.add(this)}destroy(){this.destroyed=!0,this.closeAuthChannel(),window.removeEventListener(`storage`,this.onStorageEvent),e.instances.delete(this)}readStoredSession(){try{let e=window.localStorage.getItem(v(this.publicKey));if(!e)return null;let t=JSON.parse(e);return y(t)?t.expiresAt<=Date.now()?(this.clearStoredSession(),null):t:null}catch{return null}}persistSession(e){this.session=e;try{window.localStorage.setItem(v(this.publicKey),JSON.stringify(e))}catch{}this.notifySiblings(JSON.stringify(e))}writeStoredSession(e){this.persistSession(e),this.currentUser.value=e.user,this.authError.value=null,this.organizations.value=[];let t=this.authSocket!==null||this.authReconnectTimer!==null;this.closeAuthChannel(),t&&this.connectAuthChannel()}clearStoredSession(){this.session=null;try{window.localStorage.removeItem(v(this.publicKey))}catch{}this.notifySiblings(null),this.organizations.value=[],this.closeAuthChannel()}get token(){return this.session?this.session.expiresAt<=Date.now()?(this.handleSignedOut(),null):this.session.token:null}async fetchWithToken(e,t={}){let n=new Headers(t.headers),r=this.token;return r&&n.set(te,r),fetch(new URL(e,this.apiUrl),{...t,headers:n})}async authorizedFetch(e,t={}){let n=await this.fetchWithToken(e,t);if(n.status===401){if(!await this.requestInlineSignIn())return n;n=await this.fetchWithToken(e,t)}return n}async readError(e){try{let t=await e.json();return{message:typeof t.error==`string`&&t.error?t.error:`Something went wrong. Please try again.`,code:typeof t.code==`string`?t.code:void 0,retryAfter:typeof t.retryAfter==`number`?t.retryAfter:void 0}}catch{}return{message:`Something went wrong. Please try again.`}}startEmailSignIn(){this.otpError.value=null,this.authView.value=`email`}backToIdle(){this.otpError.value=null,this.otpEmail.value=``,this.otpExpiresAt.value=null,this.authView.value=`idle`,this.resolveInlineSignIn?.(!1)}backToEmail(){this.otpError.value=null,this.authView.value=`email`}expireOtp(){this.authView.value=`email`,this.otpExpiresAt.value=null,this.otpError.value=null}backToCode(){this.authView.value=`code`}showNoCode(){this.authView.value=`no-code`}async sendOtp(e){this.otpPending.value=!0,this.otpError.value=null;try{let t=await fetch(new URL(`/api/v1/embed/grids/${this.publicKey}/auth/otp/send`,this.apiUrl),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:e})});if(!t.ok){let{message:e,retryAfter:n}=await this.readError(t);return t.status===429?this.showRateLimited(n):this.otpError.value=e,!1}return this.otpEmail.value=e,this.otpExpiresAt.value=Date.now()+ne,this.authView.value=`code`,!0}catch{return this.showAuthError(_),!1}finally{this.otpPending.value=!1}}async resendOtp(){return this.otpEmail.value?this.sendOtp(this.otpEmail.value):!1}async verifyOtp(e){this.otpPending.value=!0,this.otpError.value=null;try{let t=await fetch(new URL(`/api/v1/embed/grids/${this.publicKey}/auth/otp/verify`,this.apiUrl),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:this.otpEmail.value,otp:e})});if(!t.ok){let{message:e,code:n,retryAfter:r}=await this.readError(t);return t.status===429?this.showRateLimited(r):n===ie?(this.expireOtp(),this.showAuthError(`Too many attempts.`,`Request a new code`)):n===re?this.expireOtp():n===ae?this.otpError.value=`Invalid code`:this.otpError.value=e,!1}let n=await t.json();return this.writeStoredSession(n),this.authView.value=`idle`,this.otpEmail.value=``,this.otpExpiresAt.value=null,this.resolveInlineSignIn?.(!0),!0}catch{return this.showAuthError(_),!1}finally{this.otpPending.value=!1}}async requestSignIn(){this.authError.value=null,this.authPending.value=!0;try{return await h(this.apiUrl,this.publicKey,{onAuthSuccess:({user:e,token:t,expiresAt:n})=>{this.writeStoredSession({token:t,expiresAt:n,user:e})}}),this.currentUser.value!==null}catch(e){return e instanceof u||this.showAuthError(e instanceof Error?e.message:`Sign-in failed`),!1}finally{this.authPending.value=!1}}requestInlineSignIn(){return this.inlineSignInPromise?this.inlineSignInPromise:(this.startEmailSignIn(),this.inlineSignInPromise=new Promise(e=>{this.resolveInlineSignIn=t=>{this.inlineSignInPromise=null,this.resolveInlineSignIn=null,e(t)}}),this.inlineSignInPromise)}showAuthError(e,t=g,n){this.authErrorAction.value=t,this.authErrorRetryAt.value=n===void 0?null:Date.now()+n*1e3,this.authError.value=e}showRateLimited(e){this.showAuthError(`Too many requests.`,g,e??oe)}dismissAuthError(){this.clearAuthError(),this.authNoticeDismissals.value+=1}clearAuthError(){this.authError.value=null}async loadOrganizations(){if(!this.currentUser.value){this.organizations.value=[];return}if(!this.organizationsLoading.value){this.organizationsLoading.value=!0;try{let e=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/organizations`);if(!e.ok)return;let t=await e.json();this.organizations.value=t.organizations}catch{}finally{this.organizationsLoading.value=!1}}}async switchOrganization(e){let t=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/organizations/${e}`,{method:`POST`});if(!t.ok)return t.status===401&&this.handleSignedOut(),!1;let n=await t.json();return this.currentUser.value=n.user,this.session&&this.persistSession({...this.session,user:n.user}),!0}async signOutEverywhere(){let e=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/sign-out`,{method:`POST`});return e.ok&&this.handleSignedOut({silent:!0}),e.ok}handleSignedOut(e){let t=this.currentUser.value!==null;this.clearStoredSession(),this.currentUser.value=null,this.authView.value=`idle`,t&&!e?.silent&&this.showAuthError(`You were signed out. Sign in again to keep commenting.`)}async connectAuthChannel(){if(this.destroyed||this.authSocket||!this.currentUser.value)return;let e=null,t=!1;try{let n=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/connect-ticket`,{method:`POST`});if(n.ok){let t=await n.json();e=t.ticket,this.currentUser.value=t.user,this.session&&t.expiresAt&&t.expiresAt!==this.session.expiresAt&&this.persistSession({...this.session,user:t.user,expiresAt:t.expiresAt})}else n.status===401&&(t=!0)}catch{}if(t){this.handleSignedOut();return}if(!e||this.destroyed||!this.currentUser.value){this.scheduleAuthReconnect();return}let n=new URL(`/api/v1/embed/grids/${this.publicKey}/auth/connect`,this.apiUrl);n.protocol=n.protocol===`https:`?`wss:`:`ws:`,n.searchParams.set(`ticket`,e);let r=new WebSocket(n.toString());this.authSocket=r,r.onopen=()=>{this.authReconnectAttempt=0},r.onmessage=e=>{try{JSON.parse(String(e.data)).type===`session.revoked`&&this.handleSignedOut()}catch{}},r.onclose=()=>{this.authSocket=null,!(this.destroyed||!this.currentUser.value)&&this.scheduleAuthReconnect()},r.onerror=()=>{r.close()}}scheduleAuthReconnect(){if(this.destroyed||this.authReconnectTimer||!this.currentUser.value)return;let e=r(this.authReconnectAttempt,1e3,se);this.authReconnectAttempt+=1,this.authReconnectTimer=setTimeout(()=>{this.authReconnectTimer=null,this.connectAuthChannel()},e)}closeAuthChannel(){this.authReconnectTimer&&=(clearTimeout(this.authReconnectTimer),null),this.authSocket&&=(this.authSocket.onopen=null,this.authSocket.onmessage=null,this.authSocket.onclose=null,this.authSocket.onerror=null,this.authSocket.close(),null)}},x=new WeakMap,ce=(e,t,n=t.constructor)=>{let r=x.get(e);r||(r=new Map,x.set(e,r)),r.set(n,t)},le=e=>{x.delete(e)},ue=(e,t)=>{let n=e;for(;n;){let e=x.get(n)?.get(t);if(e)return e;let r=n.getRootNode();if(!(r instanceof ShadowRoot))break;n=r.host}return null};function S(e){return function(t,n){let r=Symbol(`context_`+(e.name||`store`));Object.defineProperty(t,n,{get(){if(this[r])return this[r];let t=ue(this,e);if(!t)throw console.error(`[Context] resolveStore failed! isConnected: ${this.isConnected}`,this),Error(`[Context] Store for key "${e.name||e}" not resolved on <${this.localName}>.`);return this[r]=t,t},enumerable:!0,configurable:!0})}}var de=`@layer base{:host{box-sizing:border-box;color:var(--pop-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--pop-color-brand-midnight-100:oklch(96.58% .0161 262.75);--pop-color-brand-midnight-900:oklch(15% .03 255.43);--pop-color-brand-midnight-800:oklch(19% .05 255.43);--pop-color-brand-ocean-400:oklch(63% .19 255.43);--pop-color-brand-ocean-100:oklch(91% .05 255.43);--pop-color-brand-forest-900:oklch(38.66% .0698 180.75);--pop-color-brand-forest-700:oklch(45% .15 165.43);--pop-color-brand-forest-100:oklch(97% .04 165.43);--pop-color-brand-highlight-400:oklch(88% .25 105.43);--pop-color-brand-pumpkin-500:oklch(62% .18 45.43);--pop-color-brand-pumpkin-200:oklch(89% .08 45.43);--pop-color-brand-lemon-300:oklch(91% .12 85.43);--pop-color-brand-lemon-100:oklch(97% .04 85.43);--pop-duration-bouncy:1s;--pop-duration-card-highlight:.6s;--pop-duration-gentle:.833s;--pop-duration-menu:.4s;--pop-duration-pop-hover:.6s;--pop-duration-pop-text:.3s;--pop-duration-quick:.833s;--pop-duration-slow:1.167s;--pop-ease-bouncy:linear(0, .011, .045 1.3%, .184 2.7%, .911 7.4%, 1.153 9.4%, 1.301 11.2%, 1.342, 1.362 13%, 1.363, 1.355 14.4%, 1.306 16%, 1.028 21%, .939 23%, .89 24.7%, .876, .868 26.4%, .869, .882 29%, .907 30.5%, 1.014 35.9%, 1.038, 1.048 39.8% 41.1%, 1.043 42.5%, .995 49.3%, .987, .983 53.2%, .984 55.9%, 1.002 62.7%, 1.006 66.4%, .998 79.7%, 1);--pop-ease-card-highlight:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-gentle:linear(0, .007, .026, .059 4.5%, .106 6.3%, .209 9.5%, .558 19.3%, .658, .742, .812, .87, .918, .957, .986 41.6%, 1.007 45.3%, 1.021 49.4%, 1.027 54% 60.9%, 1.007 83.2%, 1);--pop-ease-menu:linear(0, .0034 0.81%, .0278 2.42%, .097 4.84%, .5361 15.32%, .655 18.55%, .7314, .7964 23.39%, .8662, .9185, .9561, .9818, .9984, 1.0083 42.74%, 1.014 46.77%, 1.0145 53.22%, 1.0053 68.55%, 1.0019 77.42%, .9998 100%);--pop-ease-pop-hover:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-pop-text:linear(0, .0051 0.99%, .0261, .0607 3.61%, .1192 5.26%, .2531 8.21%, .6509 16.1%, .7652 18.73%, .8512, .9232 23.33%, .9881 25.96%, 1.0305 28.26%, 1.0642 30.88%, 1.0782 32.53%, 1.089, 1.094 36.47%, 1.0942, 1.0896 41.07%, 1.0804 43.7%, 1.0354 53.23%, 1.0181 57.5%, 1.0061 61.44%, .9974 65.71%, .9925 70.31%, .991 75.9%, .9996 99.88%);--pop-ease-quick:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-slow:linear(0, .005, .02 2%, .081 4.5%, .469 15.2%, .567, .65, .722 24.4%, .784, .835 31.1%, .878 34.9%, .914 39.1%, .942 43.8%, .964 49.1%, .979 55.4%, .989 62.4%, .995 71.1%, 1);--pop-shadow-xs:0px 1px 2px 0px #1018280d;--pop-shadow-sm:0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f;--pop-shadow-md:0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f;--pop-shadow-lg:0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808;--pop-shadow-xl:0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808;--pop-shadow-2xl:0px 24px 48px -12px #1018282e;--pop-shadow-3xl:0px 32px 48px -12px #10182852;--pop-shadow-4xl:0px 24px 32px -12px #10182847;--pop-radius-none:0;--pop-radius-xxs:.125rem;--pop-radius-xs:.25rem;--pop-radius-sm:.375rem;--pop-radius-md:.5rem;--pop-radius-lg:.625rem;--pop-radius-xl:.75rem;--pop-radius-2xl:1rem;--pop-radius-3xl:1.25rem;--pop-radius-4xl:1.5rem;--pop-radius-full:9999px;--pop-radius:.625rem;--pop-background:oklch(100% 0 0);--pop-foreground:oklch(0% 0 0);--pop-card:oklch(100% 0 0);--pop-card-foreground:oklch(14.5% 0 0);--pop-popover:oklch(100% 0 0);--pop-popover-foreground:oklch(0% 0 0);--pop-primary:var(--pop-color-brand-forest-900);--pop-primary-foreground:oklch(98.5% 0 0);--pop-secondary:oklch(97% 0 0);--pop-secondary-foreground:oklch(20.5% 0 0);--pop-muted:oklch(97% 0 0);--pop-muted-foreground:oklch(71.52% .0233 256.76);--pop-accent:oklch(97% 0 0);--pop-accent-foreground:oklch(20.5% 0 0);--pop-destructive:var(--color-error-600);--pop-border:oklch(11.01% .0763 264.05/.102);--pop-input:oklch(92.2% 0 0);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(64.6% .222 41.116);--pop-chart-2:oklch(60% .118 184.704);--pop-chart-3:oklch(39.8% .07 227.392);--pop-chart-4:oklch(82.8% .189 84.429);--pop-chart-5:oklch(76.9% .188 70.08);--pop-sidebar:oklch(98.5% 0 0);--pop-sidebar-foreground:oklch(14.5% 0 0);--pop-sidebar-primary:oklch(20.5% 0 0);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(97% 0 0);--pop-sidebar-accent-foreground:oklch(20.5% 0 0);--pop-sidebar-border:oklch(92.2% 0 0);--pop-sidebar-ring:oklch(70.8% 0 0);font-family:Inter,sans-serif;font-size:16px}@media (prefers-color-scheme:dark){:host{--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}}:host(.dark){--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}*,:before,:after{box-sizing:inherit}html,body{margin:0;padding:0}svg{display:block}strong{font-weight:600}p{margin:0;padding:0}button{cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.m-0{margin:0}.text-heading{font-feature-settings:"liga" off, "clig" off;letter-spacing:-.08px;text-align:center;align-self:stretch;max-width:320px;font-size:13px;font-style:normal;font-weight:600;line-height:18px}.text-xs{font-size:12px;line-height:18px}.w-full{width:100%}}`,fe=`@layer components{.btn{background-color:var(--pop-primary);color:var(--pop-primary-foreground);cursor:pointer;text-align:center;border:0;border-radius:4px;justify-content:center;align-items:center;gap:.625rem;height:auto;padding:.625rem 1.25rem;font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px;transition:background-color .2s,color .2s;display:flex}.btn:focus-visible{outline:2px solid var(--pop-ring);outline-offset:2px}}`,pe=`@layer components{.mask{-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.mask-squircle{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e")}}`,C=!1,w=new Set,T=null,E=null;function D(){if(typeof window>`u`||typeof document>`u`)return!1;let e=document.documentElement.classList.contains(`dark`)||document.body.classList.contains(`dark`),t=document.documentElement.classList.contains(`light`)||document.body.classList.contains(`light`);return e?!0:t?!1:(E||=window.matchMedia(`(prefers-color-scheme: dark)`),E.matches)}function O(){let e=D();e!==C&&(C=e,w.forEach(e=>{let t=C||!!e.closest(`.dark`);e.classList.toggle(`dark`,t)}))}var k=()=>{O()};function me(e){if(typeof window>`u`||typeof document>`u`)return;w.size===0&&(C=D(),T=new MutationObserver(()=>{O()}),T.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),T.observe(document.body,{attributes:!0,attributeFilter:[`class`]}),E=window.matchMedia(`(prefers-color-scheme: dark)`),E.addEventListener(`change`,k)),w.add(e);let t=C||!!e.closest(`.dark`);e.classList.toggle(`dark`,t)}function he(e){w.delete(e),w.size===0&&(T&&=(T.disconnect(),null),E&&=(E.removeEventListener(`change`,k),null))}function A(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var ge=A(de),_e=A(fe),ve=A(pe),j=class extends HTMLElement{get styleSheets(){return[]}constructor(){super(),this.baseStyleSheets=[ge,_e,ve],this._hasRendered=!1,this._disposables=[],this.events={},this.attachShadow({mode:`open`}),this.shadowRoot&&(this.shadowRoot.adoptedStyleSheets=this.styles)}attributeChangedCallback(e,t,n){if(t===n)return;let r=`on${e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}Changed`;typeof this[r]==`function`&&this[r](n,t)}addEffect(e){this._disposables.push((0,t.effect)(e))}connectedCallback(){me(this),(0,t.untracked)(()=>{this.render(),this._bindEvents(),this.setupEffects()})}disconnectedCallback(){he(this),this._disposables.forEach(e=>e()),this._disposables=[]}_bindEvents(){let e=this.shadowRoot;e&&Object.keys(this.events).forEach(t=>{e.addEventListener(t,this)})}handleEvent(e){let t=this.events[e.type];t&&typeof this[t]==`function`&&this[t](e)}emit(e,t={}){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,...t}))}get styles(){return[...this.baseStyleSheets,...this.styleSheets]}setupEffects(){}render(){this.shadowRoot&&(this.shadowRoot.innerHTML=this.getTemplate(),this._hasRendered=!0)}hideElement(e,t,n=!0){if(!this.shadowRoot||!this._hasRendered)return;let r=this.shadowRoot.querySelector(e);if(!r){console.warn(`Element not found for selector: ${e}`);return}n?r.classList.toggle(`hidden`,t):r.classList.toggle(`invisible`,t)}setText(e,t){let n=this.shadowRoot?.querySelector(e);n&&n.textContent!==String(t)&&(n.textContent=String(t))}setAttr(e,t,n){let r=this.shadowRoot?.querySelector(e);r&&(n===null?r.removeAttribute(t):r.getAttribute(t)!==n&&r.setAttribute(t,n))}toggleClass(e,t,n){let r=this.shadowRoot?.querySelector(e);r&&r.classList.toggle(t,n)}getElement(e){return this.shadowRoot?.querySelector(e)??null}},M=e=>`[data-ref="${e}"]`;function N(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var ye=A(`
|
|
1
|
+
let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e){return e?e.split(` `).map(e=>e[0]??``).join(``).toUpperCase().slice(0,2):`?`}function r(e,t,n){let r=Math.min(t*2**e,n);return Math.floor(Math.random()*r)}var i=`/embed/auth/login`,a=`popgrids-auth`,o=`popup,width=480,height=640`,s=300*1e3,c=250,l=class extends Error{constructor(e){super(e),this.name=`PopupAuthError`}},u=class extends l{constructor(e=`Sign-in was cancelled`){super(e),this.name=`PopupAuthCancelledError`}},d=(e,t,n)=>{let r=new URL(i,e);return r.searchParams.set(`publicKey`,t),r.searchParams.set(`returnOrigin`,n),r.toString()},f=(e,t)=>{let n=window.open(d(e,t,window.location.origin),a,o);if(!n)throw new l(`Popup blocked. Allow popups for this site and try again.`);return n},ee=(e,t)=>typeof e==`object`&&!!e&&`type`in e&&`source`in e&&e.type===t&&e.source===`popgrids-embed`,te=e=>{if(typeof e!=`object`||!e||!(`user`in e))return null;let t=e,n=t.user;if(typeof n!=`object`||!n||!(`id`in n))return null;let r=n;return typeof r.id!=`string`||typeof t.token!=`string`||typeof t.expiresAt!=`number`?null:{user:{id:r.id,name:typeof r.name==`string`?r.name:``,email:typeof r.email==`string`?r.email:``,image:typeof r.image==`string`?r.image:null},token:t.token,expiresAt:t.expiresAt}},p=(e,t,n)=>new Promise((r,i)=>{let a=new URL(e).origin,o=!1,d=(e,t)=>{if(!o){if(o=!0,ne(),e===`resolve`){r();return}i(t??new l(`Sign-in failed`))}},f=e=>{if(e.origin===a){if(ee(e.data,`popgrids:auth:success`)){let t=te(e.data);if(!t){d(`reject`,new l(`Sign-in failed`));return}n?.onAuthSuccess?.(t),d(`resolve`);return}if(ee(e.data,`popgrids:auth:error`)){let t=typeof e.data==`object`&&e.data!==null&&`error`in e.data&&typeof e.data.error==`string`?e.data.error:`Sign-in failed`;d(`reject`,new l(t))}}},p=window.setInterval(()=>{!t.closed||o||(clearInterval(p),window.setTimeout(()=>{o||d(`reject`,new u)},c))},300),m=window.setTimeout(()=>{try{t.close()}catch{}d(`reject`,new l(`Sign-in timed out`))},s),ne=()=>{window.removeEventListener(`message`,f),clearInterval(p),clearTimeout(m)};window.addEventListener(`message`,f)}),m=async(e,t,n)=>{await p(e,f(e,t),n)},ne=`X-PopGrids-Embed-Token`,re=300*1e3,ie=`OTP_EXPIRED`,ae=`TOO_MANY_ATTEMPTS`,oe=`INVALID_OTP`,h=`Dismiss`,se=60,g=`Can’t reach PopGrids. Check your connection and try again.`,ce=3e4,_=e=>`popgrids:embed-session:${e}`,v=e=>typeof e==`object`&&!!e&&typeof e.token==`string`&&typeof e.expiresAt==`number`&&!!e.user,y=class e{static{this.instances=new Set}static{this.syncing=!1}applyExternalChange(e){if(e===null){this.currentUser.value&&this.handleSignedOut();return}try{let t=JSON.parse(e);v(t)&&t.expiresAt>Date.now()&&this.writeStoredSession(t)}catch{}}notifySiblings(t){if(!e.syncing){e.syncing=!0;try{for(let n of e.instances)n!==this&&n.publicKey===this.publicKey&&n.applyExternalChange(t)}finally{e.syncing=!1}}}constructor(n){this.currentUser=(0,t.signal)(null),this.authError=(0,t.signal)(null),this.authErrorAction=(0,t.signal)(h),this.authNoticeDismissals=(0,t.signal)(0),this.authErrorRetryAt=(0,t.signal)(null),this.authPending=(0,t.signal)(!1),this.organizations=(0,t.signal)([]),this.organizationsLoading=(0,t.signal)(!1),this.authView=(0,t.signal)(`idle`),this.otpEmail=(0,t.signal)(``),this.otpPending=(0,t.signal)(!1),this.otpError=(0,t.signal)(null),this.otpExpiresAt=(0,t.signal)(null),this.session=null,this.authSocket=null,this.authReconnectAttempt=0,this.authReconnectTimer=null,this.destroyed=!1,this.onStorageEvent=e=>{e.storageArea!==window.localStorage||e.key!==_(this.publicKey)||this.applyExternalChange(e.newValue)},this.resolveInlineSignIn=null,this.inlineSignInPromise=null,this.apiUrl=n.apiUrl,this.publicKey=n.publicKey,this.demo=n.demo??!1,!this.demo&&(this.session=this.readStoredSession(),this.currentUser.value=this.session?.user??null,window.addEventListener(`storage`,this.onStorageEvent),e.instances.add(this))}destroy(){this.destroyed=!0,this.closeAuthChannel(),window.removeEventListener(`storage`,this.onStorageEvent),e.instances.delete(this)}readStoredSession(){try{let e=window.localStorage.getItem(_(this.publicKey));if(!e)return null;let t=JSON.parse(e);return v(t)?t.expiresAt<=Date.now()?(this.clearStoredSession(),null):t:null}catch{return null}}persistSession(e){this.session=e;try{window.localStorage.setItem(_(this.publicKey),JSON.stringify(e))}catch{}this.notifySiblings(JSON.stringify(e))}writeStoredSession(e){this.persistSession(e),this.currentUser.value=e.user,this.authError.value=null,this.organizations.value=[];let t=this.authSocket!==null||this.authReconnectTimer!==null;this.closeAuthChannel(),t&&this.connectAuthChannel()}clearStoredSession(){this.session=null;try{window.localStorage.removeItem(_(this.publicKey))}catch{}this.notifySiblings(null),this.organizations.value=[],this.closeAuthChannel()}get token(){return this.session?this.session.expiresAt<=Date.now()?(this.handleSignedOut(),null):this.session.token:null}async fetchWithToken(e,t={}){if(this.demo)throw Error(`PopGrids: no requests in demo mode`);let n=new Headers(t.headers),r=this.token;return r&&n.set(ne,r),fetch(new URL(e,this.apiUrl),{...t,headers:n})}async authorizedFetch(e,t={}){let n=await this.fetchWithToken(e,t);if(n.status===401){if(!await this.requestInlineSignIn())return n;n=await this.fetchWithToken(e,t)}return n}async readError(e){try{let t=await e.json();return{message:typeof t.error==`string`&&t.error?t.error:`Something went wrong. Please try again.`,code:typeof t.code==`string`?t.code:void 0,retryAfter:typeof t.retryAfter==`number`?t.retryAfter:void 0}}catch{}return{message:`Something went wrong. Please try again.`}}startEmailSignIn(){this.otpError.value=null,this.authView.value=`email`}backToIdle(){this.otpError.value=null,this.otpEmail.value=``,this.otpExpiresAt.value=null,this.authView.value=`idle`,this.resolveInlineSignIn?.(!1)}backToEmail(){this.otpError.value=null,this.authView.value=`email`}expireOtp(){this.authView.value=`email`,this.otpExpiresAt.value=null,this.otpError.value=null}backToCode(){this.authView.value=`code`}showNoCode(){this.authView.value=`no-code`}async sendOtp(e){this.otpPending.value=!0,this.otpError.value=null;try{let t=await fetch(new URL(`/api/v1/embed/grids/${this.publicKey}/auth/otp/send`,this.apiUrl),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:e})});if(!t.ok){let{message:e,retryAfter:n}=await this.readError(t);return t.status===429?this.showRateLimited(n):this.otpError.value=e,!1}return this.otpEmail.value=e,this.otpExpiresAt.value=Date.now()+re,this.authView.value=`code`,!0}catch{return this.showAuthError(g),!1}finally{this.otpPending.value=!1}}async resendOtp(){return this.otpEmail.value?this.sendOtp(this.otpEmail.value):!1}async verifyOtp(e){this.otpPending.value=!0,this.otpError.value=null;try{let t=await fetch(new URL(`/api/v1/embed/grids/${this.publicKey}/auth/otp/verify`,this.apiUrl),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:this.otpEmail.value,otp:e})});if(!t.ok){let{message:e,code:n,retryAfter:r}=await this.readError(t);return t.status===429?this.showRateLimited(r):n===ae?(this.expireOtp(),this.showAuthError(`Too many attempts.`,`Request a new code`)):n===ie?this.expireOtp():n===oe?this.otpError.value=`Invalid code`:this.otpError.value=e,!1}let n=await t.json();return this.writeStoredSession(n),this.authView.value=`idle`,this.otpEmail.value=``,this.otpExpiresAt.value=null,this.resolveInlineSignIn?.(!0),!0}catch{return this.showAuthError(g),!1}finally{this.otpPending.value=!1}}async requestSignIn(){this.authError.value=null,this.authPending.value=!0;try{return await m(this.apiUrl,this.publicKey,{onAuthSuccess:({user:e,token:t,expiresAt:n})=>{this.writeStoredSession({token:t,expiresAt:n,user:e})}}),this.currentUser.value!==null}catch(e){return e instanceof u||this.showAuthError(e instanceof Error?e.message:`Sign-in failed`),!1}finally{this.authPending.value=!1}}requestInlineSignIn(){return this.inlineSignInPromise?this.inlineSignInPromise:(this.startEmailSignIn(),this.inlineSignInPromise=new Promise(e=>{this.resolveInlineSignIn=t=>{this.inlineSignInPromise=null,this.resolveInlineSignIn=null,e(t)}}),this.inlineSignInPromise)}showAuthError(e,t=h,n){this.authErrorAction.value=t,this.authErrorRetryAt.value=n===void 0?null:Date.now()+n*1e3,this.authError.value=e}showRateLimited(e){this.showAuthError(`Too many requests.`,h,e??se)}dismissAuthError(){this.clearAuthError(),this.authNoticeDismissals.value+=1}clearAuthError(){this.authError.value=null}async loadOrganizations(){if(!this.currentUser.value){this.organizations.value=[];return}if(!this.organizationsLoading.value){this.organizationsLoading.value=!0;try{let e=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/organizations`);if(!e.ok)return;let t=await e.json();this.organizations.value=t.organizations}catch{}finally{this.organizationsLoading.value=!1}}}async switchOrganization(e){let t=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/organizations/${e}`,{method:`POST`});if(!t.ok)return t.status===401&&this.handleSignedOut(),!1;let n=await t.json();return this.currentUser.value=n.user,this.session&&this.persistSession({...this.session,user:n.user}),!0}async signOutEverywhere(){let e=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/sign-out`,{method:`POST`});return e.ok&&this.handleSignedOut({silent:!0}),e.ok}handleSignedOut(e){let t=this.currentUser.value!==null;this.clearStoredSession(),this.currentUser.value=null,this.authView.value=`idle`,t&&!e?.silent&&this.showAuthError(`You were signed out. Sign in again to keep commenting.`)}async connectAuthChannel(){if(this.demo||this.destroyed||this.authSocket||!this.currentUser.value)return;let e=null,t=!1;try{let n=await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/connect-ticket`,{method:`POST`});if(n.ok){let t=await n.json();e=t.ticket,this.currentUser.value=t.user,this.session&&t.expiresAt&&t.expiresAt!==this.session.expiresAt&&this.persistSession({...this.session,user:t.user,expiresAt:t.expiresAt})}else n.status===401&&(t=!0)}catch{}if(t){this.handleSignedOut();return}if(!e||this.destroyed||!this.currentUser.value){this.scheduleAuthReconnect();return}let n=new URL(`/api/v1/embed/grids/${this.publicKey}/auth/connect`,this.apiUrl);n.protocol=n.protocol===`https:`?`wss:`:`ws:`,n.searchParams.set(`ticket`,e);let r=new WebSocket(n.toString());this.authSocket=r,r.onopen=()=>{this.authReconnectAttempt=0},r.onmessage=e=>{try{JSON.parse(String(e.data)).type===`session.revoked`&&this.handleSignedOut()}catch{}},r.onclose=()=>{this.authSocket=null,!(this.destroyed||!this.currentUser.value)&&this.scheduleAuthReconnect()},r.onerror=()=>{r.close()}}scheduleAuthReconnect(){if(this.destroyed||this.authReconnectTimer||!this.currentUser.value)return;let e=r(this.authReconnectAttempt,1e3,ce);this.authReconnectAttempt+=1,this.authReconnectTimer=setTimeout(()=>{this.authReconnectTimer=null,this.connectAuthChannel()},e)}closeAuthChannel(){this.authReconnectTimer&&=(clearTimeout(this.authReconnectTimer),null),this.authSocket&&=(this.authSocket.onopen=null,this.authSocket.onmessage=null,this.authSocket.onclose=null,this.authSocket.onerror=null,this.authSocket.close(),null)}},b=new WeakMap,le=(e,t,n=t.constructor)=>{let r=b.get(e);r||(r=new Map,b.set(e,r)),r.set(n,t)},ue=e=>{b.delete(e)},de=(e,t)=>{let n=e;for(;n;){let e=b.get(n)?.get(t);if(e)return e;let r=n.getRootNode();if(!(r instanceof ShadowRoot))break;n=r.host}return null};function x(e){return function(t,n){let r=Symbol(`context_`+(e.name||`store`));Object.defineProperty(t,n,{get(){if(this[r])return this[r];let t=de(this,e);if(!t)throw console.error(`[Context] resolveStore failed! isConnected: ${this.isConnected}`,this),Error(`[Context] Store for key "${e.name||e}" not resolved on <${this.localName}>.`);return this[r]=t,t},enumerable:!0,configurable:!0})}}var fe=`@layer base{:host{box-sizing:border-box;color:var(--pop-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--pop-color-brand-midnight-100:oklch(96.58% .0161 262.75);--pop-color-brand-midnight-900:oklch(15% .03 255.43);--pop-color-brand-midnight-800:oklch(19% .05 255.43);--pop-color-brand-ocean-400:oklch(63% .19 255.43);--pop-color-brand-ocean-100:oklch(91% .05 255.43);--pop-color-brand-forest-900:oklch(38.66% .0698 180.75);--pop-color-brand-forest-700:oklch(45% .15 165.43);--pop-color-brand-forest-100:oklch(97% .04 165.43);--pop-color-brand-highlight-400:oklch(88% .25 105.43);--pop-color-brand-pumpkin-500:oklch(62% .18 45.43);--pop-color-brand-pumpkin-200:oklch(89% .08 45.43);--pop-color-brand-lemon-300:oklch(91% .12 85.43);--pop-color-brand-lemon-100:oklch(97% .04 85.43);--pop-duration-bouncy:1s;--pop-duration-card-highlight:.6s;--pop-duration-gentle:.833s;--pop-duration-menu:.4s;--pop-duration-pop-hover:.6s;--pop-duration-pop-text:.3s;--pop-duration-quick:.833s;--pop-duration-slow:1.167s;--pop-ease-bouncy:linear(0, .011, .045 1.3%, .184 2.7%, .911 7.4%, 1.153 9.4%, 1.301 11.2%, 1.342, 1.362 13%, 1.363, 1.355 14.4%, 1.306 16%, 1.028 21%, .939 23%, .89 24.7%, .876, .868 26.4%, .869, .882 29%, .907 30.5%, 1.014 35.9%, 1.038, 1.048 39.8% 41.1%, 1.043 42.5%, .995 49.3%, .987, .983 53.2%, .984 55.9%, 1.002 62.7%, 1.006 66.4%, .998 79.7%, 1);--pop-ease-card-highlight:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-gentle:linear(0, .007, .026, .059 4.5%, .106 6.3%, .209 9.5%, .558 19.3%, .658, .742, .812, .87, .918, .957, .986 41.6%, 1.007 45.3%, 1.021 49.4%, 1.027 54% 60.9%, 1.007 83.2%, 1);--pop-ease-menu:linear(0, .0034 0.81%, .0278 2.42%, .097 4.84%, .5361 15.32%, .655 18.55%, .7314, .7964 23.39%, .8662, .9185, .9561, .9818, .9984, 1.0083 42.74%, 1.014 46.77%, 1.0145 53.22%, 1.0053 68.55%, 1.0019 77.42%, .9998 100%);--pop-ease-pop-hover:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-pop-text:linear(0, .0051 0.99%, .0261, .0607 3.61%, .1192 5.26%, .2531 8.21%, .6509 16.1%, .7652 18.73%, .8512, .9232 23.33%, .9881 25.96%, 1.0305 28.26%, 1.0642 30.88%, 1.0782 32.53%, 1.089, 1.094 36.47%, 1.0942, 1.0896 41.07%, 1.0804 43.7%, 1.0354 53.23%, 1.0181 57.5%, 1.0061 61.44%, .9974 65.71%, .9925 70.31%, .991 75.9%, .9996 99.88%);--pop-ease-quick:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-slow:linear(0, .005, .02 2%, .081 4.5%, .469 15.2%, .567, .65, .722 24.4%, .784, .835 31.1%, .878 34.9%, .914 39.1%, .942 43.8%, .964 49.1%, .979 55.4%, .989 62.4%, .995 71.1%, 1);--pop-shadow-xs:0px 1px 2px 0px #1018280d;--pop-shadow-sm:0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f;--pop-shadow-md:0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f;--pop-shadow-lg:0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808;--pop-shadow-xl:0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808;--pop-shadow-2xl:0px 24px 48px -12px #1018282e;--pop-shadow-3xl:0px 32px 48px -12px #10182852;--pop-shadow-4xl:0px 24px 32px -12px #10182847;--pop-radius-none:0;--pop-radius-xxs:.125rem;--pop-radius-xs:.25rem;--pop-radius-sm:.375rem;--pop-radius-md:.5rem;--pop-radius-lg:.625rem;--pop-radius-xl:.75rem;--pop-radius-2xl:1rem;--pop-radius-3xl:1.25rem;--pop-radius-4xl:1.5rem;--pop-radius-full:9999px;--pop-radius:.625rem;--pop-background:oklch(100% 0 0);--pop-foreground:oklch(0% 0 0);--pop-card:oklch(100% 0 0);--pop-card-foreground:oklch(14.5% 0 0);--pop-popover:oklch(100% 0 0);--pop-popover-foreground:oklch(0% 0 0);--pop-primary:var(--pop-color-brand-forest-900);--pop-primary-foreground:oklch(98.5% 0 0);--pop-secondary:oklch(97% 0 0);--pop-secondary-foreground:oklch(20.5% 0 0);--pop-muted:oklch(97% 0 0);--pop-muted-foreground:oklch(71.52% .0233 256.76);--pop-accent:oklch(97% 0 0);--pop-accent-foreground:oklch(20.5% 0 0);--pop-destructive:var(--color-error-600);--pop-border:oklch(11.01% .0763 264.05/.102);--pop-input:oklch(92.2% 0 0);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(64.6% .222 41.116);--pop-chart-2:oklch(60% .118 184.704);--pop-chart-3:oklch(39.8% .07 227.392);--pop-chart-4:oklch(82.8% .189 84.429);--pop-chart-5:oklch(76.9% .188 70.08);--pop-sidebar:oklch(98.5% 0 0);--pop-sidebar-foreground:oklch(14.5% 0 0);--pop-sidebar-primary:oklch(20.5% 0 0);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(97% 0 0);--pop-sidebar-accent-foreground:oklch(20.5% 0 0);--pop-sidebar-border:oklch(92.2% 0 0);--pop-sidebar-ring:oklch(70.8% 0 0);font-family:Inter,sans-serif;font-size:16px}@media (prefers-color-scheme:dark){:host{--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}}:host(.dark){--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}*,:before,:after{box-sizing:inherit}html,body{margin:0;padding:0}svg{display:block}strong{font-weight:600}p{margin:0;padding:0}button{cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.m-0{margin:0}.text-heading{font-feature-settings:"liga" off, "clig" off;letter-spacing:-.08px;text-align:center;align-self:stretch;max-width:320px;font-size:13px;font-style:normal;font-weight:600;line-height:18px}.text-xs{font-size:12px;line-height:18px}.w-full{width:100%}}`,pe=`@layer components{.btn{background-color:var(--pop-primary);color:var(--pop-primary-foreground);cursor:pointer;text-align:center;border:0;border-radius:4px;justify-content:center;align-items:center;gap:.625rem;height:auto;padding:.625rem 1.25rem;font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px;transition:background-color .2s,color .2s;display:flex}.btn:focus-visible{outline:2px solid var(--pop-ring);outline-offset:2px}}`,me=`@layer components{.mask{-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.mask-squircle{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e")}}`,S=!1,C=new Set,w=null,T=null;function E(){if(typeof window>`u`||typeof document>`u`)return!1;let e=document.documentElement.classList.contains(`dark`)||document.body.classList.contains(`dark`),t=document.documentElement.classList.contains(`light`)||document.body.classList.contains(`light`);return e?!0:t?!1:(T||=window.matchMedia(`(prefers-color-scheme: dark)`),T.matches)}function D(){let e=E();e!==S&&(S=e,C.forEach(e=>{let t=S||!!e.closest(`.dark`);e.classList.toggle(`dark`,t)}))}var he=()=>{D()};function ge(e){if(typeof window>`u`||typeof document>`u`)return;C.size===0&&(S=E(),w=new MutationObserver(()=>{D()}),w.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),w.observe(document.body,{attributes:!0,attributeFilter:[`class`]}),T=window.matchMedia(`(prefers-color-scheme: dark)`),T.addEventListener(`change`,he)),C.add(e);let t=S||!!e.closest(`.dark`);e.classList.toggle(`dark`,t)}function _e(e){C.delete(e),C.size===0&&(w&&=(w.disconnect(),null),T&&=(T.removeEventListener(`change`,he),null))}function O(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var ve=O(fe),ye=O(pe),be=O(me),k=class extends HTMLElement{get styleSheets(){return[]}constructor(){super(),this.baseStyleSheets=[ve,ye,be],this._hasRendered=!1,this._disposables=[],this.events={},this.attachShadow({mode:`open`}),this.shadowRoot&&(this.shadowRoot.adoptedStyleSheets=this.styles)}attributeChangedCallback(e,t,n){if(t===n)return;let r=`on${e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}Changed`;typeof this[r]==`function`&&this[r](n,t)}addEffect(e){this._disposables.push((0,t.effect)(e))}connectedCallback(){ge(this),(0,t.untracked)(()=>{this.render(),this._bindEvents(),this.setupEffects()})}disconnectedCallback(){_e(this),this._disposables.forEach(e=>e()),this._disposables=[]}_bindEvents(){let e=this.shadowRoot;e&&Object.keys(this.events).forEach(t=>{e.addEventListener(t,this)})}handleEvent(e){let t=this.events[e.type];t&&typeof this[t]==`function`&&this[t](e)}emit(e,t={}){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,...t}))}get styles(){return[...this.baseStyleSheets,...this.styleSheets]}setupEffects(){}render(){this.shadowRoot&&(this.shadowRoot.innerHTML=this.getTemplate(),this._hasRendered=!0)}hideElement(e,t,n=!0){if(!this.shadowRoot||!this._hasRendered)return;let r=this.shadowRoot.querySelector(e);if(!r){console.warn(`Element not found for selector: ${e}`);return}n?r.classList.toggle(`hidden`,t):r.classList.toggle(`invisible`,t)}setText(e,t){let n=this.shadowRoot?.querySelector(e);n&&n.textContent!==String(t)&&(n.textContent=String(t))}setAttr(e,t,n){let r=this.shadowRoot?.querySelector(e);r&&(n===null?r.removeAttribute(t):r.getAttribute(t)!==n&&r.setAttribute(t,n))}toggleClass(e,t,n){let r=this.shadowRoot?.querySelector(e);r&&r.classList.toggle(t,n)}getElement(e){return this.shadowRoot?.querySelector(e)??null}},A=e=>`[data-ref="${e}"]`;function j(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var xe=O(`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
|
|
@@ -130,7 +130,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
130
130
|
transform: rotate(360deg);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
|
-
`),
|
|
133
|
+
`),M=class extends k{constructor(...e){super(...e),this.events={click:`onClick`},this._dropdownOpen=!1,this._onOutsideClick=e=>{let t=e.composedPath(),n=this.getElement(A(`dropdown`)),r=this.getElement(A(`trigger`));n&&r&&!t.includes(n)&&!t.includes(r)&&this.closeDropdown()}}get styleSheets(){return[xe]}disconnectedCallback(){this.closeDropdown(),super.disconnectedCallback()}setupEffects(){this.addEffect(()=>{let e=this.authStore.currentUser.value,t=this.authStore.organizations.value,r=this.getElement(A(`avatar`));if(r&&(r.setAttribute(`data-color-key`,e?.id??e?.name??``),r.innerHTML=e?.image?`<img src="${e.image}" alt="${e.name??`User`}'s avatar">`:n(e?.name)),!e){this.closeDropdown();return}let i=this.authStore.organizationsLoading.value,a=this.getElement(A(`dropdown`));a&&(a.innerHTML=`
|
|
134
134
|
${t.length===0&&i?`<div class="switcher__loading"><span class="switcher__spinner"></span>Loading accounts…</div>`:t.map(t=>`
|
|
135
135
|
<button class="switcher__item${t.id===e.id?` is-active`:``}" data-ref="item" type="button" data-org-id="${t.id}">
|
|
136
136
|
${t.name}
|
|
@@ -138,7 +138,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
138
138
|
`).join(``)}
|
|
139
139
|
${t.length>0?`<div class="switcher__divider"></div>`:``}
|
|
140
140
|
<button class="switcher__item switcher__item--sign-out" data-ref="item" type="button" data-action="sign-out">Sign out</button>
|
|
141
|
-
`)})}toggleDropdown(){this._dropdownOpen?this.closeDropdown():this.openDropdown()}openDropdown(){if(!this.authStore.currentUser.value)return;this.authStore.organizations.value.length===0&&this.authStore.loadOrganizations(),this._dropdownOpen=!0;let t=this.getElement(
|
|
141
|
+
`)})}toggleDropdown(){this._dropdownOpen?this.closeDropdown():this.openDropdown()}openDropdown(){if(!this.authStore.currentUser.value)return;this.authStore.organizations.value.length===0&&this.authStore.loadOrganizations(),this._dropdownOpen=!0;let t=this.getElement(A(`dropdown`)),n=this.getElement(A(`trigger`));if(t&&n){t.classList.add(`is-open`);let r=()=>{(0,e.computePosition)(n,t,{placement:`bottom-start`,middleware:[(0,e.offset)(4),(0,e.flip)(),(0,e.shift)({padding:8})],strategy:`fixed`}).then(({x:e,y:n,placement:r})=>{Object.assign(t.style,{left:`${e}px`,top:`${n}px`,position:`fixed`});let i=r.startsWith(`top`);t.style.setProperty(`--switcher-origin`,i?`bottom left`:`top left`),t.style.setProperty(`--switcher-slide-y`,i?`6px`:`-6px`)})};this._floatingCleanup=(0,e.autoUpdate)(n,t,r),document.addEventListener(`mousedown`,this._onOutsideClick)}}closeDropdown(){this._dropdownOpen=!1;let e=this.getElement(A(`dropdown`));e&&e.classList.remove(`is-open`),this._floatingCleanup&&=(this._floatingCleanup(),void 0),document.removeEventListener(`mousedown`,this._onOutsideClick)}onClick(e){let t=e.target;if(t.closest(A(`trigger`))){e.stopPropagation(),this.toggleDropdown();return}let n=t.closest(A(`item`));if(n){if(e.stopPropagation(),this.closeDropdown(),n.getAttribute(`data-action`)===`sign-out`){this.authStore.signOutEverywhere();return}let t=n.getAttribute(`data-org-id`);t&&this.authStore.switchOrganization(t)}}getTemplate(){return`
|
|
142
142
|
<div class="switcher">
|
|
143
143
|
<button
|
|
144
144
|
class="switcher__trigger"
|
|
@@ -150,7 +150,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
150
150
|
</button>
|
|
151
151
|
<div class="switcher__dropdown" data-ref="dropdown"></div>
|
|
152
152
|
</div>
|
|
153
|
-
`}};
|
|
153
|
+
`}};j([x(y)],M.prototype,`authStore`,void 0),customElements.get(`pop-account-switcher`)||customElements.define(`pop-account-switcher`,M);var N=6,Se=O(`
|
|
154
154
|
:host {
|
|
155
155
|
border-top: 1px solid var(--pop-sidebar-border);
|
|
156
156
|
display: block;
|
|
@@ -248,10 +248,10 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
248
248
|
.code__expiry strong {
|
|
249
249
|
font-weight: 600;
|
|
250
250
|
}
|
|
251
|
-
`),
|
|
251
|
+
`),P=class extends k{constructor(...e){super(...e),this.events={input:`onInput`,keydown:`onKeyDown`,click:`onClick`}}get styleSheets(){return[Se]}connectedCallback(){super.connectedCallback(),this.getDigitInputs()[0]?.focus()}getDigitInputs(){return Array.from(this.shadowRoot?.querySelectorAll(A(`digit`))??[])}onInput(e){let t=e.target;t.matches(A(`digit`))&&(t.value=t.value.replace(/[^0-9]/g,``).slice(0,1),t.value&&t.nextElementSibling?.focus(),this.maybeSubmit())}onKeyDown(e){let t=e.target;t.matches(A(`digit`))&&e.key===`Backspace`&&!t.value&&t.previousElementSibling?.focus()}onClick(e){let t=e.target;if(t.closest(A(`no-code`))){this.authStore.showNoCode();return}if(t.closest(A(`back`))){this.authStore.backToEmail();return}}maybeSubmit(){let e=this.getDigitInputs().map(e=>e.value);e.some(e=>!e)||this.authStore.verifyOtp(e.join(``))}renderCountdown(e){let t=e-Date.now();if(t<=0)return!0;let n=this.getElement(A(`expiry`));if(!n)return!1;let r=Math.ceil(t/1e3),i=Math.floor(r/60),a=r%60;return n.innerHTML=`Code expires in <strong>${i}:${String(a).padStart(2,`0`)}</strong>`,!1}setupEffects(){let e=this.authStore.authNoticeDismissals.peek();this.addEffect(()=>{let t=this.authStore.authNoticeDismissals.value;t!==e&&(e=t,queueMicrotask(()=>{let e=this.getDigitInputs();(e.find(e=>!e.value)??e[0])?.focus({preventScroll:!0})}))}),this.addEffect(()=>{let e=this.authStore.otpExpiresAt.value;if(!e)return;this.renderCountdown(e);let t=window.setInterval(()=>{this.renderCountdown(e)&&(window.clearInterval(t),this.authStore.expireOtp())},1e3);return()=>window.clearInterval(t)}),this.addEffect(()=>{let e=this.authStore.otpPending.value,t=this.getDigitInputs();t.forEach(t=>{t.disabled=e}),!e&&!this.shadowRoot?.activeElement&&(t.find(e=>!e.value)??t[0])?.focus({preventScroll:!0})}),this.addEffect(()=>{let e=this.authStore.otpError.value,t=this.getElement(A(`error`));if(t&&(t.hidden=!e,t.textContent=e??``),e){let e=this.getDigitInputs();e.forEach(e=>{e.value=``}),e[0]?.focus()}})}getTemplate(){return`
|
|
252
252
|
<div class="code__container" role="group" aria-labelledby="code-title">
|
|
253
253
|
<p class="code__heading" id="code-title">Enter Verification Code</p>
|
|
254
|
-
<div class="code__digits" role="group" aria-labelledby="code-title">${Array.from({length:
|
|
254
|
+
<div class="code__digits" role="group" aria-labelledby="code-title">${Array.from({length:N}).map((e,t)=>`<input class="code__digit" data-ref="digit" type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code" aria-label="Digit ${t+1} of ${N}" />`).join(``)}</div>
|
|
255
255
|
<div class="code__body">
|
|
256
256
|
<p class="code__copy">
|
|
257
257
|
A verification code has been sent to your email. Enter code to continue.
|
|
@@ -266,7 +266,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
266
266
|
</pop-button-link>
|
|
267
267
|
</div>
|
|
268
268
|
</div>
|
|
269
|
-
`}};
|
|
269
|
+
`}};j([x(y)],P.prototype,`authStore`,void 0),customElements.get(`pop-auth-code`)||customElements.define(`pop-auth-code`,P);var Ce=`data:image/png;base64,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`,we=`data:image/png;base64,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`,F=`<svg
|
|
270
270
|
width="100"
|
|
271
271
|
height="16"
|
|
272
272
|
viewBox="0 0 75 12"
|
|
@@ -305,7 +305,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
305
305
|
d="M73.5046 5.85855C72.5417 5.78141 71.162 5.47284 70.4167 4.88998C70.3194 4.81284 70.1528 4.7057 70.1528 4.56855C70.1528 4.52141 70.1713 4.44427 70.2361 4.44427C70.4167 4.44427 71.5787 5.3057 72.5787 5.3057C73.8426 5.3057 75 4.39713 75 3.20141C75 1.23427 72.1806 0.437125 70.4676 0.437125C67.9259 0.437125 66.037 1.95855 66.037 4.37141C66.037 4.89427 66.1204 5.61427 66.537 6.01713C66.7361 6.21855 67.0694 6.21855 67.3333 6.21855C68.3287 6.21855 69.5926 6.50998 70.1204 7.35427C70.1713 7.43141 70.2176 7.5557 70.2176 7.6457C70.2176 7.6757 70.2176 7.72284 70.1852 7.7057C70.088 7.6757 70.0046 7.59855 69.9352 7.53855C69.3519 7.0157 68.5555 6.49284 67.713 6.49284C66.4491 6.49284 66.0046 7.6157 66.0046 8.59713C66.0046 10.5771 67.9306 11.67 69.8889 11.67C72.213 11.67 75 10.2557 75 7.84284C75 6.95141 74.5833 5.95284 73.5046 5.86284V5.85855Z"
|
|
306
306
|
fill="currentColor"
|
|
307
307
|
/>
|
|
308
|
-
</svg>`,
|
|
308
|
+
</svg>`,Te=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Ee=O(`
|
|
309
309
|
:host {
|
|
310
310
|
display: block;
|
|
311
311
|
padding: 20px 24px;
|
|
@@ -405,9 +405,9 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
405
405
|
.email__about:hover {
|
|
406
406
|
color: var(--pop-foreground);
|
|
407
407
|
}
|
|
408
|
-
`),
|
|
408
|
+
`),I=class extends k{constructor(...e){super(...e),this.events={click:`onClick`,submit:`onSubmit`}}get styleSheets(){return[Ee]}connectedCallback(){super.connectedCallback();let e=this.getElement(A(`input`));e&&(e.value=this.authStore.otpEmail.value),this.focusEmailInputWhenVisible()}focusEmailInputWhenVisible(){let e=this.getElement(A(`input`));if(!e)return;let t=()=>{e.isConnected&&e.focus({preventScroll:!0})},n=this.closest(`.panel__card`)?.getAnimations()??[];if(n.length===0){t();return}Promise.allSettled(n.map(e=>e.finished)).then(t)}onClick(e){let t=e.target;if(t.closest(A(`google`))){this.authStore.requestSignIn();return}if(t.closest(A(`apple`))){this.authStore.requestSignIn();return}}onSubmit(e){e.preventDefault(),this.handleContinue()}async handleContinue(){let e=this.getElement(A(`input`));if(!e)return;let t=e.value.trim();if(!Te.test(t)){this.authStore.otpError.value=`Enter a valid email address.`;return}await this.authStore.sendOtp(t)}setupEffects(){let e=this.authStore.authNoticeDismissals.peek();this.addEffect(()=>{let t=this.authStore.authNoticeDismissals.value;t!==e&&(e=t,queueMicrotask(()=>{this.getElement(A(`input`))?.focus({preventScroll:!0})}))}),this.addEffect(()=>{let e=this.authStore.otpPending.value,t=this.authStore.otpError.value,n=this.getElement(A(`submit`));n&&(n.disabled=e,n.textContent=e?`Sending code…`:`Continue`);let r=this.getElement(A(`error`));r&&(r.hidden=!t,r.textContent=t??``)})}getTemplate(){return`
|
|
409
409
|
<form class="email__container">
|
|
410
|
-
<div class="email__logo" role="img" aria-label="PopGrids">${
|
|
410
|
+
<div class="email__logo" role="img" aria-label="PopGrids">${F}</div>
|
|
411
411
|
<p class="text-heading">Small communities, big connections 👋</p>
|
|
412
412
|
<input
|
|
413
413
|
class="email__input"
|
|
@@ -427,7 +427,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
427
427
|
type="button"
|
|
428
428
|
aria-label="Continue with Apple"
|
|
429
429
|
>
|
|
430
|
-
<img src="${
|
|
430
|
+
<img src="${Ce}" alt="" width="64" height="64" loading="lazy" />
|
|
431
431
|
</button>
|
|
432
432
|
<button
|
|
433
433
|
class="email__social email__social--google"
|
|
@@ -435,14 +435,14 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
435
435
|
type="button"
|
|
436
436
|
aria-label="Continue with Google"
|
|
437
437
|
>
|
|
438
|
-
<img src="${
|
|
438
|
+
<img src="${we}" alt="" width="64" height="64" loading="lazy" />
|
|
439
439
|
</button>
|
|
440
440
|
</div>
|
|
441
441
|
<pop-button-link href="https://www.popgrids.io" target="_blank" rel="noopener noreferrer">
|
|
442
442
|
What’s PopGrids?
|
|
443
443
|
</pop-button-link>
|
|
444
444
|
</form>
|
|
445
|
-
`}};
|
|
445
|
+
`}};j([x(y)],I.prototype,`authStore`,void 0),customElements.get(`pop-auth-email`)||customElements.define(`pop-auth-email`,I);var De=O(`
|
|
446
446
|
:host {
|
|
447
447
|
display: flex;
|
|
448
448
|
flex-direction: column;
|
|
@@ -513,14 +513,14 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
513
513
|
pointer-events: none;
|
|
514
514
|
width: 75px;
|
|
515
515
|
}
|
|
516
|
-
`),
|
|
516
|
+
`),L=class extends k{constructor(...e){super(...e),this.events={click:`onClick`,keydown:`onKeyDown`,focusout:`onFocusOut`}}get styleSheets(){return[De]}restoreFocus(){this.setAttribute(`data-restored`,``),this.getElement(A(`join`))?.focus({preventScroll:!0})}onKeyDown(){this.removeAttribute(`data-restored`)}onFocusOut(){this.removeAttribute(`data-restored`)}onClick(e){e.target.closest(A(`join`))&&this.handleJoin()}setupEffects(){this.addEffect(()=>{let e=this.authStore.authPending.value,t=this.getElement(A(`join`));t&&(t.disabled=e),this.setText(A(`label`),e?`Signing in…`:`Join the Conversation`)})}handleJoin(){this.authStore.clearAuthError(),this.authStore.startEmailSignIn()}getTemplate(){return`
|
|
517
517
|
<button class="auth-join" data-ref="join" type="button">
|
|
518
518
|
<div class="auth-join__actions">
|
|
519
519
|
<span data-ref="label">Join the Conversation</span>
|
|
520
|
-
<span class="auth-join__logo" aria-hidden="true">${
|
|
520
|
+
<span class="auth-join__logo" aria-hidden="true">${F}</span>
|
|
521
521
|
</div>
|
|
522
522
|
</button>
|
|
523
|
-
`}};
|
|
523
|
+
`}};j([x(y)],L.prototype,`authStore`,void 0),customElements.get(`pop-auth-join`)||customElements.define(`pop-auth-join`,L);var Oe=O(`
|
|
524
524
|
:host {
|
|
525
525
|
border-top: 1px solid var(--pop-sidebar-border);
|
|
526
526
|
display: block;
|
|
@@ -558,7 +558,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
558
558
|
justify-content: space-between;
|
|
559
559
|
width: 100%;
|
|
560
560
|
}
|
|
561
|
-
`),
|
|
561
|
+
`),R=class extends k{constructor(...e){super(...e),this.events={click:`onClick`}}get styleSheets(){return[Oe]}connectedCallback(){super.connectedCallback(),this.getElement(`#no-code-title`)?.focus()}setupEffects(){let e=this.authStore.authNoticeDismissals.peek();this.addEffect(()=>{let t=this.authStore.authNoticeDismissals.value;t!==e&&(e=t,queueMicrotask(()=>this.getElement(`#no-code-title`)?.focus({preventScroll:!0})))})}onClick(e){let t=e.target;if(t.closest(A(`resend`))){this.authStore.resendOtp();return}if(t.closest(A(`back`))){this.authStore.backToCode();return}}getTemplate(){return`
|
|
562
562
|
<div
|
|
563
563
|
class="no-code__container text-xs"
|
|
564
564
|
role="group"
|
|
@@ -588,7 +588,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
588
588
|
</pop-button-link>
|
|
589
589
|
</div>
|
|
590
590
|
</div>
|
|
591
|
-
`}};
|
|
591
|
+
`}};j([x(y)],R.prototype,`authStore`,void 0),customElements.get(`pop-auth-no-code`)||customElements.define(`pop-auth-no-code`,R);var ke=`data:image/png;base64,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`,Ae=O(`
|
|
592
592
|
:host {
|
|
593
593
|
display: block;
|
|
594
594
|
position: relative;
|
|
@@ -735,12 +735,12 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
735
735
|
opacity: 0;
|
|
736
736
|
}
|
|
737
737
|
}
|
|
738
|
-
`),
|
|
738
|
+
`),z=class extends k{constructor(...e){super(...e),this._child=null,this._prevView=`idle`,this._heightAnimationFrame=null,this._heightTransitionEnd=null}get styleSheets(){return[Ae]}disconnectedCallback(){this.cancelCardHeightAnimation(),super.disconnectedCallback()}cancelCardHeightAnimation(){this._heightAnimationFrame!==null&&(window.cancelAnimationFrame(this._heightAnimationFrame),this._heightAnimationFrame=null);let e=this.getElement(A(`card`));this._heightTransitionEnd&&=(e?.removeEventListener(`transitionend`,this._heightTransitionEnd),null)}swapCardContent(e,t,n){this.cancelCardHeightAnimation();let r=e.getBoundingClientRect().height;e.style.height=`${r}px`,t.innerHTML=`<${n}></${n}>`,this._heightAnimationFrame=window.requestAnimationFrame(()=>{this._heightAnimationFrame=null;let n=t.getBoundingClientRect().height;if(Math.abs(n-r)<1){e.style.height=``;return}this._heightTransitionEnd=t=>{t.target!==e||t.propertyName!==`height`||(e.style.height=``,e.removeEventListener(`transitionend`,this._heightTransitionEnd),this._heightTransitionEnd=null)},e.addEventListener(`transitionend`,this._heightTransitionEnd),e.style.height=`${n}px`})}setupEffects(){this.addEffect(()=>{let e=this.authStore.authView.value,t=e===`email`?`pop-auth-email`:e===`code`?`pop-auth-code`:e===`no-code`?`pop-auth-no-code`:null,n=e===`idle`&&this._prevView!==`idle`&&this.getElement(A(`card`))?.matches(`:focus-within`);this.toggleClass(A(`panel`),`panel--card`,t!==null),n&&this.getElement(`pop-auth-join`)?.restoreFocus();let r=this._prevView===`idle`&&e!==`idle`,i=this.getElement(A(`card-content`));if(i&&t&&(this._child!==t||r)){let e=this.getElement(A(`card`));this._child=t,e&&this._prevView!==`idle`?this.swapCardContent(e,i,t):i.innerHTML=`<${t}></${t}>`}this._prevView=e})}getTemplate(){return`
|
|
739
739
|
<div class="panel" data-ref="panel">
|
|
740
740
|
<div class="panel__stack">
|
|
741
741
|
<div class="panel__join-group">
|
|
742
742
|
<div class="watermark">
|
|
743
|
-
<img src="${
|
|
743
|
+
<img src="${ke}" alt="PopGrids Watermark" width="64" height="11" />
|
|
744
744
|
</div>
|
|
745
745
|
<pop-auth-join class="panel__join"></pop-auth-join>
|
|
746
746
|
</div>
|
|
@@ -749,7 +749,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
749
749
|
</div>
|
|
750
750
|
</div>
|
|
751
751
|
</div>
|
|
752
|
-
`}};
|
|
752
|
+
`}};j([x(y)],z.prototype,`authStore`,void 0),customElements.get(`pop-auth-panel`)||customElements.define(`pop-auth-panel`,z);var je=O(`
|
|
753
753
|
:host {
|
|
754
754
|
display: inline-flex;
|
|
755
755
|
max-width: 100%;
|
|
@@ -868,7 +868,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
868
868
|
text-overflow: ellipsis;
|
|
869
869
|
white-space: nowrap;
|
|
870
870
|
}
|
|
871
|
-
`),
|
|
871
|
+
`),Me=new Set([`sm`,`md`,`lg`]),Ne=new Set([`default`,`white`,`black`]),Pe=class extends k{constructor(...e){super(...e),this.events={click:`onClick`}}get styleSheets(){return[je]}static get observedAttributes(){return[`href`,`size`,`theme`,`primary`,`disabled`,`type`,`target`,`rel`]}onHrefChanged(){this.render()}onSizeChanged(){this.render()}onThemeChanged(){this.render()}onPrimaryChanged(){this.render()}onDisabledChanged(){this.render()}onTypeChanged(){this.render()}onTargetChanged(){this.render()}onRelChanged(){this.render()}get href(){return this.getAttribute(`href`)}set href(e){e===null?this.removeAttribute(`href`):this.setAttribute(`href`,e)}get size(){let e=this.getAttribute(`size`);return e&&Me.has(e)?e:`md`}set size(e){this.setAttribute(`size`,e)}get theme(){let e=this.getAttribute(`theme`);return e&&Ne.has(e)?e:`default`}set theme(e){this.setAttribute(`theme`,e)}get primary(){return this.hasAttribute(`primary`)}set primary(e){e?this.setAttribute(`primary`,``):this.removeAttribute(`primary`)}get disabled(){return this.hasAttribute(`disabled`)}set disabled(e){e?this.setAttribute(`disabled`,``):this.removeAttribute(`disabled`)}get type(){let e=this.getAttribute(`type`);return e===`submit`||e===`reset`?e:`button`}set type(e){this.setAttribute(`type`,e)}onClick(e){this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}hasSlotted(e){return this.querySelector(`:scope > [slot="${e}"]`)!==null}hasLabel(){return Array.from(this.childNodes).some(e=>e.nodeType===Node.ELEMENT_NODE?!e.hasAttribute(`slot`):e.nodeType===Node.TEXT_NODE&&!!e.textContent?.trim())}getTemplate(){let e=[`btn-link`,`btn-link--size-${this.size}`,`btn-link--theme-${this.theme}`,this.primary?`btn-link--primary`:``,this.disabled?`is-disabled`:``].filter(Boolean).join(` `),t=this.hasSlotted(`leading`)?`<span class="btn-link__icon"><slot name="leading"></slot></span>`:``,n=this.hasSlotted(`trailing`)?`<span class="btn-link__icon"><slot name="trailing"></slot></span>`:``,r=`${t}${this.hasLabel()?`<span class="btn-link__label"><slot></slot></span>`:``}${n}`;if(this.href!==null){let t=this.disabled?`aria-disabled="true" tabindex="-1"`:``,n=this.getAttribute(`target`),i=this.getAttribute(`rel`);return`
|
|
872
872
|
<a
|
|
873
873
|
class="${e}"
|
|
874
874
|
part="link"
|
|
@@ -887,7 +887,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
887
887
|
>
|
|
888
888
|
${r}
|
|
889
889
|
</button>
|
|
890
|
-
`}};customElements.get(`pop-button-link`)||customElements.define(`pop-button-link`,
|
|
890
|
+
`}};customElements.get(`pop-button-link`)||customElements.define(`pop-button-link`,Pe);var Fe=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD8AAABMCAYAAADa6W+wAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUuSURBVHgB5ZyBceIwEEX3bq4AOsAdQAdxKggl+Co4rgKcCkgqgFRAUgGkAqACOxVAKvDpg+VRHEmWQSubuTezg8Ega7UrebWS+UG8jIXEQoZCovI9lcd1ciHHUnZCPsrXXflZ7xkISYSshByEFJ5kLWRO54bsHRGdK+dTYZNkQhbUg4aI6FyRoiNBQyQUGLj3jMJYuleNMC4v1gel67Ig/WCq5Qe144+QlM6Wb2QwGNB4PD7JaDQ6veIzKZLj8XiSPM9Pr/v9nna73UnwWUtyIb+FbMgjM3K0QBzHxXq9Lg6HQ3Et2+22WCwWpzJdr1/KjDzRqLiwZDGbzbwobCLLslNDRFEUrAEmTReBVVCxkLRohIsbICLLiA5roxJdAm9zaIAJXUBmKhCtHtraJjAuNHjBgVrcBcDsFhSXoD4NDbB2VTyyFNI7xSUODTB1UX5hKmA+nxd9Bl0AYxGZ3X9wkdWTJCluARjIYv2ULrG6T3eHhabT6SkY4sASFB1aWx23FJ+IULcqm6MBUKbF+rFO+ZQCje6qa6J8jsjQYv2FTvmMAvb1yWRSXePp6anwzWq1cnb9MQXo6yqwthyZ0Q04y9e5/k9F+VjnCpiGCrckDjCtFV51OpZTWN/lo/4Gxqryd7pvCNckTkS/rI7f39/JN5b6j1TltU10d3dHnKjl+7Y8sHhtpS+iHm3f4JyfS2RIytHvMV4ZdMt+1lvhS9OUaSdu5DUuSFk5l60hksoPWv7QK9I1kb/zjU2HRsuHIFQj17FanusWV4fD4i5I5Ye6k8PhkELAqbxlHDn2os9L5Tm6mUX5vBfKy/s7x/U+Pz9Np7q3/GazqY7VaI+j/Br7zpV/e3urjjmiSUvUWJ3QRkHcqAlHzL58g+iUzAmNLxOboGAgur+/rwYkjgnU6+ur6VROXVpezbLA6hw5A9dMTnDlZRoLinPk8CwTmm85vE76PCdIvRn0ympdQL8YGWI6y0GD1atVGzngaePLrmLua8FAaqEaBTsb7bl4fHy0hbTPdB7pv7AmjYtwraZw0eDu6OuRqrTV7T8+PuhWkHGDhUeqWV0qr43+b6XPI4RVAyYNGyHL+odS+Vz3i1tQ/vn5uUlxnPitO/FL+cL3XzEkFAFmWsjRY28eZnKXTKBQBgY3y6xN8pcM+km0O66wlhZiUMJ1lstlY1yB8y335KU2peUOTKRQtvWTyOGJypJv4FGwmlD42zl4Aq6rZnQhFyxnYYBLXb4YEemXpjlx2ENziSBaTaglncT3nhtgTS23nEkyXYEhdl417KJwtfaUrkCrPPbOhEDdqNBS6ZQcd4HbWOkugN0NIWhhfRhpQR4eM/mlHGujPEvq1ysNOXu4tHzaKidPqLO6XPcFrkCnDgIdy/IYUryYiubkEVV5bSwbSnlgW04mBhqVDxnfh16tVZXXhk8hLW9bVCQGemV5y7VyCkAnUR5APEHmezkL9RxeZ4Oey5qab5yUVxcTuXh5eTGd2lMgnkjjepg/c9JmdYWT2FQJjo3BEsusLqPAbHUV4VpMTNPUZvUFBSYxVMT7vvsGxWH1iDpgTYbbDjzg2i6AXBweMSH77C2hjsAUy/psPLwASce2OD4GuqIA2B4hxzRyrrzHbfBb8I2ZGJKODw8PVeJRxujysXDcw/FYOBKWDhFjLuSeAkV1NlJqn125RjLqqJ+bSOk/VVwSEe9fRSzJQx6Om4T8NgLKiunGSMh8O3QR/Damjmn7hyF14KpxKSM6d49IOa/7u6dX6snfPf0DiVL6IWhCmZ4AAAAASUVORK5CYII=`,B=`#DDD0BE.#E9DCBB.#E9DCBB.#C7D1B0.#C6D0CB.#E9DCBB.#C7D1B0.#E9DCBB.#DFC2C0.#CFD4C6.#D7E3E8.#CFD4C6.#D6B3B3.#E9DCBB.#CFCBDC.#BFD6D7.#E3D2C6.#D1E2E7.#D6B3B3.#BFD6D7.#E9DCBB.#C7D1B0.#DFC2C0.#D1E2E7.#CFD4C6.#E9DCBB.#D7E3E8.#CFD4C6.#C6D0CB.#E9DCBB.#C7D1B0.#E9DCBB.#CFCBDC.#E3D2C6.#E9DCBB`.split(`.`),Ie=e=>typeof e==`number`?B[e%B.length]??`#e5e7eb`:B[Math.floor(Math.random()*B.length)];function Le(e){let t=new TextEncoder().encode(e),n=2166136261;for(let e=0;e<t.length;e++){let r=t[e]??0;n^=r,n=Math.imul(n,16777619)}return n>>>0}function Re(e){return B[Le(e)%B.length]??`#e5e7eb`}var ze=O(`
|
|
891
891
|
:host {
|
|
892
892
|
display: block;
|
|
893
893
|
|
|
@@ -984,20 +984,20 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
984
984
|
width: 100%;
|
|
985
985
|
transform: scale(0.57);
|
|
986
986
|
}
|
|
987
|
-
`),
|
|
987
|
+
`),Be=class extends k{constructor(){super(),this._backgroundColor=Ie()??`#e5e7eb`}static get observedAttributes(){return[`size`,`data-color-key`,`deleted`]}onSizeChanged(){this.render()}onDataColorKeyChanged(){this.render()}onDeletedChanged(){this.render()}get styleSheets(){return[ze]}get size(){return this.getAttribute(`size`)||`md`}set size(e){this.setAttribute(`size`,e)}get deleted(){return this.hasAttribute(`deleted`)}set deleted(e){e?this.setAttribute(`deleted`,``):this.removeAttribute(`deleted`)}getTemplate(){let e=this.size,t=this.deleted,n=this.getAttribute(`data-color-key`),r=t?`var(--pop-muted-foreground, #e5e7eb)`:n?Re(n):this._backgroundColor;return`
|
|
988
988
|
<div class="comment-avatar comment-avatar--size-${e}" part="base">
|
|
989
989
|
<div class="comment-avatar__background mask mask-squircle" part="background"></div>
|
|
990
990
|
${t?`<div
|
|
991
991
|
class="comment-avatar__content mask mask-squircle"
|
|
992
992
|
part="content"
|
|
993
993
|
style="background-color: ${r}; opacity: 0.15"
|
|
994
|
-
><img class="comment-avatar__deleted-mark" src="${
|
|
994
|
+
><img class="comment-avatar__deleted-mark" src="${Fe}" alt="Deleted user" /></div>`:`<slot
|
|
995
995
|
class="comment-avatar__content mask mask-squircle"
|
|
996
996
|
part="content"
|
|
997
997
|
style="background-color: ${r};"
|
|
998
998
|
></slot>`}
|
|
999
999
|
</div>
|
|
1000
|
-
`}};customElements.get(`pop-comment-avatar`)||customElements.define(`pop-comment-avatar`,
|
|
1000
|
+
`}};customElements.get(`pop-comment-avatar`)||customElements.define(`pop-comment-avatar`,Be);var Ve=3e4,V=3,He=1,H=e=>{let t=typeof e.createdAt==`number`?e.createdAt:Date.parse(String(e.createdAt));return Number.isFinite(t)?t:0},U=(e,t)=>{let n=e?.previewCount??t;return n>0?n:V},Ue=(e,t)=>e&&{...e,...t},W=class{constructor(e){this.previewCount=V,this._fetchedGrid=(0,t.signal)(null),this._overrides=(0,t.signal)({}),this.grid=(0,t.computed)(()=>Ue(this._fetchedGrid.value,this._overrides.value)),this.comments=(0,t.signal)([]),this.loading=(0,t.signal)(!0),this.error=(0,t.signal)(null),this.open=(0,t.signal)(!1),this.replyingTo=(0,t.signal)(null),this.editingCommentId=(0,t.signal)(null),this.scrollingCommentId=(0,t.signal)(null),this.socket=null,this.reconnectAttempt=0,this.reconnectTimer=null,this.disposed=!1,this.topLevelComments=(0,t.computed)(()=>this.comments.value.filter(e=>e.parentCommentId===null).sort((e,t)=>String(e.sortKey).localeCompare(String(t.sortKey)))),this.commentSize=(0,t.computed)(()=>this.grid.value?.layout===`lg`?`lg`:`sm`),this.replyingToComment=(0,t.computed)(()=>{let e=this.replyingTo.value;return e?this.comments.value.find(t=>t.id===e)??null:null}),this.editingComment=(0,t.computed)(()=>{let e=this.editingCommentId.value;return e?this.comments.value.find(t=>t.id===e)??null:null}),this.previewComments=(0,t.computed)(()=>this.topLevelComments.value.slice(0,U(this.grid.value,this.previewCount))),this.previewAvatars=(0,t.computed)(()=>{let e=U(this.grid.value,this.previewCount);if(e<=He)return[];let t=new Set,n=[],r=[...this.comments.value].sort((e,t)=>H(t)-H(e));for(let i of r){let r=i.author;if(!(!r?.id||t.has(r.id))&&(t.add(r.id),n.push(r),n.length>=e))break}return n.reverse()}),this.apiUrl=e.apiUrl,this.publicKey=e.publicKey,this.pageUrl=e.pageUrl,this.externalId=e.externalId?.trim()||null,this.demo=e.demo??!1,this.authStore=e.authStore}showDemo({grid:e,comments:t}){this._fetchedGrid.value=e,this.comments.value=t,this.error.value=null,this.loading.value=!1}setOverrides(e){this._overrides.value=e}identityParams(){let e=new URLSearchParams({pageUrl:this.pageUrl});return this.externalId&&e.set(`externalId`,this.externalId),e.toString()}repliesFor(e){let t=this.comments.value.find(t=>t.id===e);return t?this.comments.value.filter(n=>n.id!==e&&(n.sortKey===t.sortKey||n.sortKey.startsWith(t.sortKey+`/`))).sort((e,t)=>String(e.sortKey).localeCompare(String(t.sortKey))):[]}async load(){this.loading.value=!0,this.error.value=null;try{let e=await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}`);if(!e.ok)return this.error.value=`There was a problem loading the PopGrid`,!1;let t=await e.json();this._fetchedGrid.value=t.grid,this.connectRealtime();let n=await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/comments?${this.identityParams()}`);if(n.ok){let e=await n.json();this.comments.value=e.comments}return!0}catch{return console.error(`Failed to load PopGrid`),this.error.value=`There was a problem loading the PopGrid`,!1}finally{this.loading.value=!1}}async postComment(e,t){let n=await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({body:e,pageUrl:this.pageUrl,externalId:this.externalId??void 0,parentCommentId:t})});if(!n.ok)return null;let r=await n.json();return this.upsertComment(r.comment),r.comment.author&&!this.authStore.currentUser.value&&(this.authStore.currentUser.value={id:r.comment.author.id,name:r.comment.author.name??``,email:``,image:r.comment.author.image}),r.comment}destroy(){this.disposed=!0,this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.socket&&=(this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket.close(),null)}async connectRealtime(){let e=this.grid.value?.connectUrl;if(!e||this.disposed)return;this.socket&&=(this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket.close(),null);let t=null;try{let e=await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/connect-ticket`,{method:`POST`});e.ok&&(t=(await e.json()).ticket)}catch{}if(!t||this.disposed){this.scheduleReconnect();return}let n=new URL(e,this.apiUrl);n.protocol=n.protocol===`https:`?`wss:`:`ws:`,n.searchParams.set(`ticket`,t),n.searchParams.set(`pageUrl`,this.pageUrl),this.externalId&&n.searchParams.set(`externalId`,this.externalId);let r=new WebSocket(n.toString());this.socket=r,r.onopen=()=>{this.reconnectAttempt=0},r.onmessage=e=>{try{let t=JSON.parse(String(e.data));t.type===`comment.created`&&t.comment?this.upsertComment(t.comment):t.type===`comment.updated`&&t.comment&&this.updateCommentInList(t.comment)}catch{}},r.onclose=()=>{this.disposed||this.scheduleReconnect()},r.onerror=()=>{r.close()}}scheduleReconnect(){if(this.disposed||this.reconnectTimer)return;let e=r(this.reconnectAttempt,1e3,Ve);this.reconnectAttempt+=1,this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connectRealtime()},e)}upsertComment(e){this.comments.value.some(t=>t.id===e.id)||(this.comments.value=[...this.comments.value,e])}async editComment(e,t){let n=await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({body:t,pageUrl:this.pageUrl,externalId:this.externalId??void 0})});if(!n.ok)return null;let r=await n.json();return this.updateCommentInList(r.comment),r.comment}async deleteComment(e){let t=await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}?${this.identityParams()}`,{method:`DELETE`});if(!t.ok)return null;let n=await t.json();return this.updateCommentInList(n.comment),n.comment}async flagComment(e){return(await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}/flag?${this.identityParams()}`,{method:`POST`})).ok}updateCommentInList(e){this.comments.value=this.comments.value.map(t=>t.id===e.id?e:t)}},We=O(`
|
|
1001
1001
|
:host {
|
|
1002
1002
|
background: var(--pop-background);
|
|
1003
1003
|
border-top: 1px solid var(--pop-bar-input-bg);
|
|
@@ -1111,7 +1111,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1111
1111
|
pointer-events: none;
|
|
1112
1112
|
user-select: none;
|
|
1113
1113
|
}
|
|
1114
|
-
`),
|
|
1114
|
+
`),Ge=`<svg width="64" height="11" viewBox="0 0 64 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
1115
1115
|
<path d="M3.91111 0C0.892839 0 0 2.11357 0 4.77714C0 5.76321 0.0987654 6.73357 0.213333 7.70786C0.25679 8.08893 0.240988 8.50929 0.312099 8.89036C0.497778 9.89214 1.44593 10.3557 2.36642 10.3557C3.62667 10.3557 4.4642 9.56607 4.4642 8.30107C4.4642 7.57036 4.22321 7.09107 3.5279 6.80821C3.48444 6.7925 3.44099 6.78071 3.44099 6.72179C3.44099 6.62357 3.59901 6.55286 3.69778 6.55286C4.03753 6.55286 4.57481 6.89071 5.04494 6.89071C6.88593 6.89071 7.90519 5.13071 7.90519 3.48071C7.90519 1.08429 6.13136 0 3.91111 0ZM3.89531 5.18179C3.78074 5.18179 3.68198 5.08357 3.68198 4.96964C3.68198 4.81643 3.89531 4.7025 3.96642 4.57679C4.12049 4.29393 4.16395 3.81464 4.16395 3.4925C4.16395 3.11143 4.06519 2.40821 3.8242 2.12536C3.75309 2.04286 3.65432 1.99964 3.65432 1.88571C3.65432 1.77179 3.76889 1.67357 3.87951 1.67357C4.36148 1.67357 4.60247 3.08393 4.60247 3.44929C4.60247 3.84214 4.47605 5.18179 3.89531 5.18179Z" fill="#000020" fill-opacity="0.1"/>
|
|
1116
1116
|
<path d="M12.7368 0.239637C9.73433 0.239637 7.93285 2.35321 7.93285 5.25249C7.93285 8.15178 9.73038 10.2654 12.7368 10.2654C15.7432 10.2654 17.5249 8.12428 17.5249 5.25249C17.5249 2.38071 15.7116 0.239637 12.7368 0.239637ZM12.8672 8.83142C12.8198 8.89035 12.7249 9.00035 12.6104 9.00035C12.4958 9.00035 12.3852 8.90214 12.3852 8.78821C12.3852 8.74499 12.7526 8.19499 12.8119 8.02607C13.037 7.36214 13.0805 6.64321 13.0805 5.93999C13.0805 4.99714 12.9106 3.78321 12.3299 3.00928C12.2153 2.86785 11.8637 2.60071 11.8637 2.44749C11.8637 2.33357 11.9625 2.23535 12.077 2.23535C12.1758 2.23535 12.2746 2.32178 12.3457 2.37678C13.2504 3.12321 13.523 4.82821 13.523 5.93999C13.523 6.81214 13.4874 8.08499 12.8711 8.82749L12.8672 8.83142Z" fill="#000020" fill-opacity="0.1"/>
|
|
1117
1117
|
<path d="M21.6533 0C18.6351 0 17.7422 2.11357 17.7422 4.77714C17.7422 5.76321 17.841 6.73357 17.9555 7.70786C17.999 8.08893 17.9832 8.50929 18.0543 8.89036C18.24 9.89214 19.1881 10.3557 20.1086 10.3557C21.3689 10.3557 22.2064 9.56607 22.2064 8.30107C22.2064 7.57036 21.9654 7.09107 21.2701 6.80821C21.2267 6.7925 21.1832 6.78071 21.1832 6.72179C21.1832 6.62357 21.3412 6.55286 21.44 6.55286C21.7797 6.55286 22.317 6.89071 22.7871 6.89071C24.6281 6.89071 25.6474 5.13071 25.6474 3.48071C25.6474 1.08429 23.8775 0 21.6533 0ZM21.6415 5.18179C21.5269 5.18179 21.4281 5.08357 21.4281 4.96964C21.4281 4.81643 21.6415 4.7025 21.7126 4.57679C21.8667 4.29393 21.9101 3.81464 21.9101 3.4925C21.9101 3.11143 21.8113 2.40821 21.5704 2.12536C21.4992 2.04286 21.4005 1.99964 21.4005 1.88571C21.4005 1.77179 21.5151 1.67357 21.6257 1.67357C22.1076 1.67357 22.3486 3.08393 22.3486 3.44929C22.3486 3.84214 22.2222 5.18179 21.6415 5.18179Z" fill="#000020" fill-opacity="0.1"/>
|
|
@@ -1120,8 +1120,8 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1120
1120
|
<path d="M46.7674 0.549991C46.4277 0.326063 45.9457 0.212134 45.5348 0.212134C44.642 0.212134 43.8756 0.915349 43.7768 1.79142C43.7491 2.04678 43.761 2.28642 43.761 2.55356V4.94606L43.7175 7.46821V8.72142C43.7175 9.70749 44.5669 10.4814 45.5467 10.4814C46.2696 10.4814 47.0637 10.0296 47.3324 9.35392C47.4864 8.97285 47.5022 8.43856 47.5022 8.02999V6.92999L47.518 4.73392V2.53785C47.518 1.72071 47.5022 1.07249 46.7674 0.549991Z" fill="#000020" fill-opacity="0.1"/>
|
|
1121
1121
|
<path d="M50.2993 0.125713C48.8533 0.125713 48.1304 0.801428 48.1304 2.25107V2.82857L48.1462 3.96786V4.54536C48.1462 4.98143 48.1462 5.39 48.1304 5.82607C48.1027 6.34857 48.0316 6.86714 48.0316 7.40536C48.0316 9.3775 49.0509 10.3361 51.0222 10.3361C54.0523 10.3361 56.1067 9.03964 56.1067 5.81429C56.1067 1.925 54.2222 0.121785 50.2993 0.121785V0.125713ZM51.6583 7.91607C51.5437 7.91607 51.4449 7.81786 51.4449 7.70393C51.4449 7.66071 51.4608 7.83352 51.4884 7.59C51.8558 6.985 51.9546 6.14036 51.9546 5.44893C51.9546 4.80071 51.8835 3.84214 51.4726 3.33536C51.4015 3.22143 51.2593 3.13893 51.2593 2.9975C51.2593 2.88357 51.358 2.78536 51.4726 2.78536C51.6859 2.78536 51.9822 3.31964 52.0691 3.50428C52.3378 4.125 52.3812 4.80071 52.3812 5.46071C52.3812 5.86928 52.1679 7.91214 51.6583 7.91214V7.91607Z" fill="#000020" fill-opacity="0.1"/>
|
|
1122
1122
|
<path d="M62.7239 5.1268C61.9022 5.05608 60.7249 4.77322 60.0889 4.23894C60.0059 4.16822 59.8637 4.07001 59.8637 3.9443C59.8637 3.90108 59.8795 3.83037 59.9348 3.83037C60.0889 3.83037 61.0805 4.62001 61.9338 4.62001C63.0123 4.62001 64 3.78715 64 2.69108C64 0.887867 61.5941 0.157152 60.1324 0.157152C57.9635 0.157152 56.3516 1.5518 56.3516 3.76358C56.3516 4.24287 56.4227 4.90287 56.7783 5.27215C56.9482 5.4568 57.2326 5.4568 57.4578 5.4568C58.3072 5.4568 59.3857 5.72394 59.836 6.49787C59.8795 6.56858 59.919 6.68251 59.919 6.76501C59.919 6.79251 59.919 6.83572 59.8914 6.82001C59.8084 6.79251 59.7373 6.7218 59.678 6.6668C59.1802 6.18751 58.5007 5.70822 57.7817 5.70822C56.7032 5.70822 56.324 6.73751 56.324 7.63715C56.324 9.45215 57.9674 10.4539 59.6385 10.4539C61.6217 10.4539 64 9.15751 64 6.94572C64 6.12858 63.6444 5.21322 62.7239 5.13072V5.1268Z" fill="#000020" fill-opacity="0.1"/>
|
|
1123
|
-
</svg>`,
|
|
1124
|
-
<div class="logo-watermark">${
|
|
1123
|
+
</svg>`,G=class extends k{constructor(...e){super(...e),this.events={click:`onClick`}}get styleSheets(){return[We]}onClick(e){e.target.closest(A(`send`))&&this.handleSend()}setupEffects(){let e=null,t=null;this.addEffect(()=>{let t=this.gridStore.replyingTo.value;if(t&&t!==e){let e=this.getElement(`pop-comment-input`);e&&setTimeout(()=>e.focus(),0)}e=t}),this.addEffect(()=>{let e=this.gridStore.editingComment.value;if(e&&e.id!==t){let t=this.getElement(`pop-comment-input`);t&&(t.setValue(e.body),setTimeout(()=>t.focus(),0))}else if(!e&&t){let e=this.getElement(`pop-comment-input`);e&&e.clear()}t=e?.id??null}),this.addEffect(()=>{let e=this.getElement(A(`user`)),t=this.getElement(A(`avatar-reply`));if(!e||!t)return;let r=this.gridStore.editingComment.value?null:this.gridStore.replyingToComment.value?.author;if(e.classList.toggle(`has-reply`,!!r),t.classList.toggle(`hidden`,!r),r){let e=r.id??r.name??``;t.setAttribute(`data-color-key`,e),t.innerHTML=r.image?`<img src="${r.image}" alt="${r.name??`User`}'s avatar">`:n(r.name)}})}async handleSend(){let e=this.getElement(`pop-comment-input`);if(!e)return;let t=e.getValue().trim();if(!t)return;let n=this.gridStore.editingCommentId.value;if(n)e.clear(),this.gridStore.editingCommentId.value=null,await this.gridStore.editComment(n,t);else{e.clear();let n=await this.gridStore.postComment(t,this.gridStore.replyingTo.value??void 0);this.gridStore.replyingTo.value=null,n&&(this.gridStore.scrollingCommentId.value=n.id)}}getTemplate(){return`
|
|
1124
|
+
<div class="logo-watermark">${Ge}</div>
|
|
1125
1125
|
<div class="bar">
|
|
1126
1126
|
<div class="bar__user" data-ref="user">
|
|
1127
1127
|
<pop-comment-avatar
|
|
@@ -1142,7 +1142,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1142
1142
|
aria-label="Send comment"
|
|
1143
1143
|
></pop-comment-icon>
|
|
1144
1144
|
</div>
|
|
1145
|
-
`}};
|
|
1145
|
+
`}};j([x(W)],G.prototype,`gridStore`,void 0),j([x(y)],G.prototype,`authStore`,void 0),customElements.get(`pop-comment-bar`)||customElements.define(`pop-comment-bar`,G);var Ke=O(`
|
|
1146
1146
|
:host {
|
|
1147
1147
|
/* Mode-level theme colors (defaults for light mode) */
|
|
1148
1148
|
--pop-comment-color-black: #000000;
|
|
@@ -1414,7 +1414,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1414
1414
|
--pop-comment-icon-background-active: var(--pop-comment-bg-reversed);
|
|
1415
1415
|
--pop-comment-icon-background-focused: var(--pop-comment-bg-blank-resting);
|
|
1416
1416
|
}
|
|
1417
|
-
`),
|
|
1417
|
+
`),qe=class extends k{constructor(...e){super(...e),this.events={click:`onClick`}}get styleSheets(){return[Ke]}static get observedAttributes(){return[`counter`,`icon-url`,`size`,`theme`,`variant`,`type`,`disabled`,`aria-label`]}onAriaLabelChanged(){this.render()}onCounterChanged(){this.render()}onIconUrlChanged(){this.render()}onSizeChanged(){this.render()}onThemeChanged(){this.render()}onVariantChanged(){this.render()}onTypeChanged(){this.render()}onDisabledChanged(){this.render()}get counter(){return Number(this.getAttribute(`counter`)||`0`)}set counter(e){this.setAttribute(`counter`,String(e))}get iconUrl(){return this.getAttribute(`icon-url`)||void 0}set iconUrl(e){e===void 0?this.removeAttribute(`icon-url`):this.setAttribute(`icon-url`,e)}get size(){return this.getAttribute(`size`)||`md`}set size(e){this.setAttribute(`size`,e)}get theme(){return this.getAttribute(`theme`)||`brand`}set theme(e){this.setAttribute(`theme`,e)}get variant(){return this.getAttribute(`variant`)||`add`}set variant(e){this.setAttribute(`variant`,e)}get type(){return this.getAttribute(`type`)||`button`}set type(e){this.setAttribute(`type`,e)}get disabled(){return this.hasAttribute(`disabled`)}set disabled(e){e?this.setAttribute(`disabled`,``):this.removeAttribute(`disabled`)}get ariaLabel(){return this.getAttribute(`aria-label`)}set ariaLabel(e){e===null?this.removeAttribute(`aria-label`):this.setAttribute(`aria-label`,e)}onClick(e){if(this.disabled){e.preventDefault(),e.stopImmediatePropagation();return}this.emit(`pop-click`)}get icon(){let e=``;return this.theme===`brand`?this.variant===`add`?e=`
|
|
1418
1418
|
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
1419
1419
|
<path
|
|
1420
1420
|
d="M11 4.58331V17.4166M4.58333 11H17.4167"
|
|
@@ -1497,7 +1497,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1497
1497
|
<div class="comment-icon__icon-container" part="icon">${n}</div>
|
|
1498
1498
|
</div>
|
|
1499
1499
|
</button>
|
|
1500
|
-
`}};customElements.get(`pop-comment-icon`)||customElements.define(`pop-comment-icon`,
|
|
1500
|
+
`}};customElements.get(`pop-comment-icon`)||customElements.define(`pop-comment-icon`,qe);var Je=O(`
|
|
1501
1501
|
:host {
|
|
1502
1502
|
display: flex;
|
|
1503
1503
|
flex: 1;
|
|
@@ -1526,11 +1526,13 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1526
1526
|
textarea::placeholder {
|
|
1527
1527
|
color: #697586;
|
|
1528
1528
|
}
|
|
1529
|
-
`),
|
|
1529
|
+
`),K=class extends k{constructor(...e){super(...e),this.events={input:`onInput`,keydown:`onKeyDown`}}get styleSheets(){return[Je]}onInput(e){let t=e.target;t.style.height=`auto`,t.style.height=`${t.scrollHeight}px`}onKeyDown(e){e.key===`Escape`&&(this.gridStore.editingCommentId.value||this.gridStore.replyingTo.value)&&(e.stopPropagation(),this.gridStore.editingCommentId.value=null,this.gridStore.replyingTo.value=null)}getValue(){return this.getElement(`textarea`)?.value??``}setValue(e){let t=this.getElement(`textarea`);t&&(t.value=e,t.style.height=`auto`,t.style.height=`${t.scrollHeight}px`)}clear(){let e=this.getElement(`textarea`);e&&(e.value=``,e.style.height=`auto`)}focus(){this.getElement(`textarea`)?.focus()}setupEffects(){this.addEffect(()=>{let e=this.gridStore.replyingToComment.value,t=this.gridStore.editingComment.value,n=`Comment`;t?n=`Edit comment...`:e?.author?.name&&(n=`Reply to ${e.author.name}`),this.setAttr(`textarea`,`placeholder`,n)})}getTemplate(){return`
|
|
1530
1530
|
<textarea rows="1" placeholder="Comment"></textarea>
|
|
1531
|
-
`}};
|
|
1531
|
+
`}};j([x(W)],K.prototype,`gridStore`,void 0),customElements.get(`pop-comment-input`)||customElements.define(`pop-comment-input`,K);var Ye=O(`
|
|
1532
1532
|
:host {
|
|
1533
1533
|
display: block;
|
|
1534
|
+
/* Width of a comment's avatar column: pop-comment's avatar plus its gap. */
|
|
1535
|
+
--pop-thread-avatar-column: 40px;
|
|
1534
1536
|
|
|
1535
1537
|
--pop-thread-link: rgba(0, 0, 32, 0.5);
|
|
1536
1538
|
--pop-thread-link-hover: rgba(0, 0, 32, 0.8);
|
|
@@ -1568,11 +1570,16 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1568
1570
|
align-items: center;
|
|
1569
1571
|
font-size: 13px;
|
|
1570
1572
|
gap: 6px;
|
|
1571
|
-
|
|
1573
|
+
/* Starts the count's text where the replies' text starts: the 4px dot and 6px gap sit in the avatar column. */
|
|
1574
|
+
padding-left: calc(var(--pop-thread-avatar-column) - 10px);
|
|
1572
1575
|
transition: opacity 0.15s ease;
|
|
1573
1576
|
width: 100%;
|
|
1574
1577
|
}
|
|
1575
1578
|
|
|
1579
|
+
:host([data-size="lg"]) {
|
|
1580
|
+
--pop-thread-avatar-column: 68px;
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1576
1583
|
.thread__more:hover {
|
|
1577
1584
|
opacity: 1;
|
|
1578
1585
|
}
|
|
@@ -1585,7 +1592,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1585
1592
|
flex-shrink: 0;
|
|
1586
1593
|
opacity: 0.1;
|
|
1587
1594
|
}
|
|
1588
|
-
`),
|
|
1595
|
+
`),q=2,J=class extends k{constructor(...e){super(...e),this._showAll=!1,this.events={click:`onClick`}}get styleSheets(){return[Ye]}onClick(e){e.target.closest(A(`more`))&&(this._showAll=!0,this.render())}setupEffects(){this.addEffect(()=>{this.setAttribute(`data-size`,this.gridStore.commentSize.value)}),this.addEffect(()=>{let e=this.getAttribute(`comment-id`),t=this.gridStore.scrollingCommentId.value;e&&t&&this.gridStore.repliesFor(e).some(e=>e.id===t)&&(this._showAll=!0),this.gridStore.comments.value,this.render()})}getTemplate(){let e=this.getAttribute(`comment-id`);if(!e)return``;let t=this.gridStore.repliesFor(e),n=this._showAll||t.length<=q?t:t.slice(0,q),r=t.length-n.length,i=r>0?`<div class="thread__more">
|
|
1589
1596
|
<div class="thread__more-dot"></div>
|
|
1590
1597
|
<pop-button-link data-ref="more" size="sm" theme="default">
|
|
1591
1598
|
Show ${r} more ${r===1?`reply`:`replies`}
|
|
@@ -1598,7 +1605,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1598
1605
|
${i}
|
|
1599
1606
|
</div>`:``}
|
|
1600
1607
|
</div>
|
|
1601
|
-
`}};
|
|
1608
|
+
`}};j([x(W)],J.prototype,`gridStore`,void 0),customElements.get(`pop-comment-thread`)||customElements.define(`pop-comment-thread`,J);function Y(e){let t=e instanceof Date?e:new Date(e),n=(Date.now()-t.getTime())/1e3;return n<1?`now`:n<60?`${Math.floor(n)}s`:n<3600?`${Math.floor(n/60)}m`:n<86400?`${Math.floor(n/3600)}h`:n<604800?`${Math.floor(n/86400)}d`:`${Math.floor(n/604800)}w`}var Xe=O(`
|
|
1602
1609
|
:host {
|
|
1603
1610
|
display: block;
|
|
1604
1611
|
width: 100%;
|
|
@@ -1890,7 +1897,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1890
1897
|
font-style: italic;
|
|
1891
1898
|
opacity: 0.8;
|
|
1892
1899
|
}
|
|
1893
|
-
`),
|
|
1900
|
+
`),X=class extends k{constructor(...e){super(...e),this.events={click:`onClick`},this._expanded=!1,this._dropdownOpen=!1,this._onOutsideClick=e=>{let t=e.composedPath(),n=this.getElement(A(`dropdown`)),r=this.getElement(A(`menu-trigger`));n&&r&&!t.includes(n)&&!t.includes(r)&&this.closeDropdown()},this._timeUpdateTimer=null}static get observedAttributes(){return[`data-size`,`comment-id`]}onDataSizeChanged(){this.render()}onCommentIdChanged(){this.render()}get size(){return this.getAttribute(`data-size`)||`sm`}get commentAvatarSize(){return this.size===`sm`?`xs`:`sm`}get styleSheets(){return[Xe]}toggleDropdown(){this._dropdownOpen?this.closeDropdown():this.openDropdown()}openDropdown(){this._dropdownOpen=!0;let t=this.getElement(A(`dropdown`)),n=this.getElement(A(`menu-trigger`));if(t&&n){t.classList.add(`is-open`);let r=()=>{(0,e.computePosition)(n,t,{placement:`bottom-end`,middleware:[(0,e.offset)(4),(0,e.flip)(),(0,e.shift)({padding:8})],strategy:`fixed`}).then(({x:e,y:n})=>{Object.assign(t.style,{left:`${e}px`,top:`${n}px`,position:`fixed`})})};this._floatingCleanup=(0,e.autoUpdate)(n,t,r),document.addEventListener(`mousedown`,this._onOutsideClick)}}closeDropdown(){this._dropdownOpen=!1;let e=this.getElement(A(`dropdown`));e&&e.classList.remove(`is-open`),this._floatingCleanup&&=(this._floatingCleanup(),void 0),document.removeEventListener(`mousedown`,this._onOutsideClick)}async deleteComment(){let e=this.getAttribute(`comment-id`);e&&confirm(`Are you sure you want to delete this comment?`)&&await this.gridStore.deleteComment(e)}async flagComment(){let e=this.getAttribute(`comment-id`);e&&(await this.gridStore.flagComment(e)?alert(`Comment flagged successfully.`):alert(`Failed to flag comment.`))}onClick(e){let t=e.target;if(t.closest(A(`menu-trigger`))){e.stopPropagation(),this.toggleDropdown();return}let n=t.closest(A(`dropdown-item`));if(n){e.stopPropagation();let t=n.getAttribute(`data-action`),r=this.getAttribute(`comment-id`);t===`edit`&&r?(this.gridStore.replyingTo.value=null,this.gridStore.editingCommentId.value=r):t===`delete`?this.deleteComment():t===`flag`&&this.flagComment(),this.closeDropdown();return}if(t.closest(A(`dropdown`))){e.stopPropagation();return}if(!this.authStore.currentUser.value)return;let r=this.getAttribute(`comment-id`);r&&this.gridStore.comments.value.find(e=>e.id===r)?.status!==`deleted`&&(this.gridStore.replyingTo.value===r?this.gridStore.replyingTo.value=null:this.gridStore.replyingTo.value=r,this.expandText())}expandText(){let e=this.getElement(A(`text`));if(!this._expanded&&e){let t=e.offsetHeight;this._expanded=!0,this.render();let n=this.getElement(A(`text`));if(n){let e=n.scrollHeight;n.style.height=`${t}px`,n.style.overflow=`hidden`,n.offsetHeight,n.style.transition=`height var(--pop-duration-quick) var(--pop-ease-quick)`,n.style.height=`${e}px`,setTimeout(()=>{n.style.height=``,n.style.overflow=``},300)}}}disconnectedCallback(){this.closeDropdown(),this.stopTimeUpdates(),super.disconnectedCallback()}startTimeUpdates(){this.stopTimeUpdates();let e=this.getAttribute(`comment-id`);if(!e)return;let t=this.gridStore.comments.value.find(t=>t.id===e);if(!t)return;let n=()=>{let e=this.getElement(A(`timestamp`));e&&(e.textContent=Y(t.createdAt));let r=Date.now()-(typeof t.createdAt==`number`?t.createdAt:Date.parse(String(t.createdAt))),i=6e4;i=r<6e4?5e3:r<36e5?6e4:18e5,this._timeUpdateTimer=setTimeout(n,i)},r=Date.now()-(typeof t.createdAt==`number`?t.createdAt:Date.parse(String(t.createdAt)))<6e4?5e3:6e4;this._timeUpdateTimer=setTimeout(n,r)}stopTimeUpdates(){this._timeUpdateTimer&&=(clearTimeout(this._timeUpdateTimer),null)}setupEffects(){this.addEffect(()=>{this.setAttribute(`data-size`,this.gridStore.commentSize.value)}),this.addEffect(()=>{let e=this.getAttribute(`comment-id`),t=this.authStore.currentUser.value,n=this.gridStore.replyingTo.value,r=this.gridStore.editingCommentId.value,i=this.gridStore.scrollingCommentId.value;this.classList.toggle(`is-signed-in`,t!==null),this.classList.toggle(`is-replying`,e!==null&&n===e),this.classList.toggle(`is-editing`,e!==null&&r===e),this.gridStore.comments.value,this.render(),this.startTimeUpdates(),e&&i===e&&setTimeout(()=>{let t=this.shadowRoot?.querySelector(`#comment-${e}`);t?t.scrollIntoView({behavior:`smooth`,block:`center`}):this.scrollIntoView({behavior:`smooth`,block:`center`}),this.gridStore.scrollingCommentId.value=null},50)})}getTemplate(){let e=this.getAttribute(`comment-id`);if(!e)return``;let t=this.gridStore.comments.value.find(t=>t.id===e);if(!t)return``;let r=t.status===`deleted`,i=t.authorDeleted===!0,a=r||i,o=a?``:t.author?.image?`<img src="${t.author.image}" alt="${t.author.name??`User avatar`}" />`:n(t.author?.name),s=this.gridStore.replyingTo.value,c=e!==null&&s===e,l=this.size,u=this.authStore.currentUser.value,d=u&&t.author&&u.id===t.author.id,f=u&&!r?`<div class="comment__menu">
|
|
1894
1901
|
<button class="comment__menu-trigger" data-ref="menu-trigger" type="button">
|
|
1895
1902
|
<svg
|
|
1896
1903
|
width="18"
|
|
@@ -1960,14 +1967,14 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
1960
1967
|
<div class="comment__user-name">
|
|
1961
1968
|
${r?`[Deleted]`:i?`[Deleted user]`:t.author?.name??``}
|
|
1962
1969
|
</div>
|
|
1963
|
-
<div class="comment__timestamp" data-ref="timestamp">${
|
|
1970
|
+
<div class="comment__timestamp" data-ref="timestamp">${Y(t.createdAt)}</div>
|
|
1964
1971
|
</div>
|
|
1965
1972
|
${f}
|
|
1966
1973
|
</div>
|
|
1967
1974
|
<div class="comment__text${this._expanded?` expanded`:``}" data-ref="text">${t.body}</div>
|
|
1968
1975
|
</div>
|
|
1969
1976
|
</div>
|
|
1970
|
-
`}};
|
|
1977
|
+
`}};j([x(W)],X.prototype,`gridStore`,void 0),j([x(y)],X.prototype,`authStore`,void 0),customElements.get(`pop-comment`)||customElements.define(`pop-comment`,X);var Ze=O(`
|
|
1971
1978
|
:host {
|
|
1972
1979
|
display: flex;
|
|
1973
1980
|
background: var(--pop-background);
|
|
@@ -2159,7 +2166,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
2159
2166
|
background: var(--pop-border);
|
|
2160
2167
|
border-radius: 100px;
|
|
2161
2168
|
}
|
|
2162
|
-
`),
|
|
2169
|
+
`),Z=class extends k{constructor(...e){super(...e),this._footerChild=null,this._wasOpen=!1,this._noticeRetryAt=null,this.events={click:`onClick`}}get styleSheets(){return[Ze]}onClick(e){e.target.closest(A(`notice`))&&this.authStore.authErrorRetryAt.value===null&&this.authStore.dismissAuthError()}connectedCallback(){super.connectedCallback(),document.addEventListener(`mousedown`,this),document.addEventListener(`keydown`,this)}disconnectedCallback(){document.removeEventListener(`mousedown`,this),document.removeEventListener(`keydown`,this),window.clearInterval(this._noticeTimer),super.disconnectedCallback()}handleEvent(e){if(e.type===`mousedown`){this.onOutsideClick(e);return}if(e.type===`keydown`){this.onKeyDown(e);return}super.handleEvent(e)}onOutsideClick(e){if(!this.gridStore.open.value)return;let t=e.composedPath(),n=this.getRootNode(),r=n instanceof ShadowRoot?n.host:null;if(!t.includes(this)&&(!r||!t.includes(r))){if(this.authStore.authView.value!==`idle`){this.authStore.backToIdle();return}this.gridStore.open.value=!1}}onKeyDown(e){if(e.key===`Escape`){if(this.authStore.authError.value){this.authStore.clearAuthError();return}if(this.authStore.authView.value!==`idle`){this.authStore.backToIdle();return}this.gridStore.open.value=!1}}setupEffects(){this.addEffect(()=>{let e=this.gridStore.open.value;e&&!this._wasOpen&&this.gridStore.grid.value&&this.authStore.connectAuthChannel(),!e&&this._wasOpen&&this.authStore.clearAuthError(),this._wasOpen=e,this.update()})}syncNoticeCountdown(e){if(e===this._noticeRetryAt)return;this._noticeRetryAt=e,window.clearInterval(this._noticeTimer);let t=this.getElement(A(`notice-dismiss`));t&&(t.hidden=e!==null);let n=this.getElement(A(`notice-countdown`));if(n&&(n.hidden=e===null),!n||e===null)return;let r=()=>{let t=Math.max(0,Math.ceil((e-Date.now())/1e3)),r=Math.floor(t/60);return n.textContent=`Try again in ${r}:${String(t%60).padStart(2,`0`)}`,t===0};r(),this._noticeTimer=window.setInterval(()=>{r()&&(window.clearInterval(this._noticeTimer),this.authStore.dismissAuthError())},1e3)}update(){this.gridStore.open.value?this.setAttribute(`open`,``):this.removeAttribute(`open`);let e=this.getElement(A(`main`));if(e){let t=this.gridStore.topLevelComments.value;if(t.length===0)e.querySelector(A(`empty`))||(e.innerHTML=`<div class="feed__empty" data-ref="empty">Waiting for your thoughts…</div>`);else{let n=Array.from(e.querySelectorAll(`pop-comment-thread`)).map(e=>e.getAttribute(`comment-id`)),r=t.map(e=>e.id);(n.length!==r.length||n.some((e,t)=>e!==r[t]))&&(e.innerHTML=t.map(e=>`<pop-comment-thread comment-id="${e.id}"></pop-comment-thread>`).join(``))}}let t=this.authStore.authError.value,n=this.getElement(A(`notice`));if(n){let e=n.hidden;n.hidden=!t,this.setText(A(`notice-message`),t??``);let r=t?this.authStore.authErrorRetryAt.value:null;t&&this.setText(A(`notice-dismiss`),this.authStore.authErrorAction.value),this.syncNoticeCountdown(r),this.getElement(A(`content`))?.toggleAttribute(`inert`,!!t),this.getElement(A(`footer`))?.toggleAttribute(`inert`,!!t||this.gridStore.demo),t&&e&&this.gridStore.open.value&&this.getElement(A(r===null?`notice-dismiss`:`notice-box`))?.focus()}let r=this.getElement(A(`footer`));if(r){let e=this.authStore.currentUser.value===null?`pop-auth-panel`:`pop-comment-bar`;this._footerChild!==e&&(this._footerChild=e,r.innerHTML=`<${e}></${e}>`)}}getTemplate(){return`
|
|
2163
2170
|
<div class="feed">
|
|
2164
2171
|
<div class="feed__content" data-ref="content">
|
|
2165
2172
|
<div class="feed__main" data-ref="main"></div>
|
|
@@ -2175,7 +2182,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
2175
2182
|
</div>
|
|
2176
2183
|
</div>
|
|
2177
2184
|
</div>
|
|
2178
|
-
`}};
|
|
2185
|
+
`}};j([x(W)],Z.prototype,`gridStore`,void 0),j([x(y)],Z.prototype,`authStore`,void 0),customElements.get(`pop-feed`)||customElements.define(`pop-feed`,Z);function Qe(){return typeof window<`u`}function $e(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function et(e){return Qe()?e instanceof Element||e instanceof $e(e).Element:!1}var tt=/transform|translate|scale|rotate|perspective|filter/,nt=/paint|layout|strict|content/,Q=e=>!!e&&e!==`none`,rt;function it(e){let t=et(e)?ot(e):e;return Q(t.transform)||Q(t.translate)||Q(t.scale)||Q(t.rotate)||Q(t.perspective)||!at()&&(Q(t.backdropFilter)||Q(t.filter))||tt.test(t.willChange||``)||nt.test(t.contain||``)}function at(){return rt??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),rt}function ot(e){return $e(e).getComputedStyle(e)}function st(e){return ct(e)}function $(e){return e.assignedSlot?e.assignedSlot:e.parentNode instanceof ShadowRoot?e.parentNode.host:e.parentNode}function ct(e){for(let t=e;t;t=$(t))if(t instanceof Element&&getComputedStyle(t).display===`none`)return null;for(let t=$(e);t;t=$(t)){if(!(t instanceof Element))continue;let e=getComputedStyle(t);if(e.display!==`contents`&&(e.position!==`static`||it(e)||t.tagName===`BODY`))return t}return null}var lt=16,ut=t=>e.platform.getOffsetParent(t,st);function dt(t,n,r){let i=[(0,e.offset)({mainAxis:r===`down`?-16:-54,crossAxis:-18})];return(!r||r===`auto`)&&i.push((0,e.flip)({fallbackPlacements:[`bottom-start`,`top-start`],fallbackStrategy:`bestFit`,padding:lt})),i.push((0,e.shift)({padding:lt,crossAxis:!0})),(0,e.autoUpdate)(t,n,()=>{(0,e.computePosition)(t,n,{placement:r===`down`?`bottom-start`:`top-start`,middleware:i,strategy:`fixed`,platform:{...e.platform,getOffsetParent:ut}}).then(({x:e,y:t,placement:r})=>{n.setAttribute(`data-current-placement`,r),Object.assign(n.style,{left:`${e}px`,top:`${t}px`})})})}var ft=`https://www.popgrids.io`,pt=new Set([`start`,`center`,`end`]),mt=new Set([`sm`,`lg`]),ht=new Set([`auto`,`up`,`down`]),gt=O(`
|
|
2179
2186
|
:host {
|
|
2180
2187
|
display: block;
|
|
2181
2188
|
position: relative;
|
|
@@ -2199,12 +2206,12 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
2199
2206
|
.grid--align-end {
|
|
2200
2207
|
justify-content: flex-end;
|
|
2201
2208
|
}
|
|
2202
|
-
`),
|
|
2209
|
+
`),_t=class extends k{constructor(...e){super(...e),this._initialized=!1}get demo(){return this._demo}set demo(e){this._demo=e,this._store?.demo&&this._store.showDemo(e)}get open(){return this._store?.open.value??!1}set open(e){this._store&&(this._store.open.value=e)}get styleSheets(){return[gt]}static get observedAttributes(){return[`data-align`,`data-layout`,`data-position`,`data-icon`,`data-preview-count`]}connectedCallback(){if(this._initialized)return;this._initialized=!0;let e=this.getAttribute(`data-key`)??this.getAttribute(`public-key`)??``,t=this.getAttribute(`data-api-url`)??this.getAttribute(`api-url`)??ft,n=this.getAttribute(`data-page-url`)??this.getAttribute(`page-url`)??location.href,r=this.getAttribute(`data-id`),i=this.hasAttribute(`data-demo`);if(this._authStore=new y({apiUrl:t,publicKey:e,demo:i}),le(this,this._authStore),this._store=new W({apiUrl:t,publicKey:e,pageUrl:n,externalId:r,demo:i,authStore:this._authStore}),le(this,this._store),super.connectedCallback(),this._store.setOverrides(this._readOverridesFromAttributes()),this._store.demo){this._demo&&this._store.showDemo(this._demo);return}this._store.load()}_readOverridesFromAttributes(){let e={},t=this.getAttribute(`data-align`);t&&pt.has(t)&&(e.align=t);let n=this.getAttribute(`data-layout`);n&&mt.has(n)&&(e.layout=n);let r=this.getAttribute(`data-position`);r&&ht.has(r)&&(e.position=r);let i=this.getAttribute(`data-icon`);i&&(e.icon=i);let a=this.getAttribute(`data-preview-count`);if(a!==null){let t=Number(a);Number.isInteger(t)&&t>0&&(e.previewCount=t)}return e}_applyOverridesFromAttributes(){this._store&&this._store.setOverrides(this._readOverridesFromAttributes())}onDataAlignChanged(){this._applyOverridesFromAttributes()}onDataLayoutChanged(){this._applyOverridesFromAttributes()}onDataPositionChanged(){this._applyOverridesFromAttributes()}onDataIconChanged(){this._applyOverridesFromAttributes()}onDataPreviewCountChanged(){this._applyOverridesFromAttributes()}disconnectedCallback(){this._floatingCleanup?.(),this._store.destroy(),this._authStore.destroy(),ue(this),super.disconnectedCallback()}setupEffects(){this.addEffect(()=>{let e=this._store.grid.value,t=this.getElement(A(`grid`));if(!t)return;let n=Array.from(t.classList).filter(e=>e.startsWith(`grid--`));if(n.length>0&&t.classList.remove(...n),e){e.align&&t.classList.add(`grid--align-${e.align}`),e.appearance&&t.classList.add(`grid--appearance-${e.appearance}`),e.icon&&t.classList.add(`grid--icon-${e.icon}`),e.layout&&t.classList.add(`grid--layout-${e.layout}`),e.position&&t.classList.add(`grid--position-${e.position}`);let n=e.previewCount??this._store.previewCount;t.classList.add(`grid--preview-${n}`)}}),this.addEffect(()=>{let e=this._store.open.value;if(this._floatingCleanup&&=(this._floatingCleanup(),void 0),!e)return;let t=this.getElement(`pop-widget`),n=this.getElement(`pop-feed`);if(!t||!n)return;let r=this._store.grid.value;r&&(this._floatingCleanup=dt(t,n,r.position))})}getTemplate(){return`
|
|
2203
2210
|
<div class="grid" data-ref="grid">
|
|
2204
2211
|
<pop-widget></pop-widget>
|
|
2205
2212
|
<pop-feed></pop-feed>
|
|
2206
2213
|
</div>
|
|
2207
|
-
`}};customElements.get(`pop-grid`)||customElements.define(`pop-grid`,
|
|
2214
|
+
`}};customElements.get(`pop-grid`)||customElements.define(`pop-grid`,_t);var vt=O(`
|
|
2208
2215
|
:host {
|
|
2209
2216
|
--error-badge-bg: #fef2f2;
|
|
2210
2217
|
--error-badge-text: #991b1b;
|
|
@@ -2346,11 +2353,11 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
2346
2353
|
z-index: 20;
|
|
2347
2354
|
top: 1px;
|
|
2348
2355
|
}
|
|
2349
|
-
`)
|
|
2356
|
+
`),yt=class extends k{constructor(...e){super(...e),this.events={click:`onClick`}}get styleSheets(){return[vt]}onClick(){this.gridStore.error.value||(this.gridStore.open.value=!this.gridStore.open.value)}setupEffects(){this.addEffect(()=>{this.gridStore.loading.value,this.gridStore.error.value,this.gridStore.previewAvatars.value,this.gridStore.comments.value,this.gridStore.grid.value;let e=!!this.gridStore.error.value;this.toggleAttribute(`data-error`,e),e&&this.gridStore.open.value&&(this.gridStore.open.value=!1),this.render()})}getTemplate(){if(this.gridStore.loading.value)return`<div class="widget"><div class="skeleton mask mask-squircle"></div></div>`;if(this.gridStore.error.value)return`<div class="error-badge">Error: there was a problem loading the PopGrid</div>`;let e=this.gridStore.previewAvatars.value,t=this.gridStore.comments.value.length,r=this.gridStore.grid.value?.icon===`brand`?`brand`:`neutral`;return`
|
|
2350
2357
|
<div class="widget">
|
|
2351
|
-
${e.map((t,r)=>{let
|
|
2358
|
+
${e.map((t,r)=>{let i=e.length+r,a=t?.id??t?.name??``;return t?.image?`<pop-comment-avatar size="xs" style="z-index: ${i}" data-color-key="${a}">
|
|
2352
2359
|
<img src="${t.image}" alt="${t.name??`User`}" />
|
|
2353
|
-
</pop-comment-avatar>`:`<pop-comment-avatar size="
|
|
2360
|
+
</pop-comment-avatar>`:`<pop-comment-avatar size="xs" style="z-index: ${i}" data-color-key="${a}">
|
|
2354
2361
|
${n(t?.name)}
|
|
2355
2362
|
</pop-comment-avatar>`}).join(``)}
|
|
2356
2363
|
<div class="count mask mask-squircle">
|
|
@@ -2361,7 +2368,7 @@ let e=require("@floating-ui/dom"),t=require("@preact/signals-core");function n(e
|
|
|
2361
2368
|
</div>
|
|
2362
2369
|
</span>
|
|
2363
2370
|
</div>
|
|
2364
|
-
<pop-comment-icon variant="add" theme="${
|
|
2371
|
+
<pop-comment-icon variant="add" theme="${r}" size="xs"></pop-comment-icon>
|
|
2365
2372
|
</div>
|
|
2366
|
-
`}};if(
|
|
2373
|
+
`}};if(j([x(W)],yt.prototype,`gridStore`,void 0),customElements.get(`pop-widget`)||customElements.define(`pop-widget`,yt),typeof document<`u`){let e=`https://rsms.me/inter/inter.css`;if(!document.querySelector(`link[href="${e}"]`)){let t=document.createElement(`link`);t.rel=`stylesheet`,t.href=e,document.head.appendChild(t)}}
|
|
2367
2374
|
//# sourceMappingURL=index.cjs.map
|