@lockerverse/react 0.2.106-dev.1 → 0.2.109-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.
package/README.md CHANGED
@@ -261,7 +261,7 @@ Auction checkout, payment, and signup use common email, phone, field-error, and
261
261
 
262
262
  Payment and auction Stripe forms resolve the rendered SDK font and theme tokens before passing them to Stripe. Custom font files are not loaded into Stripe by a font family name alone. See [the shared form foundation](https://github.com/Lockerverse/lockerverse-sdk/blob/main/docs/shared-form-foundation.md) for module boundaries and bundle measurement.
263
263
 
264
- Use `theme="dark"` or `theme="light"`. Lockerverse applies the community branding returned by the widget API. Pass the same `LockerverseStyle` object to payment, signup, and donate launcher components.
264
+ Use `theme="dark"` or `theme="light"` to match the host background. The outer payment, signup, auction, and Events widgets are transparent, so the host controls their canvas. Lockerverse applies the community branding returned by the widget API. Pass the same `LockerverseStyle` object to payment, signup, and donate launcher components.
265
265
 
266
266
  ```tsx
267
267
  import type { LockerverseStyle } from "@lockerverse/react";
@@ -458,8 +458,8 @@ Built-in styled UI is the default for Lovable. There is no automatic headless sw
458
458
 
459
459
  ## Public event listings
460
460
 
461
- Use the public Events entry to show future, publicly listed Events. It does not
462
- load ticket or payment UI.
461
+ Use the public Events entry to show publicly listed Events that are happening
462
+ now or start in the future. It does not load ticket or payment UI.
463
463
 
464
464
  ```tsx
465
465
  import {
@@ -480,3 +480,8 @@ states. `title` sets the visible heading, `showHeading` can hide it, and
480
480
  `timeZone` controls date display. The default time zone is
481
481
  `America/New_York`. Use `style` with `LockerverseStyle` tokens or `className`
482
482
  to match the host site. Links open in a new tab when they use HTTP or HTTPS.
483
+ Events can include an optional `imageUrl`. The list uses image cards when an
484
+ image is present and a date tile when it is absent. It groups events into
485
+ "Happening now" and "Upcoming" and shows a share action on each card. Sharing
486
+ uses the event link when one exists; otherwise it uses a link to the event card
487
+ on the host page.
@@ -22,7 +22,7 @@
22
22
  container-type: inline-size;
23
23
  font: 14px / 1.5 var(--lockerverse-font-family);
24
24
  color: var(--lockerverse-text);
25
- background: var(--lockerverse-bg);
25
+ background: transparent;
26
26
  border-radius: 0;
27
27
  }
28
28
 
@@ -3,7 +3,7 @@
3
3
  padding: 48px 24px;
4
4
  margin-inline: auto;
5
5
  container-type: inline-size;
6
- background: var(--lockerverse-bg, #050505);
6
+ background: transparent;
7
7
  border-radius: 0;
8
8
  }
9
9
  .lockerverse-auctions__catalog-header {
@@ -10,7 +10,7 @@
10
10
  padding: 28px;
11
11
  font: 14px / 1.5 var(--lockerverse-font-family);
12
12
  color: var(--lockerverse-text);
13
- background: var(--lockerverse-bg);
13
+ background: transparent;
14
14
  }
15
15
 
16
16
  .lockerverse-public-events[data-lockerverse-theme="light"] {
@@ -29,51 +29,78 @@
29
29
 
30
30
  .lockerverse-public-events h2,
31
31
  .lockerverse-public-events h3,
32
+ .lockerverse-public-events h4,
32
33
  .lockerverse-public-events p {
33
34
  margin: 0;
34
35
  }
35
36
 
36
37
  .lockerverse-public-events h2 {
37
- margin-bottom: 24px;
38
+ margin-bottom: 28px;
38
39
  font-size: 24px;
39
40
  font-weight: 600;
40
41
  line-height: 1.2;
41
42
  text-wrap: balance;
42
43
  }
43
44
 
44
- .lockerverse-public-events h3 {
45
- font-size: 18px;
46
- font-weight: 600;
47
- line-height: 1.3;
45
+ .lockerverse-public-events h4 {
46
+ margin-top: 8px;
47
+ font-size: 20px;
48
+ font-weight: 650;
49
+ line-height: 1.25;
48
50
  overflow-wrap: anywhere;
49
51
  }
50
52
 
53
+ .lockerverse-public-events__group + .lockerverse-public-events__group {
54
+ margin-top: 32px;
55
+ }
56
+
57
+ .lockerverse-public-events .lockerverse-public-events__group-title {
58
+ margin: 0 0 14px;
59
+ font-size: 13px;
60
+ font-weight: 700;
61
+ color: var(--lockerverse-muted);
62
+ text-transform: uppercase;
63
+ letter-spacing: 0.08em;
64
+ }
65
+
51
66
  .lockerverse-public-events__list {
67
+ display: grid;
68
+ gap: 14px;
52
69
  padding: 0;
53
70
  margin: 0;
54
71
  list-style: none;
55
72
  }
56
73
 
57
74
  .lockerverse-public-events__item {
58
- border-top: 1px solid var(--lockerverse-border);
59
- }
60
-
61
- .lockerverse-public-events__item:last-child {
62
- border-bottom: 1px solid var(--lockerverse-border);
75
+ scroll-margin-top: 24px;
76
+ border: 1px solid var(--lockerverse-border);
77
+ border-radius: 12px;
63
78
  }
64
79
 
65
80
  .lockerverse-public-events__row {
66
81
  display: grid;
67
- grid-template-columns: 68px minmax(0, 1fr);
82
+ grid-template-columns: 154px minmax(0, 1fr);
68
83
  gap: 20px;
69
- padding: 20px 0;
84
+ padding: 16px;
85
+ }
86
+
87
+ .lockerverse-public-events__image {
88
+ display: block;
89
+ width: 100%;
90
+ height: 124px;
91
+ object-fit: cover;
92
+ border-radius: 7px;
70
93
  }
71
94
 
72
95
  .lockerverse-public-events__date {
73
96
  display: flex;
74
97
  flex-direction: column;
75
- align-items: flex-start;
98
+ align-items: center;
99
+ justify-content: center;
100
+ min-height: 124px;
76
101
  line-height: 1;
102
+ border: 1px solid var(--lockerverse-border);
103
+ border-radius: 7px;
77
104
  }
78
105
 
79
106
  .lockerverse-public-events__month {
@@ -85,16 +112,38 @@
85
112
  }
86
113
 
87
114
  .lockerverse-public-events__day {
88
- margin-top: 5px;
89
- font-size: 34px;
115
+ margin-top: 7px;
116
+ font-size: 38px;
90
117
  font-weight: 600;
91
118
  letter-spacing: -0.04em;
92
119
  }
93
120
 
94
121
  .lockerverse-public-events__content {
122
+ display: flex;
123
+ flex-direction: column;
124
+ align-items: flex-start;
95
125
  min-width: 0;
96
126
  }
97
127
 
128
+ .lockerverse-public-events__meta {
129
+ display: flex;
130
+ flex-wrap: wrap;
131
+ gap: 8px;
132
+ align-items: center;
133
+ font-size: 12px;
134
+ font-weight: 700;
135
+ color: var(--lockerverse-accent);
136
+ text-transform: uppercase;
137
+ letter-spacing: 0.04em;
138
+ }
139
+
140
+ .lockerverse-public-events__live {
141
+ padding: 2px 7px;
142
+ color: var(--lockerverse-bg);
143
+ background: var(--lockerverse-accent);
144
+ border-radius: 999px;
145
+ }
146
+
98
147
  .lockerverse-public-events .lockerverse-public-events__time,
99
148
  .lockerverse-public-events .lockerverse-public-events__place {
100
149
  margin-top: 5px;
@@ -102,17 +151,88 @@
102
151
  }
103
152
 
104
153
  .lockerverse-public-events .lockerverse-public-events__description {
105
- margin-top: 12px;
154
+ margin-top: 10px;
106
155
  overflow-wrap: anywhere;
107
156
  white-space: pre-line;
108
157
  }
109
158
 
110
- .lockerverse-public-events a {
111
- display: inline-block;
159
+ .lockerverse-public-events .lockerverse-public-events__description--clamped {
160
+ display: -webkit-box;
161
+ -webkit-box-orient: vertical;
162
+ overflow: hidden;
163
+ -webkit-line-clamp: 2;
164
+ }
165
+
166
+ .lockerverse-public-events .lockerverse-public-events__more {
167
+ min-height: 36px;
168
+ padding: 0;
169
+ margin: 2px 0 0;
170
+ font-size: 13px;
171
+ font-weight: 600;
172
+ color: var(--lockerverse-accent);
173
+ border: 0;
174
+ }
175
+
176
+ .lockerverse-public-events__actions {
177
+ display: flex;
178
+ flex-wrap: wrap;
179
+ gap: 10px;
180
+ align-items: center;
112
181
  margin-top: 14px;
182
+ }
183
+
184
+ .lockerverse-public-events .lockerverse-public-events__link {
185
+ display: inline-flex;
186
+ gap: 8px;
187
+ align-items: center;
188
+ min-height: 44px;
189
+ padding: 8px 14px;
190
+ margin: 0;
113
191
  font-weight: 600;
114
192
  color: var(--lockerverse-accent);
115
- text-underline-offset: 3px;
193
+ text-decoration: none;
194
+ border: 1px solid var(--lockerverse-border);
195
+ border-radius: 8px;
196
+ }
197
+
198
+ .lockerverse-public-events .lockerverse-public-events__link:hover {
199
+ border-color: var(--lockerverse-accent);
200
+ }
201
+
202
+ .lockerverse-public-events .lockerverse-public-events__share {
203
+ display: inline-flex;
204
+ gap: 8px;
205
+ align-items: center;
206
+ padding: 8px 10px;
207
+ margin: 0;
208
+ font-weight: 600;
209
+ color: var(--lockerverse-muted);
210
+ border: 1px solid transparent;
211
+ border-radius: 8px;
212
+ }
213
+
214
+ .lockerverse-public-events .lockerverse-public-events__share:hover {
215
+ color: var(--lockerverse-text);
216
+ border-color: var(--lockerverse-border);
217
+ }
218
+
219
+ .lockerverse-public-events__copy-link {
220
+ display: grid;
221
+ gap: 5px;
222
+ width: 100%;
223
+ margin-top: 12px;
224
+ font-size: 12px;
225
+ color: var(--lockerverse-muted);
226
+ }
227
+
228
+ .lockerverse-public-events__copy-link input {
229
+ width: 100%;
230
+ padding: 8px;
231
+ font: inherit;
232
+ color: var(--lockerverse-text);
233
+ background: transparent;
234
+ border: 1px solid var(--lockerverse-border);
235
+ border-radius: 6px;
116
236
  }
117
237
 
118
238
  .lockerverse-public-events a:focus-visible,
@@ -139,15 +259,29 @@
139
259
 
140
260
  @media (max-width: 500px) {
141
261
  .lockerverse-public-events {
142
- padding: 20px;
262
+ padding: 20px 8px;
143
263
  }
144
264
 
145
265
  .lockerverse-public-events__row {
146
- grid-template-columns: 52px minmax(0, 1fr);
147
- gap: 14px;
266
+ grid-template-columns: 72px minmax(0, 1fr);
267
+ gap: 12px;
268
+ padding: 12px;
269
+ }
270
+
271
+ .lockerverse-public-events__row--with-image {
272
+ grid-template-columns: minmax(0, 1fr);
273
+ }
274
+
275
+ .lockerverse-public-events__image {
276
+ height: auto;
277
+ aspect-ratio: 16 / 9;
278
+ }
279
+
280
+ .lockerverse-public-events__date {
281
+ min-height: 72px;
148
282
  }
149
283
 
150
284
  .lockerverse-public-events__day {
151
- font-size: 28px;
285
+ font-size: 30px;
152
286
  }
153
287
  }
@@ -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;;;KCjBS;EACV,QAAQ;;EAER;EACA;EACA;;EAEA;EACA,QAAQ;EACR,QAAQ;EACR;;;iBA+Fc,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;EACV,QAAQ;EACR,QAAQ;EACR;EACA,OAAO;EACP;;;iBAIc,2BACd,SAAS,uCACR;;;KCfS;EACV,QAAQ;;EAER;EACA;EACA;;EAEA;EACA,QAAQ;EACR,QAAQ;EACR;;;iBA4Mc,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{useCallback as t,useEffect as n,useRef as r,useState as i}from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{createLockerversePublicEventsClient as s}from"@lockerverse/sdk/public-events";function c(e,t){return new Intl.DateTimeFormat(`en-US`,{day:`numeric`,month:`short`,timeZone:t,year:`numeric`}).format(new Date(e))}function l(e,t){return new Intl.DateTimeFormat(`en-US`,{hour:`numeric`,minute:`2-digit`,timeZone:t,timeZoneName:`short`}).format(new Date(e))}function u(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 d({item:e,timeZone:t}){let n=new Date(e.startAt),r=new Intl.DateTimeFormat(`en-US`,{month:`short`,timeZone:t}).format(n),i=new Intl.DateTimeFormat(`en-US`,{day:`numeric`,timeZone:t}).format(n),s=c(e.startAt,t)===c(e.endAt,t)?l(e.endAt,t):`${c(e.endAt,t)} at ${l(e.endAt,t)}`,d=u(e.link);return a(`li`,{className:`lockerverse-public-events__item`,children:o(`article`,{className:`lockerverse-public-events__row`,children:[o(`div`,{"aria-hidden":`true`,className:`lockerverse-public-events__date`,children:[a(`span`,{className:`lockerverse-public-events__month`,children:r}),a(`span`,{className:`lockerverse-public-events__day`,children:i})]}),o(`div`,{className:`lockerverse-public-events__content`,children:[a(`h3`,{children:e.name}),o(`p`,{className:`lockerverse-public-events__time`,children:[o(`time`,{dateTime:e.startAt,children:[c(e.startAt,t),` at`,` `,l(e.startAt,t)]}),a(`span`,{"aria-hidden":`true`,children:` — `}),a(`time`,{dateTime:e.endAt,children:s})]}),e.location?a(`p`,{className:`lockerverse-public-events__place`,children:e.location}):null,e.description?a(`p`,{className:`lockerverse-public-events__description`,children:e.description}):null,d?o(`a`,{href:d,rel:`noopener noreferrer`,target:`_blank`,children:[`Event details `,a(`span`,{"aria-hidden":`true`,children:`↗`})]}):null]})]})})}function f({events:e,title:t=`Events`,showHeading:n=!0,emptyMessage:r=`No events yet.`,timeZone:i=`America/New_York`,theme:s=`dark`,style:c,className:l}){return o(`section`,{"aria-busy":e.loading,"aria-label":t,className:[`lockerverse-public-events`,l].filter(Boolean).join(` `),"data-lockerverse-theme":s,style:c,children:[n?a(`h2`,{children:t}):null,e.loading&&!e.events?a(`p`,{role:`status`,children:`Loading events…`}):null,e.error?o(`div`,{role:`alert`,children:[a(`p`,{children:e.error.message}),a(`button`,{onClick:e.refresh,type:`button`,children:`Try again`})]}):null,e.events?.length===0?a(`p`,{className:`lockerverse-public-events__empty`,children:r}):null,e.events&&e.events.length>0?a(`ol`,{className:`lockerverse-public-events__list`,children:e.events.map(e=>a(d,{item:e,timeZone:i},e.id))}):null]})}function p(a){e(`public events`,{apiBaseUrl:a.apiBaseUrl,communitySlug:a.communitySlug,environment:a.environment,slug:``});let o=r(a.onError);o.current=a.onError;let[c]=i(()=>s({...a,onError:e=>o.current?.(e)})),[l,u]=i(0),[d,f]=i({error:null,events:null,loading:!0});n(()=>{let e=!0;return c.list().then(t=>{e&&f({error:null,events:t,loading:!1})},t=>{e&&f(e=>({...e,error:t,loading:!1}))}),()=>{e=!1}},[c,l]);let p=t(()=>{f(e=>({...e,error:null,loading:!0})),u(e=>e+1)},[]);return{...d,client:c,refresh:p}}export{f as LockerversePublicEvents,p as useLockerversePublicEvents};
1
+ import{t as e}from"./immutable-resource-identity.js";import{Share2 as t}from"lucide-react";import{useCallback as n,useEffect as r,useRef as i,useState as a}from"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import{createLockerversePublicEventsClient as l}from"@lockerverse/sdk/public-events";function u(e,t){return new Intl.DateTimeFormat(`en-US`,{day:`numeric`,month:`short`,timeZone:t,year:`numeric`}).format(new Date(e))}function d(e,t){return new Intl.DateTimeFormat(`en-US`,{hour:`numeric`,minute:`2-digit`,timeZone:t,timeZoneName:`short`}).format(new Date(e))}function f(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 p(e){let t=f(e.link);if(t)return t;let n=new URL(window.location.href);return n.hash=`event-${e.id}`,n.toString()}function m({item:e,timeZone:n,active:r}){let[i,l]=a(!1),[m,h]=a(!1),[g,_]=a(null),v=new Date(e.startAt),y=new Intl.DateTimeFormat(`en-US`,{month:`short`,timeZone:n}).format(v),b=new Intl.DateTimeFormat(`en-US`,{day:`numeric`,timeZone:n}).format(v),x=u(e.startAt,n)===u(e.endAt,n)?d(e.endAt,n):`${u(e.endAt,n)} at ${d(e.endAt,n)}`,S=f(e.link),C=f(e.imageUrl),w=(e.description?.length??0)>130;async function T(){let t=p(e);if(navigator.share)try{await navigator.share({title:e.name,url:t});return}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return}try{await navigator.clipboard.writeText(t),h(!0)}catch{_(t)}}return s(`li`,{className:`lockerverse-public-events__item`,id:`event-${e.id}`,children:c(`article`,{className:[`lockerverse-public-events__row`,C?`lockerverse-public-events__row--with-image`:``].filter(Boolean).join(` `),children:[C?s(`img`,{alt:``,className:`lockerverse-public-events__image`,height:124,loading:`lazy`,src:C,width:154}):c(`div`,{"aria-hidden":`true`,className:`lockerverse-public-events__date`,children:[s(`span`,{className:`lockerverse-public-events__month`,children:y}),s(`span`,{className:`lockerverse-public-events__day`,children:b})]}),c(`div`,{className:`lockerverse-public-events__content`,children:[c(`div`,{className:`lockerverse-public-events__meta`,children:[s(`time`,{dateTime:e.startAt,children:u(e.startAt,n)}),r?s(`span`,{className:`lockerverse-public-events__live`,children:`Live now`}):null]}),s(`h4`,{children:e.name}),c(`p`,{className:`lockerverse-public-events__time`,children:[s(`time`,{dateTime:e.startAt,children:d(e.startAt,n)}),s(`span`,{"aria-hidden":`true`,children:` — `}),s(`time`,{dateTime:e.endAt,children:x})]}),e.location?s(`p`,{className:`lockerverse-public-events__place`,children:e.location}):null,e.description?c(o,{children:[s(`p`,{className:[`lockerverse-public-events__description`,w&&!i?`lockerverse-public-events__description--clamped`:``].filter(Boolean).join(` `),children:e.description}),w?s(`button`,{"aria-expanded":i,className:`lockerverse-public-events__more`,onClick:()=>l(!i),type:`button`,children:i?`Show less`:`Read more`}):null]}):null,c(`div`,{className:`lockerverse-public-events__actions`,children:[S?c(`a`,{className:`lockerverse-public-events__link`,href:S,rel:`noopener noreferrer`,target:`_blank`,children:[`View event `,s(`span`,{"aria-hidden":`true`,children:`↗`})]}):null,c(`button`,{"aria-label":`Share ${e.name}`,className:`lockerverse-public-events__share`,onClick:T,type:`button`,children:[s(t,{"aria-hidden":`true`,size:16,strokeWidth:1.8}),m?`Link copied`:`Share`]})]}),g?c(`label`,{className:`lockerverse-public-events__copy-link`,children:[`Copy event link`,s(`input`,{onFocus:e=>e.currentTarget.select(),readOnly:!0,value:g})]}):null]})]})})}function h({events:e,title:t=`Events`,showHeading:n=!0,emptyMessage:i=`No events yet.`,timeZone:o=`America/New_York`,theme:l=`dark`,style:u,className:d}){let[f,p]=a(()=>Date.now());r(()=>{let e=window.setInterval(()=>p(Date.now()),6e4);return()=>window.clearInterval(e)},[]);let h=e.events||[],g=h.filter(e=>new Date(e.startAt).getTime()<=f&&new Date(e.endAt).getTime()>f),_=h.filter(e=>new Date(e.startAt).getTime()>f);return c(`section`,{"aria-busy":e.loading,"aria-label":t,className:[`lockerverse-public-events`,d].filter(Boolean).join(` `),"data-lockerverse-theme":l,style:u,children:[n?s(`h2`,{children:t}):null,e.loading&&!e.events?s(`p`,{role:`status`,children:`Loading events…`}):null,e.error?c(`div`,{role:`alert`,children:[s(`p`,{children:e.error.message}),s(`button`,{onClick:e.refresh,type:`button`,children:`Try again`})]}):null,e.events&&g.length===0&&_.length===0?s(`p`,{className:`lockerverse-public-events__empty`,children:i}):null,g.length>0?c(`div`,{className:`lockerverse-public-events__group`,children:[s(`h3`,{className:`lockerverse-public-events__group-title`,children:`Happening now`}),s(`ol`,{className:`lockerverse-public-events__list`,children:g.map(e=>s(m,{active:!0,item:e,timeZone:o},e.id))})]}):null,_.length>0?c(`div`,{className:`lockerverse-public-events__group`,children:[s(`h3`,{className:`lockerverse-public-events__group-title`,children:`Upcoming`}),s(`ol`,{className:`lockerverse-public-events__list`,children:_.map(e=>s(m,{active:!1,item:e,timeZone:o},e.id))})]}):null]})}function g(t){e(`public events`,{apiBaseUrl:t.apiBaseUrl,communitySlug:t.communitySlug,environment:t.environment,slug:``});let o=i(t.onError);o.current=t.onError;let[s]=a(()=>l({...t,onError:e=>o.current?.(e)})),[c,u]=a(0),[d,f]=a({error:null,events:null,loading:!0});r(()=>{let e=!0;return s.list().then(t=>{e&&f({error:null,events:t,loading:!1})},t=>{e&&f(e=>({...e,error:t,loading:!1}))}),()=>{e=!1}},[s,c]);let p=n(()=>{f(e=>({...e,error:null,loading:!0})),u(e=>e+1)},[]);return{...d,client:s,refresh:p}}export{h as LockerversePublicEvents,g 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 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 PublicEventRow({\n item,\n timeZone,\n}: {\n item: LockerversePublicEvent;\n timeZone: string;\n}) {\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 sameDay =\n formatDate(item.startAt, timeZone) === 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 link = getLink(item.link);\n\n return (\n <li className=\"lockerverse-public-events__item\">\n <article className=\"lockerverse-public-events__row\">\n <div aria-hidden=\"true\" className=\"lockerverse-public-events__date\">\n <span className=\"lockerverse-public-events__month\">{month}</span>\n <span className=\"lockerverse-public-events__day\">{day}</span>\n </div>\n <div className=\"lockerverse-public-events__content\">\n <h3>{item.name}</h3>\n <p className=\"lockerverse-public-events__time\">\n <time dateTime={item.startAt}>\n {formatDate(item.startAt, timeZone)} at{\" \"}\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 <p className=\"lockerverse-public-events__description\">\n {item.description}\n </p>\n ) : null}\n {link ? (\n <a href={link} rel=\"noopener noreferrer\" target=\"_blank\">\n Event details <span aria-hidden=\"true\">↗</span>\n </a>\n ) : null}\n </div>\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 return (\n <section\n aria-busy={events.loading}\n aria-label={title}\n className={[\"lockerverse-public-events\", className]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n {showHeading ? <h2>{title}</h2> : null}\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?.length === 0 ? (\n <p className=\"lockerverse-public-events__empty\">{emptyMessage}</p>\n ) : null}\n {events.events && events.events.length > 0 ? (\n <ol className=\"lockerverse-public-events__list\">\n {events.events.map((item) => (\n <PublicEventRow item={item} key={item.id} timeZone={timeZone} />\n ))}\n </ol>\n ) : null}\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 { Share2 } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\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) {\n const link = getLink(item.link);\n if (link) {\n return link;\n }\n const url = new URL(window.location.href);\n url.hash = `event-${item.id}`;\n return url.toString();\n}\n\nfunction PublicEventRow({\n item,\n timeZone,\n active,\n}: {\n item: LockerversePublicEvent;\n timeZone: string;\n active: boolean;\n}) {\n const [expanded, setExpanded] = useState(false);\n const [copied, setCopied] = useState(false);\n const [manualShareUrl, setManualShareUrl] = useState<string | null>(null);\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 sameDay =\n formatDate(item.startAt, timeZone) === 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 link = getLink(item.link);\n const imageUrl = getLink(item.imageUrl);\n const canExpand = (item.description?.length ?? 0) > 130;\n\n async function shareEvent() {\n const url = getShareUrl(item);\n if (navigator.share) {\n try {\n await navigator.share({ title: item.name, url });\n return;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return;\n }\n }\n }\n try {\n await navigator.clipboard.writeText(url);\n setCopied(true);\n } catch {\n setManualShareUrl(url);\n }\n }\n\n return (\n <li className=\"lockerverse-public-events__item\" id={`event-${item.id}`}>\n <article\n className={[\n \"lockerverse-public-events__row\",\n imageUrl ? \"lockerverse-public-events__row--with-image\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\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 <div aria-hidden=\"true\" className=\"lockerverse-public-events__date\">\n <span className=\"lockerverse-public-events__month\">{month}</span>\n <span className=\"lockerverse-public-events__day\">{day}</span>\n </div>\n )}\n <div className=\"lockerverse-public-events__content\">\n <div className=\"lockerverse-public-events__meta\">\n <time dateTime={item.startAt}>\n {formatDate(item.startAt, timeZone)}\n </time>\n {active ? (\n <span className=\"lockerverse-public-events__live\">Live now</span>\n ) : null}\n </div>\n <h4>{item.name}</h4>\n <p className=\"lockerverse-public-events__time\">\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 className=\"lockerverse-public-events__actions\">\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-label={`Share ${item.name}`}\n className=\"lockerverse-public-events__share\"\n onClick={shareEvent}\n type=\"button\"\n >\n <Share2 aria-hidden=\"true\" size={16} strokeWidth={1.8} />\n {copied ? \"Link copied\" : \"Share\"}\n </button>\n </div>\n {manualShareUrl ? (\n <label className=\"lockerverse-public-events__copy-link\">\n Copy event link\n <input\n onFocus={(event) => event.currentTarget.select()}\n readOnly\n value={manualShareUrl}\n />\n </label>\n ) : null}\n </div>\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\n useEffect(() => {\n const interval = window.setInterval(() => setNow(Date.now()), 60_000);\n return () => window.clearInterval(interval);\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={events.loading}\n aria-label={title}\n className={[\"lockerverse-public-events\", className]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n {showHeading ? <h2>{title}</h2> : null}\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 <h3 className=\"lockerverse-public-events__group-title\">\n Happening now\n </h3>\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 <h3 className=\"lockerverse-public-events__group-title\">Upcoming</h3>\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 );\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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"}
package/dist/signup.css CHANGED
@@ -38,7 +38,7 @@
38
38
  font-size: 15px;
39
39
  line-height: 1.4;
40
40
  color: var(--lockerverse-text);
41
- background: var(--lockerverse-bg);
41
+ background: transparent;
42
42
  border-radius: var(--lockerverse-radius);
43
43
  }
44
44
 
@@ -54,7 +54,6 @@
54
54
  );
55
55
  --lockerverse-subtle: var(--lockerverse-signup-subtle, rgb(18 20 22 / 8%));
56
56
  --lockerverse-text: var(--lockerverse-signup-text, #121416);
57
- box-shadow: 0 18px 55px rgb(20 25 32 / 10%);
58
57
  }
59
58
 
60
59
  .lockerverse-signup *,
package/dist/styles.css CHANGED
@@ -26,7 +26,7 @@
26
26
  font-size: 15px;
27
27
  line-height: 1.4;
28
28
  color: var(--lockerverse-text);
29
- background: var(--lockerverse-bg);
29
+ background: transparent;
30
30
  border-radius: var(--lockerverse-radius);
31
31
  }
32
32
 
@@ -41,7 +41,6 @@
41
41
  --lockerverse-subtle: rgb(18 20 22 / 8%);
42
42
  --lockerverse-success: #157a42;
43
43
  --lockerverse-text: #121416;
44
- box-shadow: 0 18px 55px rgb(20 25 32 / 10%);
45
44
  }
46
45
 
47
46
  .lockerverse-payment *,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lockerverse/react",
3
- "version": "0.2.106-dev.1",
3
+ "version": "0.2.109-dev.1",
4
4
  "description": "Tree-shakable React payment and signup UI for Lockerverse",
5
5
  "repository": {
6
6
  "type": "git",
@@ -117,7 +117,7 @@
117
117
  "embla-carousel-react": "8.6.0",
118
118
  "lucide-react": "0.536.0",
119
119
  "valibot": "1.4.2",
120
- "@lockerverse/sdk": "0.2.106-dev.1"
120
+ "@lockerverse/sdk": "0.2.109-dev.1"
121
121
  },
122
122
  "devDependencies": {
123
123
  "@size-limit/file": "13.0.3",