@lockerverse/react 0.2.135-dev.1 → 0.2.136-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"payment-form.d.ts","names":[],"sources":["../src/lockerverse-payment.tsx","../src/payment-form.tsx"],"mappings":";;;;iBAkTgB,qBACd,WACG,aACF,0CAAuB,IAAA;;;iBC3PV,0BACd,SAAS,KAAK,iCAA8B,oCAAA"}
1
+ {"version":3,"file":"payment-form.d.ts","names":[],"sources":["../src/lockerverse-payment.tsx","../src/payment-form.tsx"],"mappings":";;;;iBAgYgB,qBACd,WACG,aACF,0CAAuB,IAAA;;;iBCzUV,0BACd,SAAS,KAAK,iCAA8B,oCAAA"}
@@ -1,6 +1,10 @@
1
1
  import { n as LockerverseTheme, t as LockerverseStyle } from "./theme.js";
2
2
  import { CreateLockerversePublicEventsOptions, LockerversePublicEvent, LockerversePublicEventsClient, LockerverseSdkError } from "@lockerverse/sdk/public-events";
3
3
  //#region src/use-lockerverse-public-events.d.ts
4
+ type UseLockerversePublicEventsOptions = {
5
+ /** Initial public SDK snapshot. The hook still refreshes on mount. */
6
+ initialEvents?: LockerversePublicEvent[];
7
+ };
4
8
  type UseLockerversePublicEventsResult = {
5
9
  client: LockerversePublicEventsClient;
6
10
  events: LockerversePublicEvent[] | null;
@@ -9,7 +13,7 @@ type UseLockerversePublicEventsResult = {
9
13
  refresh: () => void;
10
14
  };
11
15
  /** Load the public events list for one community. */
12
- declare function useLockerversePublicEvents(options: CreateLockerversePublicEventsOptions): UseLockerversePublicEventsResult;
16
+ declare function useLockerversePublicEvents(options: CreateLockerversePublicEventsOptions, { initialEvents }?: UseLockerversePublicEventsOptions): UseLockerversePublicEventsResult;
13
17
  //#endregion
14
18
  //#region src/lockerverse-public-events.d.ts
15
19
  type LockerversePublicEventsProps = {
@@ -27,5 +31,5 @@ type LockerversePublicEventsProps = {
27
31
  /** Optional public list that can be embedded in any React site. */
28
32
  declare function LockerversePublicEvents({ events, title, showHeading, emptyMessage, timeZone, theme, style, className }: LockerversePublicEventsProps): import("react").JSX.Element;
29
33
  //#endregion
30
- export { LockerversePublicEvents, type LockerversePublicEventsProps, type LockerverseStyle, type LockerverseTheme, type UseLockerversePublicEventsResult, useLockerversePublicEvents };
34
+ export { LockerversePublicEvents, type LockerversePublicEventsProps, type LockerverseStyle, type LockerverseTheme, type UseLockerversePublicEventsOptions, type UseLockerversePublicEventsResult, useLockerversePublicEvents };
31
35
  //# sourceMappingURL=public-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-events.d.ts","names":[],"sources":["../src/use-lockerverse-public-events.ts","../src/lockerverse-public-events.tsx"],"mappings":";;;KAUY;EACV,QAAQ;EACR,QAAQ;EACR;EACA,OAAO;EACP;;;iBAIc,2BACd,SAAS,uCACR;;;KCNS;EACV,QAAQ;;EAER;EACA;EACA;;EAEA;EACA,QAAQ;EACR,QAAQ;EACR;;;iBAqXc,0BACd,QACA,OACA,aACA,cACA,UACA,OACA,OACA,aACC,+CAA4B,IAAA"}
1
+ {"version":3,"file":"public-events.d.ts","names":[],"sources":["../src/use-lockerverse-public-events.ts","../src/lockerverse-public-events.tsx"],"mappings":";;;KAUY;;EAEV,gBAAgB;;KAGN;EACV,QAAQ;EACR,QAAQ;EACR;EACA,OAAO;EACP;;;iBAIc,2BACd,SAAS,wCACP,kBAAiB,oCAClB;;;KCZS;EACV,QAAQ;;EAER;EACA;EACA;;EAEA;EACA,QAAQ;EACR,QAAQ;EACR;;;iBAqXc,0BACd,QACA,OACA,aACA,cACA,UACA,OACA,OACA,aACC,+CAA4B,IAAA"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./immutable-resource-identity.js";import{t}from"./accent-contrast.js";import{CalendarDays as n,CalendarX2 as r,Check as i,Copy as a,Facebook as o,Forward as s,Mail as c}from"lucide-react";import{useCallback as l,useEffect as u,useId as d,useRef as f,useState as p}from"react";import{Fragment as m,jsx as h,jsxs as g}from"react/jsx-runtime";import{createLockerversePublicEventsClient as _}from"@lockerverse/sdk/public-events";function v(e,t){return new Intl.DateTimeFormat(`en-US`,{day:`numeric`,month:`short`,timeZone:t,year:`numeric`}).format(new Date(e))}function y(e,t){return new Intl.DateTimeFormat(`en-US`,{hour:`numeric`,minute:`2-digit`,timeZone:t,timeZoneName:`short`}).format(new Date(e))}function b(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.toString():null}catch{return null}}function x(e,t){let n=b(e.link);if(n)return n;let r=new URL(window.location.href);return t?r.searchParams.set(`lockerverseEvents`,`past`):r.searchParams.delete(`lockerverseEvents`),r.searchParams.delete(`lockerverseEventOffset`),r.hash=`event-${e.id}`,r.toString()}function S(e){let n=e?.[`--lockerverse-accent`];if(!n||e?.[`--lockerverse-accent-contrast`]!==void 0)return e;let r=t(n);return r?{...e,"--lockerverse-accent-contrast":r}:e}function C(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t);try{return t.select(),document.execCommand(`copy`)}catch{return!1}finally{t.remove()}}function w({item:e,past:t}){let[n,r]=p(!1),[l,d]=p(null),[m,_]=p(null),[v,y]=p(!1),S=f(null),w=f(null),T=b(e.link),E=e=>e instanceof Node&&S.current?.contains(e);u(()=>{if(!m)return;let e=e=>{E(e.target)||_(null)},t=e=>{e.key===`Escape`&&(_(null),S.current?.contains(document.activeElement)&&w.current?.focus())},n=e=>{E(e.target)||_(null)};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),document.addEventListener(`focusin`,n),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t),document.removeEventListener(`focusin`,n)}},[m]),u(()=>{if(!n)return;let e=window.setTimeout(()=>r(!1),2200);return()=>window.clearTimeout(e)},[n]);async function D(){if(m)try{await navigator.clipboard.writeText(m),r(!0),_(null),w.current?.focus()}catch{C(m)?(r(!0),_(null),w.current?.focus()):d(m)}}return g(`div`,{className:`lockerverse-public-events__actions`,ref:S,children:[T?g(`a`,{className:`lockerverse-public-events__link`,href:T,rel:`noopener noreferrer`,target:`_blank`,children:[`View event `,h(`span`,{"aria-hidden":`true`,children:`↗`})]}):null,h(`button`,{"aria-expanded":m!==null,"aria-label":`Share ${e.name}`,className:`lockerverse-public-events__share`,"data-copied":n,onClick:()=>{!m&&w.current&&y(window.innerHeight-w.current.getBoundingClientRect().bottom<72),_(m?null:x(e,t)),r(!1),d(null)},ref:w,title:`Share ${e.name}`,type:`button`,children:n?h(i,{"aria-hidden":`true`,size:22,strokeWidth:2}):h(s,{"aria-hidden":`true`,size:22,strokeWidth:1.9})}),n?h(`span`,{className:`lockerverse-public-events__visually-hidden`,role:`status`,children:`Link copied`}):null,m?g(`fieldset`,{className:`lockerverse-public-events__share-menu`,"data-above":v,children:[g(`legend`,{className:`lockerverse-public-events__visually-hidden`,children:[`Share `,e.name]}),h(`button`,{"aria-label":`Copy event link`,onClick:D,title:`Copy link`,type:`button`,children:h(a,{"aria-hidden":`true`,size:18})}),h(`a`,{"aria-label":`Share by email`,href:`mailto:?subject=${encodeURIComponent(e.name)}&body=${encodeURIComponent(m)}`,title:`Email`,children:h(c,{"aria-hidden":`true`,size:18})}),h(`a`,{"aria-label":`Share on Facebook`,href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(m)}`,rel:`noopener noreferrer`,target:`_blank`,title:`Facebook`,children:h(o,{"aria-hidden":`true`,size:18})}),h(`a`,{"aria-label":`Share on X`,href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(m)}&text=${encodeURIComponent(e.name)}`,rel:`noopener noreferrer`,target:`_blank`,title:`X`,children:h(`span`,{children:`𝕏`})}),l?g(`label`,{className:`lockerverse-public-events__copy-link`,children:[`Select and copy this event link`,h(`input`,{autoFocus:!0,onFocus:e=>e.currentTarget.select(),readOnly:!0,value:l})]}):null]}):null]})}function T({item:e,timeZone:t,active:n,past:r=!1}){let[i,a]=p(!1),o=new Date(e.startAt),s=new Intl.DateTimeFormat(`en-US`,{month:`short`,timeZone:t}).format(o),c=new Intl.DateTimeFormat(`en-US`,{day:`numeric`,timeZone:t}).format(o),l=new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`}).format(o),u=v(e.startAt,t),d=u===v(e.endAt,t)?y(e.endAt,t):`${v(e.endAt,t)} at ${y(e.endAt,t)}`,f=b(e.imageUrl),_=(e.description?.length??0)>130;return h(`li`,{className:`lockerverse-public-events__item`,id:`event-${e.id}`,children:g(`article`,{className:`lockerverse-public-events__row`,children:[f?h(`img`,{alt:``,className:`lockerverse-public-events__image`,height:124,loading:`lazy`,src:f,width:154}):g(`time`,{className:`lockerverse-public-events__date`,dateTime:e.startAt,children:[h(`span`,{className:`lockerverse-public-events__month`,children:s}),h(`span`,{className:`lockerverse-public-events__day`,children:c}),h(`span`,{className:`lockerverse-public-events__year`,children:l})]}),g(`div`,{className:`lockerverse-public-events__content`,children:[g(`div`,{className:`lockerverse-public-events__heading`,children:[h(`h3`,{children:e.name}),n?h(`span`,{className:`lockerverse-public-events__live`,children:`Live now`}):null]}),g(`p`,{className:`lockerverse-public-events__schedule`,children:[f?g(m,{children:[h(`time`,{dateTime:e.startAt,children:u}),h(`span`,{"aria-hidden":`true`,children:` · `})]}):null,h(`time`,{dateTime:e.startAt,children:y(e.startAt,t)}),h(`span`,{"aria-hidden":`true`,children:` — `}),h(`time`,{dateTime:e.endAt,children:d})]}),e.location?h(`p`,{className:`lockerverse-public-events__place`,children:e.location}):null,e.description?g(m,{children:[h(`p`,{className:[`lockerverse-public-events__description`,_&&!i?`lockerverse-public-events__description--clamped`:``].filter(Boolean).join(` `),children:e.description}),_?h(`button`,{"aria-expanded":i,className:`lockerverse-public-events__more`,onClick:()=>a(!i),type:`button`,children:i?`Show less`:`Read more`}):null]}):null]}),h(w,{item:e,past:r})]})})}function E({events:e,title:t=`Events`,showHeading:i=!0,emptyMessage:a=`No events yet.`,timeZone:o=`America/New_York`,theme:s=`dark`,style:c,className:f}){let[m,_]=p(()=>Date.now()),[v,y]=p(`current`),[b,x]=p([]),[C,w]=p(0),[E,D]=p(!1),[O,k]=p(!1),[A,j]=p(!1),[M,N]=p(null),[P,F]=p(null),I=d(),L=l(async(t,n=!1)=>{j(!0),N(null);try{let r=await e.client.listPast({offset:t});x(e=>n?r.events:[...e,...r.events]),w(t+r.events.length),D(r.hasMore),k(!0)}catch(e){N(e instanceof Error?e.message:`Unable to load past events.`)}finally{j(!1)}},[e.client]);u(()=>{let e=window.setInterval(()=>_(Date.now()),6e4);return()=>window.clearInterval(e)},[]),u(()=>{let e=new URL(window.location.href);e.searchParams.get(`lockerverseEvents`)===`past`&&(y(`past`),F(e.hash.slice(1)),L(0,!0))},[L]),u(()=>{let e=window.location.hash.slice(1);if(!e.startsWith(`event-`))return;if(v===`current`){document.getElementById(e)?.scrollIntoView({block:`center`});return}if(!P||A||M||!O)return;let t=document.getElementById(P);t?(t.scrollIntoView({block:`center`}),F(null)):E?L(C):F(null)},[e.events,L,M,E,O,A,C,P,v]);function R(){y(`past`),!(O||A)&&L(0,!0)}let z=e.events||[],B=z.filter(e=>new Date(e.startAt).getTime()<=m&&new Date(e.endAt).getTime()>m),V=z.filter(e=>new Date(e.startAt).getTime()>m);return h(`section`,{"aria-busy":v===`past`?A:e.loading,"aria-label":t,className:[`lockerverse-public-events`,f].filter(Boolean).join(` `),"data-lockerverse-theme":s,style:S(c),children:g(`div`,{className:`lockerverse-public-events__layout`,children:[i?h(`h2`,{children:t}):null,g(`nav`,{"aria-label":`Event views`,className:`lockerverse-public-events__tabs`,children:[g(`button`,{"aria-controls":`${I}-current-panel`,"aria-pressed":v===`current`,className:`lockerverse-public-events__tab`,id:`${I}-current-tab`,onClick:()=>y(`current`),type:`button`,children:[h(n,{"aria-hidden":`true`,size:18}),`Upcoming Events`]}),g(`button`,{"aria-controls":`${I}-past-panel`,"aria-pressed":v===`past`,className:`lockerverse-public-events__tab`,id:`${I}-past-tab`,onClick:R,type:`button`,children:[h(r,{"aria-hidden":`true`,size:18}),`Past Events`]})]}),g(`section`,{"aria-labelledby":`${I}-current-tab`,hidden:v!==`current`,id:`${I}-current-panel`,children:[e.loading&&!e.events?h(`p`,{role:`status`,children:`Loading events…`}):null,e.error?g(`div`,{role:`alert`,children:[h(`p`,{children:e.error.message}),h(`button`,{onClick:e.refresh,type:`button`,children:`Try again`})]}):null,e.events&&B.length===0&&V.length===0?h(`p`,{className:`lockerverse-public-events__empty`,children:a}):null,B.length>0?h(`div`,{className:`lockerverse-public-events__group`,children:h(`ol`,{className:`lockerverse-public-events__list`,children:B.map(e=>h(T,{active:!0,item:e,timeZone:o},e.id))})}):null,V.length>0?h(`div`,{className:`lockerverse-public-events__group`,children:h(`ol`,{className:`lockerverse-public-events__list`,children:V.map(e=>h(T,{active:!1,item:e,timeZone:o},e.id))})}):null]}),g(`section`,{"aria-labelledby":`${I}-past-tab`,hidden:v!==`past`,id:`${I}-past-panel`,children:[M?g(`div`,{role:`alert`,children:[h(`p`,{children:M}),h(`button`,{onClick:()=>L(O?C:0,!O),type:`button`,children:`Try again`})]}):null,A&&!O?h(`p`,{role:`status`,children:`Loading past events…`}):null,O&&b.length===0?h(`p`,{className:`lockerverse-public-events__empty`,children:`No past events yet.`}):null,b.length>0?h(`ol`,{className:`lockerverse-public-events__list`,children:b.map(e=>h(T,{active:!1,item:e,past:!0,timeZone:o},e.id))}):null,E?h(`button`,{className:`lockerverse-public-events__load-more`,disabled:A,onClick:()=>L(C),type:`button`,children:A?`Loading…`:`Load more past events`}):null]})]})})}function D(t){e(`public events`,{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,slug:``});let n=f(t.onError);n.current=t.onError;let[r]=p(()=>_({...t,onError:e=>n.current?.(e)})),[i,a]=p(0),[o,s]=p({error:null,events:null,loading:!0});u(()=>{let e=!0;return r.list().then(t=>{e&&s({error:null,events:t,loading:!1})},t=>{e&&s(e=>({...e,error:t,loading:!1}))}),()=>{e=!1}},[r,i]);let c=l(()=>{s(e=>({...e,error:null,loading:!0})),a(e=>e+1)},[]);return{...o,client:r,refresh:c}}export{E as LockerversePublicEvents,D as useLockerversePublicEvents};
1
+ import{t as e}from"./immutable-resource-identity.js";import{t}from"./accent-contrast.js";import{CalendarDays as n,CalendarX2 as r,Check as i,Copy as a,Facebook as o,Forward as s,Mail as c}from"lucide-react";import{useCallback as l,useEffect as u,useId as d,useRef as f,useState as p}from"react";import{Fragment as m,jsx as h,jsxs as g}from"react/jsx-runtime";import{createLockerversePublicEventsClient as _}from"@lockerverse/sdk/public-events";function v(e,t){return new Intl.DateTimeFormat(`en-US`,{day:`numeric`,month:`short`,timeZone:t,year:`numeric`}).format(new Date(e))}function y(e,t){return new Intl.DateTimeFormat(`en-US`,{hour:`numeric`,minute:`2-digit`,timeZone:t,timeZoneName:`short`}).format(new Date(e))}function b(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.toString():null}catch{return null}}function x(e,t){let n=b(e.link);if(n)return n;let r=new URL(window.location.href);return t?r.searchParams.set(`lockerverseEvents`,`past`):r.searchParams.delete(`lockerverseEvents`),r.searchParams.delete(`lockerverseEventOffset`),r.hash=`event-${e.id}`,r.toString()}function S(e){let n=e?.[`--lockerverse-accent`];if(!n||e?.[`--lockerverse-accent-contrast`]!==void 0)return e;let r=t(n);return r?{...e,"--lockerverse-accent-contrast":r}:e}function C(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t);try{return t.select(),document.execCommand(`copy`)}catch{return!1}finally{t.remove()}}function w({item:e,past:t}){let[n,r]=p(!1),[l,d]=p(null),[m,_]=p(null),[v,y]=p(!1),S=f(null),w=f(null),T=b(e.link),E=e=>e instanceof Node&&S.current?.contains(e);u(()=>{if(!m)return;let e=e=>{E(e.target)||_(null)},t=e=>{e.key===`Escape`&&(_(null),S.current?.contains(document.activeElement)&&w.current?.focus())},n=e=>{E(e.target)||_(null)};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),document.addEventListener(`focusin`,n),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t),document.removeEventListener(`focusin`,n)}},[m]),u(()=>{if(!n)return;let e=window.setTimeout(()=>r(!1),2200);return()=>window.clearTimeout(e)},[n]);async function D(){if(m)try{await navigator.clipboard.writeText(m),r(!0),_(null),w.current?.focus()}catch{C(m)?(r(!0),_(null),w.current?.focus()):d(m)}}return g(`div`,{className:`lockerverse-public-events__actions`,ref:S,children:[T?g(`a`,{className:`lockerverse-public-events__link`,href:T,rel:`noopener noreferrer`,target:`_blank`,children:[`View event `,h(`span`,{"aria-hidden":`true`,children:`↗`})]}):null,h(`button`,{"aria-expanded":m!==null,"aria-label":`Share ${e.name}`,className:`lockerverse-public-events__share`,"data-copied":n,onClick:()=>{!m&&w.current&&y(window.innerHeight-w.current.getBoundingClientRect().bottom<72),_(m?null:x(e,t)),r(!1),d(null)},ref:w,title:`Share ${e.name}`,type:`button`,children:n?h(i,{"aria-hidden":`true`,size:22,strokeWidth:2}):h(s,{"aria-hidden":`true`,size:22,strokeWidth:1.9})}),n?h(`span`,{className:`lockerverse-public-events__visually-hidden`,role:`status`,children:`Link copied`}):null,m?g(`fieldset`,{className:`lockerverse-public-events__share-menu`,"data-above":v,children:[g(`legend`,{className:`lockerverse-public-events__visually-hidden`,children:[`Share `,e.name]}),h(`button`,{"aria-label":`Copy event link`,onClick:D,title:`Copy link`,type:`button`,children:h(a,{"aria-hidden":`true`,size:18})}),h(`a`,{"aria-label":`Share by email`,href:`mailto:?subject=${encodeURIComponent(e.name)}&body=${encodeURIComponent(m)}`,title:`Email`,children:h(c,{"aria-hidden":`true`,size:18})}),h(`a`,{"aria-label":`Share on Facebook`,href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(m)}`,rel:`noopener noreferrer`,target:`_blank`,title:`Facebook`,children:h(o,{"aria-hidden":`true`,size:18})}),h(`a`,{"aria-label":`Share on X`,href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(m)}&text=${encodeURIComponent(e.name)}`,rel:`noopener noreferrer`,target:`_blank`,title:`X`,children:h(`span`,{children:`𝕏`})}),l?g(`label`,{className:`lockerverse-public-events__copy-link`,children:[`Select and copy this event link`,h(`input`,{autoFocus:!0,onFocus:e=>e.currentTarget.select(),readOnly:!0,value:l})]}):null]}):null]})}function T({item:e,timeZone:t,active:n,past:r=!1}){let[i,a]=p(!1),o=new Date(e.startAt),s=new Intl.DateTimeFormat(`en-US`,{month:`short`,timeZone:t}).format(o),c=new Intl.DateTimeFormat(`en-US`,{day:`numeric`,timeZone:t}).format(o),l=new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`}).format(o),u=v(e.startAt,t),d=u===v(e.endAt,t)?y(e.endAt,t):`${v(e.endAt,t)} at ${y(e.endAt,t)}`,f=b(e.imageUrl),_=(e.description?.length??0)>130;return h(`li`,{className:`lockerverse-public-events__item`,id:`event-${e.id}`,children:g(`article`,{className:`lockerverse-public-events__row`,children:[f?h(`img`,{alt:``,className:`lockerverse-public-events__image`,height:124,loading:`lazy`,src:f,width:154}):g(`time`,{className:`lockerverse-public-events__date`,dateTime:e.startAt,children:[h(`span`,{className:`lockerverse-public-events__month`,children:s}),h(`span`,{className:`lockerverse-public-events__day`,children:c}),h(`span`,{className:`lockerverse-public-events__year`,children:l})]}),g(`div`,{className:`lockerverse-public-events__content`,children:[g(`div`,{className:`lockerverse-public-events__heading`,children:[h(`h3`,{children:e.name}),n?h(`span`,{className:`lockerverse-public-events__live`,children:`Live now`}):null]}),g(`p`,{className:`lockerverse-public-events__schedule`,children:[f?g(m,{children:[h(`time`,{dateTime:e.startAt,children:u}),h(`span`,{"aria-hidden":`true`,children:` · `})]}):null,h(`time`,{dateTime:e.startAt,children:y(e.startAt,t)}),h(`span`,{"aria-hidden":`true`,children:` — `}),h(`time`,{dateTime:e.endAt,children:d})]}),e.location?h(`p`,{className:`lockerverse-public-events__place`,children:e.location}):null,e.description?g(m,{children:[h(`p`,{className:[`lockerverse-public-events__description`,_&&!i?`lockerverse-public-events__description--clamped`:``].filter(Boolean).join(` `),children:e.description}),_?h(`button`,{"aria-expanded":i,className:`lockerverse-public-events__more`,onClick:()=>a(!i),type:`button`,children:i?`Show less`:`Read more`}):null]}):null]}),h(w,{item:e,past:r})]})})}function E({events:e,title:t=`Events`,showHeading:i=!0,emptyMessage:a=`No events yet.`,timeZone:o=`America/New_York`,theme:s=`dark`,style:c,className:f}){let[m,_]=p(()=>Date.now()),[v,y]=p(`current`),[b,x]=p([]),[C,w]=p(0),[E,D]=p(!1),[O,k]=p(!1),[A,j]=p(!1),[M,N]=p(null),[P,F]=p(null),I=d(),L=l(async(t,n=!1)=>{j(!0),N(null);try{let r=await e.client.listPast({offset:t});x(e=>n?r.events:[...e,...r.events]),w(t+r.events.length),D(r.hasMore),k(!0)}catch(e){N(e instanceof Error?e.message:`Unable to load past events.`)}finally{j(!1)}},[e.client]);u(()=>{let e=window.setInterval(()=>_(Date.now()),6e4);return()=>window.clearInterval(e)},[]),u(()=>{let e=new URL(window.location.href);e.searchParams.get(`lockerverseEvents`)===`past`&&(y(`past`),F(e.hash.slice(1)),L(0,!0))},[L]),u(()=>{let e=window.location.hash.slice(1);if(!e.startsWith(`event-`))return;if(v===`current`){document.getElementById(e)?.scrollIntoView({block:`center`});return}if(!P||A||M||!O)return;let t=document.getElementById(P);t?(t.scrollIntoView({block:`center`}),F(null)):E?L(C):F(null)},[e.events,L,M,E,O,A,C,P,v]);function R(){y(`past`),!(O||A)&&L(0,!0)}let z=e.events||[],B=z.filter(e=>new Date(e.startAt).getTime()<=m&&new Date(e.endAt).getTime()>m),V=z.filter(e=>new Date(e.startAt).getTime()>m);return h(`section`,{"aria-busy":v===`past`?A:e.loading,"aria-label":t,className:[`lockerverse-public-events`,f].filter(Boolean).join(` `),"data-lockerverse-theme":s,style:S(c),children:g(`div`,{className:`lockerverse-public-events__layout`,children:[i?h(`h2`,{children:t}):null,g(`nav`,{"aria-label":`Event views`,className:`lockerverse-public-events__tabs`,children:[g(`button`,{"aria-controls":`${I}-current-panel`,"aria-pressed":v===`current`,className:`lockerverse-public-events__tab`,id:`${I}-current-tab`,onClick:()=>y(`current`),type:`button`,children:[h(n,{"aria-hidden":`true`,size:18}),`Upcoming Events`]}),g(`button`,{"aria-controls":`${I}-past-panel`,"aria-pressed":v===`past`,className:`lockerverse-public-events__tab`,id:`${I}-past-tab`,onClick:R,type:`button`,children:[h(r,{"aria-hidden":`true`,size:18}),`Past Events`]})]}),g(`section`,{"aria-labelledby":`${I}-current-tab`,hidden:v!==`current`,id:`${I}-current-panel`,children:[e.loading&&!e.events?h(`p`,{role:`status`,children:`Loading events…`}):null,e.error?g(`div`,{role:`alert`,children:[h(`p`,{children:e.error.message}),h(`button`,{onClick:e.refresh,type:`button`,children:`Try again`})]}):null,e.events&&B.length===0&&V.length===0?h(`p`,{className:`lockerverse-public-events__empty`,children:a}):null,B.length>0?h(`div`,{className:`lockerverse-public-events__group`,children:h(`ol`,{className:`lockerverse-public-events__list`,children:B.map(e=>h(T,{active:!0,item:e,timeZone:o},e.id))})}):null,V.length>0?h(`div`,{className:`lockerverse-public-events__group`,children:h(`ol`,{className:`lockerverse-public-events__list`,children:V.map(e=>h(T,{active:!1,item:e,timeZone:o},e.id))})}):null]}),g(`section`,{"aria-labelledby":`${I}-past-tab`,hidden:v!==`past`,id:`${I}-past-panel`,children:[M?g(`div`,{role:`alert`,children:[h(`p`,{children:M}),h(`button`,{onClick:()=>L(O?C:0,!O),type:`button`,children:`Try again`})]}):null,A&&!O?h(`p`,{role:`status`,children:`Loading past events…`}):null,O&&b.length===0?h(`p`,{className:`lockerverse-public-events__empty`,children:`No past events yet.`}):null,b.length>0?h(`ol`,{className:`lockerverse-public-events__list`,children:b.map(e=>h(T,{active:!1,item:e,past:!0,timeZone:o},e.id))}):null,E?h(`button`,{className:`lockerverse-public-events__load-more`,disabled:A,onClick:()=>L(C),type:`button`,children:A?`Loading…`:`Load more past events`}):null]})]})})}function D(t,{initialEvents:n}={}){e(`public events`,{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,slug:``});let r=f(t.onError);r.current=t.onError;let[i]=p(()=>_({...t,onError:e=>r.current?.(e)})),[a,o]=p(0),[s,c]=p(()=>({error:null,events:n??null,loading:!0}));u(()=>{let e=!0;return i.list().then(t=>{e&&c({error:null,events:t,loading:!1})},t=>{e&&c(e=>({...e,error:t,loading:!1}))}),()=>{e=!1}},[i,a]);let d=l(()=>{c(e=>({...e,error:null,loading:!0})),o(e=>e+1)},[]);return{...s,client:i,refresh:d}}export{E as LockerversePublicEvents,D as useLockerversePublicEvents};
2
2
  //# sourceMappingURL=public-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-events.js","names":[],"sources":["../src/lockerverse-public-events.tsx","../src/use-lockerverse-public-events.ts"],"sourcesContent":["import type { LockerversePublicEvent } from \"@lockerverse/sdk/public-events\";\nimport {\n CalendarDays,\n CalendarX2,\n Check,\n Copy,\n Facebook,\n Forward,\n Mail,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { getAccentContrast } from \"./accent-contrast.ts\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport type { UseLockerversePublicEventsResult } from \"./use-lockerverse-public-events.ts\";\n\nexport type LockerversePublicEventsProps = {\n events: UseLockerversePublicEventsResult;\n /** The visible heading. Defaults to Events. */\n title?: string;\n showHeading?: boolean;\n emptyMessage?: string;\n /** Used to show dates and times. Defaults to America/New_York. */\n timeZone?: string;\n theme?: LockerverseTheme;\n style?: LockerverseStyle;\n className?: string;\n};\n\nfunction formatDate(value: string, timeZone: string) {\n return new Intl.DateTimeFormat(\"en-US\", {\n day: \"numeric\",\n month: \"short\",\n timeZone,\n year: \"numeric\",\n }).format(new Date(value));\n}\n\nfunction formatTime(value: string, timeZone: string) {\n return new Intl.DateTimeFormat(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone,\n timeZoneName: \"short\",\n }).format(new Date(value));\n}\n\nfunction getLink(value: string | null) {\n if (!value) {\n return null;\n }\n try {\n const url = new URL(value);\n return url.protocol === \"https:\" || url.protocol === \"http:\"\n ? url.toString()\n : null;\n } catch {\n return null;\n }\n}\n\nfunction getShareUrl(item: LockerversePublicEvent, past: boolean) {\n const link = getLink(item.link);\n if (link) {\n return link;\n }\n const url = new URL(window.location.href);\n if (past) {\n url.searchParams.set(\"lockerverseEvents\", \"past\");\n } else {\n url.searchParams.delete(\"lockerverseEvents\");\n }\n url.searchParams.delete(\"lockerverseEventOffset\");\n url.hash = `event-${item.id}`;\n return url.toString();\n}\n\nfunction withAccentContrast(style?: LockerverseStyle) {\n const accent = style?.[\"--lockerverse-accent\"];\n if (!accent || style?.[\"--lockerverse-accent-contrast\"] !== undefined) {\n return style;\n }\n const contrast = getAccentContrast(accent);\n return contrast\n ? { ...style, \"--lockerverse-accent-contrast\": contrast }\n : style;\n}\n\nfunction copyWithExecCommand(value: string) {\n const input = document.createElement(\"textarea\");\n input.value = value;\n input.setAttribute(\"readonly\", \"\");\n input.style.position = \"fixed\";\n input.style.opacity = \"0\";\n document.body.appendChild(input);\n try {\n input.select();\n return document.execCommand(\"copy\");\n } catch {\n return false;\n } finally {\n input.remove();\n }\n}\n\nfunction EventActions({\n item,\n past,\n}: {\n item: LockerversePublicEvent;\n past: boolean;\n}) {\n const [copied, setCopied] = useState(false);\n const [manualShareUrl, setManualShareUrl] = useState<string | null>(null);\n const [shareUrl, setShareUrl] = useState<string | null>(null);\n const [shareMenuAbove, setShareMenuAbove] = useState(false);\n const shareActionsRef = useRef<HTMLDivElement>(null);\n const shareTriggerRef = useRef<HTMLButtonElement>(null);\n const link = getLink(item.link);\n const isWithinShareActions = (target: EventTarget | null) =>\n target instanceof Node && shareActionsRef.current?.contains(target);\n\n useEffect(() => {\n if (!shareUrl) {\n return;\n }\n const closeOnOutsideClick = (event: PointerEvent) => {\n if (!isWithinShareActions(event.target)) {\n setShareUrl(null);\n }\n };\n const closeOnEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setShareUrl(null);\n if (shareActionsRef.current?.contains(document.activeElement)) {\n shareTriggerRef.current?.focus();\n }\n }\n };\n const closeOnFocusOutside = (event: FocusEvent) => {\n if (!isWithinShareActions(event.target)) {\n setShareUrl(null);\n }\n };\n document.addEventListener(\"pointerdown\", closeOnOutsideClick);\n document.addEventListener(\"keydown\", closeOnEscape);\n document.addEventListener(\"focusin\", closeOnFocusOutside);\n return () => {\n document.removeEventListener(\"pointerdown\", closeOnOutsideClick);\n document.removeEventListener(\"keydown\", closeOnEscape);\n document.removeEventListener(\"focusin\", closeOnFocusOutside);\n };\n }, [shareUrl]);\n\n useEffect(() => {\n if (!copied) {\n return;\n }\n const timeout = window.setTimeout(() => setCopied(false), 2200);\n return () => window.clearTimeout(timeout);\n }, [copied]);\n\n async function copyEventLink() {\n if (!shareUrl) {\n return;\n }\n try {\n await navigator.clipboard.writeText(shareUrl);\n setCopied(true);\n setShareUrl(null);\n shareTriggerRef.current?.focus();\n } catch {\n if (copyWithExecCommand(shareUrl)) {\n setCopied(true);\n setShareUrl(null);\n shareTriggerRef.current?.focus();\n } else {\n setManualShareUrl(shareUrl);\n }\n }\n }\n\n return (\n <div className=\"lockerverse-public-events__actions\" ref={shareActionsRef}>\n {link ? (\n <a\n className=\"lockerverse-public-events__link\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n View event <span aria-hidden=\"true\">↗</span>\n </a>\n ) : null}\n <button\n aria-expanded={shareUrl !== null}\n aria-label={`Share ${item.name}`}\n className=\"lockerverse-public-events__share\"\n data-copied={copied}\n onClick={() => {\n if (!shareUrl && shareTriggerRef.current) {\n setShareMenuAbove(\n window.innerHeight -\n shareTriggerRef.current.getBoundingClientRect().bottom <\n 72\n );\n }\n setShareUrl(shareUrl ? null : getShareUrl(item, past));\n setCopied(false);\n setManualShareUrl(null);\n }}\n ref={shareTriggerRef}\n title={`Share ${item.name}`}\n type=\"button\"\n >\n {copied ? (\n <Check aria-hidden=\"true\" size={22} strokeWidth={2} />\n ) : (\n <Forward aria-hidden=\"true\" size={22} strokeWidth={1.9} />\n )}\n </button>\n {copied ? (\n <span\n className=\"lockerverse-public-events__visually-hidden\"\n role=\"status\"\n >\n Link copied\n </span>\n ) : null}\n {shareUrl ? (\n <fieldset\n className=\"lockerverse-public-events__share-menu\"\n data-above={shareMenuAbove}\n >\n <legend className=\"lockerverse-public-events__visually-hidden\">\n Share {item.name}\n </legend>\n <button\n aria-label=\"Copy event link\"\n onClick={copyEventLink}\n title=\"Copy link\"\n type=\"button\"\n >\n <Copy aria-hidden=\"true\" size={18} />\n </button>\n <a\n aria-label=\"Share by email\"\n href={`mailto:?subject=${encodeURIComponent(item.name)}&body=${encodeURIComponent(shareUrl)}`}\n title=\"Email\"\n >\n <Mail aria-hidden=\"true\" size={18} />\n </a>\n <a\n aria-label=\"Share on Facebook\"\n href={`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareUrl)}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n title=\"Facebook\"\n >\n <Facebook aria-hidden=\"true\" size={18} />\n </a>\n <a\n aria-label=\"Share on X\"\n href={`https://twitter.com/intent/tweet?url=${encodeURIComponent(shareUrl)}&text=${encodeURIComponent(item.name)}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n title=\"X\"\n >\n <span>𝕏</span>\n </a>\n {manualShareUrl ? (\n <label className=\"lockerverse-public-events__copy-link\">\n Select and copy this event link\n <input\n autoFocus\n onFocus={(event) => event.currentTarget.select()}\n readOnly\n value={manualShareUrl}\n />\n </label>\n ) : null}\n </fieldset>\n ) : null}\n </div>\n );\n}\n\nfunction PublicEventRow({\n item,\n timeZone,\n active,\n past = false,\n}: {\n item: LockerversePublicEvent;\n timeZone: string;\n active: boolean;\n past?: boolean;\n}) {\n const [expanded, setExpanded] = useState(false);\n const start = new Date(item.startAt);\n const month = new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n timeZone,\n }).format(start);\n const day = new Intl.DateTimeFormat(\"en-US\", {\n day: \"numeric\",\n timeZone,\n }).format(start);\n const year = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n year: \"numeric\",\n }).format(start);\n const startDateLabel = formatDate(item.startAt, timeZone);\n const sameDay = startDateLabel === formatDate(item.endAt, timeZone);\n const endLabel = sameDay\n ? formatTime(item.endAt, timeZone)\n : `${formatDate(item.endAt, timeZone)} at ${formatTime(item.endAt, timeZone)}`;\n const imageUrl = getLink(item.imageUrl);\n const canExpand = (item.description?.length ?? 0) > 130;\n\n return (\n <li className=\"lockerverse-public-events__item\" id={`event-${item.id}`}>\n <article className=\"lockerverse-public-events__row\">\n {imageUrl ? (\n <img\n alt=\"\"\n className=\"lockerverse-public-events__image\"\n height={124}\n loading=\"lazy\"\n src={imageUrl}\n width={154}\n />\n ) : (\n <time\n className=\"lockerverse-public-events__date\"\n dateTime={item.startAt}\n >\n <span className=\"lockerverse-public-events__month\">{month}</span>\n <span className=\"lockerverse-public-events__day\">{day}</span>\n <span className=\"lockerverse-public-events__year\">{year}</span>\n </time>\n )}\n <div className=\"lockerverse-public-events__content\">\n <div className=\"lockerverse-public-events__heading\">\n <h3>{item.name}</h3>\n {active ? (\n <span className=\"lockerverse-public-events__live\">Live now</span>\n ) : null}\n </div>\n <p className=\"lockerverse-public-events__schedule\">\n {imageUrl ? (\n <>\n <time dateTime={item.startAt}>{startDateLabel}</time>\n <span aria-hidden=\"true\"> · </span>\n </>\n ) : null}\n <time dateTime={item.startAt}>\n {formatTime(item.startAt, timeZone)}\n </time>\n <span aria-hidden=\"true\"> — </span>\n <time dateTime={item.endAt}>{endLabel}</time>\n </p>\n {item.location ? (\n <p className=\"lockerverse-public-events__place\">{item.location}</p>\n ) : null}\n {item.description ? (\n <>\n <p\n className={[\n \"lockerverse-public-events__description\",\n canExpand && !expanded\n ? \"lockerverse-public-events__description--clamped\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {item.description}\n </p>\n {canExpand ? (\n <button\n aria-expanded={expanded}\n className=\"lockerverse-public-events__more\"\n onClick={() => setExpanded(!expanded)}\n type=\"button\"\n >\n {expanded ? \"Show less\" : \"Read more\"}\n </button>\n ) : null}\n </>\n ) : null}\n </div>\n <EventActions item={item} past={past} />\n </article>\n </li>\n );\n}\n\n/** Optional public list that can be embedded in any React site. */\nexport function LockerversePublicEvents({\n events,\n title = \"Events\",\n showHeading = true,\n emptyMessage = \"No events yet.\",\n timeZone = \"America/New_York\",\n theme = \"dark\",\n style,\n className,\n}: LockerversePublicEventsProps) {\n const [now, setNow] = useState(() => Date.now());\n const [view, setView] = useState<\"current\" | \"past\">(\"current\");\n const [pastEvents, setPastEvents] = useState<LockerversePublicEvent[]>([]);\n const [pastOffset, setPastOffset] = useState(0);\n const [pastHasMore, setPastHasMore] = useState(false);\n const [pastLoaded, setPastLoaded] = useState(false);\n const [pastLoading, setPastLoading] = useState(false);\n const [pastError, setPastError] = useState<string | null>(null);\n const [pastTarget, setPastTarget] = useState<string | null>(null);\n const tabId = useId();\n\n const loadPast = useCallback(\n async (offset: number, reset = false) => {\n setPastLoading(true);\n setPastError(null);\n try {\n const page = await events.client.listPast({ offset });\n setPastEvents((current) =>\n reset ? page.events : [...current, ...page.events]\n );\n setPastOffset(offset + page.events.length);\n setPastHasMore(page.hasMore);\n setPastLoaded(true);\n } catch (error) {\n setPastError(\n error instanceof Error ? error.message : \"Unable to load past events.\"\n );\n } finally {\n setPastLoading(false);\n }\n },\n [events.client]\n );\n\n useEffect(() => {\n const interval = window.setInterval(() => setNow(Date.now()), 60_000);\n return () => window.clearInterval(interval);\n }, []);\n\n useEffect(() => {\n const url = new URL(window.location.href);\n if (url.searchParams.get(\"lockerverseEvents\") !== \"past\") {\n return;\n }\n setView(\"past\");\n setPastTarget(url.hash.slice(1));\n loadPast(0, true);\n }, [loadPast]);\n\n useEffect(() => {\n const hash = window.location.hash.slice(1);\n if (!hash.startsWith(\"event-\")) {\n return;\n }\n if (view === \"current\") {\n document.getElementById(hash)?.scrollIntoView({ block: \"center\" });\n return;\n }\n if (!pastTarget || pastLoading || pastError || !pastLoaded) {\n return;\n }\n const target = document.getElementById(pastTarget);\n if (target) {\n target.scrollIntoView({ block: \"center\" });\n setPastTarget(null);\n } else if (pastHasMore) {\n loadPast(pastOffset);\n } else {\n setPastTarget(null);\n }\n }, [\n events.events,\n loadPast,\n pastError,\n pastHasMore,\n pastLoaded,\n pastLoading,\n pastOffset,\n pastTarget,\n view,\n ]);\n\n function openPast() {\n setView(\"past\");\n if (pastLoaded || pastLoading) {\n return;\n }\n loadPast(0, true);\n }\n\n const availableEvents = events.events || [];\n const activeEvents = availableEvents.filter(\n (item) =>\n new Date(item.startAt).getTime() <= now &&\n new Date(item.endAt).getTime() > now\n );\n const upcomingEvents = availableEvents.filter(\n (item) => new Date(item.startAt).getTime() > now\n );\n\n return (\n <section\n aria-busy={view === \"past\" ? pastLoading : events.loading}\n aria-label={title}\n className={[\"lockerverse-public-events\", className]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={withAccentContrast(style)}\n >\n <div className=\"lockerverse-public-events__layout\">\n {showHeading ? <h2>{title}</h2> : null}\n <nav\n aria-label=\"Event views\"\n className=\"lockerverse-public-events__tabs\"\n >\n <button\n aria-controls={`${tabId}-current-panel`}\n aria-pressed={view === \"current\"}\n className=\"lockerverse-public-events__tab\"\n id={`${tabId}-current-tab`}\n onClick={() => setView(\"current\")}\n type=\"button\"\n >\n <CalendarDays aria-hidden=\"true\" size={18} />\n Upcoming Events\n </button>\n <button\n aria-controls={`${tabId}-past-panel`}\n aria-pressed={view === \"past\"}\n className=\"lockerverse-public-events__tab\"\n id={`${tabId}-past-tab`}\n onClick={openPast}\n type=\"button\"\n >\n <CalendarX2 aria-hidden=\"true\" size={18} />\n Past Events\n </button>\n </nav>\n <section\n aria-labelledby={`${tabId}-current-tab`}\n hidden={view !== \"current\"}\n id={`${tabId}-current-panel`}\n >\n {events.loading && !events.events ? (\n <p role=\"status\">Loading events…</p>\n ) : null}\n {events.error ? (\n <div role=\"alert\">\n <p>{events.error.message}</p>\n <button onClick={events.refresh} type=\"button\">\n Try again\n </button>\n </div>\n ) : null}\n {events.events &&\n activeEvents.length === 0 &&\n upcomingEvents.length === 0 ? (\n <p className=\"lockerverse-public-events__empty\">{emptyMessage}</p>\n ) : null}\n {activeEvents.length > 0 ? (\n <div className=\"lockerverse-public-events__group\">\n <ol className=\"lockerverse-public-events__list\">\n {activeEvents.map((item) => (\n <PublicEventRow\n active\n item={item}\n key={item.id}\n timeZone={timeZone}\n />\n ))}\n </ol>\n </div>\n ) : null}\n {upcomingEvents.length > 0 ? (\n <div className=\"lockerverse-public-events__group\">\n <ol className=\"lockerverse-public-events__list\">\n {upcomingEvents.map((item) => (\n <PublicEventRow\n active={false}\n item={item}\n key={item.id}\n timeZone={timeZone}\n />\n ))}\n </ol>\n </div>\n ) : null}\n </section>\n <section\n aria-labelledby={`${tabId}-past-tab`}\n hidden={view !== \"past\"}\n id={`${tabId}-past-panel`}\n >\n {pastError ? (\n <div role=\"alert\">\n <p>{pastError}</p>\n <button\n onClick={() =>\n loadPast(pastLoaded ? pastOffset : 0, !pastLoaded)\n }\n type=\"button\"\n >\n Try again\n </button>\n </div>\n ) : null}\n {pastLoading && !pastLoaded ? (\n <p role=\"status\">Loading past events…</p>\n ) : null}\n {pastLoaded && pastEvents.length === 0 ? (\n <p className=\"lockerverse-public-events__empty\">\n No past events yet.\n </p>\n ) : null}\n {pastEvents.length > 0 ? (\n <ol className=\"lockerverse-public-events__list\">\n {pastEvents.map((item) => (\n <PublicEventRow\n active={false}\n item={item}\n key={item.id}\n past\n timeZone={timeZone}\n />\n ))}\n </ol>\n ) : null}\n {pastHasMore ? (\n <button\n className=\"lockerverse-public-events__load-more\"\n disabled={pastLoading}\n onClick={() => loadPast(pastOffset)}\n type=\"button\"\n >\n {pastLoading ? \"Loading…\" : \"Load more past events\"}\n </button>\n ) : null}\n </section>\n </div>\n </section>\n );\n}\n","import {\n type CreateLockerversePublicEventsOptions,\n createLockerversePublicEventsClient,\n type LockerversePublicEvent,\n type LockerversePublicEventsClient,\n type LockerverseSdkError,\n} from \"@lockerverse/sdk/public-events\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useImmutableResourceIdentity } from \"./immutable-resource-identity.ts\";\n\nexport type UseLockerversePublicEventsResult = {\n client: LockerversePublicEventsClient;\n events: LockerversePublicEvent[] | null;\n loading: boolean;\n error: LockerverseSdkError | null;\n refresh: () => void;\n};\n\n/** Load the public events list for one community. */\nexport function useLockerversePublicEvents(\n options: CreateLockerversePublicEventsOptions\n): UseLockerversePublicEventsResult {\n useImmutableResourceIdentity(\"public events\", {\n apiBaseUrl: options.apiBaseUrl,\n communitySlug: options.communitySlug,\n environment: options.environment,\n slug: \"\",\n });\n const onErrorRef = useRef(options.onError);\n onErrorRef.current = options.onError;\n const [client] = useState(() =>\n createLockerversePublicEventsClient({\n ...options,\n onError: (error) => onErrorRef.current?.(error),\n })\n );\n const [revision, setRevision] = useState(0);\n const [state, setState] = useState<\n Pick<UseLockerversePublicEventsResult, \"events\" | \"loading\" | \"error\">\n >({ error: null, events: null, loading: true });\n\n useEffect(() => {\n let active = true;\n client.list().then(\n (events) => {\n if (active) {\n setState({ error: null, events, loading: false });\n }\n },\n (error: LockerverseSdkError) => {\n if (active) {\n setState((current) => ({ ...current, error, loading: false }));\n }\n }\n );\n return () => {\n active = false;\n };\n }, [client, revision]);\n\n const refresh = useCallback(() => {\n setState((current) => ({ ...current, error: null, loading: true }));\n setRevision((current) => current + 1);\n }, []);\n\n return { ...state, client, refresh };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"public-events.js","names":[],"sources":["../src/lockerverse-public-events.tsx","../src/use-lockerverse-public-events.ts"],"sourcesContent":["import type { LockerversePublicEvent } from \"@lockerverse/sdk/public-events\";\nimport {\n CalendarDays,\n CalendarX2,\n Check,\n Copy,\n Facebook,\n Forward,\n Mail,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { getAccentContrast } from \"./accent-contrast.ts\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport type { UseLockerversePublicEventsResult } from \"./use-lockerverse-public-events.ts\";\n\nexport type LockerversePublicEventsProps = {\n events: UseLockerversePublicEventsResult;\n /** The visible heading. Defaults to Events. */\n title?: string;\n showHeading?: boolean;\n emptyMessage?: string;\n /** Used to show dates and times. Defaults to America/New_York. */\n timeZone?: string;\n theme?: LockerverseTheme;\n style?: LockerverseStyle;\n className?: string;\n};\n\nfunction formatDate(value: string, timeZone: string) {\n return new Intl.DateTimeFormat(\"en-US\", {\n day: \"numeric\",\n month: \"short\",\n timeZone,\n year: \"numeric\",\n }).format(new Date(value));\n}\n\nfunction formatTime(value: string, timeZone: string) {\n return new Intl.DateTimeFormat(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone,\n timeZoneName: \"short\",\n }).format(new Date(value));\n}\n\nfunction getLink(value: string | null) {\n if (!value) {\n return null;\n }\n try {\n const url = new URL(value);\n return url.protocol === \"https:\" || url.protocol === \"http:\"\n ? url.toString()\n : null;\n } catch {\n return null;\n }\n}\n\nfunction getShareUrl(item: LockerversePublicEvent, past: boolean) {\n const link = getLink(item.link);\n if (link) {\n return link;\n }\n const url = new URL(window.location.href);\n if (past) {\n url.searchParams.set(\"lockerverseEvents\", \"past\");\n } else {\n url.searchParams.delete(\"lockerverseEvents\");\n }\n url.searchParams.delete(\"lockerverseEventOffset\");\n url.hash = `event-${item.id}`;\n return url.toString();\n}\n\nfunction withAccentContrast(style?: LockerverseStyle) {\n const accent = style?.[\"--lockerverse-accent\"];\n if (!accent || style?.[\"--lockerverse-accent-contrast\"] !== undefined) {\n return style;\n }\n const contrast = getAccentContrast(accent);\n return contrast\n ? { ...style, \"--lockerverse-accent-contrast\": contrast }\n : style;\n}\n\nfunction copyWithExecCommand(value: string) {\n const input = document.createElement(\"textarea\");\n input.value = value;\n input.setAttribute(\"readonly\", \"\");\n input.style.position = \"fixed\";\n input.style.opacity = \"0\";\n document.body.appendChild(input);\n try {\n input.select();\n return document.execCommand(\"copy\");\n } catch {\n return false;\n } finally {\n input.remove();\n }\n}\n\nfunction EventActions({\n item,\n past,\n}: {\n item: LockerversePublicEvent;\n past: boolean;\n}) {\n const [copied, setCopied] = useState(false);\n const [manualShareUrl, setManualShareUrl] = useState<string | null>(null);\n const [shareUrl, setShareUrl] = useState<string | null>(null);\n const [shareMenuAbove, setShareMenuAbove] = useState(false);\n const shareActionsRef = useRef<HTMLDivElement>(null);\n const shareTriggerRef = useRef<HTMLButtonElement>(null);\n const link = getLink(item.link);\n const isWithinShareActions = (target: EventTarget | null) =>\n target instanceof Node && shareActionsRef.current?.contains(target);\n\n useEffect(() => {\n if (!shareUrl) {\n return;\n }\n const closeOnOutsideClick = (event: PointerEvent) => {\n if (!isWithinShareActions(event.target)) {\n setShareUrl(null);\n }\n };\n const closeOnEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setShareUrl(null);\n if (shareActionsRef.current?.contains(document.activeElement)) {\n shareTriggerRef.current?.focus();\n }\n }\n };\n const closeOnFocusOutside = (event: FocusEvent) => {\n if (!isWithinShareActions(event.target)) {\n setShareUrl(null);\n }\n };\n document.addEventListener(\"pointerdown\", closeOnOutsideClick);\n document.addEventListener(\"keydown\", closeOnEscape);\n document.addEventListener(\"focusin\", closeOnFocusOutside);\n return () => {\n document.removeEventListener(\"pointerdown\", closeOnOutsideClick);\n document.removeEventListener(\"keydown\", closeOnEscape);\n document.removeEventListener(\"focusin\", closeOnFocusOutside);\n };\n }, [shareUrl]);\n\n useEffect(() => {\n if (!copied) {\n return;\n }\n const timeout = window.setTimeout(() => setCopied(false), 2200);\n return () => window.clearTimeout(timeout);\n }, [copied]);\n\n async function copyEventLink() {\n if (!shareUrl) {\n return;\n }\n try {\n await navigator.clipboard.writeText(shareUrl);\n setCopied(true);\n setShareUrl(null);\n shareTriggerRef.current?.focus();\n } catch {\n if (copyWithExecCommand(shareUrl)) {\n setCopied(true);\n setShareUrl(null);\n shareTriggerRef.current?.focus();\n } else {\n setManualShareUrl(shareUrl);\n }\n }\n }\n\n return (\n <div className=\"lockerverse-public-events__actions\" ref={shareActionsRef}>\n {link ? (\n <a\n className=\"lockerverse-public-events__link\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n View event <span aria-hidden=\"true\">↗</span>\n </a>\n ) : null}\n <button\n aria-expanded={shareUrl !== null}\n aria-label={`Share ${item.name}`}\n className=\"lockerverse-public-events__share\"\n data-copied={copied}\n onClick={() => {\n if (!shareUrl && shareTriggerRef.current) {\n setShareMenuAbove(\n window.innerHeight -\n shareTriggerRef.current.getBoundingClientRect().bottom <\n 72\n );\n }\n setShareUrl(shareUrl ? null : getShareUrl(item, past));\n setCopied(false);\n setManualShareUrl(null);\n }}\n ref={shareTriggerRef}\n title={`Share ${item.name}`}\n type=\"button\"\n >\n {copied ? (\n <Check aria-hidden=\"true\" size={22} strokeWidth={2} />\n ) : (\n <Forward aria-hidden=\"true\" size={22} strokeWidth={1.9} />\n )}\n </button>\n {copied ? (\n <span\n className=\"lockerverse-public-events__visually-hidden\"\n role=\"status\"\n >\n Link copied\n </span>\n ) : null}\n {shareUrl ? (\n <fieldset\n className=\"lockerverse-public-events__share-menu\"\n data-above={shareMenuAbove}\n >\n <legend className=\"lockerverse-public-events__visually-hidden\">\n Share {item.name}\n </legend>\n <button\n aria-label=\"Copy event link\"\n onClick={copyEventLink}\n title=\"Copy link\"\n type=\"button\"\n >\n <Copy aria-hidden=\"true\" size={18} />\n </button>\n <a\n aria-label=\"Share by email\"\n href={`mailto:?subject=${encodeURIComponent(item.name)}&body=${encodeURIComponent(shareUrl)}`}\n title=\"Email\"\n >\n <Mail aria-hidden=\"true\" size={18} />\n </a>\n <a\n aria-label=\"Share on Facebook\"\n href={`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareUrl)}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n title=\"Facebook\"\n >\n <Facebook aria-hidden=\"true\" size={18} />\n </a>\n <a\n aria-label=\"Share on X\"\n href={`https://twitter.com/intent/tweet?url=${encodeURIComponent(shareUrl)}&text=${encodeURIComponent(item.name)}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n title=\"X\"\n >\n <span>𝕏</span>\n </a>\n {manualShareUrl ? (\n <label className=\"lockerverse-public-events__copy-link\">\n Select and copy this event link\n <input\n autoFocus\n onFocus={(event) => event.currentTarget.select()}\n readOnly\n value={manualShareUrl}\n />\n </label>\n ) : null}\n </fieldset>\n ) : null}\n </div>\n );\n}\n\nfunction PublicEventRow({\n item,\n timeZone,\n active,\n past = false,\n}: {\n item: LockerversePublicEvent;\n timeZone: string;\n active: boolean;\n past?: boolean;\n}) {\n const [expanded, setExpanded] = useState(false);\n const start = new Date(item.startAt);\n const month = new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n timeZone,\n }).format(start);\n const day = new Intl.DateTimeFormat(\"en-US\", {\n day: \"numeric\",\n timeZone,\n }).format(start);\n const year = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n year: \"numeric\",\n }).format(start);\n const startDateLabel = formatDate(item.startAt, timeZone);\n const sameDay = startDateLabel === formatDate(item.endAt, timeZone);\n const endLabel = sameDay\n ? formatTime(item.endAt, timeZone)\n : `${formatDate(item.endAt, timeZone)} at ${formatTime(item.endAt, timeZone)}`;\n const imageUrl = getLink(item.imageUrl);\n const canExpand = (item.description?.length ?? 0) > 130;\n\n return (\n <li className=\"lockerverse-public-events__item\" id={`event-${item.id}`}>\n <article className=\"lockerverse-public-events__row\">\n {imageUrl ? (\n <img\n alt=\"\"\n className=\"lockerverse-public-events__image\"\n height={124}\n loading=\"lazy\"\n src={imageUrl}\n width={154}\n />\n ) : (\n <time\n className=\"lockerverse-public-events__date\"\n dateTime={item.startAt}\n >\n <span className=\"lockerverse-public-events__month\">{month}</span>\n <span className=\"lockerverse-public-events__day\">{day}</span>\n <span className=\"lockerverse-public-events__year\">{year}</span>\n </time>\n )}\n <div className=\"lockerverse-public-events__content\">\n <div className=\"lockerverse-public-events__heading\">\n <h3>{item.name}</h3>\n {active ? (\n <span className=\"lockerverse-public-events__live\">Live now</span>\n ) : null}\n </div>\n <p className=\"lockerverse-public-events__schedule\">\n {imageUrl ? (\n <>\n <time dateTime={item.startAt}>{startDateLabel}</time>\n <span aria-hidden=\"true\"> · </span>\n </>\n ) : null}\n <time dateTime={item.startAt}>\n {formatTime(item.startAt, timeZone)}\n </time>\n <span aria-hidden=\"true\"> — </span>\n <time dateTime={item.endAt}>{endLabel}</time>\n </p>\n {item.location ? (\n <p className=\"lockerverse-public-events__place\">{item.location}</p>\n ) : null}\n {item.description ? (\n <>\n <p\n className={[\n \"lockerverse-public-events__description\",\n canExpand && !expanded\n ? \"lockerverse-public-events__description--clamped\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {item.description}\n </p>\n {canExpand ? (\n <button\n aria-expanded={expanded}\n className=\"lockerverse-public-events__more\"\n onClick={() => setExpanded(!expanded)}\n type=\"button\"\n >\n {expanded ? \"Show less\" : \"Read more\"}\n </button>\n ) : null}\n </>\n ) : null}\n </div>\n <EventActions item={item} past={past} />\n </article>\n </li>\n );\n}\n\n/** Optional public list that can be embedded in any React site. */\nexport function LockerversePublicEvents({\n events,\n title = \"Events\",\n showHeading = true,\n emptyMessage = \"No events yet.\",\n timeZone = \"America/New_York\",\n theme = \"dark\",\n style,\n className,\n}: LockerversePublicEventsProps) {\n const [now, setNow] = useState(() => Date.now());\n const [view, setView] = useState<\"current\" | \"past\">(\"current\");\n const [pastEvents, setPastEvents] = useState<LockerversePublicEvent[]>([]);\n const [pastOffset, setPastOffset] = useState(0);\n const [pastHasMore, setPastHasMore] = useState(false);\n const [pastLoaded, setPastLoaded] = useState(false);\n const [pastLoading, setPastLoading] = useState(false);\n const [pastError, setPastError] = useState<string | null>(null);\n const [pastTarget, setPastTarget] = useState<string | null>(null);\n const tabId = useId();\n\n const loadPast = useCallback(\n async (offset: number, reset = false) => {\n setPastLoading(true);\n setPastError(null);\n try {\n const page = await events.client.listPast({ offset });\n setPastEvents((current) =>\n reset ? page.events : [...current, ...page.events]\n );\n setPastOffset(offset + page.events.length);\n setPastHasMore(page.hasMore);\n setPastLoaded(true);\n } catch (error) {\n setPastError(\n error instanceof Error ? error.message : \"Unable to load past events.\"\n );\n } finally {\n setPastLoading(false);\n }\n },\n [events.client]\n );\n\n useEffect(() => {\n const interval = window.setInterval(() => setNow(Date.now()), 60_000);\n return () => window.clearInterval(interval);\n }, []);\n\n useEffect(() => {\n const url = new URL(window.location.href);\n if (url.searchParams.get(\"lockerverseEvents\") !== \"past\") {\n return;\n }\n setView(\"past\");\n setPastTarget(url.hash.slice(1));\n loadPast(0, true);\n }, [loadPast]);\n\n useEffect(() => {\n const hash = window.location.hash.slice(1);\n if (!hash.startsWith(\"event-\")) {\n return;\n }\n if (view === \"current\") {\n document.getElementById(hash)?.scrollIntoView({ block: \"center\" });\n return;\n }\n if (!pastTarget || pastLoading || pastError || !pastLoaded) {\n return;\n }\n const target = document.getElementById(pastTarget);\n if (target) {\n target.scrollIntoView({ block: \"center\" });\n setPastTarget(null);\n } else if (pastHasMore) {\n loadPast(pastOffset);\n } else {\n setPastTarget(null);\n }\n }, [\n events.events,\n loadPast,\n pastError,\n pastHasMore,\n pastLoaded,\n pastLoading,\n pastOffset,\n pastTarget,\n view,\n ]);\n\n function openPast() {\n setView(\"past\");\n if (pastLoaded || pastLoading) {\n return;\n }\n loadPast(0, true);\n }\n\n const availableEvents = events.events || [];\n const activeEvents = availableEvents.filter(\n (item) =>\n new Date(item.startAt).getTime() <= now &&\n new Date(item.endAt).getTime() > now\n );\n const upcomingEvents = availableEvents.filter(\n (item) => new Date(item.startAt).getTime() > now\n );\n\n return (\n <section\n aria-busy={view === \"past\" ? pastLoading : events.loading}\n aria-label={title}\n className={[\"lockerverse-public-events\", className]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={withAccentContrast(style)}\n >\n <div className=\"lockerverse-public-events__layout\">\n {showHeading ? <h2>{title}</h2> : null}\n <nav\n aria-label=\"Event views\"\n className=\"lockerverse-public-events__tabs\"\n >\n <button\n aria-controls={`${tabId}-current-panel`}\n aria-pressed={view === \"current\"}\n className=\"lockerverse-public-events__tab\"\n id={`${tabId}-current-tab`}\n onClick={() => setView(\"current\")}\n type=\"button\"\n >\n <CalendarDays aria-hidden=\"true\" size={18} />\n Upcoming Events\n </button>\n <button\n aria-controls={`${tabId}-past-panel`}\n aria-pressed={view === \"past\"}\n className=\"lockerverse-public-events__tab\"\n id={`${tabId}-past-tab`}\n onClick={openPast}\n type=\"button\"\n >\n <CalendarX2 aria-hidden=\"true\" size={18} />\n Past Events\n </button>\n </nav>\n <section\n aria-labelledby={`${tabId}-current-tab`}\n hidden={view !== \"current\"}\n id={`${tabId}-current-panel`}\n >\n {events.loading && !events.events ? (\n <p role=\"status\">Loading events…</p>\n ) : null}\n {events.error ? (\n <div role=\"alert\">\n <p>{events.error.message}</p>\n <button onClick={events.refresh} type=\"button\">\n Try again\n </button>\n </div>\n ) : null}\n {events.events &&\n activeEvents.length === 0 &&\n upcomingEvents.length === 0 ? (\n <p className=\"lockerverse-public-events__empty\">{emptyMessage}</p>\n ) : null}\n {activeEvents.length > 0 ? (\n <div className=\"lockerverse-public-events__group\">\n <ol className=\"lockerverse-public-events__list\">\n {activeEvents.map((item) => (\n <PublicEventRow\n active\n item={item}\n key={item.id}\n timeZone={timeZone}\n />\n ))}\n </ol>\n </div>\n ) : null}\n {upcomingEvents.length > 0 ? (\n <div className=\"lockerverse-public-events__group\">\n <ol className=\"lockerverse-public-events__list\">\n {upcomingEvents.map((item) => (\n <PublicEventRow\n active={false}\n item={item}\n key={item.id}\n timeZone={timeZone}\n />\n ))}\n </ol>\n </div>\n ) : null}\n </section>\n <section\n aria-labelledby={`${tabId}-past-tab`}\n hidden={view !== \"past\"}\n id={`${tabId}-past-panel`}\n >\n {pastError ? (\n <div role=\"alert\">\n <p>{pastError}</p>\n <button\n onClick={() =>\n loadPast(pastLoaded ? pastOffset : 0, !pastLoaded)\n }\n type=\"button\"\n >\n Try again\n </button>\n </div>\n ) : null}\n {pastLoading && !pastLoaded ? (\n <p role=\"status\">Loading past events…</p>\n ) : null}\n {pastLoaded && pastEvents.length === 0 ? (\n <p className=\"lockerverse-public-events__empty\">\n No past events yet.\n </p>\n ) : null}\n {pastEvents.length > 0 ? (\n <ol className=\"lockerverse-public-events__list\">\n {pastEvents.map((item) => (\n <PublicEventRow\n active={false}\n item={item}\n key={item.id}\n past\n timeZone={timeZone}\n />\n ))}\n </ol>\n ) : null}\n {pastHasMore ? (\n <button\n className=\"lockerverse-public-events__load-more\"\n disabled={pastLoading}\n onClick={() => loadPast(pastOffset)}\n type=\"button\"\n >\n {pastLoading ? \"Loading…\" : \"Load more past events\"}\n </button>\n ) : null}\n </section>\n </div>\n </section>\n );\n}\n","import {\n type CreateLockerversePublicEventsOptions,\n createLockerversePublicEventsClient,\n type LockerversePublicEvent,\n type LockerversePublicEventsClient,\n type LockerverseSdkError,\n} from \"@lockerverse/sdk/public-events\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useImmutableResourceIdentity } from \"./immutable-resource-identity.ts\";\n\nexport type UseLockerversePublicEventsOptions = {\n /** Initial public SDK snapshot. The hook still refreshes on mount. */\n initialEvents?: LockerversePublicEvent[];\n};\n\nexport type UseLockerversePublicEventsResult = {\n client: LockerversePublicEventsClient;\n events: LockerversePublicEvent[] | null;\n loading: boolean;\n error: LockerverseSdkError | null;\n refresh: () => void;\n};\n\n/** Load the public events list for one community. */\nexport function useLockerversePublicEvents(\n options: CreateLockerversePublicEventsOptions,\n { initialEvents }: UseLockerversePublicEventsOptions = {}\n): UseLockerversePublicEventsResult {\n useImmutableResourceIdentity(\"public events\", {\n apiBaseUrl: options.apiBaseUrl,\n communitySlug: options.communitySlug,\n environment: options.environment,\n slug: \"\",\n });\n const onErrorRef = useRef(options.onError);\n onErrorRef.current = options.onError;\n const [client] = useState(() =>\n createLockerversePublicEventsClient({\n ...options,\n onError: (error) => onErrorRef.current?.(error),\n })\n );\n const [revision, setRevision] = useState(0);\n const [state, setState] = useState<\n Pick<UseLockerversePublicEventsResult, \"events\" | \"loading\" | \"error\">\n >(() => ({ error: null, events: initialEvents ?? null, loading: true }));\n\n useEffect(() => {\n let active = true;\n client.list().then(\n (events) => {\n if (active) {\n setState({ error: null, events, loading: false });\n }\n },\n (error: LockerverseSdkError) => {\n if (active) {\n setState((current) => ({ ...current, error, loading: false }));\n }\n }\n );\n return () => {\n active = false;\n };\n }, [client, revision]);\n\n const refresh = useCallback(() => {\n setState((current) => ({ ...current, error: null, loading: true }));\n setRevision((current) => current + 1);\n }, []);\n\n return { ...state, client, refresh };\n}\n"],"mappings":"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"}
package/dist/signup.d.ts CHANGED
@@ -2,6 +2,10 @@ import { n as LockerverseTheme, t as LockerverseStyle } from "./theme.js";
2
2
  import { ComponentPropsWithoutRef } from "react";
3
3
  import { CreateLockerverseSignupOptions, LockerverseSdkError, LockerverseSignup as LockerverseSignup$1, LockerverseSignupClient, LockerverseSignupSubmissionResult } from "@lockerverse/sdk/signup";
4
4
  //#region src/use-lockerverse-signup.d.ts
5
+ type UseLockerverseSignupOptions = {
6
+ /** Initial public SDK snapshot. The hook still refreshes on mount. */
7
+ initialSignup?: LockerverseSignup$1;
8
+ };
5
9
  type UseLockerverseSignupResult = {
6
10
  client: LockerverseSignupClient;
7
11
  error: LockerverseSdkError | null;
@@ -9,7 +13,7 @@ type UseLockerverseSignupResult = {
9
13
  refresh: () => void;
10
14
  signup: LockerverseSignup$1 | null;
11
15
  };
12
- declare function useLockerverseSignup(options: CreateLockerverseSignupOptions): UseLockerverseSignupResult;
16
+ declare function useLockerverseSignup(options: CreateLockerverseSignupOptions, { initialSignup }?: UseLockerverseSignupOptions): UseLockerverseSignupResult;
13
17
  //#endregion
14
18
  //#region src/signup-types.d.ts
15
19
  type LockerverseSignupTheme = LockerverseTheme;
@@ -46,5 +50,5 @@ type LockerverseSignupProps = LockerverseSignupViewProps & {
46
50
  //#region src/lockerverse-signup.d.ts
47
51
  declare function LockerverseSignup({ widget, ...viewProps }: LockerverseSignupProps): import("react").JSX.Element;
48
52
  //#endregion
49
- export { LockerverseSignup, type LockerverseSignupBranding, type LockerverseSignupProps, type LockerverseSignupStyle, type LockerverseSignupTheme, type LockerverseStyle, type LockerverseTheme, type UseLockerverseSignupResult, useLockerverseSignup };
53
+ export { LockerverseSignup, type LockerverseSignupBranding, type LockerverseSignupProps, type LockerverseSignupStyle, type LockerverseSignupTheme, type LockerverseStyle, type LockerverseTheme, type UseLockerverseSignupOptions, type UseLockerverseSignupResult, useLockerverseSignup };
50
54
  //# sourceMappingURL=signup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signup.d.ts","names":[],"sources":["../src/use-lockerverse-signup.ts","../src/signup-types.ts","../src/lockerverse-signup.tsx"],"mappings":";;;;KAeY;EACV,QAAQ;EACR,OAAO;EACP;EACA;EACA,QAAQ;;iBAGM,qBACd,SAAS,iCACR;;;KCpBS,yBAAyB;KAEzB;EACV;EACA;EACA;;KAGU,yBAAyB;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAGG,6BAA6B,KAChC;EAGA,WAAW;EACX;EACA,oBAAoB,YAAY;EAChC,QAAQ;EACR,QAAQ;;KAGE,yBAAyB;EACnC,QAAQ;;;;iBCgbM,oBACd,WACG,aACF,yCAAsB,IAAA"}
1
+ {"version":3,"file":"signup.d.ts","names":[],"sources":["../src/use-lockerverse-signup.ts","../src/signup-types.ts","../src/lockerverse-signup.tsx"],"mappings":";;;;KAgBY;;EAEV,gBAAgB;;KAGN;EACV,QAAQ;EACR,OAAO;EACP;EACA;EACA,QAAQ;;iBAGM,qBACd,SAAS,kCACP,kBAAiB,8BAClB;;;KC3BS,yBAAyB;KAEzB;EACV;EACA;EACA;;KAGU,yBAAyB;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAGG,6BAA6B,KAChC;EAGA,WAAW;EACX;EACA,oBAAoB,YAAY;EAChC,QAAQ;EACR,QAAQ;;KAGE,yBAAyB;EACnC,QAAQ;;;;iBC8cM,oBACd,WACG,aACF,yCAAsB,IAAA"}
package/dist/signup.js CHANGED
@@ -1,2 +1,2 @@
1
- import{t as e}from"./immutable-resource-identity.js";import{a as t,c as n,f as r,l as i,m as a,n as o,p as s,r as c,s as l,t as u,u as d}from"./host-callback.js";import{n as f,t as p}from"./accent-contrast.js";import{a as m,i as h,n as g,r as _,t as v}from"./form-skeleton.js";import{useCallback as y,useEffect as b,useId as x,useRef as S,useState as C}from"react";import{jsx as w,jsxs as T}from"react/jsx-runtime";import{check as E,nonEmpty as D,nullable as O,object as k,pipe as A,regex as j,safeParse as M,string as N,transform as P,trim as F}from"valibot";import{createLockerverseSignupClient as I}from"@lockerverse/sdk/signup";const L=`lockerverse-signup-google-places`,R=[`premise`,`subpremise`,`street_address`,`route`];let z=null;function B(e){let t=window;if(t.google?.maps?.importLibrary)return;t.google||={};let n=t.google;n.maps||={};let r=n.maps,i=null;r.importLibrary=n=>(i||=new Promise((t,i)=>{let a=document.getElementById(L);if(r.__lockerverseSignupReady=t,a){a.addEventListener(`error`,()=>i(Error(`Unable to load Google Places.`)),{once:!0});return}let o=document.createElement(`script`),s=new URLSearchParams({callback:`google.maps.__lockerverseSignupReady`,key:e,libraries:n,v:`weekly`});o.async=!0,o.id=L,o.src=`https://maps.googleapis.com/maps/api/js?${s}`,o.onerror=()=>i(Error(`Unable to load Google Places.`)),document.head.append(o)}),i.then(()=>{let e=t.google?.maps?.importLibrary;if(!e)throw Error(`Unable to load Google Places.`);return e(n)}).catch(e=>{throw i=null,document.getElementById(L)?.remove(),e}))}function V(e){return z||=(async()=>{try{B(e);let t=window.google?.maps?.importLibrary;if(!t)throw Error(`Unable to load Google Places.`);return await t(`places`)}catch(e){throw z=null,e}})(),z}function H(e,t,n=`longText`){return e.find(e=>e.types.includes(t))?.[n]??``}function U(e,t){let n=t.addressComponents??[],r=[H(n,`street_number`),H(n,`route`)].filter(Boolean).join(` `);return{...e,city:H(n,`locality`)||H(n,`postal_town`)||H(n,`sublocality_level_1`),country:H(n,`country`,`shortText`)||`US`,line1:r||t.formattedAddress?.split(`,`)[0]||``,line2:H(n,`subpremise`),postalCode:[H(n,`postal_code`),H(n,`postal_code_suffix`)].filter(Boolean).join(`-`),state:H(n,`administrative_area_level_1`,`shortText`)}}function W({apiKey:e,errorId:t,invalid:n,onChange:r,required:i,value:a}){let o=x(),s=`${o}-suggestions`,[c,l]=C(-1),[u,d]=C(!1),[f,p]=C(!1),[m,h]=C([]),g=S(0),_=S(0),v=S(null);b(()=>()=>{g.current+=1},[]),b(()=>{let t=_.current+1;_.current=t;let n=a.line1.trim();if(l(-1),p(!1),!(e&&u&&n.length>=3)){h([]);return}let r=window.setTimeout(async()=>{if(t===_.current){p(!0);try{let{AutocompleteSessionToken:r,AutocompleteSuggestion:i}=await V(e);v.current??=new r;let a=await i.fetchAutocompleteSuggestions({includedPrimaryTypes:R,includedRegionCodes:[`US`],input:n,region:`US`,sessionToken:v.current});t===_.current&&h(a.suggestions.flatMap(({placePrediction:e})=>e?[{id:e.placeId,label:e.mainText?.text??e.text.text,prediction:e,secondaryLabel:e.secondaryText?.text??``}]:[]))}catch{t===_.current&&h([])}finally{t===_.current&&p(!1)}}},250);return()=>{window.clearTimeout(r)}},[e,u,a.line1]);let y=e=>{g.current+=1,r({...a,...e})},E=async e=>{let t=g.current+1;g.current=t;let n=e.prediction.toPlace();try{if(await n.fetchFields({fields:[`addressComponents`,`formattedAddress`]}),t!==g.current)return;r(U(a,n)),v.current=null,h([]),l(-1),d(!1)}catch{if(t!==g.current)return;h([]),l(-1)}};return T(`fieldset`,{"aria-describedby":n?t:void 0,"aria-invalid":n?`true`:void 0,className:`lockerverse-signup__address`,children:[w(`legend`,{children:`Address`}),T(`label`,{htmlFor:`${o}-line1`,children:[w(`span`,{children:`Street address`}),T(`div`,{className:`lockerverse-signup__address-search`,children:[w(`input`,{"aria-activedescendant":c>=0?`${o}-suggestion-${c}`:void 0,"aria-autocomplete":`list`,"aria-controls":s,"aria-describedby":n?t:void 0,"aria-expanded":u&&m.length>0,"aria-invalid":n?`true`:void 0,autoComplete:`street-address`,id:`${o}-line1`,name:`address.line1`,onBlur:()=>window.setTimeout(()=>d(!1),120),onChange:e=>y({line1:e.currentTarget.value}),onFocus:()=>d(!0),onKeyDown:e=>{if(e.key===`Escape`){e.preventDefault(),h([]),l(-1);return}if(m.length===0)return;if(e.key===`ArrowDown`){e.preventDefault(),l(e=>e<m.length-1?e+1:0);return}if(e.key===`ArrowUp`){e.preventDefault(),l(e=>e>0?e-1:m.length-1);return}let t=m[c];e.key===`Enter`&&t&&(e.preventDefault(),E(t).catch(()=>void 0))},required:i,role:`combobox`,value:a.line1}),f?w(`span`,{className:`lockerverse-signup__address-loading`,children:`Searching…`}):null,m.length>0?w(`div`,{className:`lockerverse-signup__address-suggestions`,id:s,role:`listbox`,children:m.map((e,t)=>T(`button`,{"aria-selected":c===t,id:`${o}-suggestion-${t}`,onMouseDown:t=>{t.preventDefault(),E(e).catch(()=>void 0)},role:`option`,type:`button`,children:[w(`strong`,{children:e.label}),e.secondaryLabel?w(`span`,{children:e.secondaryLabel}):null]},e.id))}):null]})]}),T(`label`,{htmlFor:`${o}-line2`,children:[w(`span`,{children:`Apartment, suite, or unit`}),w(`input`,{autoComplete:`address-line2`,id:`${o}-line2`,onChange:e=>y({line2:e.currentTarget.value}),placeholder:`Optional`,value:a.line2??``})]}),T(`div`,{className:`lockerverse-signup__address-row`,children:[T(`label`,{htmlFor:`${o}-city`,children:[w(`span`,{children:`City`}),w(`input`,{autoComplete:`address-level2`,id:`${o}-city`,onChange:e=>y({city:e.currentTarget.value}),required:i,value:a.city})]}),T(`label`,{htmlFor:`${o}-state`,children:[w(`span`,{children:`State`}),w(`input`,{autoComplete:`address-level1`,id:`${o}-state`,onChange:e=>y({state:e.currentTarget.value}),required:i,value:a.state})]})]}),T(`div`,{className:`lockerverse-signup__address-row`,children:[T(`label`,{htmlFor:`${o}-postal`,children:[w(`span`,{children:`Postal code`}),w(`input`,{autoComplete:`postal-code`,id:`${o}-postal`,onChange:e=>y({postalCode:e.currentTarget.value}),required:i,value:a.postalCode})]}),T(`label`,{htmlFor:`${o}-country`,children:[w(`span`,{children:`Country`}),w(`input`,{autoComplete:`country`,id:`${o}-country`,maxLength:2,onChange:e=>y({country:e.currentTarget.value.toUpperCase()}),required:i,value:a.country})]})]})]})}const G=/^[1-9]\d*$/,K=/^(?:$|[1-9]\d*)$/,q=A(N(),F(),D(`Name is required.`)),ee=A(N(),F(),j(K,`Guest count must be a positive whole number.`),P(e=>e?Number(e):null),E(e=>e===null||Number.isSafeInteger(e),`Guest count must be a positive whole number.`)),te=A(N(),F(),D(`Guest count is required.`),j(G,`Guest count must be a positive whole number.`),P(Number),E(e=>Number.isSafeInteger(e),`Guest count must be a positive whole number.`)),J=k({city:N(),country:N(),line1:N(),line2:O(N()),postalCode:N(),state:N()}),ne=A(J,E(X,`Complete the address.`)),re={city:``,country:`US`,line1:``,line2:null,postalCode:``,state:``},ie=A(J,E(e=>Y(e)||X(e),`Complete the address or leave it blank.`));function Y(e){return![e.city,e.line1,e.line2,e.postalCode,e.state].some(e=>e?.trim())}function X(e){return[e.city,e.country,e.line1,e.postalCode,e.state].every(e=>e.trim())}function ae(e,t){let r={...t,address:e.fields.address.enabled?t.address:re,email:e.fields.email.enabled?t.email:``,participantCount:e.fields.participantCount.enabled?t.participantCount:``,phone:e.fields.phone.enabled?t.phone:``},a=k({address:e.fields.address.enabled&&e.fields.address.required?ne:ie,email:e.fields.email.enabled&&e.fields.email.required?i:l,name:q,participantCount:e.fields.participantCount.enabled&&e.fields.participantCount.required?te:ee,phone:e.fields.phone.enabled&&e.fields.phone.required?d:n}),o=M(a,r),s=m(e.customFields,t.customFields);if(!o.success)for(let e of o.issues){let t=e.path?.[0]?.key,n=[`address`,`email`,`name`,`participantCount`,`phone`].find(e=>e===t);n&&!s[n]&&(s[n]=e.message)}return o.success?{errors:s,value:{...t,...o.output}}:{errors:s,value:null}}const oe={city:``,country:`US`,line1:``,line2:``,postalCode:``,state:``};function se(e){return{address:oe,customFields:h(e.customFields),email:``,honeypot:``,name:``,participantCount:``,phone:``,phoneCountry:`US`}}function Z(e,t){let n=e.elements.namedItem(t);if(n instanceof HTMLElement)return!n.matches(`:disabled`)&&(n.focus(),!0);if(n instanceof RadioNodeList){let e=Array.from(n).find(e=>e instanceof HTMLElement&&!e.matches(`:disabled`));return e?.focus(),!!e}return!1}function ce(e,t){let n=[[`name`,`name`],[`email`,`email`],[`phone`,`phone`],[`participantCount`,`participantCount`],[`address`,`address.line1`]];for(let[r,i]of n)if(t[r]&&Z(e,i))return;let r=new Set(n.map(([e])=>e)),i=Object.keys(t).find(e=>!r.has(e));i&&Z(e,`custom:${i}`)}function Q({children:e,loading:t=!1,status:n=!1,viewProps:r}){let{branding:i,className:a,googlePlacesApiKey:o,onSignupComplete:s,style:c,theme:l=`dark`,...u}=r,d=f(c?.[`--lockerverse-accent`]??c?.[`--lockerverse-signup-accent`]??i?.accentColor??`#5751f2`),m={...c};if((c?.[`--lockerverse-accent`]!==void 0||c?.[`--lockerverse-signup-accent`]!==void 0||i?.accentColor)&&(m[`--lockerverse-accent`]=d),c?.[`--lockerverse-accent-contrast`]===void 0&&c?.[`--lockerverse-signup-accent-contrast`]===void 0){let e=p(d);e&&(m[`--lockerverse-accent-contrast`]=e)}return w(`section`,{...u,...t?{"aria-busy":!0}:{},className:[`lockerverse-signup`,n?`lockerverse-signup__status`:null,a].filter(Boolean).join(` `),"data-lockerverse-theme":l,style:m,children:e})}function le({client:e,signup:n,...i}){let{branding:l,googlePlacesApiKey:d,onSignupComplete:f}=i,p=x(),m=S(!0),h=S(null),v=S(!1),[y,E]=C({phase:`idle`}),[D,O]=C(()=>se(n)),[k,A]=C({}),[j,M]=C();if(b(()=>(m.current=!0,()=>{m.current=!1}),[]),b(()=>{y.phase!==`submitting`&&k.phone&&h.current?.focus()},[k.phone,y.phase]),!n.isActive)return T(Q,{status:!0,viewProps:i,children:[w(`h1`,{children:`Signup closed`}),w(`p`,{children:`This signup is not accepting submissions.`})]});if(y.phase===`submitted`)return T(Q,{status:!0,viewProps:i,children:[l?w($,{branding:l}):null,w(`span`,{"aria-hidden":`true`,className:`lockerverse-signup__success`,children:`✓`}),w(`h1`,{children:`Thank you`}),w(`p`,{children:`Your signup has been received.`})]});let N=e=>O(t=>({...t,...e})),P=y.phase===`submitting`,F=y.phase===`submit_error`?y.error.message:void 0;return T(Q,{viewProps:i,children:[n.coverImageUrl?w(`img`,{alt:``,className:`lockerverse-signup__cover`,height:192,src:n.coverImageUrl,width:440}):null,l?w($,{branding:l}):null,T(`header`,{children:[n.title?.trim()?w(`h1`,{children:n.title}):null,n.description?w(`p`,{children:n.description}):null]}),T(`form`,{noValidate:!0,onSubmit:async r=>{if(r.preventDefault(),v.current)return;let i=ae(n,{...D,phone:n.fields.phone.enabled?c(D.phone,D.phoneCountry):``});if(A(i.errors),Object.keys(i.errors).length>0||!i.value){let e=r.currentTarget;queueMicrotask(()=>ce(e,i.errors));return}let a=i.value,o={address:n.fields.address.enabled&&!Y(a.address)?a.address:null,answers:_(n.customFields,a.customFields),email:n.fields.email.enabled&&a.email||null,honeypot:a.honeypot,name:a.name,participantCount:n.fields.participantCount.enabled?a.participantCount:null,phone:n.fields.phone.enabled&&a.phone||null},s=JSON.stringify(o),l=j?.payloadKey===s?j.reference:globalThis.crypto.randomUUID(),d;v.current=!0,E({phase:`submitting`});try{d=await e.submit(o,{submissionReference:l})}catch(e){if(!m.current)return;let n=e,r=t(n.serverCode);if(r){A(e=>({...e,phone:r})),E({phase:`idle`}),M(void 0);return}E({error:n,phase:`submit_error`}),n.recoveryRecommended?M({payloadKey:s,reference:l}):M(void 0);return}finally{v.current=!1}m.current&&(M(void 0),E({phase:`submitted`}),u(f,d))},children:[w(`input`,{"aria-hidden":`true`,autoComplete:`off`,className:`lockerverse-signup__honeypot`,onChange:e=>N({honeypot:e.currentTarget.value}),tabIndex:-1,value:D.honeypot}),T(`div`,{className:`lockerverse-signup__fields`,children:[T(`label`,{htmlFor:`${p}-name`,children:[w(`span`,{children:`Name`}),w(`input`,{"aria-describedby":k.name?`${p}-name-error`:void 0,"aria-invalid":k.name?`true`:void 0,autoComplete:`name`,id:`${p}-name`,name:`name`,onChange:e=>N({name:e.currentTarget.value}),required:!0,value:D.name}),w(s,{error:k.name,id:`${p}-name-error`})]}),n.fields.email.enabled?w(r,{error:k.email,id:`${p}-email`,label:`Email`,name:`email`,onChange:e=>N({email:e.currentTarget.value}),required:n.fields.email.required,value:D.email}):null,n.fields.phone.enabled?w(a,{error:k.phone,id:`${p}-phone`,label:`Phone`,children:w(o,{country:D.phoneCountry,error:k.phone,errorId:`${p}-phone-error`,id:`${p}-phone`,inputRef:h,name:`phone`,onChange:({value:e,country:t})=>N({phone:e,phoneCountry:t}),required:n.fields.phone.required,value:D.phone})}):null,n.fields.participantCount.enabled?T(`label`,{htmlFor:`${p}-participant-count`,children:[w(`span`,{children:`Guest count`}),w(`input`,{"aria-describedby":k.participantCount?`${p}-participant-count-error`:void 0,"aria-invalid":k.participantCount?`true`:void 0,id:`${p}-participant-count`,min:1,name:`participantCount`,onChange:e=>N({participantCount:e.currentTarget.value}),required:n.fields.participantCount.required,type:`number`,value:D.participantCount}),w(s,{error:k.participantCount,id:`${p}-participant-count-error`})]}):null,n.fields.address.enabled?T(`div`,{className:`lockerverse-signup__field-group`,children:[w(W,{apiKey:d,errorId:k.address?`${p}-address-error`:void 0,invalid:!!k.address,onChange:e=>N({address:e}),required:n.fields.address.required,value:D.address}),w(s,{error:k.address,id:`${p}-address-error`})]}):null,w(g,{choiceClassName:`lockerverse-signup__choice`,errorClassName:`lockerverse-signup__field-error`,errors:k,fields:n.customFields,idPrefix:p,onChange:e=>N({customFields:e}),values:D.customFields})]}),F?T(`p`,{className:`lockerverse-signup__submit-error`,role:`alert`,children:[F,` Try again.`]}):null,w(`button`,{className:`lockerverse-signup__submit`,disabled:P,type:`submit`,children:P?`Submitting…`:`Submit`})]})]})}function ue({widget:e,...t}){return e.error?T(Q,{status:!0,viewProps:t,children:[w(`h1`,{children:`Signup unavailable`}),w(`p`,{role:`alert`,children:e.error.message}),w(`button`,{onClick:e.refresh,type:`button`,children:`Retry`})]}):e.loading||!e.signup?w(Q,{loading:!0,viewProps:t,children:w(v,{fieldCount:4,label:`Loading signup…`})}):w(le,{client:e.client,signup:e.signup,...t})}function $({branding:e}){return T(`div`,{className:`lockerverse-signup__branding`,children:[e.imageUrl?w(`img`,{alt:``,height:48,src:e.imageUrl,width:48}):null,w(`strong`,{children:e.name})]})}function de(t){let{onError:n}=t;e(`signup`,{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,slug:t.signupSlug});let r=S(n);r.current=n;let[i]=C(()=>{let e={...t,onError:e=>r.current?.(e)};return I(e)}),[a,o]=C(0),[s,c]=C({error:null,signup:null});b(()=>{let e=!0;return i.load().then(t=>{e&&c({error:null,signup:t})},t=>{e&&c({error:t,signup:null})}),()=>{e=!1}},[i,a]);let l=y(()=>{c({error:null,signup:null}),o(e=>e+1)},[]);return{client:i,error:s.error,loading:s.signup===null&&s.error===null,refresh:l,signup:s.signup}}export{ue as LockerverseSignup,de as useLockerverseSignup};
1
+ import{t as e}from"./immutable-resource-identity.js";import{a as t,c as n,f as r,l as i,m as a,n as o,p as s,r as c,s as l,t as u,u as d}from"./host-callback.js";import{n as f,t as p}from"./accent-contrast.js";import{a as m,i as h,n as g,o as _,r as v,t as y}from"./form-skeleton.js";import{useCallback as b,useEffect as x,useId as S,useRef as C,useState as w}from"react";import{jsx as T,jsxs as E}from"react/jsx-runtime";import{check as D,nonEmpty as O,nullable as k,object as A,pipe as j,regex as M,safeParse as N,string as P,transform as F,trim as I}from"valibot";import{createLockerverseSignupClient as L}from"@lockerverse/sdk/signup";const R=`lockerverse-signup-google-places`,z=[`premise`,`subpremise`,`street_address`,`route`];let B=null;function ee(e){let t=window;if(t.google?.maps?.importLibrary)return;t.google||={};let n=t.google;n.maps||={};let r=n.maps,i=null;r.importLibrary=n=>(i||=new Promise((t,i)=>{let a=document.getElementById(R);if(r.__lockerverseSignupReady=t,a){a.addEventListener(`error`,()=>i(Error(`Unable to load Google Places.`)),{once:!0});return}let o=document.createElement(`script`),s=new URLSearchParams({callback:`google.maps.__lockerverseSignupReady`,key:e,libraries:n,v:`weekly`});o.async=!0,o.id=R,o.src=`https://maps.googleapis.com/maps/api/js?${s}`,o.onerror=()=>i(Error(`Unable to load Google Places.`)),document.head.append(o)}),i.then(()=>{let e=t.google?.maps?.importLibrary;if(!e)throw Error(`Unable to load Google Places.`);return e(n)}).catch(e=>{throw i=null,document.getElementById(R)?.remove(),e}))}function V(e){return B||=(async()=>{try{ee(e);let t=window.google?.maps?.importLibrary;if(!t)throw Error(`Unable to load Google Places.`);return await t(`places`)}catch(e){throw B=null,e}})(),B}function H(e,t,n=`longText`){return e.find(e=>e.types.includes(t))?.[n]??``}function te(e,t){let n=t.addressComponents??[],r=[H(n,`street_number`),H(n,`route`)].filter(Boolean).join(` `);return{...e,city:H(n,`locality`)||H(n,`postal_town`)||H(n,`sublocality_level_1`),country:H(n,`country`,`shortText`)||`US`,line1:r||t.formattedAddress?.split(`,`)[0]||``,line2:H(n,`subpremise`),postalCode:[H(n,`postal_code`),H(n,`postal_code_suffix`)].filter(Boolean).join(`-`),state:H(n,`administrative_area_level_1`,`shortText`)}}function ne({apiKey:e,errorId:t,invalid:n,onChange:r,required:i,value:a}){let o=S(),s=`${o}-suggestions`,[c,l]=w(-1),[u,d]=w(!1),[f,p]=w(!1),[m,h]=w([]),g=C(0),_=C(0),v=C(null);x(()=>()=>{g.current+=1},[]),x(()=>{let t=_.current+1;_.current=t;let n=a.line1.trim();if(l(-1),p(!1),!(e&&u&&n.length>=3)){h([]);return}let r=window.setTimeout(async()=>{if(t===_.current){p(!0);try{let{AutocompleteSessionToken:r,AutocompleteSuggestion:i}=await V(e);v.current??=new r;let a=await i.fetchAutocompleteSuggestions({includedPrimaryTypes:z,includedRegionCodes:[`US`],input:n,region:`US`,sessionToken:v.current});t===_.current&&h(a.suggestions.flatMap(({placePrediction:e})=>e?[{id:e.placeId,label:e.mainText?.text??e.text.text,prediction:e,secondaryLabel:e.secondaryText?.text??``}]:[]))}catch{t===_.current&&h([])}finally{t===_.current&&p(!1)}}},250);return()=>{window.clearTimeout(r)}},[e,u,a.line1]);let y=e=>{g.current+=1,r({...a,...e})},b=async e=>{let t=g.current+1;g.current=t;let n=e.prediction.toPlace();try{if(await n.fetchFields({fields:[`addressComponents`,`formattedAddress`]}),t!==g.current)return;r(te(a,n)),v.current=null,h([]),l(-1),d(!1)}catch{if(t!==g.current)return;h([]),l(-1)}},D=e=>{if(e.key===`Escape`){e.preventDefault(),h([]),l(-1);return}if(m.length===0)return;if(e.key===`ArrowDown`){e.preventDefault(),l(e=>e<m.length-1?e+1:0);return}if(e.key===`ArrowUp`){e.preventDefault(),l(e=>e>0?e-1:m.length-1);return}let t=m[c];e.key===`Enter`&&t&&(e.preventDefault(),b(t).catch(()=>void 0))},O=e=>{e.currentTarget.closest(`.lockerverse-signup__address-search`)?.contains(e.relatedTarget)||window.setTimeout(()=>d(!1),120)};return E(`fieldset`,{"aria-describedby":n?t:void 0,"aria-invalid":n?`true`:void 0,className:`lockerverse-signup__address`,children:[T(`legend`,{children:`Address`}),E(`label`,{htmlFor:`${o}-line1`,children:[T(`span`,{children:`Street address`}),E(`div`,{className:`lockerverse-signup__address-search`,children:[T(`input`,{"aria-activedescendant":c>=0?`${o}-suggestion-${c}`:void 0,"aria-autocomplete":`list`,"aria-controls":s,"aria-describedby":n?t:void 0,"aria-expanded":u&&m.length>0,"aria-invalid":n?`true`:void 0,autoComplete:`street-address`,id:`${o}-line1`,name:`address.line1`,onBlur:O,onChange:e=>y({line1:e.currentTarget.value}),onFocus:()=>d(!0),onKeyDown:D,required:i,role:`combobox`,value:a.line1}),f?T(`span`,{className:`lockerverse-signup__address-loading`,children:`Searching…`}):null,m.length>0?T(`div`,{className:`lockerverse-signup__address-suggestions`,id:s,role:`listbox`,children:m.map((e,t)=>E(`button`,{"aria-selected":c===t,id:`${o}-suggestion-${t}`,onBlur:O,onClick:t=>{t.detail===0&&b(e).catch(()=>void 0)},onMouseDown:t=>{t.preventDefault(),b(e).catch(()=>void 0)},role:`option`,type:`button`,children:[T(`strong`,{children:e.label}),e.secondaryLabel?T(`span`,{children:e.secondaryLabel}):null]},e.id))}):null]})]}),E(`label`,{htmlFor:`${o}-line2`,children:[T(`span`,{children:`Apartment, suite, or unit`}),T(`input`,{autoComplete:`address-line2`,id:`${o}-line2`,onChange:e=>y({line2:e.currentTarget.value}),placeholder:`Optional`,value:a.line2??``})]}),E(`div`,{className:`lockerverse-signup__address-row`,children:[E(`label`,{htmlFor:`${o}-city`,children:[T(`span`,{children:`City`}),T(`input`,{autoComplete:`address-level2`,id:`${o}-city`,onChange:e=>y({city:e.currentTarget.value}),required:i,value:a.city})]}),E(`label`,{htmlFor:`${o}-state`,children:[T(`span`,{children:`State`}),T(`input`,{autoComplete:`address-level1`,id:`${o}-state`,onChange:e=>y({state:e.currentTarget.value}),required:i,value:a.state})]})]}),E(`div`,{className:`lockerverse-signup__address-row`,children:[E(`label`,{htmlFor:`${o}-postal`,children:[T(`span`,{children:`Postal code`}),T(`input`,{autoComplete:`postal-code`,id:`${o}-postal`,onChange:e=>y({postalCode:e.currentTarget.value}),required:i,value:a.postalCode})]}),E(`label`,{htmlFor:`${o}-country`,children:[T(`span`,{children:`Country`}),T(`input`,{autoComplete:`country`,id:`${o}-country`,maxLength:2,onChange:e=>y({country:e.currentTarget.value.toUpperCase()}),required:i,value:a.country})]})]})]})}const re=/^[1-9]\d*$/,ie=/^(?:$|[1-9]\d*)$/,ae=j(P(),I(),O(`Name is required.`)),U=j(P(),I(),M(ie,`Guest count must be a positive whole number.`),F(e=>e?Number(e):null),D(e=>e===null||Number.isSafeInteger(e),`Guest count must be a positive whole number.`)),W=j(P(),I(),O(`Guest count is required.`),M(re,`Guest count must be a positive whole number.`),F(Number),D(e=>Number.isSafeInteger(e),`Guest count must be a positive whole number.`)),G=A({city:P(),country:P(),line1:P(),line2:k(P()),postalCode:P(),state:P()}),K=j(G,D(Y,`Complete the address.`)),q={city:``,country:`US`,line1:``,line2:null,postalCode:``,state:``},oe=j(G,D(e=>J(e)||Y(e),`Complete the address or leave it blank.`));function J(e){return![e.city,e.line1,e.line2,e.postalCode,e.state].some(e=>e?.trim())}function Y(e){return[e.city,e.country,e.line1,e.postalCode,e.state].every(e=>e.trim())}function se(e,t){let r={...t,address:e.fields.address.enabled?t.address:q,customFields:m(e.customFields,t.customFields),email:e.fields.email.enabled?t.email:``,participantCount:e.fields.participantCount.enabled?t.participantCount:``,phone:e.fields.phone.enabled?t.phone:``},a=A({address:e.fields.address.enabled&&e.fields.address.required?K:oe,email:e.fields.email.enabled&&e.fields.email.required?i:l,name:ae,participantCount:e.fields.participantCount.enabled&&e.fields.participantCount.required?W:U,phone:e.fields.phone.enabled&&e.fields.phone.required?d:n}),o=N(a,r),s=_(e.customFields,r.customFields);if(!o.success)for(let e of o.issues){let t=e.path?.[0]?.key,n=[`address`,`email`,`name`,`participantCount`,`phone`].find(e=>e===t);n&&!s[n]&&(s[n]=e.message)}return o.success?{errors:s,value:{...r,...o.output}}:{errors:s,value:null}}const ce={city:``,country:`US`,line1:``,line2:``,postalCode:``,state:``};function le(e){return{address:ce,customFields:h(e.customFields),email:``,honeypot:``,name:``,participantCount:``,phone:``,phoneCountry:`US`}}function X(e,t){let n=e.elements.namedItem(t);if(n instanceof HTMLElement)return!n.matches(`:disabled`)&&(n.focus(),!0);if(n instanceof RadioNodeList){let e=Array.from(n).find(e=>e instanceof HTMLElement&&!e.matches(`:disabled`));return e?.focus(),!!e}return!1}function Z(e,t){let n=[[`name`,`name`],[`email`,`email`],[`phone`,`phone`],[`participantCount`,`participantCount`],[`address`,`address.line1`]];for(let[r,i]of n)if(t[r]&&X(e,i))return;let r=new Set(n.map(([e])=>e)),i=Object.keys(t).find(e=>!r.has(e));i&&X(e,`custom:${i}`)}function Q({children:e,loading:t=!1,status:n=!1,viewProps:r}){let{branding:i,className:a,googlePlacesApiKey:o,onSignupComplete:s,style:c,theme:l=`dark`,...u}=r,d=f(c?.[`--lockerverse-accent`]??c?.[`--lockerverse-signup-accent`]??i?.accentColor??`#5751f2`),m={...c};if((c?.[`--lockerverse-accent`]!==void 0||c?.[`--lockerverse-signup-accent`]!==void 0||i?.accentColor)&&(m[`--lockerverse-accent`]=d),c?.[`--lockerverse-accent-contrast`]===void 0&&c?.[`--lockerverse-signup-accent-contrast`]===void 0){let e=p(d);e&&(m[`--lockerverse-accent-contrast`]=e)}return T(`section`,{...u,...t?{"aria-busy":!0}:{},className:[`lockerverse-signup`,n?`lockerverse-signup__status`:null,a].filter(Boolean).join(` `),"data-lockerverse-theme":l,style:m,children:e})}function ue({client:e,loadError:n,onRetry:i,signup:l,...d}){let{branding:f,googlePlacesApiKey:p,onSignupComplete:h}=d,_=S(),y=C(!0),b=C(null),D=C(!1),[O,k]=w({phase:`idle`}),[A,j]=w(()=>le(l)),[M,N]=w({}),[P,F]=w(),I=m(l.customFields,A.customFields);if(x(()=>{I!==A.customFields&&j(e=>({...e,customFields:m(l.customFields,e.customFields)}))},[I,l.customFields,A.customFields]),x(()=>(y.current=!0,()=>{y.current=!1}),[]),x(()=>{O.phase!==`submitting`&&M.phone&&b.current?.focus()},[M.phone,O.phase]),!l.isActive)return E(Q,{status:!0,viewProps:d,children:[T(`h1`,{children:`Signup closed`}),T(`p`,{children:`This signup is not accepting submissions.`})]});if(O.phase===`submitted`)return E(Q,{status:!0,viewProps:d,children:[f?T($,{branding:f}):null,T(`span`,{"aria-hidden":`true`,className:`lockerverse-signup__success`,children:`✓`}),T(`h1`,{children:`Thank you`}),T(`p`,{children:`Your signup has been received.`})]});let L=e=>j(t=>({...t,...e})),R=O.phase===`submitting`,z=O.phase===`submit_error`?O.error.message:void 0;return E(Q,{viewProps:d,children:[l.coverImageUrl?T(`img`,{alt:``,className:`lockerverse-signup__cover`,height:192,src:l.coverImageUrl,width:440}):null,f?T($,{branding:f}):null,E(`header`,{children:[l.title?.trim()?T(`h1`,{children:l.title}):null,l.description?T(`p`,{children:l.description}):null]}),n?E(`div`,{role:`alert`,children:[T(`p`,{children:n.message}),T(`button`,{onClick:i,type:`button`,children:`Retry`})]}):null,E(`form`,{noValidate:!0,onSubmit:async n=>{if(n.preventDefault(),D.current)return;let r=se(l,{...A,customFields:I,phone:l.fields.phone.enabled?c(A.phone,A.phoneCountry):``});if(N(r.errors),Object.keys(r.errors).length>0||!r.value){let e=n.currentTarget;queueMicrotask(()=>Z(e,r.errors));return}let i=r.value,a={address:l.fields.address.enabled&&!J(i.address)?i.address:null,answers:v(l.customFields,i.customFields),email:l.fields.email.enabled&&i.email||null,honeypot:i.honeypot,name:i.name,participantCount:l.fields.participantCount.enabled?i.participantCount:null,phone:l.fields.phone.enabled&&i.phone||null},o=JSON.stringify(a),s=P?.payloadKey===o?P.reference:globalThis.crypto.randomUUID(),d;D.current=!0,k({phase:`submitting`});try{d=await e.submit(a,{submissionReference:s})}catch(e){if(!y.current)return;let n=e,r=t(n.serverCode);if(r){N(e=>({...e,phone:r})),k({phase:`idle`}),F(void 0);return}k({error:n,phase:`submit_error`}),n.recoveryRecommended?F({payloadKey:o,reference:s}):F(void 0);return}finally{D.current=!1}y.current&&(F(void 0),k({phase:`submitted`}),u(h,d))},children:[T(`input`,{"aria-hidden":`true`,autoComplete:`off`,className:`lockerverse-signup__honeypot`,onChange:e=>L({honeypot:e.currentTarget.value}),tabIndex:-1,value:A.honeypot}),E(`div`,{className:`lockerverse-signup__fields`,children:[E(`label`,{htmlFor:`${_}-name`,children:[T(`span`,{children:`Name`}),T(`input`,{"aria-describedby":M.name?`${_}-name-error`:void 0,"aria-invalid":M.name?`true`:void 0,autoComplete:`name`,id:`${_}-name`,name:`name`,onChange:e=>L({name:e.currentTarget.value}),required:!0,value:A.name}),T(s,{error:M.name,id:`${_}-name-error`})]}),l.fields.email.enabled?T(r,{error:M.email,id:`${_}-email`,label:`Email`,name:`email`,onChange:e=>L({email:e.currentTarget.value}),required:l.fields.email.required,value:A.email}):null,l.fields.phone.enabled?T(a,{error:M.phone,id:`${_}-phone`,label:`Phone`,children:T(o,{country:A.phoneCountry,error:M.phone,errorId:`${_}-phone-error`,id:`${_}-phone`,inputRef:b,name:`phone`,onChange:({value:e,country:t})=>L({phone:e,phoneCountry:t}),required:l.fields.phone.required,value:A.phone})}):null,l.fields.participantCount.enabled?E(`label`,{htmlFor:`${_}-participant-count`,children:[T(`span`,{children:`Guest count`}),T(`input`,{"aria-describedby":M.participantCount?`${_}-participant-count-error`:void 0,"aria-invalid":M.participantCount?`true`:void 0,id:`${_}-participant-count`,min:1,name:`participantCount`,onChange:e=>L({participantCount:e.currentTarget.value}),required:l.fields.participantCount.required,type:`number`,value:A.participantCount}),T(s,{error:M.participantCount,id:`${_}-participant-count-error`})]}):null,l.fields.address.enabled?E(`div`,{className:`lockerverse-signup__field-group`,children:[T(ne,{apiKey:p,errorId:M.address?`${_}-address-error`:void 0,invalid:!!M.address,onChange:e=>L({address:e}),required:l.fields.address.required,value:A.address}),T(s,{error:M.address,id:`${_}-address-error`})]}):null,T(g,{choiceClassName:`lockerverse-signup__choice`,errorClassName:`lockerverse-signup__field-error`,errors:M,fields:l.customFields,idPrefix:_,onChange:e=>L({customFields:e}),values:I})]}),z?E(`p`,{className:`lockerverse-signup__submit-error`,role:`alert`,children:[z,` Try again.`]}):null,T(`button`,{className:`lockerverse-signup__submit`,disabled:R,type:`submit`,children:R?`Submitting…`:`Submit`})]})]})}function de({widget:e,...t}){return e.error&&!e.signup?E(Q,{status:!0,viewProps:t,children:[T(`h1`,{children:`Signup unavailable`}),T(`p`,{role:`alert`,children:e.error.message}),T(`button`,{onClick:e.refresh,type:`button`,children:`Retry`})]}):e.signup?T(ue,{client:e.client,loadError:e.error,onRetry:e.refresh,signup:e.signup,...t}):T(Q,{loading:!0,viewProps:t,children:T(y,{fieldCount:4,label:`Loading signup…`})})}function $({branding:e}){return E(`div`,{className:`lockerverse-signup__branding`,children:[e.imageUrl?T(`img`,{alt:``,height:48,src:e.imageUrl,width:48}):null,T(`strong`,{children:e.name})]})}function fe(t,{initialSignup:n}={}){let{onError:r}=t;e(`signup`,{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,slug:t.signupSlug});let i=C(r);i.current=r;let[a]=w(()=>{let e={...t,onError:e=>i.current?.(e)};return L(e)}),[o,s]=w(0),[c,l]=w(()=>({error:null,loading:!0,signup:n??null}));x(()=>{let e=!0;return a.load().then(t=>{e&&l({error:null,loading:!1,signup:t})},t=>{e&&l(e=>({...e,error:t,loading:!1}))}),()=>{e=!1}},[a,o]);let u=b(()=>{l(e=>({...e,error:null,loading:!0})),s(e=>e+1)},[]);return{client:a,error:c.error,loading:c.loading,refresh:u,signup:c.signup}}export{de as LockerverseSignup,fe as useLockerverseSignup};
2
2
  //# sourceMappingURL=signup.js.map