@lockerverse/react 0.2.99 → 0.2.101
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 +89 -0
- package/dist/auction-catalog.css +348 -0
- package/dist/auction-checkout.css +266 -0
- package/dist/auction-description.js +2 -0
- package/dist/auction-description.js.map +1 -0
- package/dist/auction-gallery.css +298 -0
- package/dist/auction-item.d.ts +39 -0
- package/dist/auction-item.d.ts.map +1 -0
- package/dist/auction-item.js +2 -0
- package/dist/auction-item.js.map +1 -0
- package/dist/auctions.css +409 -0
- package/dist/auctions.d.ts +25 -0
- package/dist/auctions.d.ts.map +1 -0
- package/dist/auctions.js +2 -0
- package/dist/auctions.js.map +1 -0
- package/dist/host-callback.js +1 -1
- package/dist/host-callback.js.map +1 -1
- package/dist/immutable-resource-identity.js.map +1 -1
- package/dist/lockerverse-donate-launcher.js +1 -1
- package/dist/lockerverse-donate-launcher.js.map +1 -1
- package/dist/lockerverse-payment.js +1 -1
- package/dist/lockerverse-payment.js.map +1 -1
- package/dist/phone.js +2 -0
- package/dist/phone.js.map +1 -0
- package/dist/signup.js +1 -1
- package/dist/signup.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/use-lockerverse-widget.js +1 -1
- package/package.json +26 -3
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
@import "./auction-catalog.css";
|
|
2
|
+
@import "./auction-gallery.css";
|
|
3
|
+
@import "./auction-checkout.css";
|
|
4
|
+
|
|
5
|
+
/* Reference: lockerverse-web-app-next auction pages at 8ead019. */
|
|
6
|
+
.lockerverse-auctions {
|
|
7
|
+
--lockerverse-accent: #6f8f6d;
|
|
8
|
+
--lockerverse-bg: #050505;
|
|
9
|
+
--lockerverse-border: rgb(255 255 255 / 10%);
|
|
10
|
+
--lockerverse-control: #111216;
|
|
11
|
+
--lockerverse-muted: #bbb7c2;
|
|
12
|
+
--lockerverse-radius: 24px;
|
|
13
|
+
--lockerverse-text: #fff;
|
|
14
|
+
--lockerverse-font-family: ui-sans-serif, system-ui, sans-serif;
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
width: 100%;
|
|
17
|
+
max-width: 1520px;
|
|
18
|
+
padding: 40px 32px;
|
|
19
|
+
margin-inline: auto;
|
|
20
|
+
container-type: inline-size;
|
|
21
|
+
font: 14px / 1.5 var(--lockerverse-font-family);
|
|
22
|
+
color: var(--lockerverse-text);
|
|
23
|
+
background: var(--lockerverse-bg);
|
|
24
|
+
border-radius: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.lockerverse-auctions[data-lockerverse-theme="light"] {
|
|
28
|
+
--lockerverse-bg: #fff;
|
|
29
|
+
--lockerverse-border: rgb(18 20 22 / 14%);
|
|
30
|
+
--lockerverse-control: #f5f6f7;
|
|
31
|
+
--lockerverse-muted: rgb(18 20 22 / 64%);
|
|
32
|
+
--lockerverse-text: #121416;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.lockerverse-auctions * {
|
|
36
|
+
box-sizing: border-box;
|
|
37
|
+
}
|
|
38
|
+
.lockerverse-auctions h2 {
|
|
39
|
+
margin: 0;
|
|
40
|
+
font-size: 24px;
|
|
41
|
+
line-height: 1.25;
|
|
42
|
+
text-wrap: balance;
|
|
43
|
+
}
|
|
44
|
+
.lockerverse-auctions h3 {
|
|
45
|
+
margin: 0;
|
|
46
|
+
font-size: 19px;
|
|
47
|
+
line-height: 1.3;
|
|
48
|
+
overflow-wrap: anywhere;
|
|
49
|
+
}
|
|
50
|
+
.lockerverse-auctions p {
|
|
51
|
+
margin: 8px 0;
|
|
52
|
+
color: var(--lockerverse-muted);
|
|
53
|
+
overflow-wrap: anywhere;
|
|
54
|
+
white-space: pre-line;
|
|
55
|
+
}
|
|
56
|
+
.lockerverse-auctions button {
|
|
57
|
+
font-family: inherit;
|
|
58
|
+
touch-action: manipulation;
|
|
59
|
+
cursor: pointer;
|
|
60
|
+
}
|
|
61
|
+
.lockerverse-auctions button:hover {
|
|
62
|
+
border-color: var(--lockerverse-text);
|
|
63
|
+
}
|
|
64
|
+
.lockerverse-auctions button:focus-visible,
|
|
65
|
+
.lockerverse-auctions h2:focus-visible {
|
|
66
|
+
outline: 2px solid var(--lockerverse-accent);
|
|
67
|
+
outline-offset: 3px;
|
|
68
|
+
}
|
|
69
|
+
.lockerverse-auctions__field {
|
|
70
|
+
display: grid;
|
|
71
|
+
gap: 8px;
|
|
72
|
+
}
|
|
73
|
+
.lockerverse-auctions__field input {
|
|
74
|
+
width: 100%;
|
|
75
|
+
min-width: 0;
|
|
76
|
+
min-height: 48px;
|
|
77
|
+
padding: 10px 12px;
|
|
78
|
+
font: inherit;
|
|
79
|
+
font-size: 16px;
|
|
80
|
+
color: var(--lockerverse-text);
|
|
81
|
+
background: var(--lockerverse-control);
|
|
82
|
+
border: 1px solid var(--lockerverse-border);
|
|
83
|
+
border-radius: var(--lockerverse-radius);
|
|
84
|
+
}
|
|
85
|
+
.lockerverse-auctions__notice {
|
|
86
|
+
padding: 12px;
|
|
87
|
+
border: 1px solid var(--lockerverse-border);
|
|
88
|
+
border-radius: var(--lockerverse-radius);
|
|
89
|
+
}
|
|
90
|
+
.lockerverse-auctions input:focus-visible {
|
|
91
|
+
outline: 2px solid var(--lockerverse-accent);
|
|
92
|
+
outline-offset: 3px;
|
|
93
|
+
}
|
|
94
|
+
.lockerverse-auctions__detail {
|
|
95
|
+
display: grid;
|
|
96
|
+
grid-template-columns: minmax(360px, 0.9fr) minmax(540px, 1.1fr);
|
|
97
|
+
gap: 32px;
|
|
98
|
+
align-items: start;
|
|
99
|
+
}
|
|
100
|
+
.lockerverse-auctions__item-summary {
|
|
101
|
+
min-width: 0;
|
|
102
|
+
overflow: hidden;
|
|
103
|
+
background: var(--lockerverse-control);
|
|
104
|
+
border: 1px solid var(--lockerverse-border);
|
|
105
|
+
border-radius: 12px;
|
|
106
|
+
}
|
|
107
|
+
.lockerverse-auctions__item-copy {
|
|
108
|
+
padding: 20px 24px;
|
|
109
|
+
border-top: 1px solid var(--lockerverse-border);
|
|
110
|
+
}
|
|
111
|
+
.lockerverse-auctions__item-copy h2 {
|
|
112
|
+
margin-top: 16px;
|
|
113
|
+
font-size: 36px;
|
|
114
|
+
font-weight: 600;
|
|
115
|
+
line-height: 1.12;
|
|
116
|
+
}
|
|
117
|
+
.lockerverse-auctions .lockerverse-auctions__eyebrow {
|
|
118
|
+
margin: 0;
|
|
119
|
+
font-size: 11px;
|
|
120
|
+
font-weight: 500;
|
|
121
|
+
line-height: 1.7;
|
|
122
|
+
text-transform: uppercase;
|
|
123
|
+
letter-spacing: 0.18em;
|
|
124
|
+
}
|
|
125
|
+
.lockerverse-auctions__item-description {
|
|
126
|
+
margin-top: 16px;
|
|
127
|
+
}
|
|
128
|
+
.lockerverse-auctions__description {
|
|
129
|
+
line-height: 2;
|
|
130
|
+
overflow-wrap: anywhere;
|
|
131
|
+
}
|
|
132
|
+
.lockerverse-auctions__description p {
|
|
133
|
+
color: inherit;
|
|
134
|
+
}
|
|
135
|
+
.lockerverse-auctions__description ul {
|
|
136
|
+
padding-left: 20px;
|
|
137
|
+
list-style: disc;
|
|
138
|
+
}
|
|
139
|
+
.lockerverse-auctions__description ol {
|
|
140
|
+
padding-left: 20px;
|
|
141
|
+
list-style: decimal;
|
|
142
|
+
}
|
|
143
|
+
.lockerverse-auctions__description li {
|
|
144
|
+
margin-block: 4px;
|
|
145
|
+
}
|
|
146
|
+
.lockerverse-auctions__description a {
|
|
147
|
+
color: inherit;
|
|
148
|
+
text-decoration: underline;
|
|
149
|
+
}
|
|
150
|
+
.lockerverse-auctions__description blockquote {
|
|
151
|
+
padding-left: 16px;
|
|
152
|
+
margin-inline: 0;
|
|
153
|
+
border-left: 2px solid currentColor;
|
|
154
|
+
}
|
|
155
|
+
.lockerverse-auctions__description pre {
|
|
156
|
+
overflow-x: auto;
|
|
157
|
+
}
|
|
158
|
+
.lockerverse-auctions__description-clamped {
|
|
159
|
+
display: -webkit-box;
|
|
160
|
+
-webkit-box-orient: vertical;
|
|
161
|
+
overflow: hidden;
|
|
162
|
+
-webkit-line-clamp: 4;
|
|
163
|
+
}
|
|
164
|
+
.lockerverse-auctions .lockerverse-auctions__description-toggle {
|
|
165
|
+
min-height: 32px;
|
|
166
|
+
padding: 6px 12px;
|
|
167
|
+
margin-top: 12px;
|
|
168
|
+
font-size: 10px;
|
|
169
|
+
font-weight: 500;
|
|
170
|
+
color: var(--lockerverse-text);
|
|
171
|
+
text-transform: uppercase;
|
|
172
|
+
letter-spacing: 0.14em;
|
|
173
|
+
background: var(--lockerverse-control);
|
|
174
|
+
border: 1px solid var(--lockerverse-border);
|
|
175
|
+
border-radius: 999px;
|
|
176
|
+
}
|
|
177
|
+
.lockerverse-auctions__stat-panel {
|
|
178
|
+
margin: 20px 0 0;
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
background: rgb(0 0 0 / 18%);
|
|
181
|
+
border: 1px solid var(--lockerverse-border);
|
|
182
|
+
border-radius: 24px;
|
|
183
|
+
}
|
|
184
|
+
.lockerverse-auctions__stat-row {
|
|
185
|
+
display: flex;
|
|
186
|
+
gap: 16px;
|
|
187
|
+
align-items: center;
|
|
188
|
+
justify-content: space-between;
|
|
189
|
+
padding: 16px 24px;
|
|
190
|
+
border-bottom: 1px solid var(--lockerverse-border);
|
|
191
|
+
}
|
|
192
|
+
.lockerverse-auctions__stat-row:last-child {
|
|
193
|
+
border-bottom: 0;
|
|
194
|
+
}
|
|
195
|
+
.lockerverse-auctions__stat-panel dt {
|
|
196
|
+
font-size: 11px;
|
|
197
|
+
font-weight: 500;
|
|
198
|
+
color: var(--lockerverse-muted);
|
|
199
|
+
text-transform: uppercase;
|
|
200
|
+
letter-spacing: 0.12em;
|
|
201
|
+
}
|
|
202
|
+
.lockerverse-auctions__stat-panel dd {
|
|
203
|
+
margin: 0;
|
|
204
|
+
font-size: 20px;
|
|
205
|
+
font-weight: 500;
|
|
206
|
+
font-variant-numeric: tabular-nums;
|
|
207
|
+
text-align: right;
|
|
208
|
+
}
|
|
209
|
+
.lockerverse-auctions__stat-panel .lockerverse-auctions__stat-date {
|
|
210
|
+
font-size: 15px;
|
|
211
|
+
}
|
|
212
|
+
.lockerverse-auctions__stat-footer {
|
|
213
|
+
display: grid;
|
|
214
|
+
grid-template-columns: 1fr 1fr;
|
|
215
|
+
}
|
|
216
|
+
.lockerverse-auctions__stat-footer > div {
|
|
217
|
+
padding: 12px 24px;
|
|
218
|
+
}
|
|
219
|
+
.lockerverse-auctions__stat-footer > div + div {
|
|
220
|
+
border-left: 1px solid var(--lockerverse-border);
|
|
221
|
+
}
|
|
222
|
+
.lockerverse-auctions__stat-footer dd {
|
|
223
|
+
margin-top: 4px;
|
|
224
|
+
font-size: 14px;
|
|
225
|
+
text-align: left;
|
|
226
|
+
}
|
|
227
|
+
.lockerverse-auctions__transaction {
|
|
228
|
+
display: grid;
|
|
229
|
+
gap: 24px;
|
|
230
|
+
min-width: 0;
|
|
231
|
+
}
|
|
232
|
+
.lockerverse-auctions__progress {
|
|
233
|
+
display: flex;
|
|
234
|
+
flex-wrap: wrap;
|
|
235
|
+
gap: 8px;
|
|
236
|
+
padding: 24px;
|
|
237
|
+
background: rgb(128 128 128 / 4%);
|
|
238
|
+
border: 1px solid var(--lockerverse-border);
|
|
239
|
+
border-radius: 28px;
|
|
240
|
+
}
|
|
241
|
+
.lockerverse-auctions__progress span {
|
|
242
|
+
padding: 10px 16px;
|
|
243
|
+
font-size: 14px;
|
|
244
|
+
font-weight: 500;
|
|
245
|
+
border: 1px solid var(--lockerverse-border);
|
|
246
|
+
border-radius: 999px;
|
|
247
|
+
}
|
|
248
|
+
.lockerverse-auctions__selection {
|
|
249
|
+
overflow: hidden;
|
|
250
|
+
background: var(--lockerverse-control);
|
|
251
|
+
border: 1px solid var(--lockerverse-border);
|
|
252
|
+
border-radius: 32px;
|
|
253
|
+
box-shadow: 0 30px 90px rgb(0 0 0 / 20%);
|
|
254
|
+
}
|
|
255
|
+
.lockerverse-auctions__selection-header,
|
|
256
|
+
.lockerverse-auctions__selection-body {
|
|
257
|
+
padding: 28px;
|
|
258
|
+
}
|
|
259
|
+
.lockerverse-auctions__selection-header {
|
|
260
|
+
border-bottom: 1px solid var(--lockerverse-border);
|
|
261
|
+
}
|
|
262
|
+
.lockerverse-auctions__selection h3 {
|
|
263
|
+
margin-top: 12px;
|
|
264
|
+
font-size: 30px;
|
|
265
|
+
font-weight: 600;
|
|
266
|
+
letter-spacing: -0.04em;
|
|
267
|
+
}
|
|
268
|
+
.lockerverse-auctions__selection p {
|
|
269
|
+
margin-top: 12px;
|
|
270
|
+
font-size: 14px;
|
|
271
|
+
line-height: 2;
|
|
272
|
+
}
|
|
273
|
+
.lockerverse-auctions__selection strong {
|
|
274
|
+
color: var(--lockerverse-text);
|
|
275
|
+
}
|
|
276
|
+
.lockerverse-auctions__amount-control {
|
|
277
|
+
position: relative;
|
|
278
|
+
display: block;
|
|
279
|
+
}
|
|
280
|
+
.lockerverse-auctions__amount-control > span {
|
|
281
|
+
position: absolute;
|
|
282
|
+
top: 50%;
|
|
283
|
+
left: 20px;
|
|
284
|
+
font-size: 24px;
|
|
285
|
+
color: var(--lockerverse-muted);
|
|
286
|
+
transform: translateY(-50%);
|
|
287
|
+
}
|
|
288
|
+
.lockerverse-auctions__amount-control input {
|
|
289
|
+
height: 78px;
|
|
290
|
+
padding-left: 24px;
|
|
291
|
+
font-size: 36px;
|
|
292
|
+
font-weight: 600;
|
|
293
|
+
letter-spacing: -0.05em;
|
|
294
|
+
background: rgb(0 0 0 / 25%);
|
|
295
|
+
border-radius: 24px;
|
|
296
|
+
}
|
|
297
|
+
.lockerverse-auctions__amount-control > span + input {
|
|
298
|
+
padding-left: 48px;
|
|
299
|
+
}
|
|
300
|
+
.lockerverse-auctions__selection-footer {
|
|
301
|
+
display: flex;
|
|
302
|
+
flex-wrap: wrap;
|
|
303
|
+
gap: 16px;
|
|
304
|
+
align-items: center;
|
|
305
|
+
justify-content: space-between;
|
|
306
|
+
padding-top: 20px;
|
|
307
|
+
margin-top: 24px;
|
|
308
|
+
border-top: 1px solid var(--lockerverse-border);
|
|
309
|
+
}
|
|
310
|
+
.lockerverse-auctions__selection-footer > p {
|
|
311
|
+
flex: 1 1 220px;
|
|
312
|
+
margin: 0;
|
|
313
|
+
}
|
|
314
|
+
.lockerverse-auctions .lockerverse-auctions__button {
|
|
315
|
+
min-height: 48px;
|
|
316
|
+
padding: 12px 24px;
|
|
317
|
+
font-size: 14px;
|
|
318
|
+
font-weight: 600;
|
|
319
|
+
color: #fff;
|
|
320
|
+
text-transform: uppercase;
|
|
321
|
+
letter-spacing: 0.14em;
|
|
322
|
+
background: var(--lockerverse-accent);
|
|
323
|
+
border: 0;
|
|
324
|
+
border-radius: 999px;
|
|
325
|
+
}
|
|
326
|
+
.lockerverse-auctions button:disabled {
|
|
327
|
+
cursor: not-allowed;
|
|
328
|
+
opacity: 0.5;
|
|
329
|
+
}
|
|
330
|
+
.lockerverse-auctions .lockerverse-auctions__back {
|
|
331
|
+
min-height: 40px;
|
|
332
|
+
padding: 8px 12px;
|
|
333
|
+
margin-bottom: 16px;
|
|
334
|
+
font-size: 14px;
|
|
335
|
+
font-weight: 500;
|
|
336
|
+
color: var(--lockerverse-text);
|
|
337
|
+
background: rgb(128 128 128 / 6%);
|
|
338
|
+
border: 1px solid var(--lockerverse-border);
|
|
339
|
+
border-radius: 999px;
|
|
340
|
+
}
|
|
341
|
+
.lockerverse-auctions .lockerverse-auctions__footer-back {
|
|
342
|
+
justify-self: end;
|
|
343
|
+
min-height: 44px;
|
|
344
|
+
padding: 0;
|
|
345
|
+
font-size: 14px;
|
|
346
|
+
font-weight: 500;
|
|
347
|
+
color: var(--lockerverse-muted);
|
|
348
|
+
background: transparent;
|
|
349
|
+
border: 0;
|
|
350
|
+
}
|
|
351
|
+
.lockerverse-auctions__read-only {
|
|
352
|
+
padding: 24px;
|
|
353
|
+
}
|
|
354
|
+
.lockerverse-auctions__read-only > p {
|
|
355
|
+
line-height: 2;
|
|
356
|
+
}
|
|
357
|
+
.lockerverse-auctions__read-only .lockerverse-auctions__button {
|
|
358
|
+
margin-top: 20px;
|
|
359
|
+
}
|
|
360
|
+
@media (max-width: 1279px) {
|
|
361
|
+
.lockerverse-auctions__detail {
|
|
362
|
+
grid-template-columns: minmax(0, 1fr);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
@media (max-width: 720px) {
|
|
366
|
+
.lockerverse-auctions__detail {
|
|
367
|
+
gap: 24px;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
@media (max-width: 639px) {
|
|
371
|
+
.lockerverse-auctions {
|
|
372
|
+
padding: 32px 16px;
|
|
373
|
+
}
|
|
374
|
+
.lockerverse-auctions__item-copy {
|
|
375
|
+
padding: 20px;
|
|
376
|
+
}
|
|
377
|
+
.lockerverse-auctions__item-copy h2 {
|
|
378
|
+
font-size: 30px;
|
|
379
|
+
}
|
|
380
|
+
.lockerverse-auctions__selection-header,
|
|
381
|
+
.lockerverse-auctions__selection-body {
|
|
382
|
+
padding: 24px;
|
|
383
|
+
}
|
|
384
|
+
.lockerverse-auctions__selection-footer {
|
|
385
|
+
flex-direction: column;
|
|
386
|
+
align-items: stretch;
|
|
387
|
+
}
|
|
388
|
+
.lockerverse-auctions__selection-footer > p {
|
|
389
|
+
flex-basis: auto;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
@container (max-width: 1150px) {
|
|
394
|
+
.lockerverse-auctions__detail {
|
|
395
|
+
grid-template-columns: minmax(0, 1fr);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.lockerverse-auctions__stat-row dt,
|
|
400
|
+
.lockerverse-auctions__progress span {
|
|
401
|
+
display: flex;
|
|
402
|
+
gap: 10px;
|
|
403
|
+
align-items: center;
|
|
404
|
+
}
|
|
405
|
+
.lockerverse-auctions__progress svg,
|
|
406
|
+
.lockerverse-auctions__stat-row dt svg {
|
|
407
|
+
flex-shrink: 0;
|
|
408
|
+
opacity: 0.65;
|
|
409
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { n as LockerverseTheme, t as LockerverseStyle } from "./theme.js";
|
|
2
|
+
import { CreateLockerverseAuctionOptions, LockerverseAuction, LockerverseAuctionClient, LockerverseAuctionItem, LockerverseSdkError } from "@lockerverse/sdk/auctions";
|
|
3
|
+
//#region src/use-lockerverse-auctions.d.ts
|
|
4
|
+
type UseLockerverseAuctionsResult = {
|
|
5
|
+
client: LockerverseAuctionClient;
|
|
6
|
+
auctions: LockerverseAuction[] | null;
|
|
7
|
+
loading: boolean;
|
|
8
|
+
error: LockerverseSdkError | null;
|
|
9
|
+
refresh: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare function useLockerverseAuctions(options: CreateLockerverseAuctionOptions): UseLockerverseAuctionsResult;
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/lockerverse-auctions.d.ts
|
|
14
|
+
type LockerverseAuctionsProps = {
|
|
15
|
+
auctions: UseLockerverseAuctionsResult;
|
|
16
|
+
onSelectItem: (auction: LockerverseAuction, item: LockerverseAuctionItem) => void;
|
|
17
|
+
theme?: LockerverseTheme;
|
|
18
|
+
style?: LockerverseStyle;
|
|
19
|
+
className?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Optional catalog UI, shared with the Lockerverse auction design. */
|
|
22
|
+
declare function LockerverseAuctions({ auctions, onSelectItem, theme, style, className }: LockerverseAuctionsProps): import("react").JSX.Element;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { LockerverseAuctions, type LockerverseStyle, type LockerverseTheme, type UseLockerverseAuctionsResult, useLockerverseAuctions };
|
|
25
|
+
//# sourceMappingURL=auctions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auctions.d.ts","names":[],"sources":["../src/use-lockerverse-auctions.ts","../src/lockerverse-auctions.tsx"],"mappings":";;;KAUY;EACV,QAAQ;EACR,UAAU;EACV;EACA,OAAO;EACP;;iBAQc,uBACd,SAAS,kCACR;;;KCTS;EACV,UAAU;EACV,eACE,SAAS,oBACT,MAAM;EAER,QAAQ;EACR,QAAQ;EACR;;;iBA4Sc,sBACd,UACA,cACA,OACA,OACA,aACC,2CAAwB,IAAA"}
|
package/dist/auctions.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,i as t,o as n,r,t as i}from"./auction-description.js";import{t as a}from"./immutable-resource-identity.js";import{useCallback as o,useEffect as s,useRef as c,useState as l}from"react";import{createLockerverseAuctionClient as u}from"@lockerverse/sdk/auctions";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";const m={active:`Live now`,draft:`Coming soon`,finished:`Closed`},h=[{label:`All`,value:`all`},{label:`Live`,value:`active`},{label:`Upcoming`,value:`draft`},{label:`Closed`,value:`finished`}];function g({images:e,fallback:t,name:n}){let r=[...new Set(e?.filter(Boolean))];!r.length&&t&&r.push(t);let[i,a]=l(0),o=c(null),u=c(new Set),d=r.length,p=d?i%d:0;return s(()=>{if(d<2)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t=window.setInterval(()=>{document.hidden||e.matches||o.current?.closest(`article`)?.matches(`:hover, :focus-within`)||a(e=>u.current.has(r[(e+1)%d]??``)?(e+1)%d:e)},5e3);return()=>window.clearInterval(t)},[d,r]),f(`div`,{className:`lockerverse-auctions__catalog-images`,ref:o,children:d?[p,...d>1?[(p+1)%d]:[]].map(e=>f(`img`,{alt:e===p?n:``,"aria-hidden":e!==p,className:`lockerverse-auctions__catalog-photo`,"data-visible":e===p,height:500,loading:`lazy`,onLoad:()=>u.current.add(r[e]??``),src:r[e],width:640},r[e])):null})}function _({icon:e,label:t,value:n}){return p(`div`,{className:`lockerverse-auctions__catalog-metric`,children:[p(`dt`,{children:[f(r,{kind:e}),t]}),f(`dd`,{children:n})]})}function v({auction:e,status:r=n(e),item:i=!1}){let a=``;return r===`draft`&&(a=`Opens `),r===`active`&&(a=i?`Closes `:`Ends `),p(`span`,{className:`lockerverse-auctions__catalog-timing`,children:[a,t(e,r)]})}function y({auction:e,onSelect:t}){let a=e.configuration.image||e.items.find(e=>e.image||e.images.length)?.image||e.items.find(e=>e.images.length)?.images[0]||e.community?.banner||e.community?.thumbnail,o=e.description||{active:`Bidding is open across this auction's items.`,draft:`Preview the lineup before bidding opens.`,finished:`Bidding has wrapped. Review the completed items.`}[n(e)];return p(`article`,{className:`lockerverse-auctions__catalog-card`,children:[f(`button`,{"aria-label":`View items in ${e.name}`,className:`lockerverse-auctions__catalog-select`,onClick:t,type:`button`}),p(`div`,{className:`lockerverse-auctions__catalog-media`,children:[f(g,{fallback:a,name:e.name}),p(`div`,{className:`lockerverse-auctions__catalog-chips`,children:[f(`span`,{className:`lockerverse-auctions__catalog-chip`,children:m[n(e)]}),f(v,{auction:e})]}),p(`dl`,{className:`lockerverse-auctions__catalog-metrics`,children:[f(_,{icon:`items`,label:`Items`,value:String(e.items.length)}),f(_,{icon:`gavel`,label:`Bids`,value:String(e.items.reduce((e,t)=>e+t.bidCount,0))})]})]}),p(`div`,{className:`lockerverse-auctions__catalog-body`,children:[f(`h3`,{children:e.name}),f(i,{className:`lockerverse-auctions__catalog-description`,description:o,links:!1}),p(`div`,{className:`lockerverse-auctions__catalog-footer`,children:[f(`span`,{className:`lockerverse-auctions__catalog-cta`,children:n(e)===`draft`?`Preview items`:`View items`}),f(`span`,{className:`lockerverse-auctions__catalog-arrow`,children:f(r,{kind:`arrow`})})]})]})]})}function b(t,n){if(t.saleMode===`buy_now`){let n=t.isSoldOut?`Sold out`:`Buy now`;return{chip:n,cta:n,price:e(t.buyNowPriceAmount??0),priceLabel:`Buy Now`,secondary:t.availableQuantity===null?`Available`:String(t.availableQuantity)}}return{chip:n===`active`?`Live`:m[n],cta:{active:`Bid now`,draft:`Preview item`,finished:`View item`}[n],price:n===`finished`&&!t.maxBidAmount?`No bids`:e(t.maxBidAmount??0),priceLabel:n===`finished`?`Final bid`:`Current`,secondary:e(t.minBidAmount??0)}}function x({auction:e,item:t,onSelect:a}){let o=n(e,t),s=t.saleMode===`buy_now`,c=b(t,o);return p(`article`,{className:`lockerverse-auctions__catalog-card`,children:[f(`button`,{"aria-label":`View ${t.name}`,className:`lockerverse-auctions__catalog-select`,onClick:a,type:`button`}),p(`div`,{className:`lockerverse-auctions__catalog-media`,children:[f(g,{fallback:t.image||e.configuration.image||e.community?.banner||e.community?.thumbnail,images:t.images,name:t.name}),p(`div`,{className:`lockerverse-auctions__catalog-chips`,children:[f(`span`,{className:`lockerverse-auctions__catalog-chip`,"data-live":o===`active`,children:c.chip}),f(v,{auction:t.finishedAt&&o===`finished`?{...e,endAt:t.finishedAt}:e,item:!0,status:o})]}),p(`dl`,{className:`lockerverse-auctions__catalog-metrics`,children:[f(_,{icon:s?`bag`:`gavel`,label:c.priceLabel,value:c.price}),f(_,{icon:`clock`,label:s?`Available`:`Floor`,value:c.secondary})]})]}),p(`div`,{className:`lockerverse-auctions__catalog-body`,children:[f(`h3`,{children:t.name}),f(i,{className:`lockerverse-auctions__catalog-description`,description:t.description||`View auction item details.`,links:!1}),f(`div`,{className:`lockerverse-auctions__catalog-footer lockerverse-auctions__catalog-footer--item`,children:p(`span`,{className:`lockerverse-auctions__catalog-cta`,children:[c.cta,f(r,{kind:`arrow`})]})})]})]})}function S({auctions:e,onSelectItem:t,theme:a=`dark`,style:o,className:u}){let[m,g]=l(null),[_,v]=l(`all`),y=c(null),b=c(m),x=e.auctions?.find(e=>e.id===m);s(()=>{b.current!==m&&(y.current?.focus(),b.current=m)},[m]);let S=[...x?.items??[]].sort((e,t)=>e.position-t.position||e.createdAt.localeCompare(t.createdAt)),w=x?S.filter(e=>_===`all`||n(x,e)===_):[];return p(`section`,{"aria-busy":e.loading,"aria-label":`Auctions`,className:[`lockerverse-auctions`,`lockerverse-auctions--catalog`,u].filter(Boolean).join(` `),"data-lockerverse-theme":a,style:o,children:[p(`header`,{className:`lockerverse-auctions__catalog-header`,children:[x?p(`button`,{className:`lockerverse-auctions__catalog-back`,onClick:()=>{g(null),v(`all`)},type:`button`,children:[f(r,{kind:`back`}),`Auctions`]}):null,f(`h2`,{ref:y,tabIndex:-1,children:x?.name??`Auctions`}),x?.description?f(i,{description:x.description}):null]}),e.loading?f(`p`,{role:`status`,children:`Loading auctions…`}):null,e.error?p(`div`,{role:`alert`,children:[f(`p`,{children:e.error.message}),f(`button`,{onClick:e.refresh,type:`button`,children:`Try again`})]}):null,e.auctions&&(x||e.auctions.length>0)?p(d,{children:[p(`div`,{className:`lockerverse-auctions__catalog-lineup`,children:[p(`div`,{children:[f(`h3`,{children:`Auction lineup`}),f(`p`,{children:`Browse the current collection.`})]}),f(`span`,{children:x?`${w.length} ${w.length===1?`item`:`items`}`:`${e.auctions.length} ${e.auctions.length===1?`auction`:`auctions`}`})]}),x?f(`fieldset`,{"aria-label":`Filter auction items`,className:`lockerverse-auctions__catalog-filters`,children:h.map(e=>p(`button`,{"aria-pressed":_===e.value,onClick:()=>v(e.value),type:`button`,children:[e.label,f(`span`,{children:e.value===`all`?S.length:S.filter(t=>n(x,t)===e.value).length})]},e.value))}):null]}):null,f(C,{auctions:e.auctions,filtered:w,onSelectAuction:e=>{g(e),v(`all`)},onSelectItem:t,selected:x})]})}function C({selected:e,filtered:t,auctions:n,onSelectItem:r,onSelectAuction:i}){return e?t.length?f(`ul`,{className:`lockerverse-auctions__catalog-grid`,children:t.map(t=>f(`li`,{children:f(x,{auction:e,item:t,onSelect:()=>r(e,t)})},t.id))}):f(`p`,{className:`lockerverse-auctions__catalog-empty`,children:`No items match this auction view.`}):n?n.length?f(`ul`,{className:`lockerverse-auctions__catalog-grid`,children:n.map(e=>f(`li`,{children:f(y,{auction:e,onSelect:()=>i(e.id)})},e.id))}):p(`div`,{className:`lockerverse-auctions__catalog-empty`,children:[f(`h3`,{children:`No auctions yet.`}),f(`p`,{children:`Published auctions will appear here once they are available.`})]}):null}function w(e){a(`auctions`,{apiBaseUrl:e.apiBaseUrl,communitySlug:e.communitySlug,environment:e.environment,slug:``});let t=c(e.onError);t.current=e.onError;let[n]=l(()=>u({...e,onError:e=>t.current?.(e)})),[r,i]=l(0),[d,f]=l({auctions:null,error:null});s(()=>{let e=!0;return n.list().then(t=>{e&&f({auctions:t,error:null})},t=>{e&&f({auctions:null,error:t})}),()=>{e=!1}},[n,r]);let p=o(()=>{f({auctions:null,error:null}),i(e=>e+1)},[]);return{...d,client:n,loading:d.auctions===null&&d.error===null,refresh:p}}export{S as LockerverseAuctions,w as useLockerverseAuctions};
|
|
2
|
+
//# sourceMappingURL=auctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auctions.js","names":["Icon","formatMoney"],"sources":["../src/lockerverse-auctions.tsx","../src/use-lockerverse-auctions.ts"],"sourcesContent":["import type {\n LockerverseAuction,\n LockerverseAuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport {\n formatAuctionBoundary,\n formatAuctionMoney as formatMoney,\n getAuctionDisplayStatus,\n} from \"./auction-display.ts\";\nimport { AuctionIcon as Icon } from \"./auction-icons.tsx\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport type { UseLockerverseAuctionsResult } from \"./use-lockerverse-auctions.ts\";\n\nexport type LockerverseAuctionsProps = {\n auctions: UseLockerverseAuctionsResult;\n onSelectItem: (\n auction: LockerverseAuction,\n item: LockerverseAuctionItem\n ) => void;\n theme?: LockerverseTheme;\n style?: LockerverseStyle;\n className?: string;\n};\nconst STATUS_LABELS = {\n active: \"Live now\",\n draft: \"Coming soon\",\n finished: \"Closed\",\n} satisfies Record<LockerverseAuctionStatus, string>;\nconst FILTERS = [\n { label: \"All\", value: \"all\" },\n { label: \"Live\", value: \"active\" },\n { label: \"Upcoming\", value: \"draft\" },\n { label: \"Closed\", value: \"finished\" },\n] as const;\ntype ItemFilter = (typeof FILTERS)[number][\"value\"];\n\nfunction CatalogImage({\n images,\n fallback,\n name,\n}: {\n images?: string[];\n fallback?: string | null | undefined;\n name: string;\n}) {\n const photos = [...new Set(images?.filter(Boolean))];\n if (!photos.length && fallback) {\n photos.push(fallback);\n }\n const [index, setIndex] = useState(0);\n const imageRef = useRef<HTMLDivElement>(null);\n const loaded = useRef(new Set<string>());\n const count = photos.length;\n const current = count ? index % count : 0;\n useEffect(() => {\n if (count < 2) {\n return;\n }\n const motion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const timer = window.setInterval(() => {\n if (\n document.hidden ||\n motion.matches ||\n imageRef.current?.closest(\"article\")?.matches(\":hover, :focus-within\")\n ) {\n return;\n }\n setIndex((previous) =>\n loaded.current.has(photos[(previous + 1) % count] ?? \"\")\n ? (previous + 1) % count\n : previous\n );\n }, 5000);\n return () => window.clearInterval(timer);\n }, [count, photos]);\n return (\n <div className=\"lockerverse-auctions__catalog-images\" ref={imageRef}>\n {count\n ? [current, ...(count > 1 ? [(current + 1) % count] : [])].map(\n (photo) => (\n <img\n alt={photo === current ? name : \"\"}\n aria-hidden={photo !== current}\n className=\"lockerverse-auctions__catalog-photo\"\n data-visible={photo === current}\n height={500}\n key={photos[photo]}\n loading=\"lazy\"\n onLoad={() => loaded.current.add(photos[photo] ?? \"\")}\n src={photos[photo]}\n width={640}\n />\n )\n )\n : null}\n </div>\n );\n}\nfunction Metric({\n icon,\n label,\n value,\n}: {\n icon: \"items\" | \"gavel\" | \"clock\" | \"bag\";\n label: string;\n value: string;\n}) {\n return (\n <div className=\"lockerverse-auctions__catalog-metric\">\n <dt>\n <Icon kind={icon} />\n {label}\n </dt>\n <dd>{value}</dd>\n </div>\n );\n}\nfunction Timing({\n auction,\n status = getAuctionDisplayStatus(auction),\n item = false,\n}: {\n auction: LockerverseAuction;\n status?: LockerverseAuctionStatus;\n item?: boolean;\n}) {\n let label = \"\";\n if (status === \"draft\") {\n label = \"Opens \";\n }\n if (status === \"active\") {\n label = item ? \"Closes \" : \"Ends \";\n }\n return (\n <span className=\"lockerverse-auctions__catalog-timing\">\n {label}\n {formatAuctionBoundary(auction, status)}\n </span>\n );\n}\nfunction AuctionCard({\n auction,\n onSelect,\n}: {\n auction: LockerverseAuction;\n onSelect: () => void;\n}) {\n const fallback =\n auction.configuration.image ||\n auction.items.find((item) => item.image || item.images.length)?.image ||\n auction.items.find((item) => item.images.length)?.images[0] ||\n auction.community?.banner ||\n auction.community?.thumbnail;\n const description =\n auction.description ||\n {\n active: \"Bidding is open across this auction's items.\",\n draft: \"Preview the lineup before bidding opens.\",\n finished: \"Bidding has wrapped. Review the completed items.\",\n }[getAuctionDisplayStatus(auction)];\n return (\n <article className=\"lockerverse-auctions__catalog-card\">\n <button\n aria-label={`View items in ${auction.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n onClick={onSelect}\n type=\"button\"\n />\n <div className=\"lockerverse-auctions__catalog-media\">\n <CatalogImage fallback={fallback} name={auction.name} />\n <div className=\"lockerverse-auctions__catalog-chips\">\n <span className=\"lockerverse-auctions__catalog-chip\">\n {STATUS_LABELS[getAuctionDisplayStatus(auction)]}\n </span>\n <Timing auction={auction} />\n </div>\n <dl className=\"lockerverse-auctions__catalog-metrics\">\n <Metric\n icon=\"items\"\n label=\"Items\"\n value={String(auction.items.length)}\n />\n <Metric\n icon=\"gavel\"\n label=\"Bids\"\n value={String(\n auction.items.reduce((sum, item) => sum + item.bidCount, 0)\n )}\n />\n </dl>\n </div>\n <div className=\"lockerverse-auctions__catalog-body\">\n <h3>{auction.name}</h3>\n <AuctionDescription\n className=\"lockerverse-auctions__catalog-description\"\n description={description}\n links={false}\n />\n <div className=\"lockerverse-auctions__catalog-footer\">\n <span className=\"lockerverse-auctions__catalog-cta\">\n {getAuctionDisplayStatus(auction) === \"draft\"\n ? \"Preview items\"\n : \"View items\"}\n </span>\n <span className=\"lockerverse-auctions__catalog-arrow\">\n <Icon kind=\"arrow\" />\n </span>\n </div>\n </div>\n </article>\n );\n}\nfunction itemCardDisplay(\n item: LockerverseAuctionItem,\n status: LockerverseAuctionStatus\n) {\n if (item.saleMode === \"buy_now\") {\n const label = item.isSoldOut ? \"Sold out\" : \"Buy now\";\n return {\n chip: label,\n cta: label,\n price: formatMoney(item.buyNowPriceAmount ?? 0),\n priceLabel: \"Buy Now\",\n secondary:\n item.availableQuantity === null\n ? \"Available\"\n : String(item.availableQuantity),\n };\n }\n return {\n chip: status === \"active\" ? \"Live\" : STATUS_LABELS[status],\n cta: { active: \"Bid now\", draft: \"Preview item\", finished: \"View item\" }[\n status\n ],\n price:\n status === \"finished\" && !item.maxBidAmount\n ? \"No bids\"\n : formatMoney(item.maxBidAmount ?? 0),\n priceLabel: status === \"finished\" ? \"Final bid\" : \"Current\",\n secondary: formatMoney(item.minBidAmount ?? 0),\n };\n}\nfunction ItemCard({\n auction,\n item,\n onSelect,\n}: {\n auction: LockerverseAuction;\n item: LockerverseAuctionItem;\n onSelect: () => void;\n}) {\n const status = getAuctionDisplayStatus(auction, item);\n const buyNow = item.saleMode === \"buy_now\";\n const display = itemCardDisplay(item, status);\n return (\n <article className=\"lockerverse-auctions__catalog-card\">\n <button\n aria-label={`View ${item.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n onClick={onSelect}\n type=\"button\"\n />\n <div className=\"lockerverse-auctions__catalog-media\">\n <CatalogImage\n fallback={\n item.image ||\n auction.configuration.image ||\n auction.community?.banner ||\n auction.community?.thumbnail\n }\n images={item.images}\n name={item.name}\n />\n <div className=\"lockerverse-auctions__catalog-chips\">\n <span\n className=\"lockerverse-auctions__catalog-chip\"\n data-live={status === \"active\"}\n >\n {display.chip}\n </span>\n <Timing\n auction={\n item.finishedAt && status === \"finished\"\n ? { ...auction, endAt: item.finishedAt }\n : auction\n }\n item\n status={status}\n />\n </div>\n <dl className=\"lockerverse-auctions__catalog-metrics\">\n <Metric\n icon={buyNow ? \"bag\" : \"gavel\"}\n label={display.priceLabel}\n value={display.price}\n />\n <Metric\n icon=\"clock\"\n label={buyNow ? \"Available\" : \"Floor\"}\n value={display.secondary}\n />\n </dl>\n </div>\n <div className=\"lockerverse-auctions__catalog-body\">\n <h3>{item.name}</h3>\n <AuctionDescription\n className=\"lockerverse-auctions__catalog-description\"\n description={item.description || \"View auction item details.\"}\n links={false}\n />\n <div className=\"lockerverse-auctions__catalog-footer lockerverse-auctions__catalog-footer--item\">\n <span className=\"lockerverse-auctions__catalog-cta\">\n {display.cta}\n <Icon kind=\"arrow\" />\n </span>\n </div>\n </div>\n </article>\n );\n}\n/** Optional catalog UI, shared with the Lockerverse auction design. */\nexport function LockerverseAuctions({\n auctions,\n onSelectItem,\n theme = \"dark\",\n style,\n className,\n}: LockerverseAuctionsProps) {\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [filter, setFilter] = useState<ItemFilter>(\"all\");\n const headingRef = useRef<HTMLHeadingElement>(null);\n const previousId = useRef(selectedId);\n const selected = auctions.auctions?.find(\n (auction) => auction.id === selectedId\n );\n useEffect(() => {\n if (previousId.current !== selectedId) {\n headingRef.current?.focus();\n previousId.current = selectedId;\n }\n }, [selectedId]);\n const items = [...(selected?.items ?? [])].sort(\n (left, right) =>\n left.position - right.position ||\n left.createdAt.localeCompare(right.createdAt)\n );\n const filtered = selected\n ? items.filter(\n (item) =>\n filter === \"all\" || getAuctionDisplayStatus(selected, item) === filter\n )\n : [];\n return (\n <section\n aria-busy={auctions.loading}\n aria-label=\"Auctions\"\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--catalog\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n <header className=\"lockerverse-auctions__catalog-header\">\n {selected ? (\n <button\n className=\"lockerverse-auctions__catalog-back\"\n onClick={() => {\n setSelectedId(null);\n setFilter(\"all\");\n }}\n type=\"button\"\n >\n <Icon kind=\"back\" />\n Auctions\n </button>\n ) : null}\n <h2 ref={headingRef} tabIndex={-1}>\n {selected?.name ?? \"Auctions\"}\n </h2>\n {selected?.description ? (\n <AuctionDescription description={selected.description} />\n ) : null}\n </header>\n {auctions.loading ? <p role=\"status\">Loading auctions…</p> : null}\n {auctions.error ? (\n <div role=\"alert\">\n <p>{auctions.error.message}</p>\n <button onClick={auctions.refresh} type=\"button\">\n Try again\n </button>\n </div>\n ) : null}\n {auctions.auctions && (selected || auctions.auctions.length > 0) ? (\n <>\n <div className=\"lockerverse-auctions__catalog-lineup\">\n <div>\n <h3>Auction lineup</h3>\n <p>Browse the current collection.</p>\n </div>\n <span>\n {selected\n ? `${filtered.length} ${filtered.length === 1 ? \"item\" : \"items\"}`\n : `${auctions.auctions.length} ${auctions.auctions.length === 1 ? \"auction\" : \"auctions\"}`}\n </span>\n </div>\n {selected ? (\n <fieldset\n aria-label=\"Filter auction items\"\n className=\"lockerverse-auctions__catalog-filters\"\n >\n {FILTERS.map((option) => (\n <button\n aria-pressed={filter === option.value}\n key={option.value}\n onClick={() => setFilter(option.value)}\n type=\"button\"\n >\n {option.label}\n <span>\n {option.value === \"all\"\n ? items.length\n : items.filter(\n (item) =>\n getAuctionDisplayStatus(selected, item) ===\n option.value\n ).length}\n </span>\n </button>\n ))}\n </fieldset>\n ) : null}\n </>\n ) : null}\n <CatalogResults\n auctions={auctions.auctions}\n filtered={filtered}\n onSelectAuction={(id) => {\n setSelectedId(id);\n setFilter(\"all\");\n }}\n onSelectItem={onSelectItem}\n selected={selected}\n />\n </section>\n );\n}\n\nfunction CatalogResults({\n selected,\n filtered,\n auctions,\n onSelectItem,\n onSelectAuction,\n}: {\n selected: LockerverseAuction | undefined;\n filtered: LockerverseAuctionItem[];\n auctions: LockerverseAuction[] | null;\n onSelectItem: LockerverseAuctionsProps[\"onSelectItem\"];\n onSelectAuction: (id: string) => void;\n}) {\n if (selected) {\n if (!filtered.length) {\n return (\n <p className=\"lockerverse-auctions__catalog-empty\">\n No items match this auction view.\n </p>\n );\n }\n return (\n <ul className=\"lockerverse-auctions__catalog-grid\">\n {filtered.map((item) => (\n <li key={item.id}>\n <ItemCard\n auction={selected}\n item={item}\n onSelect={() => onSelectItem(selected, item)}\n />\n </li>\n ))}\n </ul>\n );\n }\n if (!auctions) {\n return null;\n }\n if (!auctions.length) {\n return (\n <div className=\"lockerverse-auctions__catalog-empty\">\n <h3>No auctions yet.</h3>\n <p>Published auctions will appear here once they are available.</p>\n </div>\n );\n }\n return (\n <ul className=\"lockerverse-auctions__catalog-grid\">\n {auctions.map((auction) => (\n <li key={auction.id}>\n <AuctionCard\n auction={auction}\n onSelect={() => onSelectAuction(auction.id)}\n />\n </li>\n ))}\n </ul>\n );\n}\n","import {\n type CreateLockerverseAuctionOptions,\n createLockerverseAuctionClient,\n type LockerverseAuction,\n type LockerverseAuctionClient,\n type LockerverseSdkError,\n} from \"@lockerverse/sdk/auctions\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useImmutableResourceIdentity } from \"./immutable-resource-identity.ts\";\n\nexport type UseLockerverseAuctionsResult = {\n client: LockerverseAuctionClient;\n auctions: LockerverseAuction[] | null;\n loading: boolean;\n error: LockerverseSdkError | null;\n refresh: () => void;\n};\n\ntype AuctionLoadState = Pick<\n UseLockerverseAuctionsResult,\n \"auctions\" | \"error\"\n>;\n\nexport function useLockerverseAuctions(\n options: CreateLockerverseAuctionOptions\n): UseLockerverseAuctionsResult {\n useImmutableResourceIdentity(\"auctions\", {\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 createLockerverseAuctionClient({\n ...options,\n onError: (error) => onErrorRef.current?.(error),\n })\n );\n const [revision, setRevision] = useState(0);\n const [state, setState] = useState<AuctionLoadState>({\n auctions: null,\n error: null,\n });\n useEffect(() => {\n let active = true;\n client.list().then(\n (auctions) => {\n if (active) {\n setState({ auctions, error: null });\n }\n },\n (error: LockerverseSdkError) => {\n if (active) {\n setState({ auctions: null, error });\n }\n }\n );\n return () => {\n active = false;\n };\n }, [client, revision]);\n const refresh = useCallback(() => {\n setState({ auctions: null, error: null });\n setRevision((value) => value + 1);\n }, []);\n return {\n ...state,\n client,\n loading: state.auctions === null && state.error === null,\n refresh,\n };\n}\n"],"mappings":"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"}
|
package/dist/host-callback.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{email as e,nonEmpty as t,pipe as n,regex as r,string as i,transform as a,trim as o}from"valibot";const s=`Enter a valid email address.`,c=`Phone is required.`,l=`Enter a valid phone number.`,u=/^(?:$|[^\s@]+@[^\s@]+\.[^\s@]+)$/,d=/^\+[1-9]\d{6,14}$/,f=/^(?:$|\+[1-9]\d{6,14})$/;function p(e){return e.trim().replace(/[().\s-]/g,``)}const m=n(i(),o(),r(u,s)),h=n(i(),o(),t(`Email is required.`),e(s)),g=n(i(),o(),a(p),r(f,l)),_=n(i(),o(),t(c),a(p),r(d,l));function v(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}export{m as a,_ as c,p as i,l as n,g as o,c as r,h as s,v as t};
|
|
2
2
|
//# sourceMappingURL=host-callback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-callback.js","names":[],"sources":["../src/accent-contrast.ts","../src/custom-fields.tsx","../src/form-skeleton.tsx","../src/contact-validation.ts","../src/phone.ts","../src/host-callback.ts"],"sourcesContent":["const HEX_COLOR = /^#([\\da-f]{3}|[\\da-f]{6})$/i;\nconst UNPREFIXED_HEX_COLOR = /^([\\da-f]{3}|[\\da-f]{6})$/i;\n\nexport function normalizeAccentColor(color: string) {\n const trimmedColor = color.trim();\n return UNPREFIXED_HEX_COLOR.test(trimmedColor)\n ? `#${trimmedColor}`\n : trimmedColor;\n}\n\nfunction parseHexColor(color: string) {\n const match = HEX_COLOR.exec(normalizeAccentColor(color));\n if (!match) {\n return;\n }\n const [, value] = match;\n if (!value) {\n return;\n }\n const expanded =\n value.length === 3\n ? Array.from(value, (character) => `${character}${character}`).join(\"\")\n : value;\n return [0, 2, 4].map((offset) =>\n Number.parseInt(expanded.slice(offset, offset + 2), 16)\n );\n}\n\nfunction relativeLuminance([red, green, blue]: number[]) {\n const [linearRed = 0, linearGreen = 0, linearBlue = 0] = [\n red,\n green,\n blue,\n ].map((channel = 0) => {\n const normalized = channel / 255;\n return normalized <= 0.040_45\n ? normalized / 12.92\n : ((normalized + 0.055) / 1.055) ** 2.4;\n });\n return 0.2126 * linearRed + 0.7152 * linearGreen + 0.0722 * linearBlue;\n}\n\nexport function getAccentContrast(color: string) {\n const parsed = parseHexColor(color);\n if (!parsed) {\n return;\n }\n const luminance = relativeLuminance(parsed);\n const blackContrast = (luminance + 0.05) / 0.05;\n const whiteContrast = 1.05 / (luminance + 0.05);\n return blackContrast >= whiteContrast ? \"#000\" : \"#fff\";\n}\n","import type {\n LockerverseBooleanCustomField,\n LockerverseCustomField,\n LockerverseCustomFieldAnswer,\n LockerverseMultiOptionCustomField,\n LockerverseSingleOptionCustomField,\n} from \"@lockerverse/sdk/checkout\";\nimport {\n array,\n minLength,\n nonEmpty,\n pipe,\n safeParse,\n string,\n trim,\n} from \"valibot\";\n\nexport type CustomFieldValues = Record<string, boolean | string | string[]>;\n\nfunction createCustomFieldValue(field: LockerverseCustomField) {\n if (field.type === \"checkbox\") {\n return false;\n }\n if (field.type === \"checkboxes\" || field.type === \"multi_select\") {\n return [];\n }\n return \"\";\n}\n\nexport function createCustomFieldValues(fields: LockerverseCustomField[]) {\n const values: CustomFieldValues = {};\n for (const field of fields) {\n values[field.id] = createCustomFieldValue(field);\n }\n return values;\n}\n\nfunction getStringValue(value: CustomFieldValues[string] | undefined) {\n const result = safeParse(string(), value);\n return result.success ? result.output : \"\";\n}\n\nexport function buildCustomFieldAnswers(\n fields: LockerverseCustomField[],\n values: CustomFieldValues\n): LockerverseCustomFieldAnswer[] {\n return fields.map((field): LockerverseCustomFieldAnswer => {\n const value = values[field.id];\n if (field.type === \"checkbox\") {\n return { fieldId: field.id, value: value === true };\n }\n if (field.type === \"checkboxes\" || field.type === \"multi_select\") {\n return { fieldId: field.id, value: Array.isArray(value) ? value : [] };\n }\n return {\n fieldId: field.id,\n value: getStringValue(value),\n };\n });\n}\n\nexport function validateCustomFields(\n fields: LockerverseCustomField[],\n values: CustomFieldValues\n) {\n const errors: Record<string, string> = {};\n for (const field of fields) {\n if (!field.required) {\n continue;\n }\n const message = `${field.label} is required.`;\n const value = values[field.id];\n if (field.type === \"checkbox\") {\n if (value !== true) {\n errors[field.id] = message;\n }\n continue;\n }\n const result =\n field.type === \"checkboxes\" || field.type === \"multi_select\"\n ? safeParse(pipe(array(string()), minLength(1, message)), value ?? [])\n : safeParse(\n pipe(string(), trim(), nonEmpty(message)),\n getStringValue(value)\n );\n if (!result.success) {\n errors[field.id] = result.issues[0]?.message ?? message;\n }\n }\n return errors;\n}\n\nexport function CustomFields({\n choiceClassName,\n errorClassName,\n errors,\n fields,\n idPrefix,\n onChange,\n values,\n}: {\n choiceClassName: string;\n errorClassName: string;\n errors: Record<string, string>;\n fields: LockerverseCustomField[];\n idPrefix: string;\n onChange: (values: CustomFieldValues) => void;\n values: CustomFieldValues;\n}) {\n return fields.map((field) => (\n <CustomField\n choiceClassName={choiceClassName}\n error={errors[field.id]}\n errorClassName={errorClassName}\n field={field}\n idPrefix={idPrefix}\n key={field.id}\n onChange={(value) => onChange({ ...values, [field.id]: value })}\n value={values[field.id]}\n />\n ));\n}\n\ntype CustomFieldProps = {\n choiceClassName: string;\n error: string | undefined;\n errorClassName: string;\n field: LockerverseCustomField;\n idPrefix: string;\n onChange: (value: boolean | string | string[]) => void;\n value: boolean | string | string[] | undefined;\n};\n\nfunction CustomField(props: CustomFieldProps) {\n const { field, idPrefix } = props;\n const controlId = `${idPrefix}-custom-${field.id}`;\n const errorId = `${controlId}-error`;\n const controlProps = { ...props, controlId, errorId };\n switch (field.type) {\n case \"checkbox\":\n return <BooleanCustomField {...controlProps} field={field} />;\n case \"text\":\n case \"textarea\":\n return <TextCustomField {...controlProps} field={field} />;\n case \"select\":\n case \"multi_select\":\n return <SelectCustomField {...controlProps} field={field} />;\n case \"radio\":\n case \"checkboxes\":\n return <ChoiceCustomField {...controlProps} field={field} />;\n default:\n return null;\n }\n}\n\nfunction BooleanCustomField({\n choiceClassName,\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & { field: LockerverseBooleanCustomField }) {\n return (\n <label className={choiceClassName} htmlFor={controlId}>\n <input\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? \"true\" : undefined}\n checked={value === true}\n id={controlId}\n name={`custom:${field.id}`}\n onChange={(event) => onChange(event.currentTarget.checked)}\n required={field.required}\n type=\"checkbox\"\n />\n <span>{field.label}</span>\n <FieldError className={errorClassName} error={error} id={errorId} />\n </label>\n );\n}\n\ntype ControlProps = CustomFieldProps & {\n controlId: string;\n errorId: string;\n};\n\nfunction FieldError({\n className,\n error,\n id,\n}: {\n className: string;\n error: string | undefined;\n id: string;\n}) {\n return error ? (\n <span className={className} id={id} role=\"alert\">\n {error}\n </span>\n ) : null;\n}\n\nfunction TextCustomField({\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & {\n field: Extract<LockerverseCustomField, { type: \"text\" | \"textarea\" }>;\n}) {\n const commonProps = {\n \"aria-describedby\": error ? errorId : undefined,\n \"aria-invalid\": error ? (\"true\" as const) : undefined,\n id: controlId,\n name: `custom:${field.id}`,\n onChange: (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => onChange(event.currentTarget.value),\n required: field.required,\n value: getStringValue(value),\n };\n return (\n <label htmlFor={controlId}>\n <span>{field.label}</span>\n {field.type === \"textarea\" ? (\n <textarea {...commonProps} />\n ) : (\n <input {...commonProps} />\n )}\n <FieldError className={errorClassName} error={error} id={errorId} />\n </label>\n );\n}\n\nfunction SelectCustomField({\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & {\n field: LockerverseMultiOptionCustomField | LockerverseSingleOptionCustomField;\n}) {\n return (\n <label htmlFor={controlId}>\n <span>{field.label}</span>\n <select\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? \"true\" : undefined}\n id={controlId}\n multiple={field.type === \"multi_select\"}\n name={`custom:${field.id}`}\n onChange={(event) =>\n onChange(\n field.type === \"multi_select\"\n ? [...event.currentTarget.selectedOptions].map(\n (option) => option.value\n )\n : event.currentTarget.value\n )\n }\n required={field.required}\n value={\n value === true || value === false\n ? \"\"\n : (value ?? (field.type === \"multi_select\" ? [] : \"\"))\n }\n >\n {field.type === \"select\" ? <option value=\"\">Select…</option> : null}\n {field.options.map((option) => (\n <option key={option.id} value={option.id}>\n {option.label}\n </option>\n ))}\n </select>\n <FieldError className={errorClassName} error={error} id={errorId} />\n </label>\n );\n}\n\nfunction ChoiceCustomField({\n choiceClassName,\n controlId,\n error,\n errorClassName,\n errorId,\n field,\n onChange,\n value,\n}: ControlProps & {\n field: LockerverseMultiOptionCustomField | LockerverseSingleOptionCustomField;\n}) {\n const selectedValues = Array.isArray(value) ? value : [];\n return (\n <fieldset\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? \"true\" : undefined}\n >\n <legend>{field.label}</legend>\n {field.options.map((option, index) => (\n <label className={choiceClassName} key={option.id}>\n <input\n checked={\n Array.isArray(value)\n ? value.includes(option.id)\n : value === option.id\n }\n id={`${controlId}-${index}`}\n name={`custom:${field.id}`}\n onChange={(event) => {\n if (field.type === \"radio\") {\n onChange(option.id);\n return;\n }\n onChange(\n event.currentTarget.checked\n ? [...selectedValues, option.id]\n : selectedValues.filter((id) => id !== option.id)\n );\n }}\n required={field.required && field.type === \"radio\"}\n type={field.type === \"radio\" ? \"radio\" : \"checkbox\"}\n value={option.id}\n />\n <span>{option.label}</span>\n </label>\n ))}\n <FieldError className={errorClassName} error={error} id={errorId} />\n </fieldset>\n );\n}\n","export function FormSkeleton({\n fieldCount,\n label,\n sectionCount = 0,\n showCheckbox = false,\n}: {\n fieldCount: number;\n label: string;\n sectionCount?: number;\n showCheckbox?: boolean;\n}) {\n return (\n <div className=\"lockerverse-form-skeleton__loading\">\n <span className=\"lockerverse-form-skeleton__sr-only\" role=\"status\">\n {label}\n </span>\n <div aria-hidden=\"true\" className=\"lockerverse-form-skeleton\">\n <div className=\"lockerverse-form-skeleton__branding\">\n <span className=\"lockerverse-form-skeleton__avatar\" />\n <span className=\"lockerverse-form-skeleton__community\" />\n </div>\n <div className=\"lockerverse-form-skeleton__fields\">\n {Array.from({ length: fieldCount }, (_, index) => (\n <div className=\"lockerverse-form-skeleton__field\" key={index}>\n <span className=\"lockerverse-form-skeleton__label\" />\n <span className=\"lockerverse-form-skeleton__input\" />\n </div>\n ))}\n </div>\n {Array.from({ length: sectionCount }, (_, index) => (\n <div className=\"lockerverse-form-skeleton__section\" key={index}>\n <span className=\"lockerverse-form-skeleton__section-label\" />\n <div className=\"lockerverse-form-skeleton__section-content\">\n <span className=\"lockerverse-form-skeleton__section-full\" />\n <div className=\"lockerverse-form-skeleton__section-grid\">\n <span className=\"lockerverse-form-skeleton__section-half\" />\n <span className=\"lockerverse-form-skeleton__section-half\" />\n </div>\n </div>\n </div>\n ))}\n <div className=\"lockerverse-form-skeleton__actions\">\n {showCheckbox ? (\n <span className=\"lockerverse-form-skeleton__check-line\" />\n ) : null}\n <span className=\"lockerverse-form-skeleton__button\" />\n </div>\n </div>\n </div>\n );\n}\n","import { email, nonEmpty, pipe, regex, string, transform, trim } from \"valibot\";\n\nexport const EMAIL_REQUIRED_MESSAGE = \"Email is required.\";\nexport const EMAIL_INVALID_MESSAGE = \"Enter a valid email address.\";\nexport const PHONE_REQUIRED_MESSAGE = \"Phone is required.\";\nexport const PHONE_INVALID_MESSAGE = \"Enter a valid phone number.\";\n\nconst OPTIONAL_EMAIL_PATTERN = /^(?:$|[^\\s@]+@[^\\s@]+\\.[^\\s@]+)$/;\nconst INTERNATIONAL_PHONE_PATTERN = /^\\+[1-9]\\d{6,14}$/;\nconst OPTIONAL_INTERNATIONAL_PHONE_PATTERN = /^(?:$|\\+[1-9]\\d{6,14})$/;\n\nexport function normalizePhone(input: string) {\n return input.trim().replace(/[().\\s-]/g, \"\");\n}\n\nexport const optionalEmailSchema = pipe(\n string(),\n trim(),\n regex(OPTIONAL_EMAIL_PATTERN, EMAIL_INVALID_MESSAGE)\n);\n\nexport const requiredEmailSchema = pipe(\n string(),\n trim(),\n nonEmpty(EMAIL_REQUIRED_MESSAGE),\n email(EMAIL_INVALID_MESSAGE)\n);\n\nexport const optionalPhoneSchema = pipe(\n string(),\n trim(),\n transform(normalizePhone),\n regex(OPTIONAL_INTERNATIONAL_PHONE_PATTERN, PHONE_INVALID_MESSAGE)\n);\n\nexport const requiredPhoneSchema = pipe(\n string(),\n trim(),\n nonEmpty(PHONE_REQUIRED_MESSAGE),\n transform(normalizePhone),\n regex(INTERNATIONAL_PHONE_PATTERN, PHONE_INVALID_MESSAGE)\n);\n","import {\n normalizePhone,\n PHONE_INVALID_MESSAGE,\n PHONE_REQUIRED_MESSAGE,\n} from \"./contact-validation.ts\";\n\nexport const PHONE_COUNTRIES = [\n {\n callingCode: \"+1\",\n label: \"🇺🇸 +1\",\n value: \"US\",\n },\n {\n callingCode: \"+52\",\n label: \"🇲🇽 +52\",\n value: \"MX\",\n },\n {\n callingCode: \"+380\",\n label: \"🇺🇦 +380\",\n value: \"UA\",\n },\n {\n callingCode: \"+48\",\n label: \"🇵🇱 +48\",\n value: \"PL\",\n },\n {\n callingCode: \"+1\",\n label: \"🇨🇦 +1\",\n value: \"CA\",\n },\n {\n callingCode: \"+49\",\n label: \"🇩🇪 +49\",\n value: \"DE\",\n },\n {\n callingCode: \"+44\",\n label: \"🇬🇧 +44\",\n value: \"GB\",\n },\n {\n callingCode: \"+46\",\n label: \"🇸🇪 +46\",\n value: \"SE\",\n },\n {\n callingCode: \"+358\",\n label: \"🇫🇮 +358\",\n value: \"FI\",\n },\n {\n callingCode: \"+1\",\n label: \"🇵🇷 +1\",\n value: \"PR\",\n },\n] as const;\n\nexport type PhoneCountry = (typeof PHONE_COUNTRIES)[number][\"value\"];\n\nexport function getPhoneServerError(serverCode: string | undefined) {\n if (\n serverCode === \"PAYMENT_WIDGET_PHONE_REQUIRED\" ||\n serverCode === \"SIGN_UP_WIDGET_PHONE_REQUIRED\"\n ) {\n return PHONE_REQUIRED_MESSAGE;\n }\n if (\n serverCode === \"PAYMENT_WIDGET_PHONE_INVALID\" ||\n serverCode === \"SIGN_UP_WIDGET_PHONE_INVALID\"\n ) {\n return PHONE_INVALID_MESSAGE;\n }\n}\n\nfunction getPhoneCountry(country: string) {\n return (\n PHONE_COUNTRIES.find((option) => option.value === country) ??\n PHONE_COUNTRIES[0]\n );\n}\n\nfunction removeRepeatedCallingCode(phone: string, callingCode: string) {\n const repeatedCallingCode = `${callingCode}${callingCode}`;\n let normalizedPhone = phone;\n while (normalizedPhone.startsWith(repeatedCallingCode)) {\n normalizedPhone = `${callingCode}${normalizedPhone.slice(repeatedCallingCode.length)}`;\n }\n return normalizedPhone;\n}\n\nexport function getInternationalPhone(phone: string, country: string) {\n const normalizedPhone = normalizePhone(phone);\n if (!normalizedPhone) {\n return \"\";\n }\n\n const selectedCountry = getPhoneCountry(country);\n const phoneWithOneCallingCode = removeRepeatedCallingCode(\n normalizedPhone,\n selectedCountry.callingCode\n );\n\n return phoneWithOneCallingCode.startsWith(\"+\")\n ? phoneWithOneCallingCode\n : `${selectedCountry.callingCode}${phoneWithOneCallingCode}`;\n}\n","export function notifyHostCallback<Value>(\n callback: ((value: Value) => void) | undefined,\n value: Value\n) {\n if (!callback) {\n return;\n }\n try {\n Promise.resolve(callback(value)).catch(() => undefined);\n } catch {\n // Host callback failures must not change completed SDK state.\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host-callback.js","names":[],"sources":["../src/contact-validation.ts","../src/host-callback.ts"],"sourcesContent":["import { email, nonEmpty, pipe, regex, string, transform, trim } from \"valibot\";\n\nexport const EMAIL_REQUIRED_MESSAGE = \"Email is required.\";\nexport const EMAIL_INVALID_MESSAGE = \"Enter a valid email address.\";\nexport const PHONE_REQUIRED_MESSAGE = \"Phone is required.\";\nexport const PHONE_INVALID_MESSAGE = \"Enter a valid phone number.\";\n\nconst OPTIONAL_EMAIL_PATTERN = /^(?:$|[^\\s@]+@[^\\s@]+\\.[^\\s@]+)$/;\nconst INTERNATIONAL_PHONE_PATTERN = /^\\+[1-9]\\d{6,14}$/;\nconst OPTIONAL_INTERNATIONAL_PHONE_PATTERN = /^(?:$|\\+[1-9]\\d{6,14})$/;\n\nexport function normalizePhone(input: string) {\n return input.trim().replace(/[().\\s-]/g, \"\");\n}\n\nexport const optionalEmailSchema = pipe(\n string(),\n trim(),\n regex(OPTIONAL_EMAIL_PATTERN, EMAIL_INVALID_MESSAGE)\n);\n\nexport const requiredEmailSchema = pipe(\n string(),\n trim(),\n nonEmpty(EMAIL_REQUIRED_MESSAGE),\n email(EMAIL_INVALID_MESSAGE)\n);\n\nexport const optionalPhoneSchema = pipe(\n string(),\n trim(),\n transform(normalizePhone),\n regex(OPTIONAL_INTERNATIONAL_PHONE_PATTERN, PHONE_INVALID_MESSAGE)\n);\n\nexport const requiredPhoneSchema = pipe(\n string(),\n trim(),\n nonEmpty(PHONE_REQUIRED_MESSAGE),\n transform(normalizePhone),\n regex(INTERNATIONAL_PHONE_PATTERN, PHONE_INVALID_MESSAGE)\n);\n","export function notifyHostCallback<Value>(\n callback: ((value: Value) => void) | undefined,\n value: Value\n) {\n if (!callback) {\n return;\n }\n try {\n Promise.resolve(callback(value)).catch(() => undefined);\n } catch {\n // Host callback failures must not change completed SDK state.\n }\n}\n"],"mappings":"wGAEA,MACa,EAAwB,+BACxB,EAAyB,qBACzB,EAAwB,8BAE/B,EAAyB,mCACzB,EAA8B,oBAC9B,EAAuC,0BAE7C,SAAgB,EAAe,EAAe,CAC5C,OAAO,EAAM,KAAK,CAAC,CAAC,QAAQ,YAAa,EAAE,CAC7C,CAEA,MAAa,EAAsB,EACjC,EAAO,EACP,EAAK,EACL,EAAM,EAAwB,CAAqB,CACrD,EAEa,EAAsB,EACjC,EAAO,EACP,EAAK,EACL,EAAS,oBAAsB,EAC/B,EAAM,CAAqB,CAC7B,EAEa,EAAsB,EACjC,EAAO,EACP,EAAK,EACL,EAAU,CAAc,EACxB,EAAM,EAAsC,CAAqB,CACnE,EAEa,EAAsB,EACjC,EAAO,EACP,EAAK,EACL,EAAS,CAAsB,EAC/B,EAAU,CAAc,EACxB,EAAM,EAA6B,CAAqB,CAC1D,ECzCA,SAAgB,EACd,EACA,EACA,CACK,KAGL,GAAI,CACF,QAAQ,QAAQ,EAAS,CAAK,CAAC,CAAC,CAAC,UAAY,IAAA,EAAS,CACxD,MAAQ,CAER,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"immutable-resource-identity.js","names":[],"sources":["../src/immutable-resource-identity.ts"],"sourcesContent":["import { useRef } from \"react\";\n\ntype LockerverseResourceIdentity = {\n apiBaseUrl: string | undefined;\n communitySlug: string;\n environment: string | undefined;\n slug: string;\n};\n\nfunction hasSameIdentity(\n initial: LockerverseResourceIdentity,\n current: LockerverseResourceIdentity\n) {\n return (\n initial.apiBaseUrl === current.apiBaseUrl &&\n initial.communitySlug === current.communitySlug &&\n initial.environment === current.environment &&\n initial.slug === current.slug\n );\n}\n\nexport function useImmutableResourceIdentity(\n resource: \"payment widget\" | \"signup\",\n identity: LockerverseResourceIdentity\n) {\n const initial = useRef(identity);\n if (!hasSameIdentity(initial.current, identity)) {\n throw new TypeError(\n `Lockerverse ${resource} identity cannot change after initialization. Remount with a new React key.`\n );\n }\n}\n"],"mappings":"+BASA,SAAS,EACP,EACA,EACA,CACA,OACE,EAAQ,aAAe,EAAQ,YAC/B,EAAQ,gBAAkB,EAAQ,eAClC,EAAQ,cAAgB,EAAQ,aAChC,EAAQ,OAAS,EAAQ,IAE7B,CAEA,SAAgB,EACd,EACA,EACA,CAEA,GAAI,CAAC,EADW,EAAO,CACI,CAAC,CAAC,QAAS,CAAQ,EAC5C,MAAU,UACR,eAAe,EAAS,4EAC1B,CAEJ"}
|
|
1
|
+
{"version":3,"file":"immutable-resource-identity.js","names":[],"sources":["../src/immutable-resource-identity.ts"],"sourcesContent":["import { useRef } from \"react\";\n\ntype LockerverseResourceIdentity = {\n apiBaseUrl: string | undefined;\n communitySlug: string;\n environment: string | undefined;\n slug: string;\n};\n\nfunction hasSameIdentity(\n initial: LockerverseResourceIdentity,\n current: LockerverseResourceIdentity\n) {\n return (\n initial.apiBaseUrl === current.apiBaseUrl &&\n initial.communitySlug === current.communitySlug &&\n initial.environment === current.environment &&\n initial.slug === current.slug\n );\n}\n\nexport function useImmutableResourceIdentity(\n resource: \"payment widget\" | \"signup\" | \"auctions\",\n identity: LockerverseResourceIdentity\n) {\n const initial = useRef(identity);\n if (!hasSameIdentity(initial.current, identity)) {\n throw new TypeError(\n `Lockerverse ${resource} identity cannot change after initialization. Remount with a new React key.`\n );\n }\n}\n"],"mappings":"+BASA,SAAS,EACP,EACA,EACA,CACA,OACE,EAAQ,aAAe,EAAQ,YAC/B,EAAQ,gBAAkB,EAAQ,eAClC,EAAQ,cAAgB,EAAQ,aAChC,EAAQ,OAAS,EAAQ,IAE7B,CAEA,SAAgB,EACd,EACA,EACA,CAEA,GAAI,CAAC,EADW,EAAO,CACI,CAAC,CAAC,QAAS,CAAQ,EAC5C,MAAU,UACR,eAAe,EAAS,4EAC1B,CAEJ"}
|